[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31464] branches/soc-2010-rohith291991: Stitching of vertices.

Rohith B V rohith291991 at gmail.com
Thu Aug 19 22:03:24 CEST 2010


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

Log Message:
-----------
Stitching of vertices.

Modified Paths:
--------------
    branches/soc-2010-rohith291991/intern/comiso/extern/uv.h
    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/extern/uv.h
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/extern/uv.h	2010-08-19 17:46:00 UTC (rev 31463)
+++ branches/soc-2010-rohith291991/intern/comiso/extern/uv.h	2010-08-19 20:03:24 UTC (rev 31464)
@@ -17,6 +17,15 @@
 
 	}UVpoint;
 
+typedef struct TVert
+	{
+	int neighbors[4];
+	int set[4];
+	double u,v;
+	
+	int index;
+	}TVert;
+
 #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-19 17:46:00 UTC (rev 31463)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp	2010-08-19 20:03:24 UTC (rev 31464)
@@ -780,6 +780,11 @@
 	result1->faces=NULL;
 	result1->edges=NULL;
 
+	//vector of vectors of tvert
+	std::vector < std::vector<TVert> > mergeList;
+
+	mergeList.resize(hm->numFaces);
+	
 	for (int i=0;i<hm->numFaces;i++)
 		{
 
@@ -1324,9 +1329,8 @@
 	
 	}*/
 
+				int numMerge=0;
 
-
-
 for(int j=0;j<uRange;j++)
 	{
 	double x,y,z;
@@ -1383,6 +1387,9 @@
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
+			mergeList[i].resize(numMerge+1);
+			mergeList[i][numMerge].index=vc;
+			numMerge++;
 
 			vc++;
 
@@ -1434,6 +1441,36 @@
 
 			result->edges[ec].v[0]=prev;
 			result->edges[ec].v[1]=current;
+
+			
+			if(result->verts[prev].neighbors==NULL)
+					{
+					result->verts[prev].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[prev].numNeighbors)),"neighbors");
+					result->verts[prev].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[prev].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[prev].neighbors=(int *)MEM_reallocN(result->verts[prev].neighbors,(sizeof(int)*(++result->verts[prev].numNeighbors)));
+					result->verts[prev].edges=(int *)MEM_reallocN(result->verts[prev].edges,(sizeof(int)*(result->verts[prev].numNeighbors)));
+					}
+
+				result->verts[prev].neighbors[result->verts[prev].numNeighbors-1]=result->verts[current].index;
+				result->verts[prev].edges[result->verts[prev].numNeighbors-1]=ec;
+
+				if(result->verts[current].neighbors==NULL)
+					{
+					result->verts[current].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[current].numNeighbors)),"neighbors");
+					result->verts[current].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[current].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[current].neighbors=(int *)MEM_reallocN(result->verts[current].neighbors,(sizeof(int)*(++result->verts[current].numNeighbors)));
+					result->verts[current].edges=(int *)MEM_reallocN(result->verts[current].edges,(sizeof(int)*(result->verts[current].numNeighbors)));
+					}
+
+				result->verts[current].neighbors[result->verts[current].numNeighbors-1]=result->verts[prev].index;
+				result->verts[current].edges[result->verts[current].numNeighbors-1]=ec;
+		
 			ec++;
 		}
 			prev=current;
@@ -1452,6 +1489,8 @@
 
 			result->edges[ec].v[0]=prev;
 			result->edges[ec].v[1]=vc;
+
+			
 			ec++;
 		}
 
@@ -1476,7 +1515,44 @@
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
+						mergeList[i].resize(numMerge+1);
+			mergeList[i][numMerge].index=vc;
+			numMerge++;
 
+
+			if(result->verts[prev].neighbors==NULL)
+					{
+					result->verts[prev].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[prev].numNeighbors)),"neighbors");
+					result->verts[prev].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[prev].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[prev].neighbors=(int *)MEM_reallocN(result->verts[prev].neighbors,(sizeof(int)*(++result->verts[prev].numNeighbors)));
+					result->verts[prev].edges=(int *)MEM_reallocN(result->verts[prev].edges,(sizeof(int)*(result->verts[prev].numNeighbors)));
+					}
+
+			
+				result->verts[prev].neighbors[result->verts[prev].numNeighbors-1]=result->verts[vc].index;
+				result->verts[prev].edges[result->verts[prev].numNeighbors-1]=ec-1;
+		
+				if(result->verts[vc].neighbors==NULL)
+					{
+					result->verts[vc].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[vc].numNeighbors)),"neighbors");
+					result->verts[vc].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[vc].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[vc].neighbors=(int *)MEM_reallocN(result->verts[vc].neighbors,(sizeof(int)*(++result->verts[vc].numNeighbors)));
+					result->verts[vc].edges=(int *)MEM_reallocN(result->verts[vc].edges,(sizeof(int)*(result->verts[vc].numNeighbors)));
+					}
+
+	
+
+				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++;
 
 		
@@ -1526,7 +1602,11 @@
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
+			mergeList[i].resize(numMerge+1);
+			mergeList[i][numMerge].index=vc;
+			numMerge++;
 
+
 			vc++;
 
 			int prev=vc-1;
@@ -1564,6 +1644,7 @@
 
 			result->verts[vc].index=vc;
 
+
 			vc++;
 		
 		//if((fabs(v1[0]-v1[1]))>1e-7)
@@ -1571,7 +1652,6 @@
 
 			}
 		
-
 		
 	else
 		current=vertices[k-uStart][j-vStart].index;
@@ -1585,6 +1665,36 @@
 
 			result->edges[ec].v[0]=prev;
 			result->edges[ec].v[1]=current;
+
+	if(result->verts[prev].neighbors==NULL)
+					{
+					result->verts[prev].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[prev].numNeighbors)),"neighbors");
+					result->verts[prev].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[prev].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[prev].neighbors=(int *)MEM_reallocN(result->verts[prev].neighbors,(sizeof(int)*(++result->verts[prev].numNeighbors)));
+					result->verts[prev].edges=(int *)MEM_reallocN(result->verts[prev].edges,(sizeof(int)*(result->verts[prev].numNeighbors)));
+					}
+
+				result->verts[prev].neighbors[result->verts[prev].numNeighbors-1]=result->verts[current].index;
+				result->verts[prev].edges[result->verts[prev].numNeighbors-1]=ec;
+
+				if(result->verts[current].neighbors==NULL)
+					{
+					result->verts[current].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[current].numNeighbors)),"neighbors");
+					result->verts[current].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[current].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[current].neighbors=(int *)MEM_reallocN(result->verts[current].neighbors,(sizeof(int)*(++result->verts[current].numNeighbors)));
+					result->verts[current].edges=(int *)MEM_reallocN(result->verts[current].edges,(sizeof(int)*(result->verts[current].numNeighbors)));
+					}
+
+				result->verts[current].neighbors[result->verts[current].numNeighbors-1]=result->verts[prev].index;
+				result->verts[current].edges[result->verts[current].numNeighbors-1]=ec;
+			
+
 			ec++;
 	}
 	prev=current;
@@ -1600,6 +1710,8 @@
 
 			result->edges[ec].v[0]=prev;
 			result->edges[ec].v[1]=vc;
+		
+		
 			ec++;
 		}
 
@@ -1624,12 +1736,47 @@
 			result->verts[vc].numNeighbors=0;
 
 			result->verts[vc].index=vc;
+						mergeList[i].resize(numMerge+1);
+			mergeList[i][numMerge].index=vc;
+			numMerge++;
 
+				if(result->verts[prev].neighbors==NULL)
+					{
+					result->verts[prev].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[prev].numNeighbors)),"neighbors");
+					result->verts[prev].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[prev].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[prev].neighbors=(int *)MEM_reallocN(result->verts[prev].neighbors,(sizeof(int)*(++result->verts[prev].numNeighbors)));
+					result->verts[prev].edges=(int *)MEM_reallocN(result->verts[prev].edges,(sizeof(int)*(result->verts[prev].numNeighbors)));
+					}
+
+				result->verts[prev].neighbors[result->verts[prev].numNeighbors-1]=result->verts[vc].index;
+				result->verts[prev].edges[result->verts[prev].numNeighbors-1]=ec-1;
+
+				if(result->verts[vc].neighbors==NULL)
+					{
+					result->verts[vc].neighbors=(int *)MEM_mallocN((sizeof(int)*(++result->verts[vc].numNeighbors)),"neighbors");
+					result->verts[vc].edges=(int *)MEM_mallocN((sizeof(int)*(result->verts[vc].numNeighbors)),"edges");
+					}
+				else
+					{
+					result->verts[vc].neighbors=(int *)MEM_reallocN(result->verts[vc].neighbors,(sizeof(int)*(++result->verts[vc].numNeighbors)));
+					result->verts[vc].edges=(int *)MEM_reallocN(result->verts[vc].edges,(sizeof(int)*(result->verts[vc].numNeighbors)));
+					}
+
+				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++;
 
 		
 		}
 
+		
+
 	//add edge
 /*	if((fabs(u1[0]-u1[1]))>1e-7)
 		{
@@ -1673,7 +1820,9 @@
 
 		}
 		}*/
+		//printf("TEST\n");
 	}
+	printf("Face: %d Num borders: %d\n",i,numMerge);
 
 /*
 
@@ -2225,14 +2374,112 @@
 			}*/
 		}
 
+		for(int i=0;i<hm->numFaces;i++)
+			{
+			
+			//Merge close points
+         /*  for(int k=0;k<mergeList[i].size();k++)
+			   {
+			   printf("index %d coords: %lf %lf %lf\n",mergeList[i][k].index,result->verts[mergeList[i][k].index].co[0],result->verts[mergeList[i][k].index].co[1],result->verts[mergeList[i][k].index].co[2]);
+			   
+			   }*/
+		
+		//   printf("\n");
+			HEdge* hi=hm->faces[i].edge;
+			for(int t=0;t<3;t++)
+				{
+				int index=hi->opposite->face->index;
+				hi=hi->next;
+	int terminate=1;
+			while(terminate)
+				{
+				terminate=0;
+				
+				for(int j=0;j<mergeList[i].size();j++)
+					{
+					for(int k=0;k<mergeList[index].size();k++)
+						{
+						
+						double co1[3],co2[3];
+					if(mergeList[i][j].index!=mergeList[index][k].index)
+							{for(int g=0;g<3;g++)
+							{
+							co1[g]=result->verts[mergeList[i][j].index].co[g];
+							co2[g]=result->verts[mergeList[index][k].index].co[g];
+							
+							}
 
+					//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;
+							if(mergeList[index][k].index<min)
+								{
+								min=mergeList[index][k].index;
+								max=mergeList[i][j].index;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list