Fix T47737: Lattice crashes w/ smooth modifier
authorPhilipp Oeser <info@graphics-engineer.com>
Wed, 18 May 2016 12:21:46 +0000 (22:21 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 18 May 2016 12:46:29 +0000 (22:46 +1000)
Add flag for modifiers that support lattice

15 files changed:
source/blender/blenkernel/BKE_modifier.h
source/blender/blenkernel/intern/lattice.c
source/blender/blenkernel/intern/object.c
source/blender/modifiers/intern/MOD_armature.c
source/blender/modifiers/intern/MOD_cast.c
source/blender/modifiers/intern/MOD_curve.c
source/blender/modifiers/intern/MOD_hook.c
source/blender/modifiers/intern/MOD_lattice.c
source/blender/modifiers/intern/MOD_meshcache.c
source/blender/modifiers/intern/MOD_meshdeform.c
source/blender/modifiers/intern/MOD_shrinkwrap.c
source/blender/modifiers/intern/MOD_simpledeform.c
source/blender/modifiers/intern/MOD_softbody.c
source/blender/modifiers/intern/MOD_warp.c
source/blender/modifiers/intern/MOD_wave.c

index 455912ab819c32dc1e3c9ae78e254ac35a6015dc..f6c08909d2312e103b5f13fdd75ffa4c18959dcb 100644 (file)
@@ -101,7 +101,8 @@ typedef enum {
        eModifierTypeFlag_NoUserAdd = (1 << 8),
 
        /* For modifiers that use CD_PREVIEW_MCOL for preview. */
-       eModifierTypeFlag_UsesPreview = (1 << 9)
+       eModifierTypeFlag_UsesPreview = (1 << 9),
+       eModifierTypeFlag_AcceptsLattice = (1 << 10),
 } ModifierTypeFlag;
 
 /* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */
index 57c02ec632985c7d3e29449fdb83677c9b118019..b350e93228132e6f0bfae968a304408c5d828538 100644 (file)
@@ -1082,6 +1082,7 @@ void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
 
                md->scene = scene;
                
+               if (!(mti->flags & eModifierTypeFlag_AcceptsLattice)) continue;
                if (!(md->mode & eModifierMode_Realtime)) continue;
                if (editmode && !(md->mode & eModifierMode_Editmode)) continue;
                if (mti->isDisabled && mti->isDisabled(md, 0)) continue;
index 1ba4852623c17efdaf52e9d61193faeeb847e785..80cdce16aca20fc2c59b0ee3b4fb0782adb0b549 100644 (file)
@@ -244,6 +244,11 @@ bool BKE_object_support_modifier_type_check(Object *ob, int modifier_type)
 
        mti = modifierType_getInfo(modifier_type);
 
+
+       if (!(ob->type == OB_LATTICE && (mti->flags & eModifierTypeFlag_AcceptsLattice))) {
+               return false;
+       }
+
        if (!((mti->flags & eModifierTypeFlag_AcceptsCVs) ||
              (ob->type == OB_MESH && (mti->flags & eModifierTypeFlag_AcceptsMesh))))
        {
index 2241a787630ac0fa498ed3f5398c7176cc2d6de4..567505ea45ddfcdc1350bd34f6875b4c4dec8d67 100644 (file)
@@ -207,6 +207,7 @@ ModifierTypeInfo modifierType_Armature = {
        /* structSize */        sizeof(ArmatureModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
 
        /* copyData */          copyData,
index 32c3d41c4b628b0154b4952608fe92dc03a17108..33e5b3615d912eb8a9455b438fe514c969f18a49 100644 (file)
@@ -498,6 +498,7 @@ ModifierTypeInfo modifierType_Cast = {
        /* structSize */        sizeof(CastModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
 
        /* copyData */          copyData,
index 6e2d746c8585526f3b871b552160da4ee11b10d5..9bc96e593fd000cdff487468490146bb18420c8d 100644 (file)
@@ -164,6 +164,7 @@ ModifierTypeInfo modifierType_Curve = {
        /* structSize */        sizeof(CurveModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
 
        /* copyData */          copyData,
index bec0cc0d8a33dd3dd9dc04fb3361ce60213f0ba6..83c4ca7984ca331bda2e3890d53b06781de51082 100644 (file)
@@ -417,6 +417,7 @@ ModifierTypeInfo modifierType_Hook = {
        /* structSize */        sizeof(HookModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
        /* copyData */          copyData,
        /* deformVerts */       deformVerts,
index 0f49ce6cfbfc521ab2cd82470ca7ba4818d76e82..7d4701e3ef27918b299e402e89a55ea6a92ee282 100644 (file)
@@ -156,6 +156,7 @@ ModifierTypeInfo modifierType_Lattice = {
        /* structSize */        sizeof(LatticeModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
        /* copyData */          copyData,
        /* deformVerts */       deformVerts,
index 92926ed942488957c1a7024d3a3bef0253ce2f4c..aa3e3ebcf7eeb37f0bae928502e8964ec9b65a81 100644 (file)
@@ -299,6 +299,7 @@ ModifierTypeInfo modifierType_MeshCache = {
        /* structSize */        sizeof(MeshCacheModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
 
        /* copyData */          copyData,
index e3c94a1a4dfde6c4671fa800f0481f58e4b9c054..3f34319d25f81938c5f1cff40dc0a5d3b7f3dec3 100644 (file)
@@ -520,6 +520,7 @@ ModifierTypeInfo modifierType_MeshDeform = {
        /* structSize */        sizeof(MeshDeformModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
 
        /* copyData */          copyData,
index a9919cadd167f778dc7f4f41115cdaf94a481c2e..633311c2b870f10683f26da71d712d185ea5ce61 100644 (file)
@@ -194,6 +194,7 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsMesh |
                                eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode |
                                eModifierTypeFlag_EnableInEditmode,
 
index 588b56d6aba8daf2fbf664e596424e1a2961eea7..c68f26511917af16bc0d737102c4b1949a81f150 100644 (file)
@@ -366,6 +366,7 @@ ModifierTypeInfo modifierType_SimpleDeform = {
 
        /* flags */             eModifierTypeFlag_AcceptsMesh |
                                eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode |
                                eModifierTypeFlag_EnableInEditmode,
 
index d958badc33ce9ab2e6f92c4ae585907691e36a52..98a1412d0c6907c7e0db738c4890bcc3afa479b0 100644 (file)
@@ -65,6 +65,7 @@ ModifierTypeInfo modifierType_Softbody = {
        /* structSize */        sizeof(SoftbodyModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_RequiresOriginalData |
                                eModifierTypeFlag_Single,
 
index 27d3bac59ec79c3a9d0847b9d19b5bdd1c8b8c83..b38de140a91c63ca7aa77cb92f9d8430a9a29113 100644 (file)
@@ -374,6 +374,7 @@ ModifierTypeInfo modifierType_Warp = {
        /* structSize */        sizeof(WarpModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
        /* copyData */          copyData,
        /* deformVerts */       deformVerts,
index f13eeb3185e3a662bb7c3e932f9e87a4e28302ea..683649ed1c01db3da8a0336ef3cdcd47af380843 100644 (file)
@@ -384,6 +384,7 @@ ModifierTypeInfo modifierType_Wave = {
        /* structSize */        sizeof(WaveModifierData),
        /* type */              eModifierTypeType_OnlyDeform,
        /* flags */             eModifierTypeFlag_AcceptsCVs |
+                               eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
        /* copyData */          copyData,
        /* deformVerts */       deformVerts,