[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31847] trunk/blender: - bugfix, operators were getting their properties registered twice.

Campbell Barton ideasman42 at gmail.com
Thu Sep 9 19:41:36 CEST 2010


Revision: 31847
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31847
Author:   campbellbarton
Date:     2010-09-09 19:41:36 +0200 (Thu, 09 Sep 2010)

Log Message:
-----------
- bugfix, operators were getting their properties registered twice.
- operator properties are now converted into python property() class members which bypass the operator 'properties' member.
  self.properties.mysetting
 ... can now be written as ...
  self.mysetting
- fix for error reloading rigify

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy_types.py
    trunk/blender/release/scripts/ui/properties_data_armature_rigify.py
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c

Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py	2010-09-09 17:36:54 UTC (rev 31846)
+++ trunk/blender/release/scripts/modules/bpy_types.py	2010-09-09 17:41:36 UTC (rev 31847)
@@ -701,7 +701,15 @@
 class Operator(StructRNA, metaclass=OrderedMeta):
     __slots__ = ()
 
+    @classmethod
+    def easy_getsets(cls):
+        def bypass_attr(attr):
+            setattr(cls, attr, property(lambda self: getattr(self.properties, attr), lambda self, value: setattr(self.properties, attr, value)))
+        for attr, value in list(cls.__dict__.items()):
+            if type(value) == tuple and len(value) == 2 and type(value[1]) == dict:
+                bypass_attr(attr)
 
+
 class Macro(StructRNA, metaclass=OrderedMeta):
     # bpy_types is imported before ops is defined
     # so we have to do a local import on each run

Modified: trunk/blender/release/scripts/ui/properties_data_armature_rigify.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_armature_rigify.py	2010-09-09 17:36:54 UTC (rev 31846)
+++ trunk/blender/release/scripts/ui/properties_data_armature_rigify.py	2010-09-09 17:41:36 UTC (rev 31847)
@@ -318,7 +318,7 @@
 
 
 def unregister():
-    bpy.types.Scene.RemoveProperty("pose_templates")
+    del bpy.types.Scene.pose_templates
     space_info.INFO_MT_armature_add.remove(menu_func)
 
 if __name__ == "__main__":

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2010-09-09 17:36:54 UTC (rev 31846)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2010-09-09 17:41:36 UTC (rev 31847)
@@ -840,6 +840,7 @@
 
 	/* create a new menu type */
 	dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+	RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
 	dummyot.ext.data= data;
 	dummyot.ext.call= call;
 	dummyot.ext.free= free;

Modified: trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2010-09-09 17:36:54 UTC (rev 31846)
+++ trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2010-09-09 17:41:36 UTC (rev 31847)
@@ -45,6 +45,9 @@
 		PyErr_Print(); /* failed to register operator props */
 		PyErr_Clear();
 	}
+	
+	// see bpy_types.py:Operator, May redo this some other way!
+	PyObject_CallMethod(py_class, "easy_getsets", NULL);
 }
 
 void operator_wrapper(wmOperatorType *ot, void *userdata)





More information about the Bf-blender-cvs mailing list