Commit bd0de59b authored by Pierre Kraemer's avatar Pierre Kraemer

merge no_boundary + GMap without fixed point

parent 7054966d
......@@ -57,16 +57,7 @@ struct PFP: public PFP_STANDARD
typedef Map2TP MAP;
};
/// definition de la carte en global, plus facile
PFP::MAP myMap;
// handler d'attribut de position par sommet
AttributeHandler<PFP::VEC3> position;
// handler d'attribut de normale par sommet
AttributeHandler<PFP::VEC3> normal;
/// encore 1 typedef pour simplifier l'ecriture du code
/// typedef pour simplifier l'ecriture du code
typedef PFP::VEC3 Point3D;
// Variables pour la gestion des plongements
......
......@@ -50,6 +50,8 @@ void filterAverageAttribute_OneRing(
TraversorV<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
if(!map.isBoundaryVertex(d))
{
if (neigh & INSIDE)
col.collectAll(d) ;
......@@ -76,6 +78,9 @@ void filterAverageAttribute_OneRing(
col.applyOnBorder(fa) ;
attOut[d] = fa.getAverage() ;
}
else
attOut[d] = attIn[d] ;
}
}
template <typename PFP, typename T>
......@@ -94,6 +99,8 @@ void filterAverageVertexAttribute_WithinSphere(
TraversorV<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
if(!map.isBoundaryVertex(d))
{
if (neigh & INSIDE)
col.collectAll(d) ;
......@@ -113,6 +120,9 @@ void filterAverageVertexAttribute_WithinSphere(
}
attOut[d] /= faInside.getCount() + faBorder.getCount() ;
}
else
attOut[d] = attIn[d] ;
}
}
template <typename PFP, typename T>
......@@ -128,7 +138,7 @@ void filterAverageEdgeAttribute_WithinSphere(
FunctorAverage<T> fa(attIn) ;
Algo::Selection::Collector_WithinSphere<PFP> col(map, position, radius) ;
TraversorV<typename PFP::MAP> t(map, select) ;
TraversorE<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
if (neigh & INSIDE)
......@@ -156,7 +166,7 @@ void filterAverageFaceAttribute_WithinSphere(
FunctorAverage<T> fa(attIn) ;
Algo::Selection::Collector_WithinSphere<PFP> col(map, position, radius) ;
TraversorV<typename PFP::MAP> t(map, select) ;
TraversorF<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
if (neigh & INSIDE)
......
......@@ -344,8 +344,6 @@ void filterVNBA(typename PFP::MAP& map, float sigmaN2, float SUSANthreshold, con
long nbAdapt = 0 ;
long nbSusan = 0 ;
std::cout << "compute new vertices normals.." << std::endl ;
TraversorV<typename PFP::MAP> tv(map, select) ;
for(Dart d = tv.begin(); d != tv.end(); d = tv.next())
{
......@@ -434,8 +432,6 @@ void filterVNBA(typename PFP::MAP& map, float sigmaN2, float SUSANthreshold, con
}
}
std::cout << "update face normals.." << std::endl ;
// Compute face normals from vertex normals
TraversorF<typename PFP::MAP> tf(map, select) ;
for(Dart d = tf.begin(); d != tf.end(); d = tf.next())
......@@ -455,8 +451,6 @@ void filterVNBA(typename PFP::MAP& map, float sigmaN2, float SUSANthreshold, con
faceNewNormal[d] = newNormal ;
}
std::cout << "update vertices positions.." << std::endl ;
// Compute new vertices position
computeNewPositionsFromFaceNormals<PFP>(
map, position, position2, faceArea, faceCentroid, faceNormal, faceNewNormal, select
......
......@@ -67,10 +67,8 @@ void filterBilateral(typename PFP::MAP& map, const typename PFP::TVEC3& position
TraversorV<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
// get position & normal of vertex
const VEC3& pos_d = position[d] ;
const VEC3& normal_d = normal[d] ;
if(!map.isBoundaryVertex(d))
{
// traversal of incident edges
float sum = 0.0f, normalizer = 0.0f ;
Traversor2VE<typename PFP::MAP> te(map, d) ;
......@@ -84,7 +82,10 @@ void filterBilateral(typename PFP::MAP& map, const typename PFP::TVEC3& position
normalizer += wcs ;
}
position2[d] = pos_d + ((sum / normalizer) * normal_d) ;
position2[d] = position[d] + ((sum / normalizer) * normal[d]) ;
}
else
position2[d] = position[d] ;
}
}
......@@ -101,6 +102,8 @@ void filterSUSAN(typename PFP::MAP& map, float SUSANthreshold, const typename PF
TraversorV<typename PFP::MAP> t(map, select) ;
for(Dart d = t.begin(); d != t.end(); d = t.next())
{
if(!map.isBoundaryVertex(d))
{
// get position & normal of vertex
const VEC3& pos_d = position[d] ;
......@@ -136,6 +139,9 @@ void filterSUSAN(typename PFP::MAP& map, float SUSANthreshold, const typename PF
else
position2[d] = pos_d ;
}
else
position2[d] = position[d] ;
}
// CGoGNout <<" susan rate = "<< float(nbSusan)/float(nbTot)<<CGoGNendl;
}
......
......@@ -53,6 +53,8 @@ void filterTaubin(typename PFP::MAP& map, typename PFP::TVEC3& position, typenam
{
mv.mark(d);
if(!map.isBoundaryVertex(d))
{
c.collectBorder(d) ;
fa1.reset() ;
c.applyOnBorder(fa1) ;
......@@ -61,6 +63,9 @@ void filterTaubin(typename PFP::MAP& map, typename PFP::TVEC3& position, typenam
displ *= lambda ;
position2[d] = p + displ ;
}
else
position2[d] = position[d] ;
}
}
// unshrinking step
......@@ -71,6 +76,8 @@ void filterTaubin(typename PFP::MAP& map, typename PFP::TVEC3& position, typenam
{
mv.unmark(d);
if(!map.isBoundaryVertex(d))
{
c.collectBorder(d) ;
fa2.reset() ;
c.applyOnBorder(fa2) ;
......@@ -79,6 +86,9 @@ void filterTaubin(typename PFP::MAP& map, typename PFP::TVEC3& position, typenam
displ *= mu ;
position[d] = p + displ ;
}
else
position[d] = position2[d] ;
}
}
}
......@@ -93,15 +103,18 @@ void filterTaubin_modified(typename PFP::MAP& map, typename PFP::TVEC3& position
const float lambda = 0.6307 ;
const float mu = -0.6732 ;
CellMarkerNoUnmark mv(map, VERTEX) ;
FunctorAverageOnSphereBorder<PFP, typename PFP::VEC3> fa1(map, position, position) ;
Algo::Selection::Collector_WithinSphere<PFP> c1(map, position, radius) ;
CellMarkerNoUnmark mv(map, VERTEX) ;
for(Dart d = map.begin(); d != map.end(); map.next(d))
{
if(select(d) && !mv.isMarked(d))
{
mv.mark(d);
if(!map.isBoundaryVertex(d))
{
c1.collectBorder(d) ;
VEC3 center = position[d] ;
fa1.reset(center, radius) ;
......@@ -110,6 +123,9 @@ void filterTaubin_modified(typename PFP::MAP& map, typename PFP::TVEC3& position
displ *= lambda ;
position2[d] = center + displ ;
}
else
position2[d] = position[d] ;
}
}
// unshrinking step
......@@ -121,6 +137,8 @@ void filterTaubin_modified(typename PFP::MAP& map, typename PFP::TVEC3& position
{
mv.unmark(d);
if(!map.isBoundaryVertex(d))
{
c2.collectBorder(d) ;
VEC3 center = position2[d] ;
fa2.reset(center, radius) ;
......@@ -129,6 +147,9 @@ void filterTaubin_modified(typename PFP::MAP& map, typename PFP::TVEC3& position
displ *= mu ;
position[d] = center + displ ;
}
else
position[d] = position2[d] ;
}
}
}
......
......@@ -81,11 +81,11 @@ public:
Dart phi2(Dart d) ;
Dart alpha0(Dart d);
Dart alpha0(Dart d) ;
Dart alpha1(Dart d);
Dart alpha1(Dart d) ;
Dart alpha_1(Dart d);
Dart alpha_1(Dart d) ;
virtual Dart begin() ;
......@@ -97,10 +97,10 @@ public:
virtual bool foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thread = 0) ;
bool foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int thread = 0);
virtual bool foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int thread = 0) ;
virtual bool foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread = 0) ;
bool foreach_dart_of_oriented_volume(Dart d, FunctorType& f, unsigned int thread = 0);
virtual bool foreach_dart_of_oriented_volume(Dart d, FunctorType& f, unsigned int thread = 0) ;
virtual bool foreach_dart_of_volume(Dart d, FunctorType& f, unsigned int thread = 0) ;
virtual bool foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread = 0) ;
......
......@@ -142,7 +142,7 @@ inline Dart ImplicitHierarchicalMap::alpha_1(Dart d)
inline Dart ImplicitHierarchicalMap::begin()
{
Dart d = Map2::begin() ;
while(m_dartLevel[d] > m_curLevel)
while(d != Map2::end() && m_dartLevel[d] > m_curLevel)
Map2::next(d) ;
return d ;
}
......
......@@ -184,21 +184,14 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL aii = 0 ;
do
Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
for(Dart it = t.begin(); it != t.end(); it = t.next())
{
REAL aij = 1 ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
solver->normalize_row() ;
solver->set_right_hand_side(0) ;
......@@ -234,21 +227,14 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL aii = 0 ;
do
Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
for(Dart it = t.begin(); it != t.end(); it = t.next())
{
REAL aij = 1 ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
solver->normalize_row() ;
solver->set_right_hand_side(attrTable[d]) ;
......@@ -286,21 +272,14 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL aii = 0 ;
do
Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
for(Dart it = t.begin(); it != t.end(); it = t.next())
{
REAL aij = 1 ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
solver->normalize_row() ;
solver->set_right_hand_side((attrTable[d])[coord]) ;
......@@ -338,21 +317,16 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL vArea = vertexArea[d] ;
REAL aii = 0 ;
Dart it = d ;
// Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
// for(Dart it = t.begin(); it != t.end(); it = t.next())
do
{
REAL aij = edgeWeight[it] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aij = edgeWeight[dboundary] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
......@@ -394,23 +368,15 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL vArea = vertexArea[d] ;
REAL aii = 0 ;
do
Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
for(Dart it = t.begin(); it != t.end(); it = t.next())
{
REAL aij = edgeWeight[it] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aij = edgeWeight[dboundary] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
solver->normalize_row() ;
solver->set_right_hand_side(attrTable[d]) ;
......@@ -452,23 +418,15 @@ public:
bool operator()(Dart d)
{
solver->begin_row() ;
Dart it = d ;
REAL vArea = vertexArea[d] ;
REAL aii = 0 ;
do
Traversor2VE<typename PFP::MAP> t(this->m_map, d) ;
for(Dart it = t.begin(); it != t.end(); it = t.next())
{
REAL aij = edgeWeight[it] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[this->m_map.phi1(it)], aij) ;
Dart dboundary = this->m_map.phi_1(it) ;
if(this->m_map.phi2(dboundary) == dboundary)
{
aij = edgeWeight[dboundary] / vArea ;
aii += aij ;
solver->add_coefficient(indexTable[dboundary], aij) ;
}
it = this->m_map.alpha1(it) ;
} while(it != d) ;
solver->add_coefficient(indexTable[d], -aii) ;
solver->normalize_row() ;
solver->set_right_hand_side((attrTable[d])[coord]) ;
......
......@@ -299,18 +299,8 @@ Dart extrudeFace(typename PFP::MAP& the_map, typename PFP::TVEC3& positions, Dar
cc = the_map.alpha1(cc);
}while (cc != c);
//merge central faces by removing edges
bool notFinished=true;
do
{
Dart d1 = the_map.alpha1(cc);
if (d1 == cc) // last edge is pending edge inside of face
notFinished = false;
the_map.deleteFace(cc);
cc = d1;
} while (notFinished);
the_map.closeHole(the_map.phi1(the_map.phi1(d)));
// delete the central vertex
the_map.deleteVertex(c) ;
// embedding of new vertices
Dart dd = d;
......
......@@ -347,6 +347,9 @@ Dart Polyhedron<PFP>::grid_topo(unsigned int x, unsigned int y)
// store & return reference dart
m_dart = m_tableVertDarts[0]; // util ?
m_map.closeHole(m_dart) ;
return m_dart;
}
......
......@@ -61,7 +61,7 @@ void trianguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const
template <typename PFP>
void trianguleFaces(
typename PFP::MAP& map,
typename PFP::TVEC3& position, typename PFP::TVEC3& positionF,
typename PFP::TVEC3& position, const typename PFP::TVEC3& positionF,
const FunctorSelect& selected = allDarts) ;
/**
......@@ -101,6 +101,10 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
template <typename PFP>
void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = allDarts) ;
template <typename PFP, typename EMBV, typename EMB>
void TwoNPlusOneSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = allDarts) ;
/**
* Reverse the orientation of the map
*/
......
......@@ -63,10 +63,8 @@ Dart trianguleFace(typename PFP::MAP& map, Dart d)
template <typename PFP, typename EMBV, typename EMB>
void trianguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected)
{
DartMarker m(map) ;
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !m.isMarked(d))
TraversorF<typename PFP::MAP> t(map, selected) ;
for (Dart d = t.begin(); d != t.end(); d = t.next())
{
EMB center = Algo::Geometry::faceCentroidGen<PFP,EMBV,EMB>(map, d, attributs); // compute center
Dart cd = trianguleFace<PFP>(map, d); // triangule the face
......@@ -74,11 +72,10 @@ void trianguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect
Dart fit = cd ;
do
{
m.markOrbit(FACE, fit);
t.mark(fit);
fit = map.alpha1(fit);
} while(fit != cd);
}
}
}
template <typename PFP>
......@@ -90,28 +87,24 @@ void trianguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const
template <typename PFP>
void trianguleFaces(
typename PFP::MAP& map,
typename PFP::TVEC3& position, typename PFP::TVEC3& positionF,
typename PFP::TVEC3& position, const typename PFP::TVEC3& positionF,
const FunctorSelect& selected)
{
assert(position.getOrbit() == VERTEX) ;
assert(positionF.getOrbit() == FACE) ;
DartMarker m(map) ;
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !m.isMarked(d))
TraversorF<typename PFP::MAP> t(map, selected) ;
for (Dart d = t.begin(); d != t.end(); d = t.next())
{
typename PFP::VEC3 p = positionF[d] ;
Dart cd = trianguleFace<PFP>(map, d) ; // triangule the face
position[cd] = p ; // affect the data to the central vertex
Dart cd = trianguleFace<PFP>(map, d); // triangule the face
position[cd] = positionF[d]; // affect the data to the central vertex
Dart fit = cd ;
do
{
m.markOrbit(FACE, fit);
t.mark(fit);
fit = map.alpha1(fit);
} while(fit != cd);
}
}
}
template <typename PFP>
......@@ -141,7 +134,7 @@ void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSele
// first pass: cut the edges
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !me.isMarked(d))
if (selected(d) && !map.isBoundaryMarked(d) && !me.isMarked(d))
{
Dart f = map.phi1(d);
map.cutEdge(d);
......@@ -161,7 +154,7 @@ void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSele
// second pass: quandrangule faces
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !mf.isMarked(d))
if (selected(d) && !map.isBoundaryMarked(d) && !mf.isMarked(d))
{
EMB center = Algo::Geometry::faceCentroidGen<PFP,EMBV,EMB>(map, d, attributs); // compute center
Dart cf = quadranguleFace<PFP>(map, d); // quadrangule the face
......@@ -195,7 +188,7 @@ void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const Func
// first pass: cut edges
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !me.isMarked(d))
if (selected(d) && !map.isBoundaryMarked(d) && !me.isMarked(d))
{
if (!m0.isMarked(d))
{
......@@ -229,7 +222,7 @@ void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const Func
// second pass: quandrangule faces
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && mf.isMarked(d)) // for each face not subdivided
if (selected(d) && !map.isBoundaryMarked(d) && mf.isMarked(d)) // for each face not subdivided
{
// compute center skip darts of new vertices non embedded
EMB center = AttribOps::zero<EMB,PFP>();
......@@ -346,7 +339,7 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
// first pass cut edges
for (Dart d = map.begin(); d != map.end(); map.next(d))
{
if (selected(d) && !me.isMarked(d))
if (selected(d) && !map.isBoundaryMarked(d) && !me.isMarked(d))
{
if (!m0.isMarked(d))
{
......@@ -381,9 +374,9 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
for(typename std::vector<Dart>::iterator mid = l_middles.begin(); mid != l_middles.end(); ++mid)
{
Dart d = *mid;
Dart dd = map.phi2(d);
if (dd != d)
if (!map.isBoundaryEdge(d))
{
Dart dd = map.phi2(d);
attributs[d] *= 0.75;
Dart e1 = map.template phi<111>(d);
EMB temp = AttribOps::zero<EMB,PFP>();
......@@ -458,6 +451,12 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
}
}
template <typename PFP>
void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected)
{
LoopSubdivision<PFP, typename PFP::TVEC3, typename PFP::VEC3>(map, position, selected) ;
}
template <typename PFP, typename EMBV, typename EMB>
void TwoNPlusOneSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected)
{
......@@ -526,12 +525,6 @@ void TwoNPlusOneSubdivision(typename PFP::MAP& map, EMBV& attributs, const Funct
}
}
template <typename PFP>
void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected)
{
LoopSubdivision<PFP, typename PFP::TVEC3, typename PFP::VEC3>(map, position, selected) ;
}
template <typename PFP>
void reverseOrientation(typename PFP::MAP& map)
{
......
......@@ -41,7 +41,7 @@ ProgressiveMesh<PFP>::ProgressiveMesh(
) :
m_map(map), positionsTable(position), inactiveMarker(inactive), dartSelect(inactiveMarker)
{
CGoGNout << " creating approximator and predictor.." << /* flush */ CGoGNendl ;
CGoGNout << " creating approximator and predictor.." << CGoGNflush ;
switch(a)
{
case Algo::Decimation::A_QEM : {
......@@ -73,7 +73,7 @@ ProgressiveMesh<PFP>::ProgressiveMesh(
}
CGoGNout << "..done" << CGoGNendl ;
CGoGNout << " creating selector.." << /* flush */ CGoGNendl ;
CGoGNout << " creating selector.." << CGoGNflush ;
switch(s)
{
case Algo::Decimation::S_MapOrder : {
......@@ -99,7 +99,7 @@ ProgressiveMesh<PFP>::ProgressiveMesh(
m_initOk = true ;
CGoGNout << " initializing approximators.." << /* flush */ CGoGNendl ;
CGoGNout << " initializing approximators.." << CGoGNflush ;
for(typename std::vector<Algo::Decimation::ApproximatorGen<PFP>*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it)
{
if(! (*it)->init())
......@@ -109,13 +109,13 @@ ProgressiveMesh<PFP>::ProgressiveMesh(
}
CGoGNout << "..done" << CGoGNendl ;
CGoGNout << " initializing predictors.." << /* flush */ CGoGNendl ;
CGoGNout << " initializing predictors.." << CGoGNflush ;
for(typename std::vector<Algo::Decimation::PredictorGen<PFP>*>::iterator it = m_predictors.begin(); it != m_predictors.end(); ++it)
if(! (*it)->init())
m_initOk = false ;
CGoGNout << "..done" << CGoGNendl ;
CGoGNout << " initializing selector.." << /* flush */ CGoGNendl ;
CGoGNout << " initializing selector.." << CGoGNflush ;
m_initOk = m_selector->init() ;
CGoGNout << "..done" << CGoGNendl ;
......
......@@ -105,9 +105,9 @@ template <typename PFP>