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
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_modifier.h1
-rw-r--r--source/blender/blenkernel/intern/modifier.c11
-rw-r--r--source/blender/editors/interface/interface_templates.c1
-rw-r--r--source/blender/editors/object/object_modifier.c311
4 files changed, 255 insertions, 69 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 6db610f4d8d..ae6f1f5ed85 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -292,6 +292,7 @@ void modifiers_foreachIDLink(struct Object *ob,
IDWalkFunc walk,
void *userData);
struct ModifierData *modifiers_findByType(struct Object *ob, ModifierType type);
+struct ModifierData *modifiers_findByName(struct Object *ob, const char *name);
void modifiers_clearErrors(struct Object *ob);
int modifiers_getCageIndex(struct Scene *scene, struct Object *ob,
int *lastPossibleCageIndex_r, int virtual_);
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 6b46fbe575b..0ecc8166d72 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -176,6 +176,17 @@ ModifierData *modifiers_findByType(Object *ob, ModifierType type)
return md;
}
+ModifierData *modifiers_findByName(Object *ob, const char *name)
+{
+ ModifierData *md = ob->modifiers.first;
+
+ for (; md; md=md->next)
+ if (strcmp(md->name, name)==0)
+ break;
+
+ return md;
+}
+
void modifiers_clearErrors(Object *ob)
{
ModifierData *md = ob->modifiers.first;
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 5d172be6fd7..ec4412d03b0 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -815,6 +815,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
}
}
else {
+ uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
uiItemEnumO(row, "OBJECT_OT_modifier_apply", "Apply", 0, "apply_as", MODIFIER_APPLY_DATA);
if (modifier_sameTopology(md))
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 18cc0adab8a..1e87cd73215 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -573,16 +573,69 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot)
ot->prop= prop;
}
+/************************ poll function for operators using mod names and data context *********************/
+
+static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", rna_type);
+ Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C);
+
+ if (!ob || ob->id.lib) return 0;
+ if (ptr.data && ((ID*)ptr.id.data)->lib) return 0;
+
+ return 1;
+}
+
+static int edit_modifier_poll(bContext *C)
+{
+ return edit_modifier_poll_generic(C, &RNA_Modifier);
+}
+
+static void edit_modifier_properties(wmOperatorType *ot)
+{
+ RNA_def_string(ot->srna, "modifier", "", 32, "Modifier", "Name of the modifier to apply");
+}
+
+static int edit_modifier_invoke_properties(bContext *C, wmOperator *op)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
+ ModifierData *md;
+
+ if (RNA_property_is_set(op->ptr, "modifier"))
+ return 1;
+
+ if (ptr.data) {
+ md = ptr.data;
+ RNA_string_set(op->ptr, "modifier", md->name);
+ return 1;
+ }
+
+ return 0;
+}
+
+static ModifierData *edit_modifier_property_get(bContext *C, wmOperator *op, Object *ob, int type)
+{
+ char modifier_name[32];
+ ModifierData *md;
+ RNA_string_get(op->ptr, "modifier", modifier_name);
+
+ md = modifiers_findByName(ob, modifier_name);
+
+ if (md && type != 0 && md->type != type)
+ md = NULL;
+
+ return md;
+}
+
/************************ remove modifier operator *********************/
static int modifier_remove_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
-
- if(!ED_object_modifier_remove(op->reports, scene, ob, md))
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
+
+ if(!ob || !md || !ED_object_modifier_remove(op->reports, scene, ob, md))
return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -590,28 +643,37 @@ static int modifier_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_remove_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_remove_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_modifier_remove(wmOperatorType *ot)
{
ot->name= "Remove Modifier";
ot->description= "Remove a modifier from the active object";
ot->idname= "OBJECT_OT_modifier_remove";
+ ot->invoke= modifier_remove_invoke;
ot->exec= modifier_remove_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/************************ move up modifier operator *********************/
static int modifier_move_up_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
- if(!ED_object_modifier_move_up(op->reports, ob, md))
+ if(!ob || !md || !ED_object_modifier_move_up(op->reports, ob, md))
return OPERATOR_CANCELLED;
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -620,26 +682,35 @@ static int modifier_move_up_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_move_up_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_move_up_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_modifier_move_up(wmOperatorType *ot)
{
ot->name= "Move Up Modifier";
ot->description= "Move modifier up in the stack";
ot->idname= "OBJECT_OT_modifier_move_up";
+ ot->invoke= modifier_move_up_invoke;
ot->exec= modifier_move_up_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/************************ move down modifier operator *********************/
static int modifier_move_down_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
if(!ob || !md || !ED_object_modifier_move_down(op->reports, ob, md))
return OPERATOR_CANCELLED;
@@ -650,17 +721,27 @@ static int modifier_move_down_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_move_down_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_move_down_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_modifier_move_down(wmOperatorType *ot)
{
ot->name= "Move Down Modifier";
ot->description= "Move modifier down in the stack";
ot->idname= "OBJECT_OT_modifier_move_down";
+ ot->invoke= modifier_move_down_invoke;
ot->exec= modifier_move_down_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/************************ apply modifier operator *********************/
@@ -668,13 +749,13 @@ void OBJECT_OT_modifier_move_down(wmOperatorType *ot)
static int modifier_apply_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
int apply_as= RNA_enum_get(op->ptr, "apply_as");
-
- if(!ob || !md || !ED_object_modifier_apply(op->reports, scene, ob, md, apply_as))
+
+ if(!ob || !md || !ED_object_modifier_apply(op->reports, scene, ob, md, apply_as)) {
return OPERATOR_CANCELLED;
+ }
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -682,6 +763,14 @@ static int modifier_apply_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_apply_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_apply_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
static EnumPropertyItem modifier_apply_as_items[] = {
{MODIFIER_APPLY_DATA, "DATA", 0, "Object Data", "Apply modifier to the object's data"},
{MODIFIER_APPLY_SHAPE, "SHAPE", 0, "New Shape", "Apply deform-only modifier to a new shape on this object"},
@@ -693,14 +782,15 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot)
ot->description= "Apply modifier and remove from the stack";
ot->idname= "OBJECT_OT_modifier_apply";
- //ot->invoke= WM_menu_invoke;
+ ot->invoke= modifier_apply_invoke;
ot->exec= modifier_apply_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_enum(ot->srna, "apply_as", modifier_apply_as_items, MODIFIER_APPLY_DATA, "Apply as", "How to apply the modifier to the geometry");
+ edit_modifier_properties(ot);
}
/************************ convert modifier operator *********************/
@@ -708,10 +798,9 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot)
static int modifier_convert_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
-
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
+
if(!ob || !md || !ED_object_modifier_convert(op->reports, scene, ob, md))
return OPERATOR_CANCELLED;
@@ -721,26 +810,35 @@ static int modifier_convert_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_convert_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_convert_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_modifier_convert(wmOperatorType *ot)
{
ot->name= "Convert Modifier";
ot->description= "Convert particles to a mesh object";
ot->idname= "OBJECT_OT_modifier_convert";
+ ot->invoke= modifier_convert_invoke;
ot->exec= modifier_convert_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/************************ copy modifier operator *********************/
static int modifier_copy_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
- Object *ob= ptr.id.data;
- ModifierData *md= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
if(!ob || !md || !ED_object_modifier_copy(op->reports, ob, md))
return OPERATOR_CANCELLED;
@@ -751,62 +849,83 @@ static int modifier_copy_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int modifier_copy_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return modifier_copy_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_modifier_copy(wmOperatorType *ot)
{
ot->name= "Copy Modifier";
ot->description= "Duplicate modifier at the same position in the stack";
ot->idname= "OBJECT_OT_modifier_copy";
+ ot->invoke= modifier_copy_invoke;
ot->exec= modifier_copy_exec;
- ot->poll= modifier_poll;
+ ot->poll= edit_modifier_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/************* multires delete higher levels operator ****************/
static int multires_poll(bContext *C)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- ID *id= ptr.id.data;
- return (ptr.data && id && !id->lib);
+ return edit_modifier_poll_generic(C, &RNA_MultiresModifier);
}
static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data;
- MultiresModifierData *mmd= ptr.data;
-
- if(mmd) {
- multiresModifier_del_levels(mmd, ob, 1);
- WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
- }
+ Object *ob = ED_object_active_context(C);
+ MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_Multires);
+
+ if (!mmd)
+ return OPERATOR_CANCELLED;
+
+ multiresModifier_del_levels(mmd, ob, 1);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
return OPERATOR_FINISHED;
}
+static int multires_higher_levels_delete_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return multires_higher_levels_delete_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_multires_higher_levels_delete(wmOperatorType *ot)
{
ot->name= "Delete Higher Levels";
ot->idname= "OBJECT_OT_multires_higher_levels_delete";
ot->poll= multires_poll;
+ ot->invoke= multires_higher_levels_delete_invoke;
ot->exec= multires_higher_levels_delete_exec;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/****************** multires subdivide operator *********************/
static int multires_subdivide_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data;
- MultiresModifierData *mmd= ptr.data;
-
+ Object *ob = ED_object_active_context(C);
+ MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_Multires);
+
+ if (!mmd)
+ return OPERATOR_CANCELLED;
+
multiresModifier_subdivide(mmd, ob, 0, mmd->simple);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -815,6 +934,14 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int multires_subdivide_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return multires_subdivide_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_multires_subdivide(wmOperatorType *ot)
{
ot->name= "Multires Subdivide";
@@ -822,20 +949,24 @@ void OBJECT_OT_multires_subdivide(wmOperatorType *ot)
ot->idname= "OBJECT_OT_multires_subdivide";
ot->poll= multires_poll;
+ ot->invoke= multires_subdivide_invoke;
ot->exec= multires_subdivide_exec;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/****************** multires reshape operator *********************/
static int multires_reshape_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data, *secondob= NULL;
- MultiresModifierData *mmd= ptr.data;
+ Object *ob= ED_object_active_context(C), *secondob= NULL;
+ MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_Multires);
+ if (!mmd)
+ return OPERATOR_CANCELLED;
+
CTX_DATA_BEGIN(C, Object*, selob, selected_editable_objects) {
if(selob->type == OB_MESH && selob != ob) {
secondob= selob;
@@ -860,6 +991,14 @@ static int multires_reshape_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int multires_reshape_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return multires_reshape_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_multires_reshape(wmOperatorType *ot)
{
ot->name= "Multires Reshape";
@@ -867,18 +1006,19 @@ void OBJECT_OT_multires_reshape(wmOperatorType *ot)
ot->idname= "OBJECT_OT_multires_reshape";
ot->poll= multires_poll;
+ ot->invoke= multires_reshape_invoke;
ot->exec= multires_reshape_exec;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/****************** multires save external operator *********************/
static int multires_save_external_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data;
+ Object *ob = ED_object_active_context(C);
Mesh *me= (ob)? ob->data: op->customdata;
char path[FILE_MAX];
@@ -900,11 +1040,19 @@ static int multires_save_external_exec(bContext *C, wmOperator *op)
static int multires_save_external_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data;
+ Object *ob = ED_object_active_context(C);
+ MultiresModifierData *mmd;
Mesh *me= ob->data;
char path[FILE_MAX];
+ if (!edit_modifier_invoke_properties(C, op))
+ return OPERATOR_CANCELLED;
+
+ mmd = (MultiresModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_Multires);
+
+ if (!mmd)
+ return OPERATOR_CANCELLED;
+
if(CustomData_external_test(&me->fdata, CD_MDISPS))
return OPERATOR_CANCELLED;
@@ -930,19 +1078,20 @@ void OBJECT_OT_multires_save_external(wmOperatorType *ot)
// XXX modifier no longer in context after file browser .. ot->poll= multires_poll;
ot->exec= multires_save_external_exec;
ot->invoke= multires_save_external_invoke;
+ ot->poll= multires_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
WM_operator_properties_filesel(ot, FOLDERFILE|BTXFILE, FILE_SPECIAL, FILE_SAVE);
+ edit_modifier_properties(ot);
}
/****************** multires pack operator *********************/
static int multires_pack_external_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MultiresModifier);
- Object *ob= ptr.id.data;
+ Object *ob = ED_object_active_context(C);
Mesh *me= ob->data;
if(!CustomData_external_test(&me->fdata, CD_MDISPS))
@@ -971,17 +1120,17 @@ void OBJECT_OT_multires_pack_external(wmOperatorType *ot)
static int meshdeform_poll(bContext *C)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_MeshDeformModifier);
- ID *id= ptr.id.data;
- return (ptr.data && id && !id->lib);
+ return edit_modifier_poll_generic(C, &RNA_MeshDeformModifier);
}
static int meshdeform_bind_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- PointerRNA ptr= CTX_data_pointer_get(C, "modifier");
- Object *ob= ptr.id.data;
- MeshDeformModifierData *mmd= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ MeshDeformModifierData *mmd = (MeshDeformModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_MeshDeform);
+
+ if (!mmd)
+ return OPERATOR_CANCELLED;
if(mmd->bindcos) {
if(mmd->bindweights) MEM_freeN(mmd->bindweights);
@@ -997,6 +1146,9 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
mmd->totvert= 0;
mmd->totcagevert= 0;
mmd->totinfluence= 0;
+
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
}
else {
DerivedMesh *dm;
@@ -1027,6 +1179,14 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int meshdeform_bind_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return meshdeform_bind_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
void OBJECT_OT_meshdeform_bind(wmOperatorType *ot)
{
/* identifiers */
@@ -1036,26 +1196,28 @@ void OBJECT_OT_meshdeform_bind(wmOperatorType *ot)
/* api callbacks */
ot->poll= meshdeform_poll;
+ ot->invoke= meshdeform_bind_invoke;
ot->exec= meshdeform_bind_exec;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}
/****************** explode refresh operator *********************/
-static int explode_refresh_poll(bContext *C)
+static int explode_poll(bContext *C)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_ExplodeModifier);
- ID *id= ptr.id.data;
- return (ptr.data && id && !id->lib);
+ return edit_modifier_poll_generic(C, &RNA_ExplodeModifier);
}
static int explode_refresh_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_ExplodeModifier);
- Object *ob= ptr.id.data;
- ExplodeModifierData *emd= ptr.data;
+ Object *ob = ED_object_active_context(C);
+ ExplodeModifierData *emd = (ExplodeModifierData *)edit_modifier_property_get(C, op, ob, eModifierType_Explode);
+
+ if (!emd)
+ return OPERATOR_CANCELLED;
emd->flag |= eExplodeFlag_CalcFaces;
@@ -1065,16 +1227,27 @@ static int explode_refresh_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+static int explode_refresh_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return explode_refresh_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
+
void OBJECT_OT_explode_refresh(wmOperatorType *ot)
{
ot->name= "Explode Refresh";
ot->description= "Refresh data in the Explode modifier";
ot->idname= "OBJECT_OT_explode_refresh";
+ ot->poll= explode_poll;
+ ot->invoke= explode_refresh_invoke;
ot->exec= explode_refresh_exec;
- ot->poll= explode_refresh_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ edit_modifier_properties(ot);
}