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

@@@ -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);
@@@ -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);
@@@ -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
@@@ -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
                                ...
                        ...
        */
@@@ -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. */