Fix normal transform orientation calculation
When using the 'normal' orientation, the normal would be ignored if the plane couldn't be calculated. Now use only the normal if the plane is zero length, this was already done, just not in all cases.
This commit is contained in:
parent
a5bb401704
commit
7be3378d16
|
@ -796,6 +796,8 @@ bool applyTransformOrientation(const struct bContext *C, float mat[3][3], char r
|
|||
#define ORIENTATION_VERT 2
|
||||
#define ORIENTATION_EDGE 3
|
||||
#define ORIENTATION_FACE 4
|
||||
#define ORIENTATION_USE_PLANE(ty) \
|
||||
ELEM(ty, ORIENTATION_NORMAL, ORIENTATION_EDGE, ORIENTATION_FACE)
|
||||
|
||||
int getTransformOrientation_ex(const struct bContext *C, float normal[3], float plane[3], const short around);
|
||||
int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3]);
|
||||
|
|
|
@ -796,12 +796,7 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
|
|||
}
|
||||
}
|
||||
|
||||
if (is_zero_v3(plane)) {
|
||||
result = ORIENTATION_VERT;
|
||||
}
|
||||
else {
|
||||
result = ORIENTATION_EDGE;
|
||||
}
|
||||
result = ORIENTATION_EDGE;
|
||||
}
|
||||
else if (em->bm->totvertsel > 3) {
|
||||
BMIter iter;
|
||||
|
@ -1104,6 +1099,11 @@ void ED_getTransformOrientationMatrix(const bContext *C, float orientation_mat[3
|
|||
|
||||
type = getTransformOrientation_ex(C, normal, plane, around);
|
||||
|
||||
/* Fallback, when the plane can't be calculated. */
|
||||
if (ORIENTATION_USE_PLANE(type) && is_zero_v3(plane)) {
|
||||
type = ORIENTATION_VERT;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case ORIENTATION_NORMAL:
|
||||
if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) {
|
||||
|
|
Loading…
Reference in New Issue