diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/object/object_group.c | 14 | ||||
-rw-r--r-- | source/blender/editors/object/object_intern.h | 2 | ||||
-rw-r--r-- | source/blender/editors/object/object_ops.c | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_object.c | 113 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_scene.c | 5 |
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"); |