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