merge with/from trunk at r35190
[blender.git] / source / blender / editors / armature / meshlaplacian.c
index f193defc129bc35f1d92b381d038cb20300286da..d06464c486b2128a00676bfb8d6704bfb340a376 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
 #include "BLI_math.h"
 #include "BLI_edgehash.h"
 #include "BLI_memarena.h"
+#include "BLI_utildefines.h"
 
 #include "BKE_DerivedMesh.h"
 #include "BKE_modifier.h"
-#include "BKE_utildefines.h"
+
 
 #ifdef RIGID_DEFORM
 #include "BLI_editVert.h"
@@ -56,6 +57,7 @@
 #include "BLO_sys_types.h" // for intptr_t support
 
 #include "ED_mesh.h"
+#include "ED_armature.h"
 
 #include "meshlaplacian.h"
 
@@ -63,9 +65,9 @@
 /* ************* XXX *************** */
 static void waitcursor(int UNUSED(val)) {}
 static void progress_bar(int UNUSED(dummy_val), const char *UNUSED(dummy)) {}
-static void start_progress_bar() {}
-static void end_progress_bar() {}
-static void error(char *str) { printf("error: %s\n", str); }
+static void start_progress_bar(void) {}
+static void end_progress_bar(void) {}
+static void error(const char *str) { printf("error: %s\n", str); }
 /* ************* XXX *************** */
 
 
@@ -236,7 +238,7 @@ static void laplacian_triangle_weights(LaplacianSystem *sys, int f, int i1, int
        }
 }
 
-LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface, int lsq)
+static LaplacianSystem *laplacian_system_construct_begin(int totvert, int totface, int lsq)
 {
        LaplacianSystem *sys;
 
@@ -278,7 +280,7 @@ void laplacian_add_triangle(LaplacianSystem *sys, int v1, int v2, int v3)
        sys->totface++;
 }
 
-void laplacian_system_construct_end(LaplacianSystem *sys)
+static void laplacian_system_construct_end(LaplacianSystem *sys)
 {
        int (*face)[3];
        int a, totvert=sys->totvert, totface=sys->totface;
@@ -329,7 +331,7 @@ void laplacian_system_construct_end(LaplacianSystem *sys)
        sys->edgehash= NULL;
 }
 
-void laplacian_system_delete(LaplacianSystem *sys)
+static void laplacian_system_delete(LaplacianSystem *sys)
 {
        if(sys->verts) MEM_freeN(sys->verts);
        if(sys->varea) MEM_freeN(sys->varea);
@@ -564,7 +566,7 @@ static void heat_set_H(LaplacianSystem *sys, int vertex)
        sys->heat.H[vertex]= h;
 }
 
-void heat_calc_vnormals(LaplacianSystem *sys)
+static void heat_calc_vnormals(LaplacianSystem *sys)
 {
        float fnor[3];
        int a, v1, v2, v3, (*face)[3];
@@ -648,8 +650,8 @@ void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numsource,
        MFace *mface;
        float solution, weight;
        int *vertsflipped = NULL, *mask= NULL;
-       int a, totface, j, bbone, firstsegment, lastsegment, thrownerror = 0;
-       
+       int a, totface, j, bbone, firstsegment, lastsegment;
+
        *err_str= NULL;
 
        /* count triangles and create mask */
@@ -685,12 +687,16 @@ void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numsource,
 
        laplacian_system_construct_end(sys);
 
+#if 0 /*BMESH_TODO*/
        if(dgroupflip) {
                vertsflipped = MEM_callocN(sizeof(int)*me->totvert, "vertsflipped");
                for(a=0; a<me->totvert; a++)
                        vertsflipped[a] = mesh_get_x_mirror_vert(ob, a);
        }
-
+#else
+       dgroupflip = 0;
+#endif
+       
        /* compute weights per bone */
        for(j=0; j<numsource; j++) {
                if(!selected[j])
@@ -761,9 +767,8 @@ void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numsource,
                                }
                        }
                }
-               else if(!thrownerror) {
+               else if(*err_str == NULL) {
                        *err_str= "Bone Heat Weighting: failed to find solution for one or more bones";
-                       thrownerror= 1;
                        break;
                }
 
@@ -1164,8 +1169,8 @@ static int meshdeform_intersect(MeshDeformBind *mdb, MeshDeformIsect *isec)
 
        isec->labda= 1e10;
 
-       mface= mdb->cagedm->getFaceArray(mdb->cagedm);
-       totface= mdb->cagedm->getNumFaces(mdb->cagedm);
+       mface= mdb->cagedm->getTessFaceArray(mdb->cagedm);
+       totface= mdb->cagedm->getNumTessFaces(mdb->cagedm);
 
        add_v3_v3v3(end, isec->start, isec->vec);
 
@@ -1264,11 +1269,9 @@ static int meshdeform_inside_cage(MeshDeformBind *mdb, float *co)
 {
        MDefBoundIsect *isect;
        float outside[3], start[3], dir[3];
-       int i, counter;
+       int i;
 
        for(i=1; i<=6; i++) {
-               counter = 0;
-
                outside[0] = co[0] + (mdb->max[0] - mdb->min[0] + 1.0f)*MESHDEFORM_OFFSET[i][0];
                outside[1] = co[1] + (mdb->max[1] - mdb->min[1] + 1.0f)*MESHDEFORM_OFFSET[i][1];
                outside[2] = co[2] + (mdb->max[2] - mdb->min[2] + 1.0f)*MESHDEFORM_OFFSET[i][2];
@@ -1856,7 +1859,7 @@ static void harmonic_coordinates_bind(Scene *UNUSED(scene), MeshDeformModifierDa
 static void heat_weighting_bind(Scene *scene, DerivedMesh *dm, MeshDeformModifierData *mmd, MeshDeformBind *mdb)
 {
        LaplacianSystem *sys;
-       MFace *mface= dm->getFaceArray(dm), *mf;
+       MFace *mface= dm->getTessFaceArray(dm), *mf;
        int totvert= dm->getNumVerts(dm);
        int totface= dm->getNumFaces(dm);
        float solution, weight;