Fix setting Curve-handle type moving the wrong one
Issue noted in T35952, now if you convert a free handle to an aligned handle, it will move the selected handle.
This commit is contained in:
@@ -3313,6 +3313,31 @@ void BKE_nurb_handles_calc(Nurb *nu) /* first, if needed, set handle flags */
|
|||||||
calchandlesNurb_intern(nu, false);
|
calchandlesNurb_intern(nu, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Workaround #BKE_nurb_handles_calc logic
|
||||||
|
* that makes unselected align to the selected handle.
|
||||||
|
*/
|
||||||
|
static void nurbList_handles_swap_select(Nurb *nu)
|
||||||
|
{
|
||||||
|
BezTriple *bezt;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = nu->pntsu, bezt = nu->bezt; i--; bezt++) {
|
||||||
|
if ((bezt->f1 & SELECT) != (bezt->f3 & SELECT)) {
|
||||||
|
bezt->f1 ^= SELECT;
|
||||||
|
bezt->f3 ^= SELECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* internal use only (weak) */
|
||||||
|
static void nurb_handles_calc__align_selected(Nurb *nu)
|
||||||
|
{
|
||||||
|
nurbList_handles_swap_select(nu);
|
||||||
|
BKE_nurb_handles_calc(nu);
|
||||||
|
nurbList_handles_swap_select(nu);
|
||||||
|
}
|
||||||
|
|
||||||
/* similar to BKE_nurb_handle_calc but for curves and
|
/* similar to BKE_nurb_handle_calc but for curves and
|
||||||
* figures out the previous and next for us */
|
* figures out the previous and next for us */
|
||||||
void BKE_nurb_handle_calc_simple(Nurb *nu, BezTriple *bezt)
|
void BKE_nurb_handle_calc_simple(Nurb *nu, BezTriple *bezt)
|
||||||
@@ -3510,7 +3535,9 @@ void BKE_nurbList_handles_set(ListBase *editnurb, const char code)
|
|||||||
}
|
}
|
||||||
bezt++;
|
bezt++;
|
||||||
}
|
}
|
||||||
BKE_nurb_handles_calc(nu);
|
|
||||||
|
/* like BKE_nurb_handles_calc but moves selected */
|
||||||
|
nurb_handles_calc__align_selected(nu);
|
||||||
}
|
}
|
||||||
nu = nu->next;
|
nu = nu->next;
|
||||||
}
|
}
|
||||||
@@ -3554,7 +3581,9 @@ void BKE_nurbList_handles_set(ListBase *editnurb, const char code)
|
|||||||
|
|
||||||
bezt++;
|
bezt++;
|
||||||
}
|
}
|
||||||
BKE_nurb_handles_calc(nu);
|
|
||||||
|
/* like BKE_nurb_handles_calc but moves selected */
|
||||||
|
nurb_handles_calc__align_selected(nu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user