[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