[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31072] branches/soc-2010-rohith291991: Updates to mesh extraction.
Rohith B V
rohith291991 at gmail.com
Thu Aug 5 18:55:01 CEST 2010
Revision: 31072
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31072
Author: rohith291991
Date: 2010-08-05 18:55:01 +0200 (Thu, 05 Aug 2010)
Log Message:
-----------
Updates to mesh extraction. Does not work as expected.
Modified Paths:
--------------
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/intern/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp 2010-08-05 16:05:30 UTC (rev 31071)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp 2010-08-05 16:55:01 UTC (rev 31072)
@@ -389,7 +389,7 @@
}
h/=totedge;
-// h*=factor;
+h*=0.1;
// std::cout<<h<<"\n";
double hh = h * h ;
@@ -734,12 +734,19 @@
{
- CMesh* result;
+ CMesh* result=(CMesh*)MEM_mallocN(sizeof(CMesh), "cmesh");;
-
+ int vc=0;
+ int ec=0;
+
+ result->verts=NULL;
+ result->faces=NULL;
+ result->edges=NULL;
+
for (int i=0;i<hm->numFaces;i++)
{
+
double u[3];
double v[3];
double p[3][3];
@@ -748,15 +755,15 @@
for(int j=0;j<3;j++)
{
- u[0]=hi->u;
- v[0]=hi->v;
+ u[j]=hi->u;
+ v[j]=hi->v;
p[j][0]=hi->vertex->co[0];
p[j][1]=hi->vertex->co[1];
p[j][2]=hi->vertex->co[2];
hi=hi->next;
}
-
+
double minu,maxu,minv,maxv;
int uRange=0;
int vRange=0;
@@ -787,6 +794,7 @@
}
+
if((minu-(int)minu)<1e-10)
uStart=minu;
else
@@ -804,6 +812,7 @@
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);
@@ -817,26 +826,44 @@
double A[3],B[3],C[3];
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++)
{
+
P=u[0]-u[1]; Q=v[0]-v[1];
R=u[0]-u[2]; S=v[0]-v[2];
- T=p[j][0]-p[j][1]; U=p[j][0]-p[j][2];
+ T=p[0][j]-p[1][j]; U=p[0][j]-p[2][j];
det=P*S-R*Q;
+ if(det==0)
+ {
+ printf("blah\n");
+ }
+ else
+ {
idet=1/det;
A[j]=(T*S-U*Q)*idet;
B[j]=(P*U-R*T)*idet;
-C[j]=p[j][0]-A[j]*p[j][0]-B[j]*p[j][0];
+C[j]=p[0][j]-A[j]*u[0]-B[j]*v[0];
+ }
}
+
//Take care of all internal points
- for(int j=uStart;j<uRange;j++)
+ std::vector< std::vector <int> > vertices;
+ vertices.resize(uRange);
+ for(int j=0;j<uRange;j++)
{
- for(int k=vStart;k<vRange;k++)
+ vertices[j].resize(vRange);
+
+ }
+
+
+ for(int j=uStart;j<uStart+uRange;j++)
+ {
+ for(int k=vStart;k<vStart+vRange;k++)
{
double x,y,z;
@@ -845,18 +872,125 @@
y=A[1]*j+B[1]*k+C[1];
z=A[2]*j+B[2]*k+C[2];
+ printf("%lf %lf %lf\n",x,y,z);
+
//Add point to CMesh
- //Add relevant edge connectivities to CMesh
- // Include points where edges meet triangle border
+
+
+ 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;
+ result->verts[vc].co[1]=y;
+ result->verts[vc].co[2]=z;
+ result->verts[vc].neighbors=NULL;
+ result->verts[vc].edges=NULL;
+ result->verts[vc].numNeighbors=0;
+ result->verts[vc].index=vc;
+
+
+ vertices[j-uStart][k-vStart]=vc;
+
+ vc++;
+
}
}
+
+ //Add relevant edge connectivities to CMesh
+ /* if(result->edges==NULL)
+ result->edges=(CEdge*)MEM_mallocN(sizeof(CEdge)*(ec+((uRange-1)*vRange+(vRange-1)*uRange)), "edges");
+ else
+ result->edges=(CEdge*)MEM_reallocN(result->edges,(sizeof(CEdge)*((uRange-1)*vRange+(vRange-1)*uRange)));
+
+ printf("test4\n");
+ for(int j=0;j<uRange;j++)
+ {
+ for(int k=0;k<vRange-1;k++)
+ {
+
+ printf("test5\n");
+ int v1,v2;
+ v1=vertices[j][k];
+ v2=vertices[j][k+1];
+
+ result->edges[ec].v[0]=v1;
+ result->edges[ec].v[1]=v2;
+ ec++;
+
+
+
+ if(result->verts[v1].neighbors==NULL)
+ result->verts[v1].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v1].numNeighbors), "neighbors");
+ else
+ result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+ result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+
+ if(result->verts[v2].neighbors==NULL)
+ result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+ else
+ result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+ result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+
+ printf("test6\n");
+
+ }
+
}
+
+ for(int k=0;k<vRange;k++)
+ {
+ for(int j=0;j<uRange-1;j++)
+ {
+
+
+ int v1,v2;
+ v1=vertices[j][k];
+ v2=vertices[j+1][k];
+
+ result->edges[ec].v[0]=v1;
+ 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");
+
+ else
+ result->verts[v1].neighbors=(int*)MEM_reallocN(result->verts[v1].neighbors,(sizeof(int)*(++result->verts[v1].numNeighbors)));
+ result->verts[v1].neighbors[result->verts[v1].numNeighbors-1]=v2;
+
+ if(result->verts[v2].neighbors==NULL)
+ result->verts[v2].neighbors=(int*)MEM_mallocN(sizeof(int)*(++result->verts[v2].numNeighbors), "neighbors");
+ else
+ result->verts[v2].neighbors=(int*)MEM_reallocN(result->verts[v2].neighbors,(sizeof(int)*(++result->verts[v2].numNeighbors)));
+ result->verts[v2].neighbors[result->verts[v2].numNeighbors-1]=v1;
+ printf("test8\n");
+
+ }
+
+ }
+ //for loop
+ // Include points where edges meet triangle border
+
+*/
+
+ }
+
+
+ result->numVerts=vc;
+ result->numEdges=ec;
+
+
return result;
}
Modified: branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c
===================================================================
--- branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c 2010-08-05 16:05:30 UTC (rev 31071)
+++ branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c 2010-08-05 16:55:01 UTC (rev 31072)
@@ -63,13 +63,13 @@
{
Comiso solver;
- CMesh cm;
+ CMesh cm,*cm1;
HMesh hm;
QuadrangulateModifierData *dmd = (QuadrangulateModifierData*) md;
DerivedMesh *dm = derivedData, *result = NULL;
- MVert *mvert;
- MFace *mface;
- MEdge *medge;
+ MVert *mvert,*mvertnew;
+ MFace *mface,*mfacenew;
+ MEdge *medge,*medgenew;
int totvert, totface,totedge;
int a, numTris;
int i,j;
@@ -303,10 +303,42 @@
//u v parametrization
copyHC(&hm,&cm);
mi_quad_param(&hm);
- extractMesh(&hm);
+ cm1=extractMesh(&hm);
+
+ result = CDDM_from_template(dm, 0, 0, 0);
+
+ //mvertnew=result-
+
+ mvertnew = dm->getVertArray(dm);
+ medgenew = dm->getEdgeArray(dm);
+ mvertnew=(MVert*)MEM_mallocN(sizeof(MVert)*cm1->numVerts, "vertices");
+ medgenew=(MEdge*)MEM_mallocN(sizeof(MEdge)*cm1->numEdges, "edges");
+
+ result->numVertData=cm1->numVerts;
+ result->numEdgeData=cm1->numEdges;
+
+ for(a=0;a<result->numVertData;a++)
+ {
+ mvertnew[a].co[0]=cm1->verts[a].co[0];
+ mvertnew[a].co[1]=cm1->verts[a].co[1];
+ mvertnew[a].co[2]=cm1->verts[a].co[2];
+
+ //printf("%f %f %f \n",mvertnew[a].co[0],mvertnew[a].co[1],mvertnew[a].co[2]);
+ }
+
+ for(a=0;a<result->numEdgeData;a++)
+ {
+ medgenew[a].v1=cm1->edges[a].v[0];
+ medgenew[a].v2=cm1->edges[a].v[1];
+
+
+ }
+
+
+
//set result DerivedMesh
- result=dm; // <--- for now
+// result; // <--- for now
//-------------------End Tool------------------//
More information about the Bf-blender-cvs
mailing list