diff --git a/vcg/complex/local_optimization/tetra_edge_collapse.h b/vcg/complex/local_optimization/tetra_edge_collapse.h index 92c209f7..08b7c282 100644 --- a/vcg/complex/local_optimization/tetra_edge_collapse.h +++ b/vcg/complex/local_optimization/tetra_edge_collapse.h @@ -31,12 +31,12 @@ #include struct FAIL{ - static VOL(){static int vol=0; return vol++;} - static LKF(){static int lkf=0; return lkf++;} - static LKE(){static int lke=0; return lke++;} - static LKV(){static int lkv=0; return lkv++;} - static OFD(){static int ofd=0; return ofd++;} - static BOR(){static int bor=0; return bor++;} + static int VOL(){static int vol=0; return vol++;} + static int LKF(){static int lkf=0; return lkf++;} + static int LKE(){static int lke=0; return lke++;} + static int LKV(){static int lkv=0; return lkv++;} + static int OFD(){static int ofd=0; return ofd++;} + static int BOR(){static int bor=0; return bor++;} }; @@ -55,15 +55,15 @@ class TetraEdgeCollapse: public LocalOptimization::LocModType { /// The tetrahedral mesh type - typedef typename TETRA_MESH_TYPE TetraMeshType; + //typedef typename TETRA_MESH_TYPE TETRA_MESH_TYPE; /// The tetrahedron type - typedef typename TetraMeshType::TetraType TetraType; - /// The vertex type - typedef typename TetraType::VertexType VertexType; + typedef typename TETRA_MESH_TYPE::TetraType TetraType; + /// The vertex type + typedef typename TetraType::VertexType VertexType; /// The coordinate type - typedef typename TetraType::VertexType::CoordType CoordType; + typedef typename TetraType::VertexType::CoordType CoordType; /// The scalar type - typedef typename TetraMeshType::VertexType::ScalarType ScalarType; + typedef typename TETRA_MESH_TYPE::VertexType::ScalarType ScalarType; /////the base type class //typedef typename vcg::tri::LocalModification LocalMod; /// The HEdgePos type @@ -77,7 +77,7 @@ private: ///the new point that substitute the edge Point3 _NewPoint; ///the pointer to edge collapser method -vcg::tetra::EdgeCollapse _EC; +vcg::tetra::EdgeCollapse _EC; ///mark for up_dating static int& _Imark(){ static int im=0; return im;} ///the pos of collapse @@ -96,7 +96,7 @@ public: TetraEdgeCollapse(PosType p,int mark) { _Imark() = mark; - pos=p; + pos=p; _priority = _AspectRatioMedia(p); } @@ -129,7 +129,6 @@ ScalarType _VolumePreservingError(PosType &pos,CoordType &new_point,int nsteps) { VertexType *ve0=(pos.T()->V(Tetra::VofE(pos.E(),0))); VertexType *ve1=(pos.T()->V(Tetra::VofE(pos.E(),1))); - vrem =ve0; bool ext_v0=ve0->IsB(); bool ext_v1=ve1->IsB(); @@ -167,11 +166,10 @@ ScalarType _VolumePreservingError(PosType &pos,CoordType &new_point,int nsteps) public: - - - virtual const char *Info(TetraMeshType &m) { + + virtual const char *Info(TETRA_MESH_TYPE &m) { static char buf[60]; - sprintf(buf,"collapse %i -> %i %f\n", pos.V()-&m.vert[0], pos.VFlip()-&m.vert[0],_priority); + //sprintf(buf,"collapse %i -> %i %f\n", pos.()-&m.vert[0], pos.VFlip()-&m.vert[0],_priority); return buf; } @@ -182,52 +180,59 @@ public: ScalarType ComputeError() { - _EC.FindSets(pos); + vrem=(pos.T()->V(Tetra::VofE(pos.E(),0))); return (_VolumePreservingError(pos,_NewPoint,5));// magic number....parametrize! } - int Execute() + void Execute(TETRA_MESH_TYPE &tm) { - _EC.FindSets(pos); - return -_EC.DoCollapse(pos,_NewPoint); + // _EC.FindSets(pos); + assert(!vrem->IsD()); + int del=_EC.DoCollapse(pos,_NewPoint); + tm.tn-=del; + tm.vn-=1; } - - void UpdateHeap(typename LocalOptimization::HeapType & h_ret) + void UpdateHeap(typename LocalOptimization::HeapType & h_ret) { assert(!vrem->IsD()); _Imark()++; - VTIterator VTi(vrem->VTb(),vrem->VTi()); + VTIterator VTi(vrem->VTb(),vrem->VTi()); while (!VTi.End()) { - VTi.Vt()->ComputeVolume(); - + VTi.Vt()->ComputeVolume(); for (int j=0;j<6;j++) { - vcg::tri::Pos p=Pos(VTi.Vt(),Tetra::FofE(j,0),j,Tetra::VofE(j,0)); - h_ret.push_back(HeapElem(new TriEdgeCollapser(p,_Imark()))); - std::push_heap(h_ret.begin(),h_ret.end()); - // update the mark of the vertices - VTi.Vt()->V(Tetra::VofE(j,0))->IMark() = _Imark(); + vcg::tetra::Pos p=Pos(VTi.Vt(),Tetra::FofE(j,0),j,Tetra::VofE(j,0)); + assert(!p.T()->V(p.V())->IsD()); + assert(!p.T()->IsD()); + h_ret.push_back(HeapElem(new TetraEdgeCollapse(p,_Imark()))); + std::push_heap(h_ret.begin(),h_ret.end()); + // update the mark of the vertices + VTi.Vt()->V(Tetra::VofE(j,0))->IMark() = _Imark(); } - VTi++; + ++VTi; } } - ModifierType IsOfType(){ return TetraEdgeCollapser;} + /// return the type of operation + + ModifierType IsOfType(){ return TetraEdgeCollapseOp;} bool IsFeasible(){ - vcg::tri::EdgeCollapse::Reset(); - _EC.FindSets(pos); - return(_EC.CheckPreconditions(pos,_NewPoint)); - } + vcg::tetra::EdgeCollapse::Reset(); + _EC.FindSets(pos); + ComputeError(); + return(_EC.CheckPreconditions(pos,_NewPoint)); + } bool IsUpToDate(){ if (!pos.T()->IsD()) - { + { VertexType *v0=pos.T()->V(Tetra::VofE(pos.E(),0)); - VertexType *v1=pos.T()->V(Tetra::VofE(pos.E(),1)); - + VertexType *v1=pos.T()->V(Tetra::VofE(pos.E(),1)); + assert(!v0->IsD()); + assert(!v1->IsD()); if(! (( (!v0->IsD()) && (!v1->IsD())) && _Imark()>=v0->IMark() && _Imark()>=v1->IMark())) @@ -242,13 +247,14 @@ public: return false; } - virtual ScalarType Priority(){ + virtual ScalarType Priority() const { return _priority; } - virtual void Init(TetraMeshType &m,typename LocalOptimization::HeapType& h_ret){ + /// perform initialization + static void Init(TETRA_MESH_TYPE &m,typename LocalOptimization::HeapType& h_ret){ h_ret.clear(); - TetraMeshType::TetraIterator ti; + typename TETRA_MESH_TYPE::TetraIterator ti; int j; for(ti = m.tetra.begin(); ti != m.tetra.end();++ti) if(!(*ti).IsD()){ @@ -256,7 +262,9 @@ public: for (int j=0;j<6;j++) { PosType p=PosType(&*ti,Tetra::FofE(j,0),j,Tetra::VofE(j,0)); - h_ret.push_back(HeapElem(new TriEdgeCollapser(p,m.IMark))); + assert(!p.T()->V(p.V())->IsD()); + assert(!p.T()->IsD()); + h_ret.push_back(HeapElem(new TetraEdgeCollapse(p,m.IMark))); } } } @@ -264,4 +272,4 @@ public: }; }//end namespace tetra }//end namespace vcg -#endif \ No newline at end of file +#endif diff --git a/vcg/complex/tetramesh/edge_collapse.h b/vcg/complex/tetramesh/edge_collapse.h index d6121c23..fc59eeb6 100644 --- a/vcg/complex/tetramesh/edge_collapse.h +++ b/vcg/complex/tetramesh/edge_collapse.h @@ -44,17 +44,17 @@ class EdgeCollapse { public: /// The tetrahedral mesh type - typedef typename TETRA_MESH_TYPE TetraMeshType; + typedef TETRA_MESH_TYPE TetraMeshType; /// The tetrahedron type typedef typename TetraMeshType::TetraType TetraType; - /// The vertex type - typedef typename TetraType::VertexType VertexType; + /// The vertex type + typedef typename TetraType::VertexType VertexType; /// The vertex iterator type typedef typename TetraMeshType::VertexIterator VertexIterator; /// The tetra iterator type typedef typename TetraMeshType::TetraIterator TetraIterator; /// The coordinate type - typedef typename TetraType::VertexType::CoordType CoordType; + typedef typename TetraType::VertexType::CoordType CoordType; /// The scalar type typedef typename TetraMeshType::VertexType::ScalarType ScalarType; ///the container of tetrahedron type @@ -66,9 +66,9 @@ class EdgeCollapse /// The HEdgePos Loop type typedef PosLoop PosLType; /// The topology updater type - typedef vcg::tetra::UpdateTetraTopology Topology; + typedef typename vcg::tetra::UpdateTetraTopology Topology; ///the normal updater type - typedef vcg::tetra::UpdateNormals UpdateNormals; + typedef typename vcg::tetra::UpdateNormals UpdateNormals; /// Default Constructor @@ -81,6 +81,7 @@ class EdgeCollapse }; private: + typedef pair FacePair; struct Face { @@ -277,7 +278,7 @@ static int _Collapse(PosType p,CoordType NewP) //now I cycle on the tetrahedron that had the old vertex //reassegning the new one. - VTIterator< TetraType> VTi(Vdel->VTb(),Vdel->VTi()); + VTIterator VTi(Vdel->VTb(),Vdel->VTi()); while (!VTi.End()) { TetraType *T_Change=VTi.Vt(); @@ -307,7 +308,7 @@ static int _Collapse(PosType p,CoordType NewP) static void orMarkE(Edge E,char M) { - map::iterator EI; + typename map::iterator EI; EI=_EdgeMark().find(E); if (EI==_EdgeMark().end()) _EdgeMark().insert (pair(E,M)); @@ -317,7 +318,7 @@ static void orMarkE(Edge E,char M) static bool isMarkedE(Edge E,char M) { - map::iterator EI; + typename map::iterator EI; EI=_EdgeMark().find(E); if (EI==_EdgeMark().end()) return false; @@ -326,7 +327,7 @@ static bool isMarkedE(Edge E,char M) static void orMarkF(Face F,char M) { - map::iterator FI; + typename map< Face,char>::iterator FI; FI=_FaceMark().find(F); if (FI==_FaceMark().end()) _FaceMark().insert (pair(F,M)); @@ -336,7 +337,7 @@ static void orMarkF(Face F,char M) static bool isMarkedF(Face F,char M) { - map::iterator FI; + typename map::iterator FI; FI=_FaceMark().find(F); if (FI==_FaceMark().end()) return false; @@ -740,7 +741,7 @@ static bool _FlipCondition(PosType pos,CoordType NewP) static void _InitTetrahedronValues(VertexType* v) { - VTIterator VTi=VTIterator(v->VTb(),v->VTi()); + VTIterator VTi= VTIterator(v->VTb(),v->VTi()); while (!VTi.End()) { if (TetraType::HasTetraQuality()) @@ -753,7 +754,7 @@ static void _InitTetrahedronValues(VertexType* v) VTi.Vt()->ComputeNormal(); } - VTi++; + ++VTi; } VTi.Vt()=v->VTb(); @@ -787,7 +788,8 @@ static void Reset(){ ///that share the adge to collapse static ScalarType AspectRatioCollapsed(PosType p) { - PosL pos=PosL(p.T(),p.F(),p.E(),p.V()); + //PosL pos=PosL(p.T(),p.F(),p.E(),p.V()); + PosLoop pos=PosLoop(p.T(),p.F(),p.E(),p.V()); pos.Reset(); int num=0; ScalarType ratio_media=0.f; @@ -805,8 +807,8 @@ static ScalarType AspectRatioCollapsed(PosType p) ///check the topologycal preserving conditions for the collapse indicated by pos static bool CheckPreconditions(PosType pos,CoordType NewP) { - VertexType *v0=pos.T()->V(Tetra::VofE(pos.E(),0)); - VertexType *v1=pos.T()->V(Tetra::VofE(pos.E(),1)); + VertexType *v0=pos.T()->V(Tetra::VofE(pos.E(),0)); + VertexType *v1=pos.T()->V(Tetra::VofE(pos.E(),1)); //if the two vertices are of border and the edge is not a border edge //we can do it. bool border0=v0->IsB(); @@ -851,7 +853,7 @@ static ScalarType VolumeOriginal() } ///Calculate the volume on the vertex resulting after collapse... -static ScalarType VolumeSimulateCollapse(PosType Pos,CoordType newP) +static ScalarType VolumeSimulateCollapse(PosType Pos,CoordType &newP) { VertexType *Vrem=(Pos.T()->V(Tetra::VofE(Pos.E(),0))); VertexType *Vdel=(Pos.T()->V(Tetra::VofE(Pos.E(),1))); @@ -875,10 +877,10 @@ static ScalarType VolumeSimulateCollapse(PosType Pos,CoordType newP) T.P2(0)=(*ti)->V(2)->cP(); T.P3(0)=(*ti)->V(3)->cP(); - vol+=T.ComputeVolume(); */ -// vol+= vcg::ComputeVolume(*((Tetra3*)&*ti)); + vol+=T.ComputeVolume(); */ +// vol+= vcg::ComputeVolume(*((Tetra3*)&*ti)); - vol+= vcg::ComputeVolume(**ti); + vol+= vcg::ComputeVolume(**ti); ti++; } Vrem->P()=oldpos; @@ -917,7 +919,7 @@ static void FindSets(vcg::tetra::Pos pos) //set of union minus intersection if ((vf0.Vt()->V(0)!=ve1)&&(vf0.Vt()->V(1)!=ve1)&&(vf0.Vt()->V(2)!=ve1)&&(vf0.Vt()->V(3)!=ve1)) _Sets().no_E.push_back(vf0.Vt()); - vf0++; + ++vf0; } //second vertex iteration @@ -934,7 +936,7 @@ static void FindSets(vcg::tetra::Pos pos) //set of union minus intersection if ((vf0.Vt()->V(0)!=ve0)&&(vf0.Vt()->V(1)!=ve0)&&(vf0.Vt()->V(2)!=ve0)&&(vf0.Vt()->V(3)!=ve0)) _Sets().no_E.push_back(vf0.Vt()); - vf0++; + ++vf0; } //erase duplicated tetrahedrons from the union set @@ -959,13 +961,13 @@ static int DoCollapse(PosType p,CoordType newP) { VertexType *v=p.T()->V(p.V()); assert(p.T()->HasVTAdjacency()); - int n_deleted = _Collapse(p,newP); + int n_del=_Collapse(p,newP); _InitTetrahedronValues(v); - return n_deleted; + return n_del; } }; }//end namespace }//end namespace -#endif \ No newline at end of file +#endif diff --git a/vcg/complex/tetramesh/update/normal.h b/vcg/complex/tetramesh/update/normal.h index cd945a09..58fbe712 100644 --- a/vcg/complex/tetramesh/update/normal.h +++ b/vcg/complex/tetramesh/update/normal.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.6 2004/06/25 11:25:07 pietroni +changrd update for a vertex normal functions void PerVertex(VertexType *v) + Revision 1.5 2004/06/15 16:01:26 pietroni added functions to update local vertices normal @@ -74,6 +77,7 @@ typedef typename TetraMeshType::VertexIterator VertexIterator; typedef typename TetraMeshType::TetraType TetraType; typedef typename TetraMeshType::TetraPointer TetraPointer; typedef typename TetraMeshType::TetraIterator TetraIterator; +typedef typename VertexType::NormalType NormalType; typedef vcg::Face FaceTemp; typedef vcg::tri::TriMesh< std::vector,std::vector > TriMeshTemp; @@ -91,10 +95,10 @@ static void PerTetraFace(TetraMeshType &m) static void PerVertex(VertexType *v) { - if( !VertexType::HasNormal()) return; + if( !VertexType::HasNormal()) return; VTIterator VTi=VTIterator(v->VTb(),v->VTi()); - VertexType::NormalType Norm=VertexType::NormalType(0,0,0); + NormalType Norm=NormalType(0,0,0); int iter=0; while (!VTi.End()) { @@ -109,7 +113,7 @@ static void PerVertex(VertexType *v) Norm+=VTi.Vt()->N(f); } } - VTi++; + ++VTi; } Norm/=iter; v->N()=Norm.Normalize(); diff --git a/vcg/complex/tetramesh/update/topology.h b/vcg/complex/tetramesh/update/topology.h index eb73cd05..43e8a804 100644 --- a/vcg/complex/tetramesh/update/topology.h +++ b/vcg/complex/tetramesh/update/topology.h @@ -259,7 +259,7 @@ static void DetachVTTopology(VertexType *v,TetraType *t) { lastz=Et.Vi(); lastt=Et.Vt(); - Et++; + ++Et; } //in the list of the vertex v must be present the //tetrahedron that you want to detach @@ -270,7 +270,7 @@ static void DetachVTTopology(VertexType *v,TetraType *t) } ///insert the tetrahedron t in VT topology for vertex v of index z -static void InsertVTTopology(VertexType *v,int z,TetraType *t) +static void InsertVTTopology(VertexType *v,int z, TetraType *t) { if( ! (*t).IsD()) { @@ -283,7 +283,7 @@ static void InsertVTTopology(VertexType *v,int z,TetraType *t) ///insert the tetrahedron t in VT topology for all his vertices -static void InsertVTTopology(TetraType *t) +static void InsertVTTopology( TetraType *t) { assert(!t->IsD()); int k=0; @@ -339,27 +339,27 @@ static void TTTopology(VertexContainer &vert,TetraContainer &tetra) (*ti).TTp(2)=(&(*ti)); (*ti).TTp(3)=(&(*ti)); - v0=(*ti).V(Tetra3::VofF(0,0)); - v1=(*ti).V(Tetra3::VofF(0,1)); - v2=(*ti).V(Tetra3::VofF(0,2)); + v0=(*ti).V(Tetra::VofF(0,0)); + v1=(*ti).V(Tetra::VofF(0,1)); + v2=(*ti).V(Tetra::VofF(0,2)); VF.push_back(Facet(v0,v1,v2,&(*ti),0)); - v0=(*ti).V(Tetra3::VofF(1,0)); - v1=(*ti).V(Tetra3::VofF(1,1)); - v2=(*ti).V(Tetra3::VofF(1,2)); + v0=(*ti).V(Tetra::VofF(1,0)); + v1=(*ti).V(Tetra::VofF(1,1)); + v2=(*ti).V(Tetra::VofF(1,2)); VF.push_back(Facet(v0,v1,v2,&(*ti),1)); - v0=(*ti).V(Tetra3::VofF(2,0)); - v1=(*ti).V(Tetra3::VofF(2,1)); - v2=(*ti).V(Tetra3::VofF(2,2)); + v0=(*ti).V(Tetra::VofF(2,0)); + v1=(*ti).V(Tetra::VofF(2,1)); + v2=(*ti).V(Tetra::VofF(2,2)); VF.push_back(Facet(v0,v1,v2,&(*ti),2)); - v0=(*ti).V(Tetra3::VofF(3,0)); - v1=(*ti).V(Tetra3::VofF(3,1)); - v2=(*ti).V(Tetra3::VofF(3,2)); + v0=(*ti).V(Tetra::VofF(3,0)); + v1=(*ti).V(Tetra::VofF(3,1)); + v2=(*ti).V(Tetra::VofF(3,2)); VF.push_back(Facet(v0,v1,v2,&(*ti),3)); } @@ -415,17 +415,17 @@ static void TestTTTopology(VertexContainer &vert,TetraContainer &tetra) { assert( ((((*ti).TTp(i))->TTp((*ti).TTi(i)))==&(*ti))); - VertexType *v0=(*ti).V(Tetra3::VofF(i,0)); - VertexType *v1=(*ti).V(Tetra3::VofF(i,1)); - VertexType *v2=(*ti).V(Tetra3::VofF(i,2)); + VertexType *v0=(*ti).V(Tetra::VofF(i,0)); + VertexType *v1=(*ti).V(Tetra::VofF(i,1)); + VertexType *v2=(*ti).V(Tetra::VofF(i,2)); TetraType *t1=(TetraType*)(*ti).TTp(i); assert (!t1->IsD()); int z1=(*ti).TTi(i); - VertexType *vo0=(*t1).V(Tetra3::VofF(z1,0)); - VertexType *vo1=(*t1).V(Tetra3::VofF(z1,1)); - VertexType *vo2=(*t1).V(Tetra3::VofF(z1,2)); + VertexType *vo0=(*t1).V(Tetra::VofF(z1,0)); + VertexType *vo1=(*t1).V(Tetra::VofF(z1,1)); + VertexType *vo2=(*t1).V(Tetra::VofF(z1,2)); assert((v0!=v1)&&(v0!=v2)&&(v1!=v2)); assert((vo0!=vo1)&&(vo0!=vo2)&&(vo1!=vo2)); diff --git a/vcg/complex/tetramesh/update/triconvert.h b/vcg/complex/tetramesh/update/triconvert.h index 5b6d6298..19107b01 100644 --- a/vcg/complex/tetramesh/update/triconvert.h +++ b/vcg/complex/tetramesh/update/triconvert.h @@ -48,9 +48,9 @@ class TriConverter public: /// The tetrahedral mesh type - typedef typename TETRA_MESH TetraMeshType; + typedef TETRA_MESH TetraMeshType; /// The triangle mesh type - typedef typename TRI_MESH TriangleMeshType; + typedef TRI_MESH TriangleMeshType; /// The tetrahedron type typedef typename TetraMeshType::TetraType TetraType; diff --git a/vcg/simplex/tetrahedron/base.h b/vcg/simplex/tetrahedron/base.h index 36f3c438..74a45cae 100644 --- a/vcg/simplex/tetrahedron/base.h +++ b/vcg/simplex/tetrahedron/base.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.11 2004/08/26 13:15:23 pietroni +added IsS() function + Revision 1.10 2004/07/09 10:13:00 ganovelli C() ,Q() ,hastetracolor(),hasqualityt().... plus some misuse of tetra3 corrected @@ -82,7 +85,7 @@ public: /// The base type of the face typedef TETRA_TYPE BaseTetraType; /// The vertex type - typedef typename VTYPE VertexType; + typedef VTYPE VertexType; /// The coordinate type used to represent the point (i.e. Point3f, Point3d, ...) typedef typename VertexType::CoordType CoordType; /// The scalar type used to represent coords (i.e. float, double, ...) diff --git a/vcg/simplex/tetrahedron/pos.h b/vcg/simplex/tetrahedron/pos.h index 6b5ce96a..c0872226 100644 --- a/vcg/simplex/tetrahedron/pos.h +++ b/vcg/simplex/tetrahedron/pos.h @@ -46,7 +46,7 @@ class VTIterator { public: /// The tetrahedron type - typedef typename MTTYPE TetraType; + typedef MTTYPE TetraType; private: /// Pointer to a tetrahedron TetraType *_vt; @@ -110,7 +110,7 @@ class Pos public: /// The tetrahedron type - typedef typename MTTYPE TetraType; + typedef MTTYPE TetraType; /// The vertex type typedef typename TetraType::VertexType VertexType; /// The coordinate type diff --git a/vcg/space/tetra3.h b/vcg/space/tetra3.h index 164839e6..c9e3c3c1 100644 --- a/vcg/space/tetra3.h +++ b/vcg/space/tetra3.h @@ -24,6 +24,10 @@ History $Log: not supported by cvs2svn $ +Revision 1.7 2004/07/09 10:08:21 ganovelli +ComputeVOlume moved outside the class and other + minor corrections + Revision 1.6 2004/06/25 18:17:03 ganovelli minor changes @@ -278,8 +282,8 @@ static int FofEE(const int &indexE0,const int &indexE1) class Tetra3:public Tetra { public: - typedef Point3< ScalarType > CoordType; - typedef ScalarType ScalarType; + typedef Point3< ScalarType > CoordType; + //typedef typename ScalarType ScalarType; /********************************************* diff --git a/wrap/io_tetramesh/import_ts.h b/wrap/io_tetramesh/import_ts.h index 1cc7ef55..f4d3adea 100644 --- a/wrap/io_tetramesh/import_ts.h +++ b/wrap/io_tetramesh/import_ts.h @@ -9,7 +9,7 @@ namespace io { template class ImporterTS{ - typedef typename MESHTYPE Tetramesh; + typedef MESHTYPE Tetramesh; typedef typename Tetramesh::VertexPointer VertexPointer; typedef typename Tetramesh::VertexType VertexType; typedef typename Tetramesh::TetraType FaceType; @@ -31,7 +31,7 @@ static int Open( Tetramesh & m, const char * filename ) { int tp3; float mass; FILE *f; - Tetramesh::VertexType p1; + typename Tetramesh::VertexType p1; f = fopen(filename,"r"); if(f == NULL ) { @@ -62,7 +62,7 @@ static int Open( Tetramesh & m, const char * filename ) { fscanf(f, "%i", &tp2 ); fscanf(f, "%i", &tp3 ); - Tetramesh::TetraType newTetra; + typename Tetramesh::TetraType newTetra; m.tetra.push_back(newTetra); m.tetra.back().Init(&m.vert[tp0],&m.vert[tp1],&m.vert[tp2],&m.vert[tp3]); } @@ -76,4 +76,4 @@ static int Open( Tetramesh & m, const char * filename ) { };// end of io };// end of tri };// end of vcg -#endif \ No newline at end of file +#endif