[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47998] branches/soc-2012-sushi/source/ blender/modifiers/intern/MOD_laplaciansmooth.c: Add constraint for every vert with base on weighting vertex group.

Alexander Pinzon apinzonf at gmail.com
Sat Jun 16 22:00:46 CEST 2012


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);




More information about the Bf-blender-cvs mailing list