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