[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32050] trunk/blender/source/blender/ blenkernel/intern: Fix #23925: converting text into a curve looses materials

Sergey Sharybin g.ulairi at gmail.com
Wed Sep 22 07:08:53 CEST 2010


Revision: 32050
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32050
Author:   nazgul
Date:     2010-09-22 07:08:52 +0200 (Wed, 22 Sep 2010)

Log Message:
-----------
Fix #23925: converting text into a curve looses materials

filldisplist worked incorrect with polys when charidx matched but col doesn't
Also fixed material loose when converting text/curve to mesh

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2010-09-22 02:47:08 UTC (rev 32049)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2010-09-22 05:08:52 UTC (rev 32050)
@@ -930,7 +930,7 @@
 	EditFace *efa;
 	DispList *dlnew=0, *dl;
 	float *f1;
-	int colnr=0, charidx=0, cont=1, tot, a, *index;
+	int colnr=0, charidx=0, cont=1, tot, a, *index, nextcol= 0;
 	intptr_t totvert;
 	
 	if(dispbase==0) return;
@@ -938,39 +938,42 @@
 
 	while(cont) {
 		cont= 0;
-		totvert=0;
+		totvert= 0;
+		nextcol= 0;
 		
 		dl= dispbase->first;
 		while(dl) {
 	
 			if(dl->type==DL_POLY) {
 				if(charidx<dl->charidx) cont= 1;
-				else if(charidx==dl->charidx) {
-			
-					colnr= dl->col;
-					charidx= dl->charidx;
-		
-					/* make editverts and edges */
-					f1= dl->verts;
-					a= dl->nr;
-					eve= v1= 0;
-					
-					while(a--) {
-						vlast= eve;
+				else if(charidx==dl->charidx) { /* character with needed index */
+					if(colnr==dl->col) {
+						/* make editverts and edges */
+						f1= dl->verts;
+						a= dl->nr;
+						eve= v1= 0;
 						
-						eve= BLI_addfillvert(f1);
-						totvert++;
-						
-						if(vlast==0) v1= eve;
-						else {
-							BLI_addfilledge(vlast, eve);
+						while(a--) {
+							vlast= eve;
+
+							eve= BLI_addfillvert(f1);
+							totvert++;
+
+							if(vlast==0) v1= eve;
+							else {
+								BLI_addfilledge(vlast, eve);
+							}
+							f1+=3;
 						}
-						f1+=3;
+
+						if(eve!=0 && v1!=0) {
+							BLI_addfilledge(eve, v1);
+						}
+					} else if (colnr<dl->col) {
+						/* got poly with next material at current char */
+						cont= 1;
+						nextcol= 1;
 					}
-				
-					if(eve!=0 && v1!=0) {
-						BLI_addfilledge(eve, v1);
-					}
 				}
 			}
 			dl= dl->next;
@@ -1032,7 +1035,14 @@
 		}
 		BLI_end_edgefill();
 
-		charidx++;
+		if(nextcol) {
+			/* stay at current char but fill polys with next material */
+			colnr++;
+		} else {
+			/* switch to next char and start filling from first material */
+			charidx++;
+			colnr= 0;
+		}
 	}
 	
 	/* do not free polys, needed for wireframe display */

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2010-09-22 02:47:08 UTC (rev 32049)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2010-09-22 05:08:52 UTC (rev 32050)
@@ -854,6 +854,7 @@
 				mface->v2= startvert+index[2];
 				mface->v3= startvert+index[1];
 				mface->v4= 0;
+				mface->mat_nr= (unsigned char)dl->col;
 				test_index_face(mface, NULL, 0, 3);
 
 				if(smooth) mface->flag |= ME_SMOOTH;





More information about the Bf-blender-cvs mailing list