Discard non-free axis scaling in Maintain Volume to improve 2.79 compat.
It seems the reason the old version of the constraint overcompensates as reported in T48079 is to allow the constraint to work with uniform scaling on all axes. However the way it did that actually _requires_ uniform scaling for the constraint to work correctly, and breaks if only the free scaling axis is used to avoid redundant channels. This version attempts to allow both by discarding scaling in the non- free directions instead of applying the correction on top of it.
This commit is contained in:
@@ -1938,16 +1938,16 @@ static void samevolume_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *
|
||||
/* apply scaling factor to the channels not being kept */
|
||||
switch (data->flag) {
|
||||
case SAMEVOL_X:
|
||||
mul_v3_fl(cob->matrix[1], fac);
|
||||
mul_v3_fl(cob->matrix[2], fac);
|
||||
mul_v3_fl(cob->matrix[1], fac / obsize[1]);
|
||||
mul_v3_fl(cob->matrix[2], fac / obsize[2]);
|
||||
break;
|
||||
case SAMEVOL_Y:
|
||||
mul_v3_fl(cob->matrix[0], fac);
|
||||
mul_v3_fl(cob->matrix[2], fac);
|
||||
mul_v3_fl(cob->matrix[0], fac / obsize[0]);
|
||||
mul_v3_fl(cob->matrix[2], fac / obsize[2]);
|
||||
break;
|
||||
case SAMEVOL_Z:
|
||||
mul_v3_fl(cob->matrix[0], fac);
|
||||
mul_v3_fl(cob->matrix[1], fac);
|
||||
mul_v3_fl(cob->matrix[0], fac / obsize[0]);
|
||||
mul_v3_fl(cob->matrix[1], fac / obsize[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user