Revision: 47998
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47998
Author:   apinzonf
Date:     2012-06-16 20:00:43 +0000 (Sat, 16 Jun 2012)
Log Message:
-----------
Add constraint for every vert with base on weighting vertex group.

Modified Paths:
--------------
    
branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c

Modified: 
branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c
===================================================================
--- 
branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c   
    2012-06-16 19:34:38 UTC (rev 47997)
+++ 
branches/soc-2012-sushi/source/blender/modifiers/intern/MOD_laplaciansmooth.c   
    2012-06-16 20:00:43 UTC (rev 47998)
@@ -300,23 +300,25 @@
         float (*vertexCos)[3], int numVerts)
 {
        ModLaplacianSystem *sys;
+       MDeformVert *dvert = NULL;
+       MDeformVert *dv = NULL;
        float *v1, *v2, *v3;
-       float w1, w2, w3;
+       float w1, w2, w3, wpaint;
        float areaf;
        int i, iter;
+       int defgrp_index;
        unsigned int idv1, idv2, idv3;
        MFace *mfaces = NULL;
        MEdge *medges = NULL;
 
        DM_ensure_tessface(dm);
 
-       
-
        sys = init_ModLaplacianSystem(dm->getNumEdges(dm), 
dm->getNumTessFaces(dm), numVerts);
        if(!sys) return;
 
        mfaces = dm->getTessFaceArray(dm);
        medges = dm->getEdgeArray(dm);
+       modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
 
        
        for (iter = 0; iter < smd->repeat; iter++) {
@@ -408,22 +410,30 @@
 
                nlBegin(NL_MATRIX);
 
+               dv = dvert;
                for (i = 0; i < numVerts; i++) {
                        nlRightHandSideAdd(0, i, vertexCos[i][0]);
                        nlRightHandSideAdd(1, i, vertexCos[i][1]);
                        nlRightHandSideAdd(2, i, vertexCos[i][2]);
+
+                       if (dv) {
+                               wpaint = defvert_find_weight(dv, defgrp_index);
+                               dv++;
+                       } else {
+                               wpaint = 1.0f;
+                       }
                
                        if (sys->zerola[i] == 0) {
                                if (sys->vweights[i] * sys->ring_areas[i] != 
0.0f) {
-                                       sys->vweights[i] = - smd->lambda / 
(4.0f * sys->vweights[i] * sys->ring_areas[i]);
+                                       sys->vweights[i] = - smd->lambda * 
wpaint / (4.0f * sys->vweights[i] * sys->ring_areas[i]);
                                }
                                if (sys->vlengths[i] != 0.0f) {
-                                       sys->vlengths[i] = - smd->lambda_border 
* 2.0f / sys->vlengths[i];
+                                       sys->vlengths[i] = - smd->lambda_border 
* wpaint * 2.0f / sys->vlengths[i];
                                }
                                if (sys->numNeEd[i] == sys->numNeFa[i]) { 
-                                       nlMatrixAdd(i, i,  1.0f + smd->lambda / 
(4.0f * sys->ring_areas[i]));
+                                       nlMatrixAdd(i, i,  1.0f + smd->lambda * 
wpaint / (4.0f * sys->ring_areas[i]));
                                } else { 
-                                       nlMatrixAdd(i, i,  1.0f + 
smd->lambda_border * 2.0f);
+                                       nlMatrixAdd(i, i,  1.0f + 
smd->lambda_border * wpaint * 2.0f);
                                }
                        } else {
                                nlMatrixAdd(i, i, 1.0f);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to