minor changes

This commit is contained in:
Nico Pietroni 2004-08-26 15:04:39 +00:00
parent a81551f3a1
commit 60ac1e367b
1 changed files with 29 additions and 23 deletions

View File

@ -28,7 +28,7 @@
#define __VCG_DECIMATION_COLLAPSE
#include<vcg\complex\tetramesh\edge_collapse.h>
#include<vcg\complex\local_optimization\base.h>
#include<vcg\complex\local_optimization.h>
struct FAIL{
static VOL(){static int vol=0; return vol++;}
@ -50,34 +50,34 @@ namespace tetra{
/// Note that it has knowledge of the heap of the class LocalOptimization because
/// it is responsible of updating it after a collapse has been performed
template<class TRI_MESH_TYPE>
class TriEdgeCollapser: public LocalOptimization<TRI_MESH_TYPE>::LocModType
template<class TETRA_MESH_TYPE>
class TetraEdgeCollapse: public LocalOptimization<TETRA_MESH_TYPE>::LocModType
{
/// The tetrahedral mesh type
typedef typename TRI_MESH_TYPE TriMeshType;
typedef typename TETRA_MESH_TYPE TetraMeshType;
/// The tetrahedron type
typedef typename TriMeshType::FaceType FaceType;
typedef typename TetraMeshType::TetraType TetraType;
/// The vertex type
typedef typename FaceType::VertexType VertexType;
typedef typename TetraType::VertexType VertexType;
/// The coordinate type
typedef typename FaceType::VertexType::CoordType CoordType;
typedef typename TetraType::VertexType::CoordType CoordType;
/// The scalar type
typedef typename TriMeshType::VertexType::ScalarType ScalarType;
typedef typename TetraMeshType::VertexType::ScalarType ScalarType;
/////the base type class
//typedef typename vcg::tri::LocalModification LocalMod;
/// The HEdgePos type
typedef Pos<FaceType> PosType;
typedef Pos<TetraType> PosType;
/// The HEdgePos Loop type
typedef PosLoop<FaceType> PosLType;
typedef PosLoop<TetraType> PosLType;
/// definition of the heap element
typedef typename LocalOptimization<TRI_MESH_TYPE>::HeapElem HeapElem;
typedef typename LocalOptimization<TETRA_MESH_TYPE>::HeapElem HeapElem;
private:
///the new point that substitute the edge
Point3<ScalarType> _NewPoint;
///the pointer to edge collapser method
vcg::tetra::EdgeCollapse<TriMeshType> _EC;
vcg::tetra::EdgeCollapse<TetraMeshType> _EC;
///mark for up_dating
static int& _Imark(){ static int im=0; return im;}
///the pos of collapse
@ -89,18 +89,18 @@ ScalarType _priority;
public:
/// Default Constructor
TriEdgeCollapser()
TetraEdgeCollapse()
{}
///Constructor with postype
TriEdgeCollapser(PosType p,int mark)
TetraEdgeCollapse(PosType p,int mark)
{
_Imark() = mark;
pos=p;
_priority = _AspectRatioMedia(p);
}
~TriEdgeCollapser()
~TetraEdgeCollapse()
{}
private:
@ -169,6 +169,12 @@ ScalarType _VolumePreservingError(PosType &pos,CoordType &new_point,int nsteps)
public:
virtual const char *Info(TetraMeshType &m) {
static char buf[60];
sprintf(buf,"collapse %i -> %i %f\n", pos.V()-&m.vert[0], pos.VFlip()-&m.vert[0],_priority);
return buf;
}
ScalarType ComputePriority()
{
return (_priority = _AspectRatioMedia(this->pos));
@ -187,7 +193,7 @@ public:
}
void UpdateHeap(LocalOptimization<TRI_MESH_TYPE>::HeapType & h_ret)
void UpdateHeap(typename LocalOptimization<TetraMeshType>::HeapType & h_ret)
{
assert(!vrem->IsD());
_Imark()++;
@ -208,7 +214,7 @@ public:
}
}
ModifierType IsOfType(){ return TriEdgeCollapser;}
ModifierType IsOfType(){ return TetraEdgeCollapser;}
bool IsFeasible(){
vcg::tri::EdgeCollapse<TriMeshType>::Reset();
@ -240,18 +246,18 @@ public:
return _priority;
}
virtual void Init(TriMeshType&m,LocalOptimization<TRI_MESH_TYPE>::HeapType&h_ret){
virtual void Init(TetraMeshType &m,typename LocalOptimization<TetraMeshType>::HeapType& h_ret){
h_ret.clear();
TriMeshType::TetraIterator ti;
TetraMeshType::TetraIterator ti;
int j;
for(ti = m.tetra.begin(); ti != m.tetra.end();++ti)
if(!(*ti).IsD()){
(*ti).ComputeVolume();
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<TriMeshType>(p,m.IMark)));
}
{
PosType p=PosType(&*ti,Tetra::FofE(j,0),j,Tetra::VofE(j,0));
h_ret.push_back(HeapElem(new TriEdgeCollapser<TetraMeshType>(p,m.IMark)));
}
}
}