[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31048] branches/soc-2010-rohith291991: Additions to quadrangulated mesh extraction.
Rohith B V
rohith291991 at gmail.com
Wed Aug 4 18:58:47 CEST 2010
Revision: 31048
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31048
Author: rohith291991
Date: 2010-08-04 18:58:47 +0200 (Wed, 04 Aug 2010)
Log Message:
-----------
Additions to quadrangulated mesh extraction.
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-04 16:57:24 UTC (rev 31047)
+++ branches/soc-2010-rohith291991/intern/comiso/extern/uv.h 2010-08-04 16:58:47 UTC (rev 31048)
@@ -11,6 +11,7 @@
void mi_quad_param(HMesh *hm);
//Copy mesh
void copyHC(HMesh *hm, CMesh *cm);
+ CMesh* extractMesh(HMesh *hm);
#ifdef __cplusplus
}
Modified: branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp
===================================================================
--- branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp 2010-08-04 16:57:24 UTC (rev 31047)
+++ branches/soc-2010-rohith291991/intern/comiso/intern/uv.cpp 2010-08-04 16:58:47 UTC (rev 31048)
@@ -389,6 +389,7 @@
}
h/=totedge;
+// h*=factor;
// std::cout<<h<<"\n";
double hh = h * h ;
@@ -728,3 +729,134 @@
}
+
+ CMesh* extractMesh(HMesh *hm)
+
+ {
+
+ CMesh* result;
+
+
+ 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++)
+ {
+ u[0]=hi->u;
+ v[0]=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;
+ int uStart=0;
+ int vStart=0;
+
+ minu=maxu=hi->u;
+ minv=maxv=hi->v;
+
+ for(int j=0;j<3;j++)
+ {
+ if(u[j]<minu)
+ {
+ minu=u[j];
+ }
+ if(u[j]<minv)
+ {
+ minv=v[j];
+ }
+ if(v[j]>maxu)
+ {
+ maxu=u[j];
+ }
+ if(v[j]>maxv)
+ {
+ maxv=v[j];
+ }
+
+
+ }
+ if((minu-(int)minu)<1e-10)
+ uStart=minu;
+ else
+ uStart=(int)(minu+1);
+
+ if((minv-(int)minv)<1e-10)
+ vStart=minv;
+ else
+ vStart=(int)(minv+1);
+
+
+ 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);
+
+
+
+ //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
+
+ double A[3],B[3],C[3];
+ double P,R,T,S,Q,U,det,idet;
+
+ 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];
+
+
+ det=P*S-R*Q;
+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];
+ }
+
+ //Take care of all internal points
+
+ for(int j=uStart;j<uRange;j++)
+ {
+ for(int k=vStart;k<vRange;k++)
+ {
+ double x,y,z;
+
+ //Geometric coordinate of point
+ x=A[0]*j+B[0]*k+C[0];
+ y=A[1]*j+B[1]*k+C[1];
+ z=A[2]*j+B[2]*k+C[2];
+
+ //Add point to CMesh
+ //Add relevant edge connectivities to CMesh
+ // Include points where edges meet triangle border
+
+
+ }
+ }
+
+
+
+ }
+
+ 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-04 16:57:24 UTC (rev 31047)
+++ branches/soc-2010-rohith291991/source/blender/modifiers/intern/MOD_quadrangulate.c 2010-08-04 16:58:47 UTC (rev 31048)
@@ -297,13 +297,14 @@
mvert[a].flag =0;
}
+
//Switch to half edge DS for much easier parametrization
//u v parametrization
copyHC(&hm,&cm);
mi_quad_param(&hm);
+ extractMesh(&hm);
-
//set result DerivedMesh
result=dm; // <--- for now
More information about the Bf-blender-cvs
mailing list