forked from bartvdbraak/blender
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:
parent
e9b417c1bf
commit
2ef0ee76a0
@ -280,7 +280,7 @@ void modifier_copyData(struct ModifierData *md, struct ModifierData *ta
|
|||||||
int modifier_dependsOnTime(struct ModifierData *md);
|
int modifier_dependsOnTime(struct ModifierData *md);
|
||||||
int modifier_supportsMapping(struct ModifierData *md);
|
int modifier_supportsMapping(struct ModifierData *md);
|
||||||
int modifier_couldBeCage(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_sameTopology(ModifierData *md);
|
||||||
int modifier_isEnabled(struct ModifierData *md, int required_mode);
|
int modifier_isEnabled(struct ModifierData *md, int required_mode);
|
||||||
void modifier_setError(struct ModifierData *md, char *format, ...);
|
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_isDeformedByArmature(struct Object *ob);
|
||||||
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
|
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
|
||||||
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
|
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);
|
void modifier_freeTemporaryData(struct ModifierData *md);
|
||||||
|
|
||||||
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
|
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
|
||||||
|
@ -2513,7 +2513,7 @@ int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deform
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(; md && i <= cageIndex; md = md->next, i++)
|
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++;
|
numleft++;
|
||||||
|
|
||||||
if(dm)
|
if(dm)
|
||||||
|
@ -9151,15 +9151,15 @@ Object *modifiers_isDeformedByArmature(Object *ob)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Takes an object and returns its first selected lattice, else just its
|
/* Takes an object and returns its first selected lattice, else just its
|
||||||
* armature
|
* lattice
|
||||||
* This should work for multiple armatures per object
|
* This should work for multiple lattics per object
|
||||||
*/
|
*/
|
||||||
Object *modifiers_isDeformedByLattice(Object *ob)
|
Object *modifiers_isDeformedByLattice(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
||||||
LatticeModifierData *lmd= NULL;
|
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) {
|
for (; md; md=md->next) {
|
||||||
if (md->type==eModifierType_Lattice) {
|
if (md->type==eModifierType_Lattice) {
|
||||||
@ -9192,28 +9192,24 @@ int modifiers_usesArmature(Object *ob, bArmature *arm)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int modifier_isDeformer(ModifierData *md)
|
int modifier_isCorrectableDeformed(ModifierData *md)
|
||||||
{
|
{
|
||||||
if (md->type==eModifierType_Armature)
|
if (md->type==eModifierType_Armature)
|
||||||
return 1;
|
return 1;
|
||||||
if (md->type==eModifierType_Curve)
|
|
||||||
return 1;
|
|
||||||
if (md->type==eModifierType_Lattice)
|
|
||||||
return 1;
|
|
||||||
if (md->type==eModifierType_ShapeKey)
|
if (md->type==eModifierType_ShapeKey)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int modifiers_isDeformed(Scene *scene, Object *ob)
|
int modifiers_isCorrectableDeformed(Scene *scene, Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
||||||
|
|
||||||
for (; md; md=md->next) {
|
for (; md; md=md->next) {
|
||||||
if(ob->mode==OB_MODE_EDIT && (md->mode & eModifierMode_Editmode)==0);
|
if(ob->mode==OB_MODE_EDIT && (md->mode & eModifierMode_Editmode)==0);
|
||||||
else
|
else
|
||||||
if(modifier_isDeformer(md))
|
if(modifier_isCorrectableDeformed(md))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2212,7 +2212,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t)
|
|||||||
/* detect CrazySpace [tm] */
|
/* detect CrazySpace [tm] */
|
||||||
if(propmode==0) {
|
if(propmode==0) {
|
||||||
if(modifiers_getCageIndex(t->obedit, NULL, 1)>=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
|
/* check if we can use deform matrices for modifier from the
|
||||||
start up to stack, they are more accurate than quats */
|
start up to stack, they are more accurate than quats */
|
||||||
totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos);
|
totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos);
|
||||||
|
Loading…
Reference in New Issue
Block a user