[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31427] branches/soc-2010-rohith291991/ intern/comiso: coarse quadrangulation.
Rohith B V
rohith291991 at gmail.com
Tue Aug 17 22:04:18 CEST 2010
Revision: 31427
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31427
Author: rohith291991
Date: 2010-08-17 22:04:18 +0200 (Tue, 17 Aug 2010)
Log Message:
-----------
coarse quadrangulation.
Modified Paths:
--------------
branches/soc-2010-rohith291991/intern/comiso/extern/uv.h
branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
Modified: branches/soc-2010-rohith291991/intern/comiso/extern/uv.h
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/extern/uv.h 2010-08-17 17:41:59 UTC (rev 31426)
+++ branches/soc-2010-rohith291991/intern/comiso/extern/uv.h 2010-08-17 20:04:18 UTC (rev 31427)
@@ -3,6 +3,20 @@
#include "CMesh.h"
+typedef struct UVline
+ {
+ double u[2],v[2];
+ int set;
+
+ }UVline;
+
+typedef struct UVpoint
+ {
+ int set;
+ int index;
+
+ }UVpoint;
+
#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-17 17:41:59 UTC (rev 31426)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp 2010-08-17 20:04:18 UTC (rev 31427)
@@ -10,38 +10,39 @@
#define CV_INTEGER 1<<2
+
int sameSide(Vector3d p1, Vector3d p2, Vector3d a, Vector3d b)
{
- Vector3d cp1;
- Vector3d cp2;
+ Vector3d cp1;
+ Vector3d cp2;
Vector3d p,q,r;
p=b-a;
q=p1-a;
r=p2-a;
-
+
cp1=p.cross(q);
cp2=p.cross(r);
if (cp1.dot(cp2) >= 0)
return 1;
- else
+ else
return 0;
}
int pointInTriangle(Vector3d p, Vector3d a, Vector3d b, Vector3d c)
{
-
- if (sameSide(p,a,b,c) && sameSide(p,b,a,c) && sameSide(p,c,a,b))
+
+ if (sameSide(p,a,b,c) && sameSide(p,b,a,c) && sameSide(p,c,a,b))
{
- //std::cout<<"point: "<<p<<"a: "<<a<<"b: "<<b<<"c: "<<c<<"\n\n";
+ //std::cout<<"point: "<<p<<"a: "<<a<<"b: "<<b<<"c: "<<c<<"\n\n";
return 1;
-
-
+
+
}
else
{
//printf("haha %lf %lf %lf %lf\n",p,a,b,c);
-
-
+
+
return 0;
}
}
@@ -316,7 +317,7 @@
v[1]=cm->faces[j].v[1];
v[2]=cm->faces[j].v[2];
- for (int t=0; t<3;t++)
+ for (int t=0; t<3;t++)
{
@@ -352,25 +353,25 @@
//Mark all pointers required
for(int t=0;t<3;t++)
{
-
+
hm->edges[ec+t].face=&hm->faces[j];
hm->edges[ec+t].prev=&hm->edges[ec+(t+2)%3];
hm->edges[ec+t].next=&hm->edges[ec+(t+1)%3];
-
+
hm->edges[ec+t].flag=cm->edges[e[t]].flag;
-
+
hm->edges[ec+t].index=cm->edges[e[t]].index;
hm->edges[ec+t].vertex=&hm->verts[cm->faces[j].v[2-t]];
hm->verts[cm->faces[j].v[2-t]].edge=&hm->edges[ec+t];
-
+
int sign=1;
if(cm->faces[j].index!=cm->edges[e[t]].faces[0])
sign=-1;
-
+
hm->edges[ec+t].p=sign*cm->edges[e[t]].p;
hm->edges[ec+t].kappa=sign*cm->edges[e[t]].kappa;
-;
+ ;
}
ec+=3;
@@ -529,7 +530,7 @@
HEdge * hi=&hm->edges[i];
hi->is_resp=0;
-
+
}
for(int i=0;i<totedge;i++)
@@ -668,8 +669,8 @@
}
}
-if(constraint==0)
-constraint++;
+ if(constraint==0)
+ constraint++;
C.resize(constraint,2*nvar+1) ;
C.setZero();
@@ -732,13 +733,13 @@
MISolver miso;
miso.solve( A, x, b, ids_to_round);
cs.restore_eliminated_vars( C,x, ids_to_elim, new_idx);
-/*
-std::cout<<"x: \n\n";
+ /*
+ std::cout<<"x: \n\n";
for(int i=0;i<x.size();i++)
- {
+ {
- std::cout<<x[i]<<"\n";
- }*/
+ std::cout<<x[i]<<"\n";
+ }*/
for(int i=0;i<totedge;i++){
HEdge *hi=&hm->edges[i];
@@ -760,38 +761,38 @@
}
- CMesh* extractMesh(HMesh *hm)
-
- {
+CMesh* extractMesh(HMesh *hm)
- CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
- CMesh* result1=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
+ {
- int vc=0;
- int ec=0;
- int vc1=0;
- int ec1=0;
+ CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
+ CMesh* result1=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");
- result->verts=NULL;
- result->faces=NULL;
- result->edges=NULL;
- result1->verts=NULL;
- result1->faces=NULL;
- result1->edges=NULL;
+ int vc=0;
+ int ec=0;
+ int vc1=0;
+ int ec1=0;
- for (int i=0;i<hm->numFaces;i++)
- {
+ result->verts=NULL;
+ result->faces=NULL;
+ result->edges=NULL;
+ result1->verts=NULL;
+ result1->faces=NULL;
+ result1->edges=NULL;
+ for (int i=0;i<hm->numFaces;i++)
+ {
- double u[3];
- double v[3];
- double p[3][3];
-
- HEdge *hi=hm->faces[i].edge;
-
- for(int j=0;j<3;j++)
- {
+
+ double u[3];
+ double v[3];
+ double p[3][3];
+
+ HEdge *hi=hm->faces[i].edge;
+
+ for(int j=0;j<3;j++)
+ {
u[j]=hi->u;
v[j]=hi->v;
p[j][0]=hi->vertex->co[0];
@@ -799,66 +800,61 @@
p[j][2]=hi->vertex->co[2];
hi=hi->next;
- }
+ }
-
- double minu,maxu,minv,maxv;
- int uRange=0;
- int vRange=0;
- int uStart=0;
- int vStart=0;
- minu=maxu=hi->u;
- minv=maxv=hi->v;
+ double minu,maxu,minv,maxv;
+ int uRange=0;
+ int vRange=0;
+ int uStart=0;
+ int vStart=0;
- for(int j=0;j<3;j++)
+ minu=maxu=hi->u;
+ minv=maxv=hi->v;
+
+ for(int j=0;j<3;j++)
+ {
+ if(u[j]<minu)
{
- if(u[j]<minu)
- {
- minu=u[j];
- }
- if(v[j]<minv)
- {
- minv=v[j];
- }
- if(u[j]>maxu)
- {
- maxu=u[j];
- }
- if(v[j]>maxv)
- {
- maxv=v[j];
- }
-
+ minu=u[j];
}
+ if(v[j]<minv)
+ {
+ minv=v[j];
+ }
+ if(u[j]>maxu)
+ {
+ maxu=u[j];
+ }
+ if(v[j]>maxv)
+ {
+ maxv=v[j];
+ }
- if(fabs(minu-(int)minu)<1e-10)
- uStart=minu;
- else
- uStart=(int)(minu+1);
+ }
- if(fabs(minv-(int)minv)<1e-10)
- vStart=minv;
- else
- vStart=(int)(minv+1);
+ uStart=ceil(minu);
+ vStart=ceil(minv);
+ uRange=floor(maxu);
+ vRange=floor(maxv);
+ uRange-=uStart;
+ vRange-=vStart;
+ if(uRange<0)
+ uRange=0;
+ if(vRange<0)
+ vRange=0;
+ printf("%d %d %lf %lf %d %d %lf %lf\n",uStart,uRange+uStart,minu,maxu,vStart,vRange+vStart,minv,maxv);
- uRange=(int)(maxu)-uStart;
- if(uRange<0)
- uRange=0;
- vRange=(int)(maxv)-vStart;
- 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);
+ // 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);
-
- //Ax*u1+Bx*v1+Cx=x1
+
+ //Ax*u1+Bx*v1+Cx=x1
//Ax*u2+Bx*v2+Cx=x2
//Ax*u3+Bx*v3+Cx=x3
- //solve for Ax Bx Cx
- //repeat for y,z
+ //solve for Ax Bx Cx
+ //repeat for y,z
double A[3],B[3],C[3];
A[0]=0;
@@ -873,16 +869,16 @@
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]);
+
+ //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++)
{
-
- P=u[0]-u[1]; Q=v[0]-v[1];
- R=u[0]-u[2]; S=v[0]-v[2];
- T=p[0][j]-p[1][j]; U=p[0][j]-p[2][j];
+ P=u[0]-u[1]; Q=v[0]-v[1];
+ R=u[0]-u[2]; S=v[0]-v[2];
+ T=p[0][j]-p[1][j]; U=p[0][j]-p[2][j];
+
det=P*S-R*Q;
if(det==0)
{
@@ -890,27 +886,27 @@
}
else
{
-idet=1/det;
-A[j]=(T*S-U*Q)*idet;
-B[j]=(P*U-R*T)*idet;
-C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
+ idet=1/det;
+ A[j]=(T*S-U*Q)*idet;
+ B[j]=(P*U-R*T)*idet;
+ C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
}
}
-
+/*
Vector3d e[3] ;
for(int j=0; j<3; ++j)
{
e[j][0] = p[j][0]-p[(j+2)%3][0];
e[j][1] = p[j][1]-p[(j+2)%3][1];
e[j][2] = p[j][2]-p[(j+2)%3][2];
-
+
};
Vector3d normal = e[1].cross(e[0]);
normal.normalize() ;
Vector3d ut ;
- // Vector3d x;
+ // Vector3d x;
ut[0]=hm->verts[hm->faces[i].v[1]].co[0]-hm->verts[hm->faces[i].v[0]].co[0];
ut[1]=hm->verts[hm->faces[i].v[1]].co[1]-hm->verts[hm->faces[i].v[0]].co[1];
@@ -923,7 +919,7 @@
//hm->faces[l].ut[0]=ut[0];
//hm->faces[l].ut[1]=ut[1];
- // hm->faces[l].ut[2]=ut[2];
+ // hm->faces[l].ut[2]=ut[2];
Vector3d vt = normal.cross(ut);
vt.normalize();
@@ -934,240 +930,761 @@
double x,y,z;
x=(p[0][0]+p[1][0]+p[2][0])/3;
- y=(p[0][1]+p[1][1]+p[2][1])/3;
+ y=(p[0][1]+p[1][1]+p[2][1])/3;
z=(p[0][2]+p[1][2]+p[2][2])/3;
if(result->verts==NULL)
- {result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
- else
- {
-
- result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
-
- result->verts[vc].co[0]=x+ut[0]*0.04;
- result->verts[vc].co[1]=y+ut[1]*0.04;
- result->verts[vc].co[2]=z+ut[2]*0.04;
- result->verts[vc].neighbors=NULL;
- result->verts[vc].edges=NULL;
- result->verts[vc].numNeighbors=0;
+ {result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
+ else
+ {
- result->verts[vc].index=vc;
+ result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
- vc++;
+ result->verts[vc].co[0]=x+ut[0]*0.04;
+ result->verts[vc].co[1]=y+ut[1]*0.04;
+ result->verts[vc].co[2]=z+ut[2]*0.04;
+ result->verts[vc].neighbors=NULL;
+ result->verts[vc].edges=NULL;
+ result->verts[vc].numNeighbors=0;
- if(result->verts==NULL)
- {result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
- else
- {
-
- result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
- result->verts[vc].co[0]=x-ut[0]*0.04;
- result->verts[vc].co[1]=y-ut[1]*0.04;
- result->verts[vc].co[2]=z-ut[2]*0.04;
- result->verts[vc].neighbors=NULL;
- result->verts[vc].edges=NULL;
- result->verts[vc].numNeighbors=0;
+ result->verts[vc].index=vc;
- result->verts[vc].index=vc;
+ vc++;
- vc++;
+ if(result->verts==NULL)
+ {result->verts=(CVert*)MEM_mallocN(sizeof(CVert)*(vc+1), "vertices");}
+ else
+ {
- if(result->edges==NULL)
- result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
- else
- result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*(ec+1)));
+ result->verts=(CVert*)MEM_reallocN(result->verts,(sizeof(CVert)*(vc+1)));}
+ result->verts[vc].co[0]=x-ut[0]*0.04;
+ result->verts[vc].co[1]=y-ut[1]*0.04;
+ result->verts[vc].co[2]=z-ut[2]*0.04;
+ result->verts[vc].neighbors=NULL;
+ result->verts[vc].edges=NULL;
+ result->verts[vc].numNeighbors=0;
- result->edges[ec].v[0]=vc-2;
- result->edges[ec].v[1]=vc-1;
- ec++;
+ result->verts[vc].index=vc;
-
+ vc++;
- //Take care of all internal points
+ if(result->edges==NULL)
+ result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+1), "edges");
+ else
+ result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*(ec+1)));
-/*
- std::vector< std::vector <int> > vertices;
- vertices.resize(uRange+2);
- for(int j=0;j<uRange+2;j++)
+ result->edges[ec].v[0]=vc-2;
+ result->edges[ec].v[1]=vc-1;
+ ec++;
+
+*/
+ std::vector <UVline> verticesu;
+ std::vector <UVline> verticesv;
+ std::vector < std::vector <UVpoint> > vertices;
+
+
+
+
+
+ uStart-=1;
+ uRange+=2;
+ vStart-=1;
+ vRange+=2;
+
+ verticesu.resize(uRange);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list