Completed Octahedron and Icosahedron
This commit is contained in:
parent
68b448da9e
commit
1a4283c2af
|
@ -24,6 +24,9 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.4 2004/03/11 18:14:19 tarini
|
||||||
|
prova
|
||||||
|
|
||||||
Revision 1.2 2004/03/03 16:11:46 cignoni
|
Revision 1.2 2004/03/03 16:11:46 cignoni
|
||||||
First working version (tetrahedron!)
|
First working version (tetrahedron!)
|
||||||
|
|
||||||
|
@ -37,82 +40,76 @@ First working version (tetrahedron!)
|
||||||
#include<vcg/complex/trimesh/allocate.h>
|
#include<vcg/complex/trimesh/allocate.h>
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
namespace tri {
|
namespace tri {
|
||||||
cacca
|
|
||||||
template <class MESH_TYPE>
|
template <class TetraMeshType>
|
||||||
void Tetrahedron(MESH_TYPE &in)
|
void Tetrahedron(TetraMeshType &in)
|
||||||
{
|
{
|
||||||
in.Clear();
|
in.Clear();
|
||||||
Allocator<MESH_TYPE>::AddVertices(in,4);
|
Allocator<TetraMeshType>::AddVertices(in,4);
|
||||||
Allocator<MESH_TYPE>::AddFaces(in,4);
|
Allocator<TetraMeshType>::AddFaces(in,4);
|
||||||
|
|
||||||
MESH_TYPE::VertexPointer ivp[4];
|
TetraMeshType::VertexPointer ivp[4];
|
||||||
|
|
||||||
MESH_TYPE::VertexIterator vi=in.vert.begin();
|
TetraMeshType::VertexIterator vi=in.vert.begin();
|
||||||
ivp[0]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1, 1, 1); ++vi;
|
ivp[0]=&*vi;(*vi).P()=TetraMeshType::CoordType ( 1, 1, 1); ++vi;
|
||||||
ivp[1]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1, 1,-1); ++vi;
|
ivp[1]=&*vi;(*vi).P()=TetraMeshType::CoordType (-1, 1,-1); ++vi;
|
||||||
ivp[2]=&*vi;(*vi).P()=MESH_TYPE::CoordType (-1,-1, 1); ++vi;
|
ivp[2]=&*vi;(*vi).P()=TetraMeshType::CoordType (-1,-1, 1); ++vi;
|
||||||
ivp[3]=&*vi;(*vi).P()=MESH_TYPE::CoordType ( 1,-1,-1);
|
ivp[3]=&*vi;(*vi).P()=TetraMeshType::CoordType ( 1,-1,-1);
|
||||||
|
|
||||||
MESH_TYPE::FaceIterator fi=in.face.begin();
|
TetraMeshType::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;
|
||||||
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[1];
|
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class MESH_TYPE>
|
template <class OctMeshType>
|
||||||
void Octahedron(MESH_TYPE &in)
|
void Octahedron(OctMeshType &in)
|
||||||
{
|
{
|
||||||
in.vn=6;
|
in.Clear();
|
||||||
in.fn=8;
|
Allocator<OctMeshType>::AddVertices(in,6);
|
||||||
in.vert.clear();
|
Allocator<OctMeshType>::AddFaces(in,8);
|
||||||
in.face.clear();
|
|
||||||
MESH_TYPE::VertexType tv;tv.Supervisor_Flags()=0;
|
|
||||||
MESH_TYPE::CoordType tp;
|
|
||||||
tp=MESH_TYPE::CoordType ( 1, 0, 0); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
tp=MESH_TYPE::CoordType ( 0, 1, 0); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
tp=MESH_TYPE::CoordType ( 0, 0, 1); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
tp=MESH_TYPE::CoordType (-1, 0, 0); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
tp=MESH_TYPE::CoordType ( 0,-1, 0); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
tp=MESH_TYPE::CoordType ( 0, 0,-1); tv.P()=tp; in.vert.push_back(tv);
|
|
||||||
|
|
||||||
vector<MESH_TYPE::vertex_pointer> index(in.vn);
|
OctMeshType::VertexPointer ivp[6];
|
||||||
|
|
||||||
MESH_TYPE::face_type f;f.Supervisor_Flags()=0;
|
OctMeshType::VertexIterator vi=in.vert.begin();
|
||||||
|
ivp[0]=&*vi;(*vi).P()=OctMeshType::CoordType ( 1, 0, 0); ++vi;
|
||||||
|
ivp[1]=&*vi;(*vi).P()=OctMeshType::CoordType ( 0, 1, 0); ++vi;
|
||||||
|
ivp[2]=&*vi;(*vi).P()=OctMeshType::CoordType ( 0, 0, 1); ++vi;
|
||||||
|
ivp[3]=&*vi;(*vi).P()=OctMeshType::CoordType (-1, 0, 0); ++vi;
|
||||||
|
ivp[4]=&*vi;(*vi).P()=OctMeshType::CoordType ( 0,-1, 0); ++vi;
|
||||||
|
ivp[5]=&*vi;(*vi).P()=OctMeshType::CoordType ( 0, 0,-1);
|
||||||
|
|
||||||
MESH_TYPE::vertex_iterator vi;
|
OctMeshType::FaceIterator fi=in.face.begin();
|
||||||
int j;
|
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[2]; ++fi;
|
||||||
for(j=0,vi=in.vert.begin();j<in.vn;++j,++vi) index[j] = &*vi;
|
(*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;
|
||||||
f.V(0)=index[0]; f.V(1)=index[1];f.V(2)=index[2]; in.face.push_back(f);
|
(*fi).V(0)=ivp[0]; (*fi).V(1)=ivp[5]; (*fi).V(2)=ivp[1]; ++fi;
|
||||||
f.V(0)=index[0]; f.V(1)=index[2];f.V(2)=index[4]; in.face.push_back(f);
|
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[1]; (*fi).V(2)=ivp[5]; ++fi;
|
||||||
f.V(0)=index[0]; f.V(1)=index[4];f.V(2)=index[5]; in.face.push_back(f);
|
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[5]; (*fi).V(2)=ivp[4]; ++fi;
|
||||||
f.V(0)=index[0]; f.V(1)=index[5];f.V(2)=index[1]; in.face.push_back(f);
|
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[4]; (*fi).V(2)=ivp[2]; ++fi;
|
||||||
f.V(0)=index[3]; f.V(1)=index[1];f.V(2)=index[5]; in.face.push_back(f);
|
(*fi).V(0)=ivp[3]; (*fi).V(1)=ivp[2]; (*fi).V(2)=ivp[1];
|
||||||
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 IcoMeshType>
|
||||||
void Icosahedron(MESH_TYPE &in)
|
void Icosahedron(IcoMeshType &in)
|
||||||
{
|
{
|
||||||
MESH_TYPE::ScalarType L=(Sqrt(5.0)+1.0)/2.0;
|
IcoMeshType::ScalarType L=IcoMeshType::ScalarType((math::Sqrt(5.0)+1.0)/2.0);
|
||||||
MESH_TYPE::CoordType vv[12]={
|
IcoMeshType::CoordType vv[12]={
|
||||||
MESH_TYPE::CoordType ( 0, L, 1),
|
IcoMeshType::CoordType ( 0, L, 1),
|
||||||
MESH_TYPE::CoordType ( 0, L,-1),
|
IcoMeshType::CoordType ( 0, L,-1),
|
||||||
MESH_TYPE::CoordType ( 0,-L, 1),
|
IcoMeshType::CoordType ( 0,-L, 1),
|
||||||
MESH_TYPE::CoordType ( 0,-L,-1),
|
IcoMeshType::CoordType ( 0,-L,-1),
|
||||||
|
|
||||||
MESH_TYPE::CoordType ( L, 1, 0),
|
IcoMeshType::CoordType ( L, 1, 0),
|
||||||
MESH_TYPE::CoordType ( L,-1, 0),
|
IcoMeshType::CoordType ( L,-1, 0),
|
||||||
MESH_TYPE::CoordType (-L, 1, 0),
|
IcoMeshType::CoordType (-L, 1, 0),
|
||||||
MESH_TYPE::CoordType (-L,-1, 0),
|
IcoMeshType::CoordType (-L,-1, 0),
|
||||||
|
|
||||||
MESH_TYPE::CoordType ( 1, 0, L),
|
IcoMeshType::CoordType ( 1, 0, L),
|
||||||
MESH_TYPE::CoordType (-1, 0, L),
|
IcoMeshType::CoordType (-1, 0, L),
|
||||||
MESH_TYPE::CoordType ( 1, 0,-L),
|
IcoMeshType::CoordType ( 1, 0,-L),
|
||||||
MESH_TYPE::CoordType (-1, 0,-L)
|
IcoMeshType::CoordType (-1, 0,-L)
|
||||||
};
|
};
|
||||||
|
|
||||||
int ff[20][3]={
|
int ff[20][3]={
|
||||||
|
@ -123,31 +120,24 @@ void Icosahedron(MESH_TYPE &in)
|
||||||
{2,5,8},{2,9,7},{3,10,5},{3,7,11}
|
{2,5,8},{2,9,7},{3,10,5},{3,7,11}
|
||||||
};
|
};
|
||||||
|
|
||||||
in.vn=12;
|
|
||||||
in.fn=20;
|
in.Clear();
|
||||||
in.vert.clear();
|
Allocator<IcoMeshType>::AddVertices(in,12);
|
||||||
in.face.clear();
|
Allocator<IcoMeshType>::AddFaces(in,20);
|
||||||
MESH_TYPE::VertexType tv;tv.Supervisor_Flags()=0;
|
IcoMeshType::VertexPointer ivp[12];
|
||||||
MESH_TYPE::CoordType tp;
|
|
||||||
for(int i=0;i<in.vn;i++)
|
IcoMeshType::VertexIterator vi;
|
||||||
{
|
int i;
|
||||||
tv.P()=vv[i];
|
for(i=0,vi=in.vert.begin();vi!=in.vert.end();++i,++vi){
|
||||||
in.vert.push_back(tv);
|
(*vi).P()=vv[i];
|
||||||
|
ivp[i]=&*vi;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<MESH_TYPE::vertex_pointer> index(in.vn);
|
IcoMeshType::FaceIterator fi;
|
||||||
|
for(i=0,fi=in.face.begin();fi!=in.face.end();++i,++fi){
|
||||||
MESH_TYPE::face_type f;f.Supervisor_Flags()=0;
|
(*fi).V(0)=ivp[ff[i][0]];
|
||||||
|
(*fi).V(1)=ivp[ff[i][1]];
|
||||||
MESH_TYPE::vertex_iterator vi;
|
(*fi).V(2)=ivp[ff[i][2]];
|
||||||
int j;
|
|
||||||
for(j=0,vi=in.vert.begin();j<in.vn;++j,++vi) index[j] = &*vi;
|
|
||||||
for(j=0;j<in.fn;++j)
|
|
||||||
{
|
|
||||||
f.V(0)=index[ff[j][0]];
|
|
||||||
f.V(1)=index[ff[j][1]];
|
|
||||||
f.V(2)=index[ff[j][2]];
|
|
||||||
in.face.push_back(f);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue