Added gcc required typenames to tetrahedron and octaehedron

This commit is contained in:
Paolo Cignoni 2004-03-10 00:37:31 +00:00
parent b68d85894d
commit 68beee8a27
1 changed files with 37 additions and 32 deletions

View File

@ -1,4 +1,4 @@
/**************************************************************************** /***************************************************************************
* VCGLib o o * * VCGLib o o *
* Visual and Computer Graphics Library o o * * Visual and Computer Graphics Library o o *
* _ O _ * * _ O _ *
@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.2 2004/03/03 16:11:46 cignoni
First working version (tetrahedron!)
****************************************************************************/ ****************************************************************************/
@ -38,19 +41,22 @@ namespace tri {
template <class MESH_TYPE> template <class MESH_TYPE>
void Tetrahedron(MESH_TYPE &in) void Tetrahedron(MESH_TYPE &in)
{ {
typedef typename MESH_TYPE::VertexPointer VertexPointer;
typedef typename MESH_TYPE::VertexIterator VertexIterator;
typedef typename MESH_TYPE::FaceIterator FaceIterator;
in.Clear(); in.Clear();
Allocator<MESH_TYPE>::AddVertices(in,4); Allocator<MESH_TYPE>::AddVertices(in,4);
Allocator<MESH_TYPE>::AddFaces(in,4); Allocator<MESH_TYPE>::AddFaces(in,4);
MESH_TYPE::VertexPointer ivp[4]; VertexPointer ivp[4];
VertexIterator vi=in.vert.begin();
MESH_TYPE::VertexIterator vi=in.vert.begin();
ivp[0]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1, 1, 1); ++vi; ivp[0]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1, 1, 1); ++vi;
ivp[1]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1, 1,-1); ++vi; ivp[1]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1, 1,-1); ++vi;
ivp[2]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1,-1, 1); ++vi; ivp[2]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1,-1, 1); ++vi;
ivp[3]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1,-1,-1); ivp[3]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1,-1,-1);
MESH_TYPE::FaceIterator fi=in.face.begin(); FaceIterator fi=in.face.begin();
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[2]; ++fi; (*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[2]; ++fi;
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[3]; ++fi; (*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[3]; ++fi;
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[3]; (*fi).V(2)=ivp[1]; ++fi; (*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[3]; (*fi).V(2)=ivp[1]; ++fi;
@ -60,35 +66,34 @@ void Tetrahedron(MESH_TYPE &in)
template <class MESH_TYPE> template <class MESH_TYPE>
void Octahedron(MESH_TYPE &in) void Octahedron(MESH_TYPE &in)
{ {
in.vn=6; typedef typename MESH_TYPE::VertexPointer VertexPointer;
in.fn=8; typedef typename MESH_TYPE::VertexIterator VertexIterator;
in.vert.clear(); typedef typename MESH_TYPE::FaceIterator FaceIterator;
in.face.clear();
MESH_TYPE::VertexType tv;tv.Supervisor_Flags()=0; in.Clear();
Allocator<MESH_TYPE>::AddVertices(in,6);
Allocator<MESH_TYPE>::AddFaces(in,8);
MESH_TYPE::VertexType tv;tv.Supervisor_Flags()=0;
MESH_TYPE::CoordType tp; MESH_TYPE::CoordType tp;
tp=MESH_TYPE::CoordType ( 1, 0, 0); tv.P()=tp; in.vert.push_back(tv); VertexPointer ivp[4];
tp=MESH_TYPE::CoordType ( 0, 1, 0); tv.P()=tp; in.vert.push_back(tv); VertexIterator vi=in.vert.begin();
tp=MESH_TYPE::CoordType ( 0, 0, 1); tv.P()=tp; in.vert.push_back(tv); ivp[0]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1, 0, 0); ++vi;
tp=MESH_TYPE::CoordType (-1, 0, 0); tv.P()=tp; in.vert.push_back(tv); ivp[1]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 0, 1, 0); ++vi;
tp=MESH_TYPE::CoordType ( 0,-1, 0); tv.P()=tp; in.vert.push_back(tv); ivp[2]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 0, 0, 1); ++vi;
tp=MESH_TYPE::CoordType ( 0, 0,-1); tv.P()=tp; in.vert.push_back(tv); ivp[3]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1, 0, 0); ++vi;
ivp[4]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 0,-1, 0); ++vi;
ivp[5]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 0, 0,-1);
vector<MESH_TYPE::vertex_pointer> index(in.vn); FaceIterator fi=in.face.begin();
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[2]; ++fi;
MESH_TYPE::face_type f;f.Supervisor_Flags()=0; (*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[4]; ++fi;
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[4]; (*fi).V(2)=ivp[5]; ++fi;
MESH_TYPE::vertex_iterator vi; (*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[5]; (*fi).V(2)=ivp[1]; ++fi;
int j; (*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[5]; ++fi;
for(j=0,vi=in.vert.begin();j<in.vn;++j,++vi) index[j] = &*vi; (*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[5]; (*fi).V(2)=ivp[4]; ++fi;
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[4]; (*fi).V(2)=ivp[2]; ++fi;
f.V(0)=index[0]; f.V(1)=index[1];f.V(2)=index[2]; in.face.push_back(f); (*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[1];
f.V(0)=index[0]; f.V(1)=index[2];f.V(2)=index[4]; in.face.push_back(f);
f.V(0)=index[0]; f.V(1)=index[4];f.V(2)=index[5]; in.face.push_back(f);
f.V(0)=index[0]; f.V(1)=index[5];f.V(2)=index[1]; in.face.push_back(f);
f.V(0)=index[3]; f.V(1)=index[1];f.V(2)=index[5]; in.face.push_back(f);
f.V(0)=index[3]; f.V(1)=index[5];f.V(2)=index[4]; in.face.push_back(f);
f.V(0)=index[3]; f.V(1)=index[4];f.V(2)=index[2]; in.face.push_back(f);
f.V(0)=index[3]; f.V(1)=index[2];f.V(2)=index[1]; in.face.push_back(f);
} }
template <class MESH_TYPE> template <class MESH_TYPE>