[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