[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