Commit Graph

2490 Commits

Author SHA1 Message Date
d3794d9f94 fix for memory leak, use Key Errors for pyrna getitem access & idprops 2009-11-18 13:02:09 +00:00
318e9aa5d1 - rna attribute setting problem, class instances could not set their own attributes because they are blocked by our own internal setattr.
this could be supported again easily however it leads typo's & api changes not showing any errors.

  This broke povray export.
  Solution for now is to allow setting private properties starting with '_'

  eg, 
    ob = bpy.context.object
    
    ob._foo = [1,2,3] # this is a python list, it will stay only as long as this PyObject is active
    ob.foo = 1 # raises an error!, only for rna properties
    ob["foo"] = 1 # converts to an ID property and is saved

    using the underscore like this should really be used for classes internally.

- povray failed on armatures

- menu key wasn't using WM_keymap_add_menu
2009-11-18 08:40:18 +00:00
2ae15e39ad make animation system and rna internals use getattr style syntax for user defined properties
bone["foo"] rather then bone.foo
matches python and avoids naming collisions
2009-11-17 20:46:59 +00:00
f7682e2e0f - in pose mode, pose bone properties are edited rather then armature bone
- new id property array method convert_to_pyobject()
- editing an array in the UI broke
- fixed for own error when updating ID prop api
2009-11-17 12:54:29 +00:00
51f2dcd08c - access console languages as modules rather then having the py operator call an operator
- workaround for __getattr__ existing for types that dont support it
2009-11-17 12:21:41 +00:00
3087da0b25 my chnges broke 'del idprop["key"]'
made it possible to remove properties from rna types.

eg.
 del group["someprop"]
2009-11-16 22:21:39 +00:00
6ed0686fcc bpy/rna methods to find properties (works nice with autocomp!)
keys(), values() & items()

ed...
 print(bpy.context.active_object.keys())

Possible name conflict here, need to keep an eye on it.
2009-11-16 20:16:45 +00:00
5b2fdb6ebe missing include 2009-11-16 19:18:04 +00:00
578950c977 ID property access from python for pose channels, bones and any ID objects.
The advantage with this is that global property definitions are not needed to add a property to an object.

to avoid confusion these are accessed like a dictionary (closely matching how the BGE accesses properties)

 ob["mySetting"] = 1.0

 bone["foo"] = {"one":1, "two":2.1, "three":"Three"}

 if "foo" in bone: print("prop found...")

At the moment these can also be accessed as attributes, will be changed shortly. eg.
 bone.foo == bone["foo"]
2009-11-16 19:03:40 +00:00
66dfaabb9d update idproperty python api for python 3.1
- removed 'group.has_key("key")', use... '"key" in group' instead
- removed verbose float and int conversions that are not needed
- fixed memory leak
2009-11-16 18:56:58 +00:00
cf1700bdd5 python api for ID property access by Joseph Eager, copied from blender 2.4x. 2009-11-16 18:53:11 +00:00
be07bb3cc3 functions returning non ID pointers that relied on having the ID set could crash, (adding a pose constraint crashed in one testcase)
now use the functions ID pointer.
2009-11-16 09:20:21 +00:00
d04f94d0c6 skip rna property & function lookups for members starting with "_" (since makesrna disallows this)
added a way profile python startup in bpy/__init__.py, if'd out by default.
2009-11-14 23:11:46 +00:00
e12fe32feb documentat & cross reference collection types 2009-11-13 17:42:44 +00:00
c1d0f9179d fix for error with property getattro in recent commit which broke autocomp.
active base/bone & editbone were not converted to property srna
2009-11-13 16:37:44 +00:00
91352006c4 arbitrary property and function support for rna properties (arrays and collections), this means functions can be easily added.
eg.
 scene.objects.link()
 object.constraints.new()
 mesh.verts.transform(...)
 mesh.faces.active

PropertyRNA stores an StructRNA pointer where these can be defined.
2009-11-13 16:08:03 +00:00
5a322bd67c F8 reload works again, script errors are printed but dont stop loading every other script 2009-11-13 11:10:29 +00:00
4c7dc3e5c5 changes python initialization
- bpy is now a python package, this makes it easier to add utility modules and adjust python startup which was previously using verbose Py/C api. Access should not be any slower since both C and Python modules use dictionary access.
- loop over scripts and load via python (currently F8 reload isnt working, will add back shortly)
- the C module is kept but renamed to _bpy and not meant for direct access from anything but the bpy package.
- bpy_types.py is an exception since it runs before the bpy package is initialized.
2009-11-13 09:28:05 +00:00
8f80297832 generating docs can make the rna api generate wrnings (which is fine)
but was giving python decoding errors and didnt even show the warning.

for now just print to the console fixes this
2009-11-12 15:46:45 +00:00
4f47f21d44 small corrections, no functionality change 2009-11-12 12:48:39 +00:00
f356ea764d - use double underscores to hide members in python (removes them from dir() therefor autocomp.)
- collection functions rename eg. bones_active -> bones__active, add_object -> objects__add since these should be accessed from the collections only.
- fix warnings in last commit
2009-11-11 17:12:48 +00:00
bc6190f3e3 python api for collection add()/remove()
Added a group example
 C = bpy.context
 ob = C.active_object
 bpy.data.groups[0].objects.add(ob)

- add_to_group and rem_from_group now take optional scene and base flags and deal with updating the object & base flags
- operators that add objects to groups were setting ob->recalc= OB_RECALC_OB; looks like its not needed.
- previously add() ignored python args, now add and remove are called like any other FunctionRNA from python.
- made the pyrna api use tp_getset's for collestions active/add()/remove()
2009-11-11 16:28:53 +00:00
872a7aeb5a Fix #19313: running python scripts with PyRun_File could
crash on windows due to incompatible FILE struct between
Blender and python library, which is why it was not used
in 2.4x, so apply the same workaround now.
2009-11-11 13:27:54 +00:00
1d84b6bb3c Nodes Editor + other warning fixes:
* Added 'active node' panel for the Nodes Editor. This panel, in the NKEY region, shows the settings for the active node. Included in this panel is a field used for editing the unique-name of the node too. 

* Fixed a number of uninitialised vars warnings that I missed in previous commit...
2009-11-11 10:51:40 +00:00
5816912dc1 - In the context, EditBones and Bases were set as 'RNA_UnknownType', replaced with propper types.
- renamed RNA_Base to RNA_ObjectBase
- only include id_data for the python api's autocomplete if it has an ID type set.
2009-11-11 09:16:53 +00:00
37e4a311b0 Math Lib
* Convert all code to use new functions.
* Branch maintainers may want to skip this commit, and run this
  conversion script instead, if they use a lot of math functions
  in new code:
  http://www.pasteall.org/9052/python
2009-11-10 20:43:45 +00:00
0797054c2d Running with -d, python context also prints members asked from context that are present.
Also, error messages were mixed up, wrong type and not present where inversed.
2009-11-10 19:57:04 +00:00
d611dd3735 Function declaration for BPY_context_get 2009-11-10 16:18:54 +00:00
de7504807c fix error with python exceptions in BPy_errors_to_report 2009-11-10 16:17:49 +00:00
bc3eff97c4 2.4x fix for Blender.Load()
only bother checking script spaces when loading a blend file

Should be able to load a STL or DXF when script spaces are open now
2009-11-10 15:34:27 +00:00
7efc2c2375 modify the python context access so invalid names will raise an exception rather then returning None.
this way the UI scripts are less likely to fail silently and wont let typos work ok.

also allow subclassing of the context, added a copy function,
 bpy.context.copy(), returns the context as a python dict to be modified and used in python.

This also showed up an invalid brush member in the screen context.
2009-11-10 15:09:53 +00:00
d34261edab Don't free Context from python.
There might be a better way to do this, Cambo, please check.

This solves the Totblock == -1 error
2009-11-09 23:33:56 +00:00
fac2ca1c7c bpy/rna api class feature
- python defined classes will be used when available (otherwise automaically generated metaclasses are made as before)
- use properties rather then functions for python defined rna class's
- call the classes getattr AFTER doing an RNA lookup, avoids setting and clearing exceptions for most attribute lookups, tested UI scripts are ~25% faster.
- extending rna py classes this way is a nicer alternative to modifying the generated metaclasses in place.

Example class

--- snip
class Object(bpy.types.ID):

    def _get_children(self):
        return [child for child in bpy.data.objects if child.parent == self]

    children = property(_get_children)
--- snip

The C initialization function looks in bpy_types.py for classes matching RNA structure names, using them when available.
This means all objects in python will be instances of these classes.
Python properties/funcs defined in ID py class will also be available for subclasses for eg. (Group Mesh etc)
2009-11-08 01:13:19 +00:00
4e61f8a836 pep8 whitespace commit
bpy/rna api (no functionality change, just move getting the srna py base into a function)
2009-11-07 22:07:46 +00:00
247f72fcc0 - added bpy.context to the python module
- made the console banner printing function into a python operator (includes sys.version)
- added 'C' into the consoles default namespace for convenience
2009-11-05 11:17:09 +00:00
e6ea68a31c - missing return values
- more detailed exceptions (always give file:line incase the python exception doesnt)
- fix some errors in the edit docs

editing docs still fails, need to figure out why.
2009-11-04 22:36:46 +00:00
51943096a9 bugfix [#19804] .MDD is not working?? // Also filetype issue?
- made all exporters default to the blend filename with the extension replaced
- MDD's poll function now checks for an active mesh
- multiline docstrings are written as multiline docs when generating epydocs
2009-11-04 18:35:32 +00:00
8af525f860 bpy.ops.import.obj("somepath") is invalid syntax because import is a keyword.
rename import to import_scene, import_anim, future import_sequence_edl, import_model etc..
2009-11-04 17:16:58 +00:00
3ac98f1abd python function for adding a driver. eg
ob.driver_add("location")
 ob.driver_add("location", 0) # x location only

Also changed ANIM_add_driver so an index of -1 adds drivers to every item in the array
2009-11-04 15:16:41 +00:00
4033aba579 new operator directory, move some scripts from io 2009-11-04 14:40:35 +00:00
42fb30f37a change to insert_keyframe() so an array index of -1 keys all arrays indices
made this default for python so you can do...
 pose_bone.keyframe_insert("location")

rather then
 pose_bone.keyframe_insert("location", 0)
 pose_bone.keyframe_insert("location", 1)
 pose_bone.keyframe_insert("location", 2)
2009-11-04 14:06:10 +00:00
6680dcd24a renamed bpy.sys to bpy.utils, since it used to be a attempt to replace pythons sys which is bundled now 2009-11-03 18:08:25 +00:00
b8b89d5ae4 active property for collections for things like scene.objects.active
will add more properties later
2009-11-03 16:07:29 +00:00
dd130350d5 make python operator instances subclasses of the wmOperator when called.
was subclassing the operator's type before.

Removes the need for passing self.__operator__, can pass self directly.
2009-11-02 08:32:00 +00:00
c90db8d270 last commit broke running python operators
note that you can still set rna properties like this.
 bpy.data.__dict__["var"] = 1
 print(bpy.data.var)

but this is only stored for the python objects lifetime and not actually attached to blenders data
2009-11-02 00:20:07 +00:00
a99157b20d rna structs would not raise an error when assigning invalid properties
netrender needed updating for this.
 hint, bpy.data is not a module
2009-11-01 21:53:45 +00:00
f9b19d54b5 tabs to spaces, remove trailing white space. (apart of pep8)
didnt do "release/scripts/io" since some exporters cant be auto converted
2009-10-31 19:31:45 +00:00
af72bb50ae improved class validation, variables defined by the rna interface as non-optional could fail silently when absent in the class. Set these to PROP_REGISTER_OPTIONAL and raise an error when others are not found.
last commit broke povray too.
2009-10-31 18:48:58 +00:00
e4881eef52 define operator properties in the class, similar to django fields
# Before
[
	bpy.props.StringProperty(attr="path", name="File Path", description="File path used for exporting the PLY file", maxlen= 1024, default= ""),
	bpy.props.BoolProperty(attr="use_modifiers", name="Apply Modifiers", description="Apply Modifiers to the exported mesh", default= True),
	bpy.props.BoolProperty(attr="use_normals", name="Export Normals", description="Export Normals for smooth and hard shaded faces", default= True),
	bpy.props.BoolProperty(attr="use_uvs", name="Export UVs", description="Exort the active UV layer", default= True),
	bpy.props.BoolProperty(attr="use_colors", name="Export Vertex Colors", description="Exort the active vertex color layer", default= True)
]

# After
path = StringProperty(attr="", name="File Path", description="File path used for exporting the PLY file", maxlen= 1024, default= "")
use_modifiers = BoolProperty(attr="", name="Apply Modifiers", description="Apply Modifiers to the exported mesh", default= True)
use_normals = BoolProperty(attr="", name="Export Normals", description="Export Normals for smooth and hard shaded faces", default= True)
use_uvs = BoolProperty(attr="", name="Export UVs", description="Exort the active UV layer", default= True)
use_colors = BoolProperty(attr="", name="Export Vertex Colors", description="Exort the active vertex color layer", default= True)
2009-10-31 16:40:14 +00:00
ea265fc697 change blender python interface for classes not to ise __idname__ rather bl_idname since __somename__ is for pythons internal use.
replacements...
"__idname__" -> "bl_idname"
"__props__" -> "bl_props"
"__label__" -> "bl_label"
"__register__" -> "bl_register"
"__undo__" -> "bl_undo"
"__space_type__" -> "bl_space_type"
"__default_closed__" -> "bl_default_closed"
"__region_type__" -> "bl_region_type"
"__context__" -> "bl_context"
"__show_header__" -> "bl_show_header"
"__URL__" -> "_url"
2009-10-31 13:31:23 +00:00