[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31143] branches/soc-2010-rohith291991: Important fixes to mesh extraction.

Rohith B V rohith291991 at gmail.com
Sat Aug 7 16:54:04 CEST 2010


Revision: 31143
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31143
Author:   rohith291991
Date:     2010-08-07 16:54:04 +0200 (Sat, 07 Aug 2010)

Log Message:
-----------
Important fixes to mesh extraction. Still some work left to do.

Modified Paths:
--------------
    branches/soc-2010-rohith291991/intern/comiso/intern/CMesh.cpp
    branches/soc-2010-rohith291991/intern/comiso/intern/comiso.cpp
    branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
    branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c

Modified: branches/soc-2010-rohith291991/intern/comiso/intern/CMesh.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/CMesh.cpp	2010-08-07 12:51:51 UTC (rev 31142)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/CMesh.cpp	2010-08-07 14:54:04 UTC (rev 31143)
@@ -3,6 +3,7 @@
 #include <math.h>
 #include "MEM_guardedalloc.h"
 #include "normal_cycle.h"
+#include "Geometry"
 
 int generateVoronoiCells(CMesh* mesh)
 	{
@@ -206,35 +207,80 @@
 			double x1,x2,y1,y2,z1,z2,x3,y3,z3;
 
 			int v1,v2,v3,v4,v5,v6;
+			Vector3d e[3],normal[2],edge;
+			double angle;
+
 			v1=mesh->faces[i].v[0];
 			v2=mesh->faces[i].v[1];
+		
+			v5=mesh->faces[i].v[2];
+			v6=mesh->faces[i].v[0];
+
 			v3=mesh->edges[mesh->faces[i].edges[j]].v[0];
-			v4=mesh->edges[mesh->faces[i].edges[j]].v[1];
-			v5=mesh->faces[j].v[0];
-			v6=mesh->faces[j].v[1];
+		v4=mesh->edges[mesh->faces[i].edges[j]].v[1];
 
+			edge[0]=mesh->verts[v4].co[0]-mesh->verts[v3].co[0];
+			edge[1]=mesh->verts[v4].co[1]-mesh->verts[v3].co[1];
+			edge[2]=mesh->verts[v4].co[2]-mesh->verts[v3].co[2];
+		
+			e[1][0]=mesh->verts[v2].co[0]-mesh->verts[v1].co[0];
+			e[1][1]=mesh->verts[v2].co[1]-mesh->verts[v1].co[1];
+			e[1][2]=mesh->verts[v2].co[2]-mesh->verts[v1].co[2];
 
-			x1=mesh->verts[v1].co[0]-mesh->verts[v2].co[0];
-			y1=mesh->verts[v1].co[1]-mesh->verts[v2].co[1];
-			z1=mesh->verts[v1].co[2]-mesh->verts[v2].co[2];
+			e[2][0]=mesh->verts[v2].co[0]-mesh->verts[v1].co[0];
+			e[2][1]=mesh->verts[v2].co[1]-mesh->verts[v1].co[1];
+			e[2][2]=mesh->verts[v2].co[2]-mesh->verts[v1].co[2];
+	
+			e[0][0]=mesh->verts[v6].co[0]-mesh->verts[v5].co[0];
+			e[0][1]=mesh->verts[v6].co[1]-mesh->verts[v5].co[1];
+			e[0][2]=mesh->verts[v6].co[2]-mesh->verts[v5].co[2];
 
-			x2=mesh->verts[v3].co[0]-mesh->verts[v4].co[0];
-			y2=mesh->verts[v3].co[1]-mesh->verts[v4].co[1];
-			z2=mesh->verts[v3].co[2]-mesh->verts[v4].co[2];
+			normal[0]=e[1].cross(e[0]);
+			normal[0].normalize() ;
 
-			x3=mesh->verts[v5].co[0]-mesh->verts[v6].co[0];
-			y3=mesh->verts[v5].co[1]-mesh->verts[v6].co[1];
-			z3=mesh->verts[v5].co[2]-mesh->verts[v6].co[2];
+				v1=mesh->faces[j].v[0];
+			v2=mesh->faces[j].v[1];
+		
+			v5=mesh->faces[j].v[2];
+			v6=mesh->faces[j].v[0];
 
+			e[1][0]=mesh->verts[v2].co[0]-mesh->verts[v1].co[0];
+			e[1][1]=mesh->verts[v2].co[1]-mesh->verts[v1].co[1];
+			e[1][2]=mesh->verts[v2].co[2]-mesh->verts[v1].co[2];
+	
+			e[0][0]=mesh->verts[v6].co[0]-mesh->verts[v5].co[0];
+			e[0][1]=mesh->verts[v6].co[1]-mesh->verts[v5].co[1];
+			e[0][2]=mesh->verts[v6].co[2]-mesh->verts[v5].co[2];
+
+			normal[1]=e[1].cross(e[0]);
+			normal[1].normalize() ;
+
+			angle=acos(normal[0].dot(normal[1]));
+			
+			AngleAxis<double> aa(angle, edge);
+
+			e[1]=Vector3d(aa*e[1]);
+			e[1].normalize();
+			e[2].normalize();
+
+			angle=acos(e[2].dot(e[1]));
+			int sign=1;
+			if(normal[0].dot(e[1].cross(e[2]))<0)
+				sign=-1;
+			angle=angle*sign;
+
+			
+			
+
 			//TODO check for correctness
 
-			mesh->edges[mesh->faces[i].edges[j]].kappa=acos((x1*x2+y1*y2+z1*z2)/sqrt((x1*x1+y1*y1+z1*z1)*(x2*x2+y2*y2+z2*z2)))-acos((x3*x2+y3*y2+z3*z2)/sqrt((x3*x3+y3*y3+z3*z3)*(x2*x2+y2*y2+z2*z2)));
+			mesh->edges[mesh->faces[i].edges[j]].kappa=1;//acos((x1*x3+y1*y3+z1*z3)/sqrt((x1*x1+y1*y1+z1*z1)*(x3*x3+y3*y3+z3*z3)));
 			totkappa+= mesh->edges[mesh->faces[i].edges[j]].kappa;
 
 			solver.mdata[t].i=i;
 			solver.mdata[t].j=totface+mesh->faces[i].edges[j];
-			int sign=1;
-
+			sign=1;
+	
 			if(mesh->edges[mesh->faces[i].edges[j]].faces[0]==i)
 				sign=1;
 			else

Modified: branches/soc-2010-rohith291991/intern/comiso/intern/comiso.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/comiso.cpp	2010-08-07 12:51:51 UTC (rev 31142)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/comiso.cpp	2010-08-07 14:54:04 UTC (rev 31143)
@@ -44,6 +44,11 @@
 	b.resize( dimm);
 	b=_B.col(dimn-1);
 	_b.resize(dimm);
+
+	for(i=0;i<dimm;i++)
+		{
+		_b[i]=b[i];
+		}
 	
 	
 	}
@@ -82,6 +87,15 @@
 
 	extract_Axb( B, A, b);
 
+	//std::cout<<A<<"\n\n";
+
+	/*std::cout<<"[ ";
+	for(int l=0;l<b.size()-1;l++)
+		{
+		std::cout<<b[l]<<", ";
+		}
+	std::cout<<b[b.size()-1]<<" ]";*/
+	
 	// create a constrained solver
 	ConstrainedSolver cs;
 
@@ -156,9 +170,11 @@
 	C.resize(_data.c,_data.n);
 	C.setZero();
 
+	//std::cout<<B<<"\n\n";
+
 	nnz=_data.cnnz;
 
-	for( int k=0; k<nnz; ++k)
+for( int k=0; k<nnz; ++k)
 		{
 
 		int i=_data.cdata[k].i;
@@ -168,6 +184,8 @@
 
 		}
 
+//std::cout<<C<<"\n\n";
+
 	ids_to_round.resize(_data.nr);
 
 	for(int k=0;k<_data.nr;k++)

Modified: branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-07 12:51:51 UTC (rev 31142)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-07 14:54:04 UTC (rev 31143)
@@ -972,8 +972,6 @@
 		for(int j=0;j<uRange-1;j++)
 			{
 			
-		
-
 				int v1,v2;
 				v1=vertices[j][k];
 				v2=vertices[j+1][k];

Modified: branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c
===================================================================
--- branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c	2010-08-07 12:51:51 UTC (rev 31142)
+++ branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c	2010-08-07 14:54:04 UTC (rev 31143)
@@ -266,9 +266,9 @@
 
 			//Test code
 			cm.faces[3].flag |= CF_CONSTRAINED;
-			cm.faces[3].theta=1.3;
-			cm.faces[10].flag |= CF_CONSTRAINED;
-			cm.faces[10].theta=2.35;
+			cm.faces[3].theta=0.3;
+			//cm.faces[10].flag |= CF_CONSTRAINED;
+			//cm.faces[10].theta=2.35;
 			/*	cm.faces[25].flag |= CF_CONSTRAINED;
 			cm.faces[25].theta=6.3;
 			cm.faces[50].flag |= CF_CONSTRAINED;
@@ -323,7 +323,7 @@
 							mvertnew[a].co[0]=cm1->verts[a].co[0];
 							mvertnew[a].co[1]=cm1->verts[a].co[1];
 							mvertnew[a].co[2]=cm1->verts[a].co[2];
-							printf("%lf %lf %lf\n",mvertnew[a].co[0],mvertnew[a].co[1],mvertnew[a].co[2]);
+							//printf("%lf %lf %lf\n",mvertnew[a].co[0],mvertnew[a].co[1],mvertnew[a].co[2]);
 							
 							//printf("%f %f %f \n",mvertnew[a].co[0],mvertnew[a].co[1],mvertnew[a].co[2]);
 							}
@@ -339,7 +339,7 @@
 					
 
 					//set result DerivedMesh
-//					result; // <--- for now
+			//result=dm; // <--- for now
 
 					//-------------------End Tool------------------//
 





More information about the Bf-blender-cvs mailing list