Fix T47737: Lattice crashes w/ smooth modifier

Add flag for modifiers that support lattice
This commit is contained in:
Philipp Oeser 2016-05-18 22:21:46 +10:00 committed by Campbell Barton
parent cade8e25c6
commit 7a8bd2eaea
15 changed files with 20 additions and 1 deletions

@ -101,7 +101,8 @@ typedef enum {
eModifierTypeFlag_NoUserAdd = (1 << 8), eModifierTypeFlag_NoUserAdd = (1 << 8),
/* For modifiers that use CD_PREVIEW_MCOL for preview. */ /* For modifiers that use CD_PREVIEW_MCOL for preview. */
eModifierTypeFlag_UsesPreview = (1 << 9) eModifierTypeFlag_UsesPreview = (1 << 9),
eModifierTypeFlag_AcceptsLattice = (1 << 10),
} ModifierTypeFlag; } ModifierTypeFlag;
/* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */ /* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */

@ -1082,6 +1082,7 @@ void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
md->scene = scene; md->scene = scene;
if (!(mti->flags & eModifierTypeFlag_AcceptsLattice)) continue;
if (!(md->mode & eModifierMode_Realtime)) continue; if (!(md->mode & eModifierMode_Realtime)) continue;
if (editmode && !(md->mode & eModifierMode_Editmode)) continue; if (editmode && !(md->mode & eModifierMode_Editmode)) continue;
if (mti->isDisabled && mti->isDisabled(md, 0)) continue; if (mti->isDisabled && mti->isDisabled(md, 0)) continue;

@ -244,6 +244,11 @@ bool BKE_object_support_modifier_type_check(Object *ob, int modifier_type)
mti = modifierType_getInfo(modifier_type); mti = modifierType_getInfo(modifier_type);
if (!(ob->type == OB_LATTICE && (mti->flags & eModifierTypeFlag_AcceptsLattice))) {
return false;
}
if (!((mti->flags & eModifierTypeFlag_AcceptsCVs) || if (!((mti->flags & eModifierTypeFlag_AcceptsCVs) ||
(ob->type == OB_MESH && (mti->flags & eModifierTypeFlag_AcceptsMesh)))) (ob->type == OB_MESH && (mti->flags & eModifierTypeFlag_AcceptsMesh))))
{ {

@ -207,6 +207,7 @@ ModifierTypeInfo modifierType_Armature = {
/* structSize */ sizeof(ArmatureModifierData), /* structSize */ sizeof(ArmatureModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,

@ -498,6 +498,7 @@ ModifierTypeInfo modifierType_Cast = {
/* structSize */ sizeof(CastModifierData), /* structSize */ sizeof(CastModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,

@ -164,6 +164,7 @@ ModifierTypeInfo modifierType_Curve = {
/* structSize */ sizeof(CurveModifierData), /* structSize */ sizeof(CurveModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,

@ -417,6 +417,7 @@ ModifierTypeInfo modifierType_Hook = {
/* structSize */ sizeof(HookModifierData), /* structSize */ sizeof(HookModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,
/* deformVerts */ deformVerts, /* deformVerts */ deformVerts,

@ -156,6 +156,7 @@ ModifierTypeInfo modifierType_Lattice = {
/* structSize */ sizeof(LatticeModifierData), /* structSize */ sizeof(LatticeModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,
/* deformVerts */ deformVerts, /* deformVerts */ deformVerts,

@ -299,6 +299,7 @@ ModifierTypeInfo modifierType_MeshCache = {
/* structSize */ sizeof(MeshCacheModifierData), /* structSize */ sizeof(MeshCacheModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,

@ -520,6 +520,7 @@ ModifierTypeInfo modifierType_MeshDeform = {
/* structSize */ sizeof(MeshDeformModifierData), /* structSize */ sizeof(MeshDeformModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,

@ -194,6 +194,7 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsMesh | /* flags */ eModifierTypeFlag_AcceptsMesh |
eModifierTypeFlag_AcceptsCVs | eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode | eModifierTypeFlag_SupportsEditmode |
eModifierTypeFlag_EnableInEditmode, eModifierTypeFlag_EnableInEditmode,

@ -366,6 +366,7 @@ ModifierTypeInfo modifierType_SimpleDeform = {
/* flags */ eModifierTypeFlag_AcceptsMesh | /* flags */ eModifierTypeFlag_AcceptsMesh |
eModifierTypeFlag_AcceptsCVs | eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode | eModifierTypeFlag_SupportsEditmode |
eModifierTypeFlag_EnableInEditmode, eModifierTypeFlag_EnableInEditmode,

@ -65,6 +65,7 @@ ModifierTypeInfo modifierType_Softbody = {
/* structSize */ sizeof(SoftbodyModifierData), /* structSize */ sizeof(SoftbodyModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_RequiresOriginalData | eModifierTypeFlag_RequiresOriginalData |
eModifierTypeFlag_Single, eModifierTypeFlag_Single,

@ -374,6 +374,7 @@ ModifierTypeInfo modifierType_Warp = {
/* structSize */ sizeof(WarpModifierData), /* structSize */ sizeof(WarpModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,
/* deformVerts */ deformVerts, /* deformVerts */ deformVerts,

@ -384,6 +384,7 @@ ModifierTypeInfo modifierType_Wave = {
/* structSize */ sizeof(WaveModifierData), /* structSize */ sizeof(WaveModifierData),
/* type */ eModifierTypeType_OnlyDeform, /* type */ eModifierTypeType_OnlyDeform,
/* flags */ eModifierTypeFlag_AcceptsCVs | /* flags */ eModifierTypeFlag_AcceptsCVs |
eModifierTypeFlag_AcceptsLattice |
eModifierTypeFlag_SupportsEditmode, eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData, /* copyData */ copyData,
/* deformVerts */ deformVerts, /* deformVerts */ deformVerts,