Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-11-02 14:14:22 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-11-02 14:14:22 +0300
commitda1765765baf3bc84059548a43beec0c3a1c2d41 (patch)
tree1eaef63f7ce63144a990d97285675bbf417ad4eb /source
parentda6081f26692833e980706bee094933dadda5fa5 (diff)
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)
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/object/object_group.c14
-rw-r--r--source/blender/editors/object/object_intern.h2
-rw-r--r--source/blender/editors/object/object_ops.c4
-rw-r--r--source/blender/makesrna/intern/rna_object.c113
-rw-r--r--source/blender/makesrna/intern/rna_scene.c5
5 files changed, 112 insertions, 26 deletions
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c
index 198838d6f05..ec8409e9aa1 100644
--- a/source/blender/editors/object/object_group.c
+++ b/source/blender/editors/object/object_group.c
@@ -198,11 +198,11 @@ static int group_create_exec(bContext *C, wmOperator *op)
{
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 @@ static int group_create_exec(bContext *C, wmOperator *op)
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 @@ void GROUP_OT_group_create(wmOperatorType *ot)
/* 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 *********************/
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 9ce54241cb6..ebc36dddb33 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -114,7 +114,7 @@ void LATTICE_OT_select_all_toggle(struct wmOperatorType *ot);
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);
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 85211f12a0c..fc06a94ecfa 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -104,7 +104,7 @@ void ED_operatortypes_object(void)
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 @@ void ED_keymap_object(wmKeyConfig *keyconf)
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);
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 28e4e7fc443..1e884bb6950 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -150,6 +150,25 @@ static void rna_Object_select_update(bContext *C, PointerRNA *ptr)
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,15 +179,19 @@ static void rna_Object_layer_update(bContext *C, PointerRNA *ptr)
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)
@@ -697,23 +720,47 @@ static PointerRNA rna_Object_game_settings_get(PointerRNA *ptr)
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)
@@ -1707,10 +1754,44 @@ static void rna_def_dupli_object(BlenderRNA *brna)
/* 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);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index e2c239c4010..e7aeac96aef 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2227,6 +2227,11 @@ void RNA_def_scene(BlenderRNA *brna)
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");