[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