svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r23023:HEAD
authorCampbell Barton <ideasman42@gmail.com>
Mon, 7 Sep 2009 08:37:28 +0000 (08:37 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 7 Sep 2009 08:37:28 +0000 (08:37 +0000)
1  2 
source/blender/blenkernel/intern/curve.c
source/blender/blenlib/BLI_arithb.h
source/blender/blenlib/intern/arithb.c
source/blender/imbuf/intern/anim5.c
source/blender/makesdna/DNA_curve_types.h

index 228523aa661c554201b30d07230d07cb76f911ee,709507a9b26c75f66ca59fed09d0e44a323feca6..ca0d4a5fdc3e1a42a831c56e6904b187188dfedd
@@@ -1820,14 -1783,14 +1820,14 @@@ void makeBevelList(Object *ob
                bl= blnext;
        }
  
--      /* STEP 3: COUNT POLYS TELLEN AND AUTOHOLE */
++      /* STEP 3: POLYS COUNT AND AUTOHOLE */
        bl= cu->bev.first;
        poly= 0;
        while(bl) {
                if(bl->nr && bl->poly>=0) {
                        poly++;
                        bl->poly= poly;
--                      bl->gat= 0;     /* 'gat' is dutch for hole */
++                      bl->hole= 0;
                }
                bl= bl->next;
        }
                        sd1= sortdata+ (a-1);
                        for(b=a-1; b>=0; b--, sd1--) {  /* all polys to the left */
                                if(bevelinside(sd1->bl, bl)) {
--                                      bl->gat= 1- sd1->bl->gat;
++                                      bl->hole= 1- sd1->bl->hole;
                                        break;
                                }
                        }
                if((cu->flag & CU_3D)==0) {
                        sd= sortdata;
                        for(a=0; a<poly; a++, sd++) {
--                              if(sd->bl->gat==sd->dir) {
++                              if(sd->bl->hole==sd->dir) {
                                        bl= sd->bl;
                                        bevp1= (BevPoint *)(bl+1);
                                        bevp2= bevp1+ (bl->nr-1);
                }       /* this has to be >2 points */
                else if(cu->flag & CU_NO_TWIST && cu->flag & CU_3D && bl->poly != -1) {
  
--                      /* Special case, cyclic curve with no twisy. tricky... */
++                      /* Special case, cyclic curve with no twist. tricky... */
  
                        float quat[4], q[4], cross[3];
  
                                while(nr--) {
        
                                        /* Normalizes */
--                                      Vec3ToTangent(vec, &bevp0->x, &bevp1->x, &bevp2->x);
++                                      VecBisect3(vec, &bevp0->x, &bevp1->x, &bevp2->x);
  
                                        if(bl->nr==nr+1) { /* first time */
                                                vectoquat(vec, 5, 1, quat);
                        nr= bl->nr;
                        while(nr--) {
  
--                              Vec3ToTangent(vec, &bevp0->x, &bevp1->x, &bevp2->x);
++                              VecBisect3(vec, &bevp0->x, &bevp1->x, &bevp2->x);
  
                                quat_tmp1= (float *)bevp1->mat;
                                quat_tmp2= quat_tmp1+4;
                                if(cu->flag & CU_3D) {  /* 3D */
  
                                        /* Normalizes */
--                                      Vec3ToTangent(vec, &bevp0->x, &bevp1->x, &bevp2->x);
++                                      VecBisect3(vec, &bevp0->x, &bevp1->x, &bevp2->x);
  
                                        if(bl->nr==nr+1 || !(cu->flag & CU_NO_TWIST)) { /* first time */
                                                vectoquat(vec, 5, 1, quat);
                                        }
                                        QUATCOPY(quat_prev, quat); /* quat_prev can't have the tilt applied */
                                        VECCOPY(vec_prev, vec);
--
++                                      
                                        AxisAngleToQuat(q, vec, bevp1->alfa);
                                        QuatMul(quat, q, quat);
                                        QuatToMat3(quat, bevp1->mat);
index 2ce4e8e268c05532aea2208f3969e88933c12a8b,63b351016d49713dbe2c5e84fa9be36bd727f9a1..6deb6edf9fb6d42245384cf307fcd57638360a16
@@@ -380,7 -270,7 +380,8 @@@ void AxisAngleToQuat(float *q, float *a
  void RotationBetweenVectorsToQuat(float *q, float v1[3], float v2[3]);
  void vectoquat(float *vec, short axis, short upflag, float *q);
  
--void Vec3ToTangent(float *v, float *v1, float *v2, float *v3);
++void VecReflect(float *out, float *v1, float *v2);
++void VecBisect3(float *v, float *v1, float *v2, float *v3);
  float VecAngle2(float *v1, float *v2);
  float VecAngle3(float *v1, float *v2, float *v3);
  float NormalizedVecAngle2(float *v1, float *v2);
index 55bdc32c4e90198b166da38d54d1390a6dd9b038,970d8f7d0de111edb78fde0b5dcdc06ff9347c5c..96056ba77830a648cdc6f4d3554bdaddffbe8378
@@@ -3374,17 -2969,17 +3374,39 @@@ void VecRotToQuat(float *vec, float phi
        }
  }
  
--/* get a direction from 3 vectors that wont depend
-- * on the distance between the points */
--void Vec3ToTangent(float *v, float *v1, float *v2, float *v3)
++/* Returns a vector bisecting the angle at v2 formed by v1, v2 and v3 */
++void VecBisect3(float *out, float *v1, float *v2, float *v3)
  {
        float d_12[3], d_23[3];
        VecSubf(d_12, v2, v1);
        VecSubf(d_23, v3, v2);
        Normalize(d_12);
        Normalize(d_23);
--      VecAddf(v, d_12, d_23);
--      Normalize(v);
++      VecAddf(out, d_12, d_23);
++      Normalize(out);
++}
++
++/* Returns a reflection vector from a vector and a normal vector
++reflect = vec - ((2 * DotVecs(vec, mirror)) * mirror)
++*/
++void VecReflect(float *out, float *v1, float *v2)
++{
++      float vec[3], normal[3];
++      float reflect[3] = {0.0f, 0.0f, 0.0f};
++      float dot2;
++
++      VecCopyf(vec, v1);
++      VecCopyf(normal, v2);
++
++      Normalize(normal);
++
++      dot2 = 2 * Inpf(vec, normal);
++
++      reflect[0] = vec[0] - (dot2 * normal[0]);
++      reflect[1] = vec[1] - (dot2 * normal[1]);
++      reflect[2] = vec[2] - (dot2 * normal[2]);
++
++      VecCopyf(out, reflect);
  }
  
  /* Return the angle in degrees between vecs 1-2 and 2-3 in degrees
index 4fe4217cd2ccc03508cc2e12af29bc7c69faf38d,b6f29b6a1457e813df68e48c99b7e0b58c92a391..43a6b0d2c5df977b8b0220a05acef673968311d4
@@@ -210,12 -204,12 +210,12 @@@ static void anim5decode(struct ImBuf * 
        int *ofspoint;
        uchar **planes;
  
--      /*      samenstelling delta:
--              lijst met ofsets voor delta's per bitplane (ofspoint)
--              per kolom in delta (point)
--                      aantal handelingen (noops)
++      /*      composition delta:
++              list with ofsets for delta' s by bitplane (ofspoint)
++              by column in delta (point)
++                      number of operations (noops)
                                code
--                                      bijbehorende data
++                                      associated data
                                ...
                        ...
        */
index 3655c57558a61d41a6806d89b7af85549cd791dc,88c03a41160073fac27c151ebfe3bddd817c9e20..0466ea148fd32482ba59e1ce95bc07ea37c62d2b
@@@ -64,7 -61,7 +64,7 @@@ typedef struct Path 
  typedef struct BevList {
        struct BevList *next, *prev;
        int nr, flag;
--      short poly, gat;
++      short poly, hole;
  } BevList;
  
  /* These two Lines with # tell makesdna this struct can be excluded. */