Revision: 16916
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16916
Author:   ton
Date:     2008-10-04 14:31:54 +0200 (Sat, 04 Oct 2008)

Log Message:
-----------
Bugfix #17746

Curve deform did not work yet on Text and Curve objects, this because it
was not providing the entire array of vertices, for a proper detection of
min/max bounds of the full input.

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

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c   2008-10-04 
12:23:57 UTC (rev 16915)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c   2008-10-04 
12:31:54 UTC (rev 16916)
@@ -1253,14 +1253,41 @@
 
        for (; md; md=md->next) {
                ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
+               
                if ((md->mode & required_mode) != required_mode) continue;
                if (mti->isDisabled && mti->isDisabled(md)) continue;
                if (mti->type!=eModifierTypeType_OnlyDeform && 
mti->type!=eModifierTypeType_DeformOrConstruct) continue;
 
-               for (dl=dispbase->first; dl; dl=dl->next) {
-                       mti->deformVerts(md, ob, NULL, (float(*)[3]) dl->verts, 
(dl->type==DL_INDEX3)?dl->nr:dl->parts*dl->nr);
+               /* need to put all verts in 1 block for curve deform */
+               if(md->type==eModifierType_Curve) {
+                       float *allverts, *fp;
+                       int totvert= 0;
+                       
+                       for (dl=dispbase->first; dl; dl=dl->next)
+                               totvert+= 
(dl->type==DL_INDEX3)?dl->nr:dl->parts*dl->nr;
+                       
+                       fp= allverts= MEM_mallocN(totvert*sizeof(float)*3, 
"temp vert");
+                       for (dl=dispbase->first; dl; dl=dl->next) {
+                               int offs= 3 * 
((dl->type==DL_INDEX3)?dl->nr:dl->parts*dl->nr);
+                               memcpy(fp, dl->verts, sizeof(float) * offs);
+                               fp+= offs;
+                       }
+                       
+                       mti->deformVerts(md, ob, NULL, (float(*)[3]) allverts, 
totvert);
+                       
+                       fp= allverts;
+                       for (dl=dispbase->first; dl; dl=dl->next) {
+                               int offs= 3 * 
((dl->type==DL_INDEX3)?dl->nr:dl->parts*dl->nr);
+                               memcpy(dl->verts, fp, sizeof(float) * offs);
+                               fp+= offs;
+                       }
+                       MEM_freeN(allverts);
                }
+               else {
+                       for (dl=dispbase->first; dl; dl=dl->next) {
+                               mti->deformVerts(md, ob, NULL, (float(*)[3]) 
dl->verts, (dl->type==DL_INDEX3)?dl->nr:dl->parts*dl->nr);
+                       }
+               }
        }
 
        if (deformedVerts) {


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to