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:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/include/ED_object.h2
-rw-r--r--source/blender/editors/object/object_edit.c21
-rw-r--r--source/blender/editors/object/object_modifier.c3
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c16
4 files changed, 24 insertions, 18 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 0d11108d81f..4155dbb5565 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -219,6 +219,8 @@ struct EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(
int *free,
const unsigned int selection_mask);
+void ED_object_check_force_modifiers(struct Main *bmain, struct Scene *scene, struct Object *object);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index bd4c2e997fe..02cbc1060df 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1110,6 +1110,23 @@ static void UNUSED_FUNCTION(copy_attr_menu) (Main *bmain, Scene *scene, View3D *
/* ******************* force field toggle operator ***************** */
+void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
+{
+ PartDeflect *pd = object->pd;
+ ModifierData *md = modifiers_findByType(object, eModifierType_Surface);
+
+ /* add/remove modifier as needed */
+ if (!md) {
+ if (pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield, PFIELD_GUIDE, PFIELD_TEXTURE) == 0)
+ if (ELEM4(object->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE))
+ ED_object_modifier_add(NULL, bmain, scene, object, NULL, eModifierType_Surface);
+ }
+ else {
+ if (!pd || pd->shape != PFIELD_SHAPE_SURFACE || pd->forcefield != PFIELD_FORCE)
+ ED_object_modifier_remove(NULL, bmain, object, md);
+ }
+}
+
static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *ob = CTX_data_active_object(C);
@@ -1122,7 +1139,9 @@ static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op))
else
ob->pd->forcefield = 0;
- WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
+ ED_object_check_force_modifiers(CTX_data_main(C), CTX_data_scene(C), ob);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 0c794a974ef..01dafe69d31 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -298,9 +298,6 @@ static int object_modifier_remove(Main *bmain, Object *ob, ModifierData *md,
*sort_depsgraph = 1;
}
else if (md->type == eModifierType_Surface) {
- if (ob->pd && ob->pd->shape == PFIELD_SHAPE_SURFACE)
- ob->pd->shape = PFIELD_SHAPE_PLANE;
-
*sort_depsgraph = 1;
}
else if (md->type == eModifierType_Multires) {
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index 33ae256c042..2a93925a8e5 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -517,21 +517,9 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA
{
if (!particle_id_check(ptr)) {
Object *ob = (Object *)ptr->id.data;
- PartDeflect *pd = ob->pd;
- ModifierData *md = modifiers_findByType(ob, eModifierType_Surface);
-
- /* add/remove modifier as needed */
- if (!md) {
- if (pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield, PFIELD_GUIDE, PFIELD_TEXTURE) == 0)
- if (ELEM4(ob->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE))
- ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Surface);
- }
- else {
- if (!pd || pd->shape != PFIELD_SHAPE_SURFACE)
- ED_object_modifier_remove(NULL, bmain, ob, md);
- }
-
+ ED_object_check_force_modifiers(bmain, scene, ob);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
}