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:
Campbell Barton 2009-11-02 11:14:22 +00:00
parent da6081f266
commit da1765765b
6 changed files with 114 additions and 26 deletions

@ -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);
}
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,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");