forked from bartvdbraak/blender
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)
This commit is contained in:
parent
da6081f266
commit
da1765765b
@ -98,6 +98,8 @@ class bpy_ops_submodule(object):
|
||||
'''
|
||||
gets a bpy.ops.submodule function
|
||||
'''
|
||||
if func.startswith('__'):
|
||||
raise AttributeError(func)
|
||||
return bpy_ops_submodule_op(self.module, func)
|
||||
|
||||
def __dir__(self):
|
||||
|
@ -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 *********************/
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
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,10 +720,10 @@ 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++)
|
||||
@ -708,12 +731,36 @@ static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
|
||||
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);
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user