[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58486] branches/soc-2013-sketch_mesh/ source/blender/editors/mesh/editmesh_deform_laplacian.c: The code is optimized by minimizing the linear system access.

Alexander Pinzon apinzonf at gmail.com
Sun Jul 21 21:06:18 CEST 2013


Revision: 58486
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58486
Author:   apinzonf
Date:     2013-07-21 19:06:17 +0000 (Sun, 21 Jul 2013)
Log Message:
-----------
The code is optimized by minimizing the linear system access.

Modified Paths:
--------------
    branches/soc-2013-sketch_mesh/source/blender/editors/mesh/editmesh_deform_laplacian.c

Modified: branches/soc-2013-sketch_mesh/source/blender/editors/mesh/editmesh_deform_laplacian.c
===================================================================
--- branches/soc-2013-sketch_mesh/source/blender/editors/mesh/editmesh_deform_laplacian.c	2013-07-21 17:59:36 UTC (rev 58485)
+++ branches/soc-2013-sketch_mesh/source/blender/editors/mesh/editmesh_deform_laplacian.c	2013-07-21 19:06:17 UTC (rev 58486)
@@ -358,7 +358,7 @@
 
 static void init_laplacian_matrix( SystemCustomData * data)
 {
-	float v1[3], v2[3], v3[3], v4[3], no[3], cf[3], nt[3];
+	float v1[3], v2[3], v3[3], v4[3], no[3];
 	float w2, w3, w4;
 	int i, j, vid, vidf[4];
 	bool has_4_vert;
@@ -383,38 +383,14 @@
 		idv4 = has_4_vert ? vidf[3] : 0;
 		if (has_4_vert) {
 			normal_quad_v3(no, sa->co[idv1], sa->co[idv2], sa->co[idv3], sa->co[idv4]); 
-			add_v3_v3v3(cf, sa->co[idv1], sa->co[idv2]);
-			add_v3_v3(cf, sa->co[idv3]);
-			add_v3_v3(cf, sa->co[idv4]);
-			mul_v3_fl(cf, 1.0f/4.0f);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv1]));
-			add_v3_v3(sa->no[idv1], nt);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv2]));
-			add_v3_v3(sa->no[idv2], nt);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv3]));
-			add_v3_v3(sa->no[idv3], nt);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv4]));
-			add_v3_v3(sa->no[idv4], nt);
+			add_v3_v3(sa->no[idv4], no);
 		} 
 		else {
 			normal_tri_v3(no, sa->co[idv1], sa->co[idv2], sa->co[idv3]); 
-			add_v3_v3v3(cf, sa->co[idv1], sa->co[idv2]);
-			add_v3_v3(cf, sa->co[idv3]);
-			mul_v3_fl(cf, 1.0f/3.0f);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv1]));
-			add_v3_v3(sa->no[idv1], nt);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv2]));
-			add_v3_v3(sa->no[idv2], nt);
-
-			mul_v3_v3fl(nt, no, len_v3v3(cf, sa->co[idv3]));
-			add_v3_v3(sa->no[idv3], nt);
 		}
+		add_v3_v3(sa->no[idv1], no);
+		add_v3_v3(sa->no[idv2], no);
+		add_v3_v3(sa->no[idv3], no);
 
 
 		idv[0] = idv1;
@@ -422,11 +398,6 @@
 		idv[2] = idv3;
 		idv[3] = idv4;
 
-		/*nlMakeCurrent(sys->context);
-		nlRightHandSideSet(0, idv1						, 0.0f);
-		nlRightHandSideSet(0, sys->numVerts + idv1		, 0.0f);
-		nlRightHandSideSet(0, 2*sys->numVerts + idv1	, 0.0f);*/
-
 		for (j = 0; j < i; j++) {
 			idv1 = idv[j];
 			idv2 = idv[(j + 1) % i];
@@ -472,18 +443,6 @@
 			sys->delta[idv1][1] -=  v3[1] * w3;
 			sys->delta[idv1][2] -=  v3[2] * w3;
 
-			nlRightHandSideAdd(0, idv1	, v1[0] * (w2 + w3 + w4));
-			nlRightHandSideAdd(1, idv1	, v1[1] * (w2 + w3 + w4));
-			nlRightHandSideAdd(2, idv1	, v1[2] * (w2 + w3 + w4));
-
-			nlRightHandSideAdd(0, idv1	, -v2[0] * w2);
-			nlRightHandSideAdd(1, idv1	, -v2[1] * w2);
-			nlRightHandSideAdd(2, idv1	, -v2[2] * w2);
-
-			nlRightHandSideAdd(0, idv1	, -v3[0] * w3);
-			nlRightHandSideAdd(1, idv1	, -v3[1] * w3);
-			nlRightHandSideAdd(2, idv1	, -v3[2] * w3);
-
 			nlMatrixAdd(idv1, idv2, -w2);
 			nlMatrixAdd(idv1, idv3, -w3);
 			nlMatrixAdd(idv1, idv1, w2 + w3 + w4);
@@ -547,7 +506,7 @@
 	BMIter fiter;
 	BMIter viter, viter2;
 	float alpha, beta, gamma,
-		pj[3], ni[3], di[3], cf[3],
+		pj[3], ni[3], di[3],
 		uij[3], dun[3], e2[3], pi[3], fni[3], vn[4][3];
 	int i, j, vin[4], lvin, num_fni, k;
 	LaplacianSystem * sys = data->sys;
@@ -593,19 +552,9 @@
 
 			if (lvin == 3) {
 				normal_tri_v3(fni, vn[0], vn[1], vn[2]);
-				add_v3_v3v3(cf, vn[0], vn[1]);
-				add_v3_v3(cf, vn[2]);
-				mul_v3_fl(cf, 1.0f/3.0f);
-				mul_v3_fl(fni, len_v3v3(cf, pi));
-				
 			} 
 			else if(lvin == 4) {
 				normal_quad_v3(fni, vn[0], vn[1], vn[2], vn[3]);
-				add_v3_v3v3(cf, vn[0], vn[1]);
-				add_v3_v3(cf, vn[2]);
-				add_v3_v3(cf, vn[3]);
-				mul_v3_fl(cf, 1.0f/4.0f);
-				mul_v3_fl(fni, len_v3v3(cf, pi));
 			} 
 
 			add_v3_v3(ni, fni);
@@ -632,10 +581,7 @@
 			nlRightHandSideSet(1, i, sys->delta[i][1]);
 			nlRightHandSideSet(2, i, sys->delta[i][2]);
 		}
-
-
 	}
-	
 }
 
 static int laplacian_deform_modal(bContext *C, wmOperator *op, const wmEvent *event)
@@ -839,20 +785,26 @@
 		init_laplacian_matrix(data);
 		compute_implict_rotations(data);
 
+		for (i=0; i<n; i++) {
+			nlRightHandSideSet(0, i, sys->delta[i][0]);
+			nlRightHandSideSet(1, i, sys->delta[i][1]);
+			nlRightHandSideSet(2, i, sys->delta[i][2]);
+		}
+
 		for (i=0; i<ns; i++) {
 			vid = sa->list_index[i];
-			nlRightHandSideAdd(0, n + i , sa->co[vid][0]);
-			nlRightHandSideAdd(1, n + i , sa->co[vid][1]);
-			nlRightHandSideAdd(2, n + i , sa->co[vid][2]);
+			nlRightHandSideSet(0, n + i , sa->co[vid][0]);
+			nlRightHandSideSet(1, n + i , sa->co[vid][1]);
+			nlRightHandSideSet(2, n + i , sa->co[vid][2]);
 			nlMatrixAdd(n + i, vid, 1.0f);
 		}
 
 		for (i=0; i<nh; i++)
 		{
 			vid = shs->list_handlers[i];
-			nlRightHandSideAdd(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
-			nlRightHandSideAdd(1, n + ns + i	, sa->list_verts[vid]->co[1]);
-			nlRightHandSideAdd(2, n + ns + i	, sa->list_verts[vid]->co[2]);
+			nlRightHandSideSet(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
+			nlRightHandSideSet(1, n + ns + i	, sa->list_verts[vid]->co[1]);
+			nlRightHandSideSet(2, n + ns + i	, sa->list_verts[vid]->co[2]);
 			nlMatrixAdd(n + ns + i 		, vid					, 1.0f);
 		}
 		nlEnd(NL_MATRIX);
@@ -866,17 +818,17 @@
 
 			for (i=0; i<ns; i++) {
 				vid = sa->list_index[i];
-				nlRightHandSideAdd(0, n + i , sa->co[vid][0]);
-				nlRightHandSideAdd(1, n + i , sa->co[vid][1]);
-				nlRightHandSideAdd(2, n + i , sa->co[vid][2]);
+				nlRightHandSideSet(0, n + i , sa->co[vid][0]);
+				nlRightHandSideSet(1, n + i , sa->co[vid][1]);
+				nlRightHandSideSet(2, n + i , sa->co[vid][2]);
 			}
 
 			for (i=0; i<nh; i++)
 			{
 				vid = shs->list_handlers[i];
-				nlRightHandSideAdd(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
-				nlRightHandSideAdd(1, n + ns + i	, sa->list_verts[vid]->co[1]);
-				nlRightHandSideAdd(2, n + ns + i	, sa->list_verts[vid]->co[2]);
+				nlRightHandSideSet(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
+				nlRightHandSideSet(1, n + ns + i	, sa->list_verts[vid]->co[1]);
+				nlRightHandSideSet(2, n + ns + i	, sa->list_verts[vid]->co[2]);
 			}
 			nlEnd(NL_MATRIX);
 			nlEnd(NL_SYSTEM);
@@ -907,24 +859,24 @@
 		nlBegin(NL_MATRIX);
 
 		for (i=0; i<n; i++) {
-			nlRightHandSideAdd(0, i  , sys->delta[i][0]);
-			nlRightHandSideAdd(1, i  , sys->delta[i][1]);
-			nlRightHandSideAdd(2, i  , sys->delta[i][2]);
+			nlRightHandSideSet(0, i  , sys->delta[i][0]);
+			nlRightHandSideSet(1, i  , sys->delta[i][1]);
+			nlRightHandSideSet(2, i  , sys->delta[i][2]);
 		}
 		for (i=0; i<ns; i++) {
 			vid = sa->list_index[i];
-			nlRightHandSideAdd(0, n + i , sa->co[vid][0]);
-			nlRightHandSideAdd(1, n + i , sa->co[vid][1]);
-			nlRightHandSideAdd(2, n + i , sa->co[vid][2]);
+			nlRightHandSideSet(0, n + i , sa->co[vid][0]);
+			nlRightHandSideSet(1, n + i , sa->co[vid][1]);
+			nlRightHandSideSet(2, n + i , sa->co[vid][2]);
 			nlMatrixAdd(n + i, vid, 1.0f);
 		}
 
 		for (i=0; i<nh; i++)
 		{
 			vid = shs->list_handlers[i];
-			nlRightHandSideAdd(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
-			nlRightHandSideAdd(1, n + ns + i	, sa->list_verts[vid]->co[1]);
-			nlRightHandSideAdd(2, n + ns + i	, sa->list_verts[vid]->co[2]);
+			nlRightHandSideSet(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
+			nlRightHandSideSet(1, n + ns + i	, sa->list_verts[vid]->co[1]);
+			nlRightHandSideSet(2, n + ns + i	, sa->list_verts[vid]->co[2]);
 			nlMatrixAdd(n + ns + i 		, vid					, 1.0f);
 		}
 		nlEnd(NL_MATRIX);
@@ -938,17 +890,17 @@
 
 			for (i=0; i<ns; i++) {
 				vid = sa->list_index[i];
-				nlRightHandSideAdd(0, n + i , sa->co[vid][0]);
-				nlRightHandSideAdd(1, n + i , sa->co[vid][1]);
-				nlRightHandSideAdd(2, n + i , sa->co[vid][2]);
+				nlRightHandSideSet(0, n + i , sa->co[vid][0]);
+				nlRightHandSideSet(1, n + i , sa->co[vid][1]);
+				nlRightHandSideSet(2, n + i , sa->co[vid][2]);
 			}
 
 			for (i=0; i<nh; i++)
 			{
 				vid = shs->list_handlers[i];
-				nlRightHandSideAdd(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
-				nlRightHandSideAdd(1, n + ns + i	, sa->list_verts[vid]->co[1]);
-				nlRightHandSideAdd(2, n + ns + i	, sa->list_verts[vid]->co[2]);
+				nlRightHandSideSet(0, n + ns + i 	, sa->list_verts[vid]->co[0]);
+				nlRightHandSideSet(1, n + ns + i	, sa->list_verts[vid]->co[1]);
+				nlRightHandSideSet(2, n + ns + i	, sa->list_verts[vid]->co[2]);
 			}
 			nlEnd(NL_MATRIX);
 			nlEnd(NL_SYSTEM);




More information about the Bf-blender-cvs mailing list