[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31466] branches/soc-2010-rohith291991/ intern/comiso/intern/uv.cpp: Updates to uv.

Rohith B V rohith291991 at gmail.com
Thu Aug 19 23:30:14 CEST 2010


Revision: 31466
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31466
Author:   rohith291991
Date:     2010-08-19 23:30:14 +0200 (Thu, 19 Aug 2010)

Log Message:
-----------
Updates to uv.

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-19 21:11:48 UTC (rev 31465)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-19 21:30:14 UTC (rev 31466)
@@ -1330,7 +1330,7 @@
 	}*/
 
 				int numMerge=0;
-
+		
 for(int j=0;j<uRange;j++)
 	{
 	double x,y,z;
@@ -1383,7 +1383,11 @@
 			result->verts[vc].neighbors=NULL;
 			result->verts[vc].edges=NULL;
 			result->verts[vc].flag=0;
-		//	result->verts[vc].flag|=CV_INTEGER;
+			if(fabs(v1[0]-round(v1[0]))<1e-7)
+				{
+			result->verts[vc].flag|=CV_INTEGER;
+printf("hap1\n");
+				}
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
@@ -1395,14 +1399,14 @@
 
 			int prev=vc-1;
 
-	for(int k=ceil(v1[0]);k<v1[0];k++)
+	for(int k=ceil(v1[0]);k<v1[1];k++)
 		{
 
 		int current=vc;
-		if(!vertices[j-uStart][k-vStart].set)
+		if(!vertices[j][k-vStart].set)
 			{
-			vertices[j-uStart][k-vStart].set=1;
-			vertices[j-uStart][k-vStart].index=vc;
+			vertices[j][k-vStart].set=1;
+			vertices[j][k-vStart].index=vc;
 			
 			int un=j+uStart;
 			x=A[0]*un+B[0]*k+C[0];
@@ -1424,15 +1428,21 @@
 			result->verts[vc].flag=0;
 			result->verts[vc].flag|=CV_INTEGER;
 			result->verts[vc].numNeighbors=0;
+			printf("SET1\n");
 
 			result->verts[vc].index=vc;
 
 			vc++;
 			}
 		else
-			current=vertices[j-uStart][k-vStart].index;
+			{
+		
+			current=vertices[j][k-vStart].index;
 
+			}
+
 			{
+
 	if(result->edges==NULL)
 			result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
 			else
@@ -1473,6 +1483,7 @@
 		
 			ec++;
 		}
+	
 			prev=current;
 		//if((fabs(v1[0]-v1[1]))>1e-7)
 	
@@ -1490,7 +1501,7 @@
 			result->edges[ec].v[0]=prev;
 			result->edges[ec].v[1]=vc;
 
-			
+
 			ec++;
 		}
 
@@ -1511,7 +1522,11 @@
 			result->verts[vc].neighbors=NULL;
 			result->verts[vc].edges=NULL;
 			result->verts[vc].flag=0;
-		//	result->verts[vc].flag|=CV_INTEGER;
+			if(fabs(v1[1]-round(v1[1]))<1e-7)
+				{
+			result->verts[vc].flag|=CV_INTEGER;
+printf("hap2\n");
+				}
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
@@ -1551,8 +1566,6 @@
 				result->verts[vc].neighbors[result->verts[vc].numNeighbors-1]=result->verts[prev].index;
 				result->verts[vc].edges[result->verts[vc].numNeighbors-1]=ec-1;
 
-			
-
 			vc++;
 
 		
@@ -1598,7 +1611,11 @@
 			result->verts[vc].neighbors=NULL;
 			result->verts[vc].edges=NULL;
 			result->verts[vc].flag=0;
-		//	result->verts[vc].flag|=CV_INTEGER;
+			if(fabs(u1[0]-round(u1[0]))<1e-7)
+				{
+			result->verts[vc].flag|=CV_INTEGER;
+			printf("hap3\n");
+				}
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
@@ -1606,20 +1623,19 @@
 			mergeList[i][numMerge].index=vc;
 			numMerge++;
 
-
 			vc++;
 
 			int prev=vc-1;
 
-	for(int k=ceil(u1[0]);k<u1[0];k++)
+	for(int k=ceil(u1[0]);k<u1[1];k++)
 		{
 
 		int current=vc;
-		if(!vertices[k-uStart][j-vStart].set)
+		if(!vertices[k-uStart][j].set)
 			{
 			
-			vertices[k-uStart][j-vStart].set=1;
-			vertices[k-uStart][j-vStart].index=vc;
+			vertices[k-uStart][j].set=1;
+			vertices[k-uStart][j].index=vc;
 			
 			int un=j+vStart;
 			x=A[0]*k+B[0]*un+C[0];
@@ -1631,6 +1647,7 @@
 			else
 			{
 
+
 			result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
 
 			result->verts[vc].co[0]=x;
@@ -1641,10 +1658,10 @@
 			result->verts[vc].flag=0;
 			result->verts[vc].flag|=CV_INTEGER;
 			result->verts[vc].numNeighbors=0;
+			printf("SET2\n");
 
 			result->verts[vc].index=vc;
 
-
 			vc++;
 		
 		//if((fabs(v1[0]-v1[1]))>1e-7)
@@ -1654,9 +1671,11 @@
 		
 		
 	else
-		current=vertices[k-uStart][j-vStart].index;
+		current=vertices[k-uStart][j].index;
 
 	{
+	
+
 	if(result->edges==NULL)
 			result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
 			else
@@ -1715,6 +1734,7 @@
 			ec++;
 		}
 
+
 			x=A[0]*u1[1]+B[0]*v1[1]+C[0];
 			y=A[1]*u1[1]+B[1]*v1[1]+C[1];
 			z=A[2]*u1[1]+B[2]*v1[1]+C[2];	
@@ -1732,7 +1752,11 @@
 			result->verts[vc].neighbors=NULL;
 			result->verts[vc].edges=NULL;
 			result->verts[vc].flag=0;
-		//	result->verts[vc].flag|=CV_INTEGER;
+			if(fabs(u1[1]-round(u1[1]))<1e-7)
+				{
+				result->verts[vc].flag|=CV_INTEGER;
+				printf("hap4\n");
+				}
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
@@ -1822,7 +1846,7 @@
 		}*/
 		//printf("TEST\n");
 	}
-	printf("Face: %d Num borders: %d\n",i,numMerge);
+	//printf("Face: %d Num borders: %d\n",i,numMerge);
 
 /*
 
@@ -2409,11 +2433,10 @@
 							
 							}
 
-					//if(co2[0]==1&&fabs(co2[2]-0.239)<1e-3&&fabs(co2[1]-0.239)<1e-3)
-					//	printf("%lf %lf %lf %lf %lf %lf\n",co1[0],co1[1],co1[2],co2[0],co2[1],co2[2]);
+					
 						if((co1[0]-co2[0])*(co1[0]-co2[0])+(co1[1]-co2[1])*(co1[1]-co2[1])+(co1[2]-co2[2])*(co1[2]-co2[2])<1e-6)
 							{
-						//	printf("REACHED\n");
+					
 							terminate=1;
 							int min=mergeList[i][j].index;
 							int max=mergeList[index][k].index;
@@ -2427,10 +2450,23 @@
 								{
 								mergeList[index][k].index=min;
 								}
-							//	if(result->verts[max].index==27)
-							//printf("old %d new %d\n",result->verts[max].index,min);
+						
 							result->verts[max].index=result->verts[min].index;
-						
+							//Set neighbors
+					
+							int newNeighbors=result->verts[min].numNeighbors;
+					{
+					result->verts[max].neighbors=(int *)MEM_reallocN(result->verts[max].neighbors,(sizeof(int)*(result->verts[max].numNeighbors+newNeighbors)));
+					result->verts[max].edges=(int *)MEM_reallocN(result->verts[max].edges,(sizeof(int)*(result->verts[max].numNeighbors+newNeighbors)));
+					}
+
+					for(int g=0;g<newNeighbors;g++)
+						{
+				result->verts[max].neighbors[result->verts[max].numNeighbors+g]=result->verts[min].neighbors[g];
+				result->verts[max].edges[result->verts[max].numNeighbors+g]=result->verts[min].edges[g];
+						}
+
+						result->verts[max].numNeighbors+=newNeighbors;
 							
 														
 							}
@@ -2447,15 +2483,11 @@
 			}
 
 
-		
 
-		//printf("NIGGA2\n");
-
-
 	result->numVerts=vc;
 	result->numEdges=ec;
 
-	//printf("NIGGA\n");
+	
 		for(int i=0;i<result->numEdges;i++)
 			{
 			if(result->edges[i].v[0]==27)
@@ -2468,16 +2500,143 @@
 
 			result->edges[i].v[1]=result->verts[result->edges[i].v[1]].index;
 
-		//	printf("v1 old %d v1 new %d v2 old %d v2 new %d\n",result->edges[i].v[0],result->verts[result->edges[i].v[0]].index,result->edges[i].v[1],result->verts[result->edges[i].v[1]].index);
-		//	printf("TESTfasg %d %d\n",i,result->numEdges);
+	
 			
 			}
-	printf("NIGGA3\n");
 
+
+
+	std::vector< std::vector <int> > currentVerts; //List of faces to expand for BFS/Dijkstra
+	int numCV=1; //Number of constrained vertices
+	int j=0;
+	int numsing=0;
+
+	vc1=0;
+	ec1=0;
+		currentVerts.resize(numCV);
+	
+	for(int i=0;i<result->numVerts;i++)
+		if(result->verts[i].flag & CV_INTEGER)
+			{
+			result->verts[i].flag|= CV_VISITED;
+			result->verts[i].pvert=0;
+	currentVerts[0].push_back(result->verts[i].index);
+			if(result1->verts==NULL)
+			{result1->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc1+1), "vertices");}
+			else
+			{
+
+			result1->verts=(CVert*)MEM_reallocN(result1->verts,(sizeof(CVert)*(vc1+1)));}
+
+			result1->verts[vc1].co[0]=result->verts[i].co[0];
+			result1->verts[vc1].co[1]=result->verts[i].co[1];
+			result1->verts[vc1].co[2]=result->verts[i].co[2];
+			result1->verts[vc1].neighbors=NULL;
+			result1->verts[vc1].edges=NULL;
+			result1->verts[vc1].flag=0;
+			result1->verts[vc1].numNeighbors=0;
+			vc1++;
+
+
+			break;
+			}
+
+	
+
+		
+			//Iterative Dijsktra on primal from each singularity
+			int terminate=1;
+
+
+			while(terminate)
+				{
+
+				terminate=0;
+
+				for(int i=0;i<numCV;i++)
+					{
+
+					std::vector<int> newVerts;
+					newVerts.resize(0);
+
+					for(int j=0;j<currentVerts[i].size();j++)
+						{
+
+						terminate++;
+
+						int index=result->verts[currentVerts[i][j]].pvert;
+						CVert *vert=&(result->verts[index]);
+
+						for(int k=0;k<vert->numNeighbors;k++)
+							{
+							int nIndex=vert->neighbors[k];
+
+							if(!(result->verts[nIndex].flag & CV_VISITED))
+								{
+
+								result->verts[nIndex].flag |= CV_VISITED;
+								if(!(result->verts[i].flag & CV_INTEGER))
+								result->verts[nIndex].pvert=index;
+								else
+									{
+									
+									result->verts[nIndex].pvert=vc1;
+
+									//add point
+									if(result1->verts==NULL)
+										{result1->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc1+1), "vertices");}
+									else
+										{
+
+										result1->verts=(CVert*)MEM_reallocN(result1->verts,(sizeof(CVert)*(vc1+1)));}
+
+									result1->verts[vc1].co[0]=result->verts[i].co[0];
+									result1->verts[vc1].co[1]=result->verts[i].co[1];
+									result1->verts[vc1].co[2]=result->verts[i].co[2];
+									result1->verts[vc1].neighbors=NULL;
+									result1->verts[vc1].edges=NULL;
+									result1->verts[vc1].flag=0;
+									result1->verts[vc1].numNeighbors=0;
+									vc1++;
+
+									printf("new point!!\n");
+									//create edge
+									if(result1->edges==NULL)
+			result1->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec1+1), "edges");
+			else
+			result1->edges=(CEdge*)MEM_reallocN(result1->edges,(sizeof(CEdge)*(ec1+1)));
+	
+
+			result1->edges[ec1].v[0]=vc-1;
+			result1->edges[ec1].v[1]=index;
+									
+									}
+
+
+							
+								newVerts.push_back(nIndex);
+	
+
+
+								}
+
+							}
+
+
+						}
+					currentVerts[i].resize(newVerts.size());
+
+					for(int l=0;l<newVerts.size();l++)
+						currentVerts[i][l]=newVerts[l];
+
+					}
+				}
+
+
 	result1->numVerts=vc1;	
 	result1->numEdges=ec1;	
 
-	printf("BLAH\n");
+	//printf("BLAH\n");
 
 
 	/*	for(int i=0;i<result->numVerts;i++)





More information about the Bf-blender-cvs mailing list