Bug fix #33748
Old fixes, since 2009 and before! Related to Curve object editmode: - normals are not being drawn for hidden curves anymore - even worse: Blender also didn't hide the extrusions or bevels for hidden curves - outside edit mode, it shows all (as for all other modes) - (de)select-all now works when 1st (or any) handle was hidden.
This commit is contained in:
@@ -2220,6 +2220,7 @@ void BKE_curve_bevelList_make(Object *ob)
|
||||
struct bevelsort *sortdata, *sd, *sd1;
|
||||
int a, b, nr, poly, resolu = 0, len = 0;
|
||||
int do_tilt, do_radius, do_weight;
|
||||
int is_editmode = 0;
|
||||
|
||||
/* this function needs an object, because of tflag and upflag */
|
||||
cu = ob->data;
|
||||
@@ -2233,12 +2234,17 @@ void BKE_curve_bevelList_make(Object *ob)
|
||||
if (cu->editnurb && ob->type != OB_FONT) {
|
||||
ListBase *nurbs = BKE_curve_editNurbs_get(cu);
|
||||
nu = nurbs->first;
|
||||
is_editmode = 1;
|
||||
}
|
||||
else {
|
||||
nu = cu->nurb.first;
|
||||
}
|
||||
|
||||
while (nu) {
|
||||
for (; nu; nu = nu->next) {
|
||||
|
||||
if (nu->hide && is_editmode)
|
||||
continue;
|
||||
|
||||
/* check if we will calculate tilt data */
|
||||
do_tilt = CU_DO_TILT(cu, nu);
|
||||
do_radius = CU_DO_RADIUS(cu, nu); /* normal display uses the radius, better just to calculate them */
|
||||
@@ -2384,7 +2390,6 @@ void BKE_curve_bevelList_make(Object *ob)
|
||||
}
|
||||
}
|
||||
}
|
||||
nu = nu->next;
|
||||
}
|
||||
|
||||
/* STEP 2: DOUBLE POINTS AND AUTOMATIC RESOLUTION, REDUCE DATABLOCKS */
|
||||
|
||||
@@ -309,10 +309,11 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i
|
||||
BPoint *bp;
|
||||
float *data;
|
||||
int a, len, resolu;
|
||||
const int editmode = (!forRender && (cu->editnurb || cu->editfont));
|
||||
|
||||
nu = nubase->first;
|
||||
while (nu) {
|
||||
if (nu->hide == 0) {
|
||||
if (nu->hide == 0 || editmode == 0) {
|
||||
if (forRender && cu->resolu_ren != 0)
|
||||
resolu = cu->resolu_ren;
|
||||
else
|
||||
|
||||
@@ -1279,8 +1279,24 @@ void CU_deselect_all(Object *obedit)
|
||||
ListBase *editnurb = object_editcurve_get(obedit);
|
||||
|
||||
if (editnurb) {
|
||||
selectend_nurb(obedit, FIRST, 0, DESELECT); /* set first control points as unselected */
|
||||
select_adjacent_cp(editnurb, 1, 1, DESELECT); /* cascade selection */
|
||||
Nurb *nu;
|
||||
int a;
|
||||
for (nu = editnurb->first; nu; nu = nu->next) {
|
||||
if (nu->bezt) {
|
||||
BezTriple *bezt;
|
||||
for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
|
||||
bezt->f1 &= ~SELECT;
|
||||
bezt->f2 &= ~SELECT;
|
||||
bezt->f3 &= ~SELECT;
|
||||
}
|
||||
}
|
||||
else if (nu->bp) {
|
||||
BPoint *bp;
|
||||
for (bp = nu->bp, a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
|
||||
bp->f1 & ~SELECT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1289,8 +1305,27 @@ void CU_select_all(Object *obedit)
|
||||
ListBase *editnurb = object_editcurve_get(obedit);
|
||||
|
||||
if (editnurb) {
|
||||
selectend_nurb(obedit, FIRST, 0, SELECT); /* set first control points as unselected */
|
||||
select_adjacent_cp(editnurb, 1, 1, SELECT); /* cascade selection */
|
||||
Nurb *nu;
|
||||
int a;
|
||||
for (nu = editnurb->first; nu; nu = nu->next) {
|
||||
if (nu->bezt) {
|
||||
BezTriple *bezt;
|
||||
for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
|
||||
if (bezt->hide == 0) {
|
||||
bezt->f1 |= SELECT;
|
||||
bezt->f2 |= SELECT;
|
||||
bezt->f3 |= SELECT;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (nu->bp) {
|
||||
BPoint *bp;
|
||||
for (bp = nu->bp, a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
|
||||
if (bp->hide == 0)
|
||||
bp->f1 |= SELECT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4911,7 +4911,7 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
|
||||
|
||||
/*place to add drawers */
|
||||
|
||||
static void tekenhandlesN(Nurb *nu, short sel, short hide_handles)
|
||||
static void drawhandlesN(Nurb *nu, short sel, short hide_handles)
|
||||
{
|
||||
BezTriple *bezt;
|
||||
float *fp;
|
||||
@@ -4971,7 +4971,7 @@ static void tekenhandlesN(Nurb *nu, short sel, short hide_handles)
|
||||
glEnd();
|
||||
}
|
||||
|
||||
static void tekenhandlesN_active(Nurb *nu)
|
||||
static void drawhandlesN_active(Nurb *nu)
|
||||
{
|
||||
BezTriple *bezt;
|
||||
float *fp;
|
||||
@@ -5006,7 +5006,7 @@ static void tekenhandlesN_active(Nurb *nu)
|
||||
glLineWidth(1);
|
||||
}
|
||||
|
||||
static void tekenvertsN(Nurb *nu, short sel, short hide_handles, void *lastsel)
|
||||
static void drawvertsN(Nurb *nu, short sel, short hide_handles, void *lastsel)
|
||||
{
|
||||
BezTriple *bezt;
|
||||
BPoint *bp;
|
||||
@@ -5286,8 +5286,8 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
|
||||
for (nu = nurb; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER) {
|
||||
if (index == cu->actnu && !hide_handles)
|
||||
tekenhandlesN_active(nu);
|
||||
tekenhandlesN(nu, 0, hide_handles);
|
||||
drawhandlesN_active(nu);
|
||||
drawhandlesN(nu, 0, hide_handles);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
@@ -5296,8 +5296,8 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
|
||||
/* selected handles */
|
||||
for (nu = nurb; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER && (cu->drawflag & CU_HIDE_HANDLES) == 0)
|
||||
tekenhandlesN(nu, 1, hide_handles);
|
||||
tekenvertsN(nu, 0, hide_handles, NULL);
|
||||
drawhandlesN(nu, 1, hide_handles);
|
||||
drawvertsN(nu, 0, hide_handles, NULL);
|
||||
}
|
||||
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
@@ -5348,7 +5348,7 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
|
||||
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
|
||||
|
||||
for (nu = nurb; nu; nu = nu->next) {
|
||||
tekenvertsN(nu, 1, hide_handles, cu->lastsel);
|
||||
drawvertsN(nu, 1, hide_handles, cu->lastsel);
|
||||
}
|
||||
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
|
||||
Reference in New Issue
Block a user