[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31427] branches/soc-2010-rohith291991/ intern/comiso: coarse quadrangulation.

Rohith B V rohith291991 at gmail.com
Tue Aug 17 22:04:18 CEST 2010


Revision: 31427
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31427
Author:   rohith291991
Date:     2010-08-17 22:04:18 +0200 (Tue, 17 Aug 2010)

Log Message:
-----------
coarse quadrangulation.

Modified Paths:
--------------
    branches/soc-2010-rohith291991/intern/comiso/extern/uv.h
    branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp

Modified: branches/soc-2010-rohith291991/intern/comiso/extern/uv.h
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/extern/uv.h	2010-08-17 17:41:59 UTC (rev 31426)
+++ branches/soc-2010-rohith291991/intern/comiso/extern/uv.h	2010-08-17 20:04:18 UTC (rev 31427)
@@ -3,6 +3,20 @@
 
 #include "CMesh.h"
 
+typedef struct UVline
+	{
+	double u[2],v[2];
+	int set;
+
+	}UVline;
+
+typedef struct UVpoint
+	{
+	int set;
+	int index;
+
+	}UVpoint;
+
 #ifdef __cplusplus
 extern "C"  {
 #endif

Modified: branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-17 17:41:59 UTC (rev 31426)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-17 20:04:18 UTC (rev 31427)
@@ -10,38 +10,39 @@
 #define CV_INTEGER 1<<2
 
 
+
 int sameSide(Vector3d p1, Vector3d p2, Vector3d a, Vector3d b)
 	{
-    Vector3d cp1;
-    Vector3d cp2;
+	Vector3d cp1;
+	Vector3d cp2;
 	Vector3d p,q,r;
 	p=b-a;
 	q=p1-a;
 	r=p2-a;
-	
+
 	cp1=p.cross(q);
 	cp2=p.cross(r);
 	if (cp1.dot(cp2) >= 0)
 		return 1;
-    else 
+	else 
 		return 0;
 	}
 
 int pointInTriangle(Vector3d p, Vector3d a, Vector3d b, Vector3d c)
 	{
-	
-    if (sameSide(p,a,b,c) && sameSide(p,b,a,c) && sameSide(p,c,a,b))
+
+	if (sameSide(p,a,b,c) && sameSide(p,b,a,c) && sameSide(p,c,a,b))
 		{
-			//std::cout<<"point: "<<p<<"a: "<<a<<"b: "<<b<<"c: "<<c<<"\n\n";
+		//std::cout<<"point: "<<p<<"a: "<<a<<"b: "<<b<<"c: "<<c<<"\n\n";
 		return 1;
-	
-	
+
+
 		}
 	else
 		{
 		//printf("haha %lf %lf %lf %lf\n",p,a,b,c);
-		
-		
+
+
 		return 0;
 		}
 	}
@@ -316,7 +317,7 @@
 		v[1]=cm->faces[j].v[1];
 		v[2]=cm->faces[j].v[2];
 
-				for (int t=0; t<3;t++)
+		for (int t=0; t<3;t++)
 			{
 
 
@@ -352,25 +353,25 @@
 		//Mark all pointers required
 		for(int t=0;t<3;t++)
 			{
-			
+
 			hm->edges[ec+t].face=&hm->faces[j];
 			hm->edges[ec+t].prev=&hm->edges[ec+(t+2)%3];
 			hm->edges[ec+t].next=&hm->edges[ec+(t+1)%3];	
-			
+
 			hm->edges[ec+t].flag=cm->edges[e[t]].flag;
-			
+
 			hm->edges[ec+t].index=cm->edges[e[t]].index;
 			hm->edges[ec+t].vertex=&hm->verts[cm->faces[j].v[2-t]];
 			hm->verts[cm->faces[j].v[2-t]].edge=&hm->edges[ec+t];
 
-			
+
 			int sign=1;
 			if(cm->faces[j].index!=cm->edges[e[t]].faces[0])
 				sign=-1;
-		
+
 			hm->edges[ec+t].p=sign*cm->edges[e[t]].p;
 			hm->edges[ec+t].kappa=sign*cm->edges[e[t]].kappa;
-;
+			;
 			}
 
 		ec+=3;
@@ -529,7 +530,7 @@
 		HEdge * hi=&hm->edges[i];
 		hi->is_resp=0;
 
-		
+
 		}
 
 	for(int i=0;i<totedge;i++)
@@ -668,8 +669,8 @@
 
 			}
 		}
-if(constraint==0)
-constraint++;
+	if(constraint==0)
+		constraint++;
 	C.resize(constraint,2*nvar+1) ;
 	C.setZero();
 
@@ -732,13 +733,13 @@
 	MISolver miso;
 	miso.solve( A, x, b, ids_to_round);
 	cs.restore_eliminated_vars( C,x, ids_to_elim, new_idx);
-/*
-std::cout<<"x: \n\n";
+	/*
+	std::cout<<"x: \n\n";
 	for(int i=0;i<x.size();i++)
-		{
+	{
 
-		std::cout<<x[i]<<"\n";
-		}*/
+	std::cout<<x[i]<<"\n";
+	}*/
 
 	for(int i=0;i<totedge;i++){
 		HEdge *hi=&hm->edges[i];
@@ -760,38 +761,38 @@
 	}
 
 
-	CMesh* extractMesh(HMesh *hm)
-		
-		{
+CMesh* extractMesh(HMesh *hm)
 
-		CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
-		CMesh* result1=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
+	{
 
-		int vc=0;
-		int ec=0;
-		int vc1=0;
-		int ec1=0;
+	CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
+	CMesh* result1=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
 
-		result->verts=NULL;
-		result->faces=NULL;
-		result->edges=NULL;
-		result1->verts=NULL;
-		result1->faces=NULL;
-		result1->edges=NULL;
+	int vc=0;
+	int ec=0;
+	int vc1=0;
+	int ec1=0;
 
-		for (int i=0;i<hm->numFaces;i++)
-			{
+	result->verts=NULL;
+	result->faces=NULL;
+	result->edges=NULL;
+	result1->verts=NULL;
+	result1->faces=NULL;
+	result1->edges=NULL;
 
+	for (int i=0;i<hm->numFaces;i++)
+		{
 
 
-			double u[3];
-			double v[3];
-			double p[3][3];
-			
-			HEdge *hi=hm->faces[i].edge;
-			
-			for(int j=0;j<3;j++)
-				{
+
+		double u[3];
+		double v[3];
+		double p[3][3];
+
+		HEdge *hi=hm->faces[i].edge;
+
+		for(int j=0;j<3;j++)
+			{
 			u[j]=hi->u;
 			v[j]=hi->v;
 			p[j][0]=hi->vertex->co[0];
@@ -799,66 +800,61 @@
 			p[j][2]=hi->vertex->co[2];
 			hi=hi->next;
 
-				}
+			}
 
-					
-			double minu,maxu,minv,maxv;
-			int uRange=0;
-			int vRange=0;
-			int uStart=0;
-			int vStart=0;
 
-			minu=maxu=hi->u;
-			minv=maxv=hi->v;
+		double minu,maxu,minv,maxv;
+		int uRange=0;
+		int vRange=0;
+		int uStart=0;
+		int vStart=0;
 
-			for(int j=0;j<3;j++)
+		minu=maxu=hi->u;
+		minv=maxv=hi->v;
+
+		for(int j=0;j<3;j++)
+			{
+			if(u[j]<minu)
 				{
-				if(u[j]<minu)
-					{
-					minu=u[j];
-					}
-				if(v[j]<minv)
-					{
-					minv=v[j];
-					}
-				if(u[j]>maxu)
-					{
-					maxu=u[j];
-					}
-				if(v[j]>maxv)
-					{
-					maxv=v[j];
-					}
-
+				minu=u[j];
 				}
+			if(v[j]<minv)
+				{
+				minv=v[j];
+				}
+			if(u[j]>maxu)
+				{
+				maxu=u[j];
+				}
+			if(v[j]>maxv)
+				{
+				maxv=v[j];
+				}
 
-			if(fabs(minu-(int)minu)<1e-10)
-			uStart=minu;
-			else
-				uStart=(int)(minu+1);
+			}
 
-			if(fabs(minv-(int)minv)<1e-10)
-			vStart=minv;
-			else
-			vStart=(int)(minv+1);
+		uStart=ceil(minu);
+		vStart=ceil(minv);
+		uRange=floor(maxu);
+		vRange=floor(maxv);
+		uRange-=uStart;
+		vRange-=vStart;
+		if(uRange<0)
+			uRange=0;
+		if(vRange<0)
+			vRange=0;
 
+		printf("%d %d %lf %lf %d %d %lf %lf\n",uStart,uRange+uStart,minu,maxu,vStart,vRange+vStart,minv,maxv);
 
-			uRange=(int)(maxu)-uStart;
-			if(uRange<0)
-				uRange=0;
-			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);
+		//		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);
 
-			
 
-        //Ax*u1+Bx*v1+Cx=x1
+
+		//Ax*u1+Bx*v1+Cx=x1
 		//Ax*u2+Bx*v2+Cx=x2
 		//Ax*u3+Bx*v3+Cx=x3
-			//solve for Ax Bx Cx
-			//repeat for y,z
+		//solve for Ax Bx Cx
+		//repeat for y,z
 
 		double A[3],B[3],C[3];
 		A[0]=0;
@@ -873,16 +869,16 @@
 
 
 		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]);
+
+		//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[0][j]-p[1][j]; U=p[0][j]-p[2][j];
 
+			P=u[0]-u[1]; Q=v[0]-v[1];
+			R=u[0]-u[2]; S=v[0]-v[2];
+			T=p[0][j]-p[1][j]; U=p[0][j]-p[2][j];
 
+
 			det=P*S-R*Q;
 			if(det==0)
 				{
@@ -890,27 +886,27 @@
 				}
 			else
 				{
-idet=1/det;
-A[j]=(T*S-U*Q)*idet;
-B[j]=(P*U-R*T)*idet;
-C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
+				idet=1/det;
+				A[j]=(T*S-U*Q)*idet;
+				B[j]=(P*U-R*T)*idet;
+				C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
 				}
 			}
 
-		
+/*
 		Vector3d e[3] ;
 		for(int j=0; j<3; ++j)
 			{
 			e[j][0] = p[j][0]-p[(j+2)%3][0];
 			e[j][1] = p[j][1]-p[(j+2)%3][1];
 			e[j][2] = p[j][2]-p[(j+2)%3][2];
-			
+
 			}; 
 
 		Vector3d normal = e[1].cross(e[0]);
 		normal.normalize() ;
 		Vector3d ut ;
-	//	Vector3d x;
+		//	Vector3d x;
 
 		ut[0]=hm->verts[hm->faces[i].v[1]].co[0]-hm->verts[hm->faces[i].v[0]].co[0];
 		ut[1]=hm->verts[hm->faces[i].v[1]].co[1]-hm->verts[hm->faces[i].v[0]].co[1];
@@ -923,7 +919,7 @@
 
 		//hm->faces[l].ut[0]=ut[0];
 		//hm->faces[l].ut[1]=ut[1];
-	//	hm->faces[l].ut[2]=ut[2];
+		//	hm->faces[l].ut[2]=ut[2];
 
 		Vector3d vt = normal.cross(ut);
 		vt.normalize();
@@ -934,240 +930,761 @@
 		double x,y,z;
 
 		x=(p[0][0]+p[1][0]+p[2][0])/3;
-        y=(p[0][1]+p[1][1]+p[2][1])/3;
+		y=(p[0][1]+p[1][1]+p[2][1])/3;
 		z=(p[0][2]+p[1][2]+p[2][2])/3;
 
 		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+ut[0]*0.04;
-				result->verts[vc].co[1]=y+ut[1]*0.04;
-				result->verts[vc].co[2]=z+ut[2]*0.04;
-				result->verts[vc].neighbors=NULL;
-				result->verts[vc].edges=NULL;
-				result->verts[vc].numNeighbors=0;
+			{result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
+		else
+			{
 
-				result->verts[vc].index=vc;
+			result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
 
-				vc++;
+		result->verts[vc].co[0]=x+ut[0]*0.04;
+		result->verts[vc].co[1]=y+ut[1]*0.04;
+		result->verts[vc].co[2]=z+ut[2]*0.04;
+		result->verts[vc].neighbors=NULL;
+		result->verts[vc].edges=NULL;
+		result->verts[vc].numNeighbors=0;
 
-				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-ut[0]*0.04;
-				result->verts[vc].co[1]=y-ut[1]*0.04;
-				result->verts[vc].co[2]=z-ut[2]*0.04;
-				result->verts[vc].neighbors=NULL;
-				result->verts[vc].edges=NULL;
-				result->verts[vc].numNeighbors=0;
+		result->verts[vc].index=vc;
 
-				result->verts[vc].index=vc;
+		vc++;
 
-				vc++;
+		if(result->verts==NULL)
+			{result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
+		else
+			{
 
-				if(result->edges==NULL)
-				result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
-				else
-					result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*(ec+1)));
+			result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
+		result->verts[vc].co[0]=x-ut[0]*0.04;
+		result->verts[vc].co[1]=y-ut[1]*0.04;
+		result->verts[vc].co[2]=z-ut[2]*0.04;
+		result->verts[vc].neighbors=NULL;
+		result->verts[vc].edges=NULL;
+		result->verts[vc].numNeighbors=0;
 
-				result->edges[ec].v[0]=vc-2;
-				result->edges[ec].v[1]=vc-1;
-				ec++;
+		result->verts[vc].index=vc;
 
-				
+		vc++;
 
-		//Take care of all internal points
+		if(result->edges==NULL)
+			result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
+		else
+			result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*(ec+1)));
 
-/*
-		std::vector< std::vector <int> > vertices; 
-		vertices.resize(uRange+2);
-		for(int j=0;j<uRange+2;j++)
+		result->edges[ec].v[0]=vc-2;
+		result->edges[ec].v[1]=vc-1;
+		ec++;
+
+*/
+	std::vector <UVline>  verticesu; 
+	std::vector <UVline>  verticesv; 
+	std::vector < std::vector <UVpoint> >  vertices; 
+
+
+	
+
+
+		uStart-=1;
+		uRange+=2;
+		vStart-=1;
+		vRange+=2;
+
+		verticesu.resize(uRange);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list