Fix for [#20249] duplicating a mesh in edit mode with a lattice modifier

Removed lattice and curve modifiers from being correctable for crazy space - it didn't work and was giving weird results.
This commit is contained in:
Matt Ebb 2009-12-09 01:53:04 +00:00
parent e9b417c1bf
commit 2ef0ee76a0
4 changed files with 10 additions and 14 deletions

View File

@ -280,7 +280,7 @@ void modifier_copyData(struct ModifierData *md, struct ModifierData *ta
int modifier_dependsOnTime(struct ModifierData *md);
int modifier_supportsMapping(struct ModifierData *md);
int modifier_couldBeCage(struct ModifierData *md);
int modifier_isDeformer(struct ModifierData *md);
int modifier_isCorrectableDeformed(struct ModifierData *md);
int modifier_sameTopology(ModifierData *md);
int modifier_isEnabled(struct ModifierData *md, int required_mode);
void modifier_setError(struct ModifierData *md, char *format, ...);
@ -303,7 +303,7 @@ int modifiers_isParticleEnabled(struct Object *ob);
struct Object *modifiers_isDeformedByArmature(struct Object *ob);
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
int modifiers_isDeformed(struct Scene *scene, struct Object *ob);
int modifiers_isCorrectableDeformed(struct Scene *scene, struct Object *ob);
void modifier_freeTemporaryData(struct ModifierData *md);
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);

View File

@ -2513,7 +2513,7 @@ int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deform
}
for(; md && i <= cageIndex; md = md->next, i++)
if(editmesh_modifier_is_enabled(md, dm) && modifier_isDeformer(md))
if(editmesh_modifier_is_enabled(md, dm) && modifier_isCorrectableDeformed(md))
numleft++;
if(dm)

View File

@ -9151,15 +9151,15 @@ Object *modifiers_isDeformedByArmature(Object *ob)
}
/* Takes an object and returns its first selected lattice, else just its
* armature
* This should work for multiple armatures per object
* lattice
* This should work for multiple lattics per object
*/
Object *modifiers_isDeformedByLattice(Object *ob)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
LatticeModifierData *lmd= NULL;
/* return the first selected armature, this lets us use multiple armatures
/* return the first selected lattice, this lets us use multiple lattices
*/
for (; md; md=md->next) {
if (md->type==eModifierType_Lattice) {
@ -9192,28 +9192,24 @@ int modifiers_usesArmature(Object *ob, bArmature *arm)
return 0;
}
int modifier_isDeformer(ModifierData *md)
int modifier_isCorrectableDeformed(ModifierData *md)
{
if (md->type==eModifierType_Armature)
return 1;
if (md->type==eModifierType_Curve)
return 1;
if (md->type==eModifierType_Lattice)
return 1;
if (md->type==eModifierType_ShapeKey)
return 1;
return 0;
}
int modifiers_isDeformed(Scene *scene, Object *ob)
int modifiers_isCorrectableDeformed(Scene *scene, Object *ob)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
for (; md; md=md->next) {
if(ob->mode==OB_MODE_EDIT && (md->mode & eModifierMode_Editmode)==0);
else
if(modifier_isDeformer(md))
if(modifier_isCorrectableDeformed(md))
return 1;
}
return 0;

View File

@ -2212,7 +2212,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t)
/* detect CrazySpace [tm] */
if(propmode==0) {
if(modifiers_getCageIndex(t->obedit, NULL, 1)>=0) {
if(modifiers_isDeformed(t->scene, t->obedit)) {
if(modifiers_isCorrectableDeformed(t->scene, t->obedit)) {
/* check if we can use deform matrices for modifier from the
start up to stack, they are more accurate than quats */
totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos);