Fix for recent bevel cap option
"Holes" used to be ignored (i.e. when using "Text" as bevel object "e" wouldn't have a "hole"). Resolved by collecting all polys needed for top and bottom cap and filling them at once
This commit is contained in:
@@ -1209,9 +1209,8 @@ static void rotateBevelPiece(Curve *cu, BevPoint *bevp, DispList *dlb, float wid
|
|||||||
*data_r = data;
|
*data_r = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fillBevelCap(Curve *cu, Nurb *nu, BevPoint *bevp, DispList *dlb, float fac, float widfac, int flipnormal, ListBase *dispbase)
|
static void fillBevelCap(Curve *cu, Nurb *nu, BevPoint *bevp, DispList *dlb, float fac, float widfac, ListBase *dispbase)
|
||||||
{
|
{
|
||||||
ListBase tmpdisp = {NULL, NULL};
|
|
||||||
DispList *dl;
|
DispList *dl;
|
||||||
float *data;
|
float *data;
|
||||||
|
|
||||||
@@ -1231,9 +1230,7 @@ static void fillBevelCap(Curve *cu, Nurb *nu, BevPoint *bevp, DispList *dlb, flo
|
|||||||
|
|
||||||
rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data);
|
rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data);
|
||||||
|
|
||||||
BLI_addtail(&tmpdisp, dl);
|
BLI_addtail(dispbase, dl);
|
||||||
filldisplist(&tmpdisp, dispbase, flipnormal);
|
|
||||||
freedisplist(&tmpdisp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispbase,
|
static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispbase,
|
||||||
@@ -1319,10 +1316,10 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DispList *dlb;
|
DispList *dlb;
|
||||||
|
ListBase bottom_capbase = {NULL, NULL};
|
||||||
|
ListBase top_capbase = {NULL, NULL};
|
||||||
|
|
||||||
for (dlb=dlbev.first; dlb; dlb=dlb->next) {
|
for (dlb=dlbev.first; dlb; dlb=dlb->next) {
|
||||||
ListBase capbase = {NULL, NULL};
|
|
||||||
|
|
||||||
/* for each part of the bevel use a separate displblock */
|
/* for each part of the bevel use a separate displblock */
|
||||||
dl= MEM_callocN(sizeof(DispList), "makeDispListbev1");
|
dl= MEM_callocN(sizeof(DispList), "makeDispListbev1");
|
||||||
dl->verts= data= MEM_callocN(3*sizeof(float)*dlb->nr*bl->nr, "dlverts");
|
dl->verts= data= MEM_callocN(3*sizeof(float)*dlb->nr*bl->nr, "dlverts");
|
||||||
@@ -1364,15 +1361,22 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data);
|
rotateBevelPiece(cu, bevp, dlb, widfac, fac, &data);
|
||||||
|
|
||||||
if (cu->flag & CU_FILL_CAPS) {
|
if (cu->flag & CU_FILL_CAPS) {
|
||||||
if (a == 0 || a == bl->nr - 1)
|
if (a == 0)
|
||||||
fillBevelCap(cu, nu, bevp, dlb, fac, widfac, a == 0, &capbase);
|
fillBevelCap(cu, nu, bevp, dlb, fac, widfac, &bottom_capbase);
|
||||||
|
else if (a == bl->nr - 1)
|
||||||
|
fillBevelCap(cu, nu, bevp, dlb, fac, widfac, &top_capbase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gl array drawing: using indices */
|
/* gl array drawing: using indices */
|
||||||
displist_surf_indices(dl);
|
displist_surf_indices(dl);
|
||||||
|
}
|
||||||
|
|
||||||
BLI_movelisttolist(dispbase, &capbase);
|
if(bottom_capbase.first) {
|
||||||
|
filldisplist(&bottom_capbase, dispbase, 1);
|
||||||
|
filldisplist(&top_capbase, dispbase, 0);
|
||||||
|
freedisplist(&bottom_capbase);
|
||||||
|
freedisplist(&top_capbase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user