[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24236] trunk/blender: many operators uses Bases, for the python to set operators context python too needs to be able to access bases .

Campbell Barton ideasman42 at gmail.com
Mon Nov 2 12:14:22 CET 2009


Revision: 24236
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24236
Author:   campbellbarton
Date:     2009-11-02 12:14:22 +0100 (Mon, 02 Nov 2009)

Log Message:
-----------
many operators uses Bases, for the python to set operators context python too needs to be able to access bases.
- added scene.bases (like scene.objects)
- renamed group create operator.

Example
 scene = bpy.data.scenes[0]
 C = {}
 C["scene"] = scene
 C["selected_editable_bases"] = [scene.bases[2], scene.bases[3]]
 
 bpy.ops.group.create(C)


Also made operator fake modules not return __call__ (reported by Stani, fixes autocomp. bug)

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy_ops.py
    trunk/blender/source/blender/editors/object/object_group.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/release/scripts/modules/bpy_ops.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_ops.py	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/release/scripts/modules/bpy_ops.py	2009-11-02 11:14:22 UTC (rev 24236)
@@ -98,6 +98,8 @@
         '''
         gets a bpy.ops.submodule function
         '''
+        if func.startswith('__'):
+            raise AttributeError(func)
         return bpy_ops_submodule_op(self.module, func)
 
     def __dir__(self):

Modified: trunk/blender/source/blender/editors/object/object_group.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_group.c	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/source/blender/editors/object/object_group.c	2009-11-02 11:14:22 UTC (rev 24236)
@@ -198,11 +198,11 @@
 {
 	Scene *scene= CTX_data_scene(C);
 	Group *group= NULL;
-	char gid[32]; //group id
+	char name[32]; /* id name */
 	
-	RNA_string_get(op->ptr, "GID", gid);
+	RNA_string_get(op->ptr, "name", name);
 	
-	group= add_group(gid);
+	group= add_group(name);
 		
 	CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
 		add_to_group(group, base->object);
@@ -218,12 +218,12 @@
 	return OPERATOR_FINISHED;
 }
 
-void GROUP_OT_group_create(wmOperatorType *ot)
+void GROUP_OT_create(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Create New Group";
-	ot->description = "Create an object group.";
-	ot->idname= "GROUP_OT_group_create";
+	ot->description = "Create an object group from selected objects.";
+	ot->idname= "GROUP_OT_create";
 	
 	/* api callbacks */
 	ot->exec= group_create_exec;	
@@ -232,7 +232,7 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
-	RNA_def_string(ot->srna, "GID", "Group", 32, "Name", "Name of the new group");
+	RNA_def_string(ot->srna, "name", "Group", 32, "Name", "Name of the new group");
 }
 
 /****************** properties window operators *********************/

Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/source/blender/editors/object/object_intern.h	2009-11-02 11:14:22 UTC (rev 24236)
@@ -114,7 +114,7 @@
 void LATTICE_OT_make_regular(struct wmOperatorType *ot);
 
 /* object_group.c */
-void GROUP_OT_group_create(struct wmOperatorType *ot);
+void GROUP_OT_create(struct wmOperatorType *ot);
 void GROUP_OT_objects_remove(struct wmOperatorType *ot);
 void GROUP_OT_objects_add_active(struct wmOperatorType *ot);
 void GROUP_OT_objects_remove_active(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2009-11-02 11:14:22 UTC (rev 24236)
@@ -104,7 +104,7 @@
 	WM_operatortype_append(OBJECT_OT_select_mirror);
 	WM_operatortype_append(OBJECT_OT_select_name); /* XXX - weak, not compat with linked objects */
 
-	WM_operatortype_append(GROUP_OT_group_create);
+	WM_operatortype_append(GROUP_OT_create);
 	WM_operatortype_append(GROUP_OT_objects_remove);
 	WM_operatortype_append(GROUP_OT_objects_add_active);
 	WM_operatortype_append(GROUP_OT_objects_remove_active);
@@ -294,7 +294,7 @@
 	WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, KM_PRESS, KM_ALT, 0);
 	
-	WM_keymap_verify_item(keymap, "GROUP_OT_group_create", GKEY, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_verify_item(keymap, "GROUP_OT_create", GKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove", GKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
 	WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
 	WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0);

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-11-02 11:14:22 UTC (rev 24236)
@@ -150,6 +150,25 @@
 	ED_base_object_select(object_in_scene(ob, CTX_data_scene(C)), mode);
 }
 
+static void rna_Base_select_update(bContext *C, PointerRNA *ptr)
+{
+	Base *base= (Base*)ptr->data;
+	short mode = base->flag & BA_SELECT ? BA_SELECT : BA_DESELECT;
+	ED_base_object_select(base, mode);
+}
+
+static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object *ob)
+{
+	/* try to avoid scene sort */
+	if((ob->lay & scene->lay) && (base->lay & scene->lay)) {
+ 		/* pass */
+	} else if((ob->lay & scene->lay)==0 && (base->lay & scene->lay)==0) {
+		/* pass */
+	} else {
+		DAG_scene_sort(scene);
+	}
+}
+
 static void rna_Object_layer_update(bContext *C, PointerRNA *ptr)
 {
 	Object *ob= (Object*)ptr->id.data;
@@ -160,17 +179,21 @@
 	if(!base)
 		return;
 
-	/* try to avoid scene sort */
-	if((ob->lay & scene->lay) && (base->lay & scene->lay))
- 		base->lay= ob->lay;
-	else if((ob->lay & scene->lay)==0 && (base->lay & scene->lay)==0)
-		base->lay= ob->lay;
-	else {
-		base->lay= ob->lay;
-		DAG_scene_sort(scene);
-	}
+	base->lay= ob->lay;
+	rna_Object_layer_update__internal(scene, base, ob);
 }
 
+static void rna_Base_layer_update(bContext *C, PointerRNA *ptr)
+{
+	Base *base= (Base*)ptr->id.data;
+	Object *ob= (Object*)base->object;
+	Scene *scene= CTX_data_scene(C);
+
+	ob->lay= base->lay;
+
+	rna_Object_layer_update__internal(scene, base, ob);
+}
+
 static int rna_Object_data_editable(PointerRNA *ptr)
 {
 	Object *ob= (Object*)ptr->data;
@@ -697,25 +720,49 @@
 	return rna_pointer_inherit_refine(ptr, &RNA_GameObjectSettings, ptr->id.data);
 }
 
-static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
+
+static unsigned int rna_Object_layer_validate__internal(const int *values, unsigned int lay)
 {
-	Object *ob= (Object*)ptr->data;
-	int i, tot= 0;
+	int i, tot;
 
 	/* ensure we always have some layer selected */
 	for(i=0; i<20; i++)
 		if(values[i])
 			tot++;
-	
+
 	if(tot==0)
-		return;
+		return 0;
 
 	for(i=0; i<20; i++) {
-		if(values[i]) ob->lay |= (1<<i);
-		else ob->lay &= ~(1<<i);
+		if(values[i])	lay |= (1<<i);
+		else			lay &= ~(1<<i);
 	}
+
+	return lay;
 }
 
+static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
+{
+	Object *ob= (Object*)ptr->data;
+	unsigned int lay;
+
+	lay= rna_Object_layer_validate__internal(values, ob->lay);
+	if(lay)
+		ob->lay= lay;
+}
+
+static void rna_Base_layer_set(PointerRNA *ptr, const int *values)
+{
+	Base *base= (Base*)ptr->data;
+
+	unsigned int lay;
+	lay= rna_Object_layer_validate__internal(values, base->lay);
+	if(lay)
+		base->lay= lay;
+
+	/* rna_Base_layer_update updates the objects layer */
+}
+
 static void rna_GameObjectSettings_state_set(PointerRNA *ptr, const int *values)
 {
 	Object *ob= (Object*)ptr->data;
@@ -1707,10 +1754,44 @@
 	/* TODO: DupliObject has more properties that can be wrapped */
 }
 
+static void rna_def_base(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna= RNA_def_struct(brna, "Base", NULL);
+	RNA_def_struct_sdna(srna, "Base");
+	RNA_def_struct_ui_text(srna, "Object Base", "An objects instance in a scene.");
+	RNA_def_struct_ui_icon(srna, ICON_OBJECT_DATA);
+
+	prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "object");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Object", "Object this base links to.");
+
+	/* same as object layer */
+	prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+	RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
+	RNA_def_property_array(prop, 20);
+	RNA_def_property_ui_text(prop, "Layers", "Layers the object is on.");
+	RNA_def_property_boolean_funcs(prop, NULL, "rna_Base_layer_set");
+	RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_layer_update");
+
+	prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", BA_SELECT);
+	RNA_def_property_ui_text(prop, "Selected", "Object base selection state.");
+	RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_select_update");
+
+	/* could use other flags like - BA_WAS_SEL, but for now selected is enough */
+
+	/* TODO: DupliObject has more properties that can be wrapped */
+}
+
 void RNA_def_object(BlenderRNA *brna)
 {
 	rna_def_object(brna);
 	rna_def_object_game_settings(brna);
+	rna_def_base(brna);
 	rna_def_vertex_group(brna);
 	rna_def_material_slot(brna);
 	rna_def_dupli_object(brna);

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2009-11-02 10:30:51 UTC (rev 24235)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2009-11-02 11:14:22 UTC (rev 24236)
@@ -2227,6 +2227,11 @@
 	RNA_def_property_update(prop, NC_WINDOW, NULL);
 	
 	/* Bases/Objects */
+	prop= RNA_def_property(srna, "bases", PROP_COLLECTION, PROP_NONE);
+	RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
+	RNA_def_property_struct_type(prop, "Base");
+	RNA_def_property_ui_text(prop, "Bases", "");
+
 	prop= RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
 	RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
 	RNA_def_property_struct_type(prop, "Object");





More information about the Bf-blender-cvs mailing list