[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