[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47249] branches/soc-2012-sushi/source/ blender: Add area to normalized laplacian weight.
Alexander Pinzon
apinzonf at gmail.com
Thu May 31 02:54:55 CEST 2012
Revision: 47249
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47249
Author: apinzonf
Date: 2012-05-31 00:54:54 +0000 (Thu, 31 May 2012)
Log Message:
-----------
Add area to normalized laplacian weight.
Modified Paths:
--------------
branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c
branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c
Modified: branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c
===================================================================
--- branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c 2012-05-30 23:00:03 UTC (rev 47248)
+++ branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_smooth_laplacian.c 2012-05-31 00:54:54 UTC (rev 47249)
@@ -47,6 +47,7 @@
void compute_weight(BMFace *f, int vid, float lambda);
float compute_weight_return( BMFace *f, int vid, float lambda);
static float cotan_weight(float *v1, float *v2, float *v3);
+float area_ring(BMVert *v);
void bmo_vertexsmoothlaplacian_exec(BMesh *bm, BMOperator *op)
{
@@ -83,17 +84,22 @@
nlMatrixAdd(m_vertex_id, m_vertex_id, 1.0f);
+ we = 0.0f;
BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) {
- we = compute_weight_return(f,m_vertex_id, lambda);
+ we = we + compute_weight_return(f,m_vertex_id, lambda);
}
-
+ we = lambda/(we*4.0f*area_ring(v));
BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) {
- compute_weight(f,m_vertex_id, lambda/we);
+ compute_weight(f,m_vertex_id, we);
}
+ nlMatrixAdd(m_vertex_id, m_vertex_id, lambda/(4.0f*area_ring(v)));
}
nlEnd(NL_MATRIX);
nlEnd(NL_SYSTEM);
+ if(bm->totvert <32){
+ nlPrintMatrix();
+ }
nlSolveAdvanced(NULL, NL_TRUE);
BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) {
m_vertex_id = BM_elem_index_get(v);
@@ -142,10 +148,10 @@
int vc_id = BM_elem_index_get(vf[vc]);
wa = lambda*cotan_weight(vf[vb]->co, vf[vc]->co, vf[va]->co);
nlMatrixAdd(vid, vc_id, -wa);
- nlMatrixAdd(vid, vid, wa);
+ //nlMatrixAdd(vid, vid, wa);
wa = lambda*cotan_weight(vf[vc]->co, vf[va]->co, vf[vb]->co);
nlMatrixAdd(vid, vb_id, -wa);
- nlMatrixAdd(vid, vid, wa);
+ //nlMatrixAdd(vid, vid, wa);
}
}
}
@@ -194,3 +200,25 @@
return dot_v3v3(a, b) / clen;
}
+
+float area_ring(BMVert *v){
+ BMIter fiter;
+ BMIter viter;
+ BMVert *vn;
+ BMFace *f;
+ BMVert *vf[3];
+ int i;
+ float area = 0.0f;
+ BM_ITER_ELEM (f, &fiter, v, BM_FACES_OF_VERT) {
+ i = 0;
+ BM_ITER_ELEM (vn, &viter, f, BM_VERTS_OF_FACE) {
+ vf[i] = vn;
+ i = i + 1;
+ }
+ if(i == 3){
+ area = area + area_tri_v3(vf[0]->co, vf[1]->co, vf[2]->co);
+ }
+ }
+ return area;
+
+}
\ No newline at end of file
Modified: branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c 2012-05-30 23:00:03 UTC (rev 47248)
+++ branches/soc-2012-sushi/source/blender/editors/mesh/editmesh_tools.c 2012-05-31 00:54:54 UTC (rev 47249)
@@ -1670,7 +1670,7 @@
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
RNA_def_int(ot->srna, "repeat", 1, 1, 50, "Number of iterations to smooth the mesh", "", 1, 50);
- RNA_def_float(ot->srna, "lambda", 0.1f, 0.001f, 100.0f, "Lambda factor", "", 0.001, 100.0f);
+ RNA_def_float(ot->srna, "lambda", 0.00005f, 0.0000001f, 100.0f, "Lambda factor", "", 0.0000001f, 100.0f);
}
More information about the Bf-blender-cvs
mailing list