[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31370] branches/soc-2010-rohith291991/ intern/comiso/intern/uv.cpp: Vital updates.

Rohith B V rohith291991 at gmail.com
Mon Aug 16 11:28:34 CEST 2010


Revision: 31370
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31370
Author:   rohith291991
Date:     2010-08-16 11:28:34 +0200 (Mon, 16 Aug 2010)

Log Message:
-----------
Vital updates.

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

Modified: branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-16 09:24:18 UTC (rev 31369)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-16 09:28:34 UTC (rev 31370)
@@ -785,6 +785,7 @@
 			{
 
 
+
 			double u[3];
 			double v[3];
 			double p[3][3];
@@ -801,6 +802,7 @@
 			hi=hi->next;
 
 				}
+
 					
 			double minu,maxu,minv,maxv;
 			int uRange=0;
@@ -831,7 +833,7 @@
 					}
 
 				}
-			
+
 			if(fabs(minu-(int)minu)<1e-10)
 			uStart=minu;
 			else
@@ -850,7 +852,6 @@
 			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);
 
 			
@@ -872,7 +873,9 @@
 		B[2]=0;
 		C[2]=0;
 
+
 		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++)
 			{
@@ -984,6 +987,7 @@
 
 		//Take care of all internal points
 
+
 		std::vector< std::vector <int> > vertices; 
 		vertices.resize(uRange+2);
 		for(int j=0;j<uRange+2;j++)
@@ -1006,7 +1010,6 @@
 				y=A[1]*j+B[1]*k+C[1];
 				z=A[2]*j+B[2]*k+C[2];	
 
-
 				check++;
 				//Add point to CMesh
 
@@ -1019,6 +1022,8 @@
 					
 					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;
@@ -1033,17 +1038,12 @@
 				vertices[j-uStart+1][k-vStart+1]=vc;
 				      
 				vc++;
-			
+
 								
 				}
 			}
 
 	
-	
-		
-
-
-
 		//printf("CHECK: %d\n",check);
        /* if(check==0)
 			{
@@ -1057,6 +1057,7 @@
 		if(m2<0)
 			m2=0;
 
+	
 		//printf("%d\n",((uRange-1)*vRange+(vRange-1)*uRange));
 
 
@@ -1065,6 +1066,7 @@
 				else
 					result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*(ec+m1+m2)));
 
+
 		//printf("test4\n");
 		for(int j=0;j<uRange+2;j++)
 			{
@@ -1077,8 +1079,7 @@
 				v1=vertices[j][k];
 				v2=vertices[j][k+1];
 
-					
-				
+	
 
 
 				result->edges[ec].v[0]=v1;
@@ -1088,17 +1089,27 @@
 				
 
 				if(result->verts[v1].neighbors==NULL)
-				result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+					{result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+					result->verts[v1].edges=(int*)MEM_mallocN(sizeof(int)*(result->verts[v1].numNeighbors), "edges");}
 				else
-					result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+					{result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+				result->verts[v1].edges=(int*)MEM_reallocN(result->verts[v1].edges,(sizeof(int)*(result->verts[v1].numNeighbors)));}
 				result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+				result->verts[v1].edges[result->verts[v1].numNeighbors-1]=ec-1;
 
 				if(result->verts[v2].neighbors==NULL)
-				result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+					{
+					result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+					result->verts[v2].edges=(int*)MEM_mallocN(sizeof(int)*(result->verts[v2].numNeighbors), "edges");
+					}
 				else
-					result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+					{result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+				result->verts[v2].edges=(int*)MEM_reallocN(result->verts[v2].edges,(sizeof(int)*(result->verts[v2].numNeighbors)));
+					}
 				result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+				result->verts[v2].edges[result->verts[v2].numNeighbors-1]=ec-1;
 
+
 				//printf("test6\n");
 
 				}
@@ -1119,36 +1130,53 @@
 				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");
-					
+					{result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+					result->verts[v1].edges=(int*)MEM_mallocN(sizeof(int)*(result->verts[v1].numNeighbors), "edges");}
 				else
-					result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+					{result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+					result->verts[v1].edges=(int*)MEM_reallocN(result->verts[v1].edges,(sizeof(int)*(result->verts[v1].numNeighbors)));}
 				result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+				result->verts[v1].edges[result->verts[v1].numNeighbors-1]=ec-1;
 
 				if(result->verts[v2].neighbors==NULL)
-				result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+					{
+					result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+					result->verts[v2].edges=(int*)MEM_mallocN(sizeof(int)*(result->verts[v2].numNeighbors), "edges");
+					}
 				else
-					result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+					{result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+				result->verts[v2].edges=(int*)MEM_reallocN(result->verts[v2].edges,(sizeof(int)*(result->verts[v2].numNeighbors)));
+					}
 				result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+				result->verts[v2].edges[result->verts[v2].numNeighbors-1]=ec-1;
+
 				//printf("test8\n");
 
+
 				}
 			
 			}
 				//for loop
 				// Include points where edges meet triangle border
+
+			
 					int cv=0;
 for(int j=0;j<uRange+2;j++)
 	{
+	
 			
 			for(int k=0;k<vRange+2;k++)
 				{
+				//printf("failure\n");
 				
 				int v1=vertices[j][k];
 				double x,y,z;
 
+			
 				x=result->verts[v1].co[0];
 				y=result->verts[v1].co[1];
 				z=result->verts[v1].co[2];
@@ -1168,17 +1196,18 @@
 
 				//check if point is outside triangle
 		
-		
+	
 				if (!pointInTriangle(g,a,b,c))
 					{
 					result->verts[v1].flag|=CV_REMOVED;
 					
 					//clip point or delete it depending on whether the edges emanating from it intersect the triangle or not
-					int numNeighbors=result->verts[vc].numNeighbors;
+					int numNeighbors=result->verts[v1].numNeighbors;
 
 				
 					for(int t=0;t<numNeighbors;t++)
 						{
+						
 						int index=result->verts[v1].neighbors[t];
 						g[0]=result->verts[index].co[0];
 						g[1]=result->verts[index].co[1];
@@ -1186,12 +1215,12 @@
 
 						if(pointInTriangle(g,a,b,c))
 							{
+							
 						
-							
-
 							double a1,b1,c1,a2,b2,c2,t1,t2;
 							for(int s=0;s<3;s++)
 								{
+							
 								double v2x,v1x,v2y,v1y,v1z,v2z;
 								v2x=p[s][0];
 								v1x=p[(2+s)%3][0];
@@ -1203,37 +1232,49 @@
 
 								a1=v2x-v1x;
 							b1=x-g[0];
-							c1=v2x-g[0];
+							c1=v1x-x;
 							//g[0] == x4
 										
 							a2=v2y-v1y;
 							b2=y-g[1];
-							c2=v2y-g[1];
+							c2=v1y-y;
+							
 
 							t1=(b1*c2-b2*c1)/(a1*b2-a2*b1);
 							t2=(c1*a2-c2*a1)/(a1*b2-a2*b1);
 
 							double nx,ny,nz;
-							nx=t2*(g[0]-x)+g[0];
-							ny=t2*(g[1]-y)+g[1];
-							nz=t2*(g[2]-z)+g[2];
+							nx=t2*(g[0]-x)+x;
+							ny=t2*(g[1]-y)+y;
+								nz=t2*(g[2]-z)+z;
+							nx=t1*(v2x-v1x)+v1x;
+							ny=t1*(v2y-v1y)+v1y;
+							nz=t1*(v2z-v1z)+v1z;
+
+	
 							double d1,d1sum,d2,d2sum;
 							d1=sqrt((g[0]-x)*(g[0]-x)+(g[1]-y)*(g[1]-y)+(g[2]-z)*(g[2]-z));
 							d1sum=sqrt((g[0]-nx)*(g[0]-nx)+(g[1]-ny)*(g[1]-ny)+(g[2]-nz)*(g[2]-nz))+sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y)+(nz-z)*(nz-z));
 							d2=sqrt((v2x-v1x)*(v2x-v1x)+(v2y-v1y)*(v2y-v1y)+(v2z-v1z)*(v2z-v1z));
 							d2sum=sqrt((v2x-nx)*(v2x-nx)+(v2y-ny)*(v2y-ny)+(v2z-nz)*(v2z-nz))+sqrt((nx-v1x)*(nx-v1x)+(ny-v1y)*(ny-v1y)+(nz-v1z)*(nz-v1z));
 
-						//	printf("testing %lf %lf\n",fabs(d1-d1sum),fabs(d2-d2sum));
+						printf("testing %lf %lf %lf %lf\n",d1,d1sum,d2,d2sum);
 
-							if((fabs(d1-d1sum)<1e-6)&&(fabs(d2-d2sum)<1e-6))
+							if((fabs(d1-d1sum)<1e-10)&&(fabs(d2-d2sum)<1e-10))
 								{
+								
+								
 							result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));
 
+							
+
 							if(result->edges[result->verts[v1].edges[t]].v[0]==v1)
 								result->edges[result->verts[v1].edges[t]].v[0]=vc;
 							else
 								result->edges[result->verts[v1].edges[t]].v[1]=vc;
 
+							
+
 							result->verts[vc].co[0]=nx;
 							result->verts[vc].co[1]=ny;
 							result->verts[vc].co[2]=nz;
@@ -1241,7 +1282,9 @@
 							g[1]=ny;
 							g[2]=nz;
 							vc++;
+
 							
+
 							printf("testing %d\n",pointInTriangle(g,a,b,c));
 								break;
 								}
@@ -1252,7 +1295,7 @@
 					
 
 
-					}
+						}
 					//result->verts[vc].co[0]=0;
 					//		result->verts[vc].co[1]=0;
 					//		result->verts[vc].co[2]=0;
@@ -1264,9 +1307,8 @@
 
 					
 				}
-	}
-	
 			}
+			}
 
 
 			





More information about the Bf-blender-cvs mailing list