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

Rohith B V rohith291991 at gmail.com
Thu Aug 5 18:55:01 CEST 2010


Revision: 31072
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31072
Author:   rohith291991
Date:     2010-08-05 18:55:01 +0200 (Thu, 05 Aug 2010)

Log Message:
-----------
Updates to mesh extraction. Does not work as expected.

Modified Paths:
--------------
    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/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-05 16:05:30 UTC (rev 31071)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-05 16:55:01 UTC (rev 31072)
@@ -389,7 +389,7 @@
 
 		}
 	h/=totedge;
-//	h*=factor;
+h*=0.1;
 	// std::cout<<h<<"\n";
 	double hh = h * h ;
 
@@ -734,12 +734,19 @@
 		
 		{
 
-		CMesh* result;
+		CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");;
 
-		
+		int vc=0;
+		int ec=0;
+
+		result->verts=NULL;
+		result->faces=NULL;
+		result->edges=NULL;
+
 		for (int i=0;i<hm->numFaces;i++)
 			{
 
+
 			double u[3];
 			double v[3];
 			double p[3][3];
@@ -748,15 +755,15 @@
 			
 			for(int j=0;j<3;j++)
 				{
-			u[0]=hi->u;
-			v[0]=hi->v;
+			u[j]=hi->u;
+			v[j]=hi->v;
 			p[j][0]=hi->vertex->co[0];
 			p[j][1]=hi->vertex->co[1];
 			p[j][2]=hi->vertex->co[2];
 			hi=hi->next;
 
 				}
-			
+					
 			double minu,maxu,minv,maxv;
 			int uRange=0;
 			int vRange=0;
@@ -787,6 +794,7 @@
 
 
 				}
+			
 			if((minu-(int)minu)<1e-10)
 			uStart=minu;
 			else
@@ -804,6 +812,7 @@
 			vRange=(int)(maxv)-vStart;
 			if(vRange<0)
 				vRange=0;
+			
 
 	//		printf("minu: %lf maxu: %lf minv: %lf maxv: %lf uStart: %d uRange: %d vStart: %d vRange: %d\n",minu,maxu,minv,maxv,uStart,uRange,vStart,vRange);
 
@@ -817,26 +826,44 @@
 
 		double A[3],B[3],C[3];
 		double P,R,T,S,Q,U,det,idet;
-
+	//printf("%lf %lf %lf %lf %lf %lf\n",u[0],v[0],u[1],v[1],u[2],v[2]);
 		for(int j=0;j<3;j++)
 			{
+		
 		P=u[0]-u[1]; Q=v[0]-v[1];
 		R=u[0]-u[2]; S=v[0]-v[2];
-		T=p[j][0]-p[j][1]; U=p[j][0]-p[j][2];
+		T=p[0][j]-p[1][j]; U=p[0][j]-p[2][j];
 
 
 			det=P*S-R*Q;
+			if(det==0)
+				{
+				printf("blah\n");
+				}
+			else
+				{
 idet=1/det;
 A[j]=(T*S-U*Q)*idet;
 B[j]=(P*U-R*T)*idet;
-C[j]=p[j][0]-A[j]*p[j][0]-B[j]*p[j][0];
+C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
+				}
 			}
 
+		
 		//Take care of all internal points
 
-		for(int j=uStart;j<uRange;j++)
+		std::vector< std::vector <int> > vertices; 
+		vertices.resize(uRange);
+		for(int j=0;j<uRange;j++)
 			{
-			for(int k=vStart;k<vRange;k++)
+			vertices[j].resize(vRange);
+			
+			}
+
+	
+		for(int j=uStart;j<uStart+uRange;j++)
+			{
+			for(int k=vStart;k<vStart+vRange;k++)
 				{
 				double x,y,z;
 
@@ -845,18 +872,125 @@
 				y=A[1]*j+B[1]*k+C[1];
 				z=A[2]*j+B[2]*k+C[2];	
 
+				printf("%lf %lf %lf\n",x,y,z);
+
 				//Add point to CMesh
-				//Add relevant edge connectivities to CMesh
-				// Include points where edges meet triangle border
+				
+				
+				if(result->verts==NULL)
+					{result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
+				else
+					{
+					
+					result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
+			
+				result->verts[vc].co[0]=x;
+				result->verts[vc].co[1]=y;
+				result->verts[vc].co[2]=z;
+				result->verts[vc].neighbors=NULL;
+				result->verts[vc].edges=NULL;
+				result->verts[vc].numNeighbors=0;
 
+				result->verts[vc].index=vc;
+
+			
+				vertices[j-uStart][k-vStart]=vc;
+				
+				vc++;
+			
 								
 				}
 			}
+	
 
+	//Add relevant edge connectivities to CMesh
 
+	/*	if(result->edges==NULL)
+				result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+((uRange-1)*vRange+(vRange-1)*uRange)), "edges");
+				else
+					result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*((uRange-1)*vRange+(vRange-1)*uRange)));
+
+		printf("test4\n");
+		for(int j=0;j<uRange;j++)
+			{
 			
+			for(int k=0;k<vRange-1;k++)
+				{
+				
+				printf("test5\n");
+				int v1,v2;
+				v1=vertices[j][k];
+				v2=vertices[j][k+1];
+
+				result->edges[ec].v[0]=v1;
+				result->edges[ec].v[1]=v2;
+				ec++;
+
+				
+
+				if(result->verts[v1].neighbors==NULL)
+				result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+				else
+					result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+				result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+
+				if(result->verts[v2].neighbors==NULL)
+				result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+				else
+					result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+				result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+
+				printf("test6\n");
+
+				}
+			
 			}
+
+			for(int k=0;k<vRange;k++)
+				{
+		for(int j=0;j<uRange-1;j++)
+			{
+			
 		
+
+				int v1,v2;
+				v1=vertices[j][k];
+				v2=vertices[j+1][k];
+
+				result->edges[ec].v[0]=v1;
+				result->edges[ec].v[1]=v2;
+				ec++;
+				
+				printf("test7\n");
+				if(result->verts[v1].neighbors==NULL)
+					result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+					
+				else
+					result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+				result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+
+				if(result->verts[v2].neighbors==NULL)
+				result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+				else
+					result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+				result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+				printf("test8\n");
+
+				}
+			
+			}
+				//for loop
+				// Include points where edges meet triangle border
+
+*/
+			
+			}
+
+		
+			result->numVerts=vc;
+			result->numEdges=ec;
+			
+		
 		return result;
 		
 		}

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-05 16:05:30 UTC (rev 31071)
+++ branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c	2010-08-05 16:55:01 UTC (rev 31072)
@@ -63,13 +63,13 @@
 	{
 
 	Comiso solver;
-	CMesh cm;
+	CMesh cm,*cm1;
 	HMesh hm;
 	QuadrangulateModifierData *dmd = (QuadrangulateModifierData*) md;
 	DerivedMesh *dm = derivedData, *result = NULL;
-	MVert *mvert;
-	MFace *mface;
-	MEdge *medge;
+	MVert *mvert,*mvertnew;
+	MFace *mface,*mfacenew;
+	MEdge *medge,*medgenew;
 	int totvert, totface,totedge;
 	int a, numTris;
 	int i,j;   
@@ -303,10 +303,42 @@
 					//u v parametrization
 					copyHC(&hm,&cm);
 					mi_quad_param(&hm);
-					extractMesh(&hm);
+					cm1=extractMesh(&hm);
 
+
+					     result = CDDM_from_template(dm, 0, 0, 0);
+
+						//mvertnew=result-
+						
+	mvertnew = dm->getVertArray(dm);
+	medgenew = dm->getEdgeArray(dm);
+						mvertnew=(MVert*)MEM_mallocN(sizeof(MVert)*cm1->numVerts, "vertices");
+						medgenew=(MEdge*)MEM_mallocN(sizeof(MEdge)*cm1->numEdges, "edges");
+
+						result->numVertData=cm1->numVerts;
+						result->numEdgeData=cm1->numEdges;
+
+						for(a=0;a<result->numVertData;a++)
+							{
+							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("%f %f %f \n",mvertnew[a].co[0],mvertnew[a].co[1],mvertnew[a].co[2]);
+							}
+
+						for(a=0;a<result->numEdgeData;a++)
+							{
+							medgenew[a].v1=cm1->edges[a].v[0];
+							medgenew[a].v2=cm1->edges[a].v[1];
+
+							
+							}
+
+					
+
 					//set result DerivedMesh
-					result=dm; // <--- for now
+//					result; // <--- for now
 
 					//-------------------End Tool------------------//
 





More information about the Bf-blender-cvs mailing list