Revision: 23120
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23120
Author:   campbellbarton
Date:     2009-09-11 05:00:09 +0200 (Fri, 11 Sep 2009)

Log Message:
-----------
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r23043:23119

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_key.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/colortools.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/key.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/lattice.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/particle.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/texture.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_curve_types.h
    branches/blender2.5/blender/source/blender/render/intern/source/strand.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h   
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h   
2009-09-11 03:00:09 UTC (rev 23120)
@@ -72,7 +72,7 @@
 void makeknots( struct Nurb *nu, short uv);
 
 void makeNurbfaces(struct Nurb *nu, float *coord_array, int rowstride);
-void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, 
float *radius_array, int resolu);
+void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, 
float *radius_array, int resolu, int stride);
 void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int 
it, int stride);
 float *make_orco_curve(struct Scene *scene, struct Object *ob);
 float *make_orco_surf( struct Object *ob);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_key.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_key.h     
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_key.h     
2009-09-11 03:00:09 UTC (rev 23120)
@@ -52,8 +52,9 @@
 void make_local_key(struct Key *key);
 void sort_keys(struct Key *key);
 
-void set_four_ipo(float d, float *data, int type);
-void set_afgeleide_four_ipo(float d, float *data, int type);
+void key_curve_position_weights(float t, float *data, int type);
+void key_curve_tangent_weights(float t, float *data, int type);
+void key_curve_normal_weights(float t, float *data, int type);
 
 /* only exported to curve.c! */
 void cp_cu_key(struct Curve *cu, struct KeyBlock *kb, int start, int end);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c 
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c 
2009-09-11 03:00:09 UTC (rev 23120)
@@ -91,7 +91,7 @@
        Curve *cu;
        Nurb *nu;
        Path *path;
-       float *fp, *dist, *maxdist, x, y, z;
+       float *fp, *dist, *maxdist, xyz[3];
        float fac, d=0, fac1, fac2;
        int a, tot, cycl=0;
        float *ft;
@@ -132,19 +132,12 @@
        *fp= 0;
        for(a=0; a<tot; a++) {
                fp++;
-               if(cycl && a==tot-1) {
-                       x= bevpfirst->x - bevp->x;
-                       y= bevpfirst->y - bevp->y;
-                       z= bevpfirst->z - bevp->z;
-               }
-               else {
-                        tempbevp = bevp+1;
-                       x= (tempbevp)->x - bevp->x;
-                       y= (tempbevp)->y - bevp->y;
-                       z= (tempbevp)->z - bevp->z;
-               }
-               *fp= *(fp-1)+ (float)sqrt(x*x+y*y+z*z);
+               if(cycl && a==tot-1)
+                       VecSubf(xyz, bevpfirst->vec, bevp->vec);
+               else
+                       VecSubf(xyz, (bevp+1)->vec, bevp->vec);
                
+               *fp= *(fp-1)+VecLength(xyz);
                bevp++;
        }
        
@@ -182,13 +175,10 @@
                fac1= fac2/fac1;
                fac2= 1.0f-fac1;
 
-               ft[0]= fac1*bevp->x+ fac2*(bevpn)->x;
-               ft[1]= fac1*bevp->y+ fac2*(bevpn)->y;
-               ft[2]= fac1*bevp->z+ fac2*(bevpn)->z;
+               VecLerpf(ft, bevp->vec, bevpn->vec, fac2);
                ft[3]= fac1*bevp->alfa+ fac2*(bevpn)->alfa;
                
                ft+= 4;
-
        }
        
        MEM_freeN(dist);
@@ -256,7 +246,7 @@
        /* note, commented out for follow constraint */
        //if(cu->flag & CU_FOLLOW) {
                
-               set_afgeleide_four_ipo(1.0f-fac, data, KEY_BSPLINE);
+               key_curve_tangent_weights(1.0f-fac, data, KEY_BSPLINE);
                
                dir[0]= data[0]*p0[0] + data[1]*p1[0] + data[2]*p2[0] + 
data[3]*p3[0] ;
                dir[1]= data[0]*p0[1] + data[1]*p1[1] + data[2]*p2[1] + 
data[3]*p3[1] ;
@@ -271,10 +261,10 @@
        nu= cu->nurb.first;
 
        /* make sure that first and last frame are included in the vectors here 
 */
-       if(nu->type == CU_POLY) set_four_ipo(1.0f-fac, data, KEY_LINEAR);
-       else if(nu->type == CU_BEZIER) set_four_ipo(1.0f-fac, data, KEY_LINEAR);
-       else if(s0==s1 || p2==p3) set_four_ipo(1.0f-fac, data, KEY_CARDINAL);
-       else set_four_ipo(1.0f-fac, data, KEY_BSPLINE);
+       if(nu->type == CU_POLY) key_curve_position_weights(1.0f-fac, data, 
KEY_LINEAR);
+       else if(nu->type == CU_BEZIER) key_curve_position_weights(1.0f-fac, 
data, KEY_LINEAR);
+       else if(s0==s1 || p2==p3) key_curve_position_weights(1.0f-fac, data, 
KEY_CARDINAL);
+       else key_curve_position_weights(1.0f-fac, data, KEY_BSPLINE);
 
        vec[0]= data[0]*p0[0] + data[1]*p1[0] + data[2]*p2[0] + data[3]*p3[0] ;
        vec[1]= data[0]*p0[1] + data[1]*p1[1] + data[2]*p2[1] + data[3]*p3[1] ;

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c     
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/armature.c     
2009-09-11 03:00:09 UTC (rev 23120)
@@ -666,10 +666,10 @@
        if(bone->segments > MAX_BBONE_SUBDIV)
                bone->segments= MAX_BBONE_SUBDIV;
        
-       forward_diff_bezier(0.0, h1[0],         h2[0],                  0.0,    
        data[0],        MAX_BBONE_SUBDIV, 4);
-       forward_diff_bezier(0.0, h1[1],         length + h2[1], length,         
data[0]+1,      MAX_BBONE_SUBDIV, 4);
-       forward_diff_bezier(0.0, h1[2],         h2[2],                  0.0,    
        data[0]+2,      MAX_BBONE_SUBDIV, 4);
-       forward_diff_bezier(roll1, roll1 + 0.390464f*(roll2-roll1), roll2 - 
0.390464f*(roll2-roll1),    roll2,  data[0]+3,      MAX_BBONE_SUBDIV, 4);
+       forward_diff_bezier(0.0, h1[0],         h2[0],                  0.0,    
        data[0],        MAX_BBONE_SUBDIV, 4*sizeof(float));
+       forward_diff_bezier(0.0, h1[1],         length + h2[1], length,         
data[0]+1,      MAX_BBONE_SUBDIV, 4*sizeof(float));
+       forward_diff_bezier(0.0, h1[2],         h2[2],                  0.0,    
        data[0]+2,      MAX_BBONE_SUBDIV, 4*sizeof(float));
+       forward_diff_bezier(roll1, roll1 + 0.390464f*(roll2-roll1), roll2 - 
0.390464f*(roll2-roll1),    roll2,  data[0]+3,      MAX_BBONE_SUBDIV, 
4*sizeof(float));
        
        equalize_bezier(data[0], bone->segments);       // note: does stride 4!
        

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/colortools.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/colortools.c   
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/colortools.c   
2009-09-11 03:00:09 UTC (rev 23120)
@@ -502,8 +502,8 @@
        
        for(a=0; a<cuma->totpoint-1; a++, fp += 2*CM_RESOL) {
                correct_bezpart(bezt[a].vec[1], bezt[a].vec[2], 
bezt[a+1].vec[0], bezt[a+1].vec[1]);
-               forward_diff_bezier(bezt[a].vec[1][0], bezt[a].vec[2][0], 
bezt[a+1].vec[0][0], bezt[a+1].vec[1][0], fp, CM_RESOL-1, 2); 
-               forward_diff_bezier(bezt[a].vec[1][1], bezt[a].vec[2][1], 
bezt[a+1].vec[0][1], bezt[a+1].vec[1][1], fp+1, CM_RESOL-1, 2);
+               forward_diff_bezier(bezt[a].vec[1][0], bezt[a].vec[2][0], 
bezt[a+1].vec[0][0], bezt[a+1].vec[1][0], fp, CM_RESOL-1, 2*sizeof(float));   
+               forward_diff_bezier(bezt[a].vec[1][1], bezt[a].vec[2][1], 
bezt[a+1].vec[0][1], bezt[a+1].vec[1][1], fp+1, CM_RESOL-1, 2*sizeof(float));
        }
        
        /* store first and last handle for extrapolation, unit length */

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c        
2009-09-11 00:49:54 UTC (rev 23119)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c        
2009-09-11 03:00:09 UTC (rev 23120)
@@ -65,7 +65,6 @@
 #include "BKE_object.h"  
 #include "BKE_utildefines.h"  // VECCOPY
 
-
 /* globals */
 
 /* local */
@@ -853,7 +852,7 @@
        MEM_freeN(jend);
 }
 
-void makeNurbcurve(Nurb *nu, float *coord_array, float *tilt_array, float 
*radius_array, int resolu)
+void makeNurbcurve(Nurb *nu, float *coord_array, float *tilt_array, float 
*radius_array, int resolu, int stride)
 /* coord_array has to be 3*4*pntsu*resolu in size and zero-ed
  * tilt_array and radius_array will be written to if valid */
 {
@@ -937,10 +936,10 @@
                        }
                }
 
-               coord_fp+= 3;
+               coord_fp = (float *)(((char *)coord_fp) + stride);
                
-               if (tilt_fp) tilt_fp++;
-               if (radius_fp) radius_fp++;
+               if (tilt_fp)    tilt_fp = (float *)(((char *)tilt_fp) + stride);
+               if (radius_fp)  radius_fp = (float *)(((char *)radius_fp) + 
stride);
                
                u+= ustep;
        }
@@ -971,7 +970,7 @@
   
        for(a=0; a<=it; a++) {
                *p= q0;
-               p+= stride;
+               p = (float *)(((char *)p)+stride);
                q0+= q1;
                q1+= q2;
                q2+= q3;
@@ -1390,8 +1389,8 @@
        /* take first vertex of possible hole */
 
        bevp= (BevPoint *)(bl2+1);
-       hvec1[0]= bevp->x; 
-       hvec1[1]= bevp->y; 
+       hvec1[0]= bevp->vec[0]; 
+       hvec1[1]= bevp->vec[1]; 
        hvec1[2]= 0.0;
        VECCOPY(hvec2,hvec1);
        hvec2[0]+=1000;
@@ -1404,16 +1403,16 @@
        prevbevp= bevp+(nr-1);
 
        while(nr--) {
-               min= prevbevp->y;
-               max= bevp->y;
+               min= prevbevp->vec[0];
+               max= bevp->vec[1];
                if(max<min) {
                        min= max;
-                       max= prevbevp->y;
+                       max= prevbevp->vec[1];
                }
                if(min!=max) {
                        if(min<=hvec1[1] && max>=hvec1[1]) {
                                /* there's a transition, calc intersection 
point */
-                               mode= 
cu_isectLL(&(prevbevp->x),&(bevp->x),hvec1,hvec2,0,1,&lab,&mu,vec);
+                               mode= cu_isectLL(prevbevp->vec, bevp->vec, 
hvec1, hvec2, 0, 1, &lab, &mu, vec);
                                /* if lab==0.0 or lab==1.0 then the edge 
intersects exactly a transition
                                   only allow for one situation: we choose lab= 
1.0
                                 */
@@ -1486,12 +1485,15 @@
 
 }
 
-static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float 
*tilt_array, float *radius_array, int resolu)
+static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float 
*tilt_array, float *radius_array, int resolu, int stride)
 {
        BezTriple *pprev, *next, *last;
        float fac, dfac, t[4];
        int a;
        
+       if(tilt_array==NULL && radius_array==NULL)
+               return;
+       
        last= nu->bezt+(nu->pntsu-1);
        
        /* returns a point */
@@ -1514,11 +1516,13 @@
        for(a=0; a<resolu; a++, fac+= dfac) {
                if (tilt_array) {
                        if (nu->tilt_interp==3) { /* May as well support for 
tilt also 2.47 ease interp */
-                               tilt_array[a] = prevbezt->alfa + (bezt->alfa - 
prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
+                               *tilt_array = prevbezt->alfa + (bezt->alfa - 
prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
                        } else {
-                               set_four_ipo(fac, t, nu->tilt_interp);
-                               tilt_array[a]= t[0]*pprev->alfa + 
t[1]*prevbezt->alfa + t[2]*bezt->alfa + t[3]*next->alfa;
+                               key_curve_position_weights(fac, t, 
nu->tilt_interp);
+                               *tilt_array= t[0]*pprev->alfa + 
t[1]*prevbezt->alfa + t[2]*bezt->alfa + t[3]*next->alfa;
                        }
+                       

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to