From ce89d70a762f5a8feb427bc0ab0d0b4ff3ca0ad0 Mon Sep 17 00:00:00 2001 From: Sylvain Thery Date: Mon, 14 Jan 2013 09:47:31 +0100 Subject: [PATCH] add Surface namespace in ProgressiveMesh --- include/Algo/ProgressiveMesh/pmesh.h | 5 ++ include/Algo/ProgressiveMesh/pmesh.hpp | 93 +++++++++++++------------- include/Algo/ProgressiveMesh/vsplit.h | 6 +- 3 files changed, 57 insertions(+), 47 deletions(-) diff --git a/include/Algo/ProgressiveMesh/pmesh.h b/include/Algo/ProgressiveMesh/pmesh.h index d5b41bcb2..1af104956 100644 --- a/include/Algo/ProgressiveMesh/pmesh.h +++ b/include/Algo/ProgressiveMesh/pmesh.h @@ -41,6 +41,9 @@ namespace CGoGN namespace Algo { +namespace Surface +{ + namespace PMesh { @@ -126,6 +129,8 @@ private: } //namespace PMesh +} // Surface + } //namespace Algo } //namespace CGoGN diff --git a/include/Algo/ProgressiveMesh/pmesh.hpp b/include/Algo/ProgressiveMesh/pmesh.hpp index 267dab989..e2948c0f1 100644 --- a/include/Algo/ProgressiveMesh/pmesh.hpp +++ b/include/Algo/ProgressiveMesh/pmesh.hpp @@ -30,13 +30,16 @@ namespace CGoGN namespace Algo { +namespace Surface +{ + namespace PMesh { template ProgressiveMesh::ProgressiveMesh( MAP& map, DartMarker& inactive, - Algo::Decimation::SelectorType s, Algo::Decimation::ApproximatorType a, + Algo::Surface::Decimation::SelectorType s, Algo::Surface::Decimation::ApproximatorType a, VertexAttribute& position ) : m_map(map), positionsTable(position), inactiveMarker(inactive), dartSelect(inactiveMarker) @@ -47,31 +50,31 @@ ProgressiveMesh::ProgressiveMesh( pos_v.push_back(&positionsTable) ; switch(a) { - case Algo::Decimation::A_QEM : { - m_approximators.push_back(new Algo::Decimation::Approximator_QEM(m_map, pos_v)) ; + case Algo::Surface::Decimation::A_QEM : { + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_QEM(m_map, pos_v)) ; break ; } - case Algo::Decimation::A_MidEdge : { - m_approximators.push_back(new Algo::Decimation::Approximator_MidEdge(m_map, pos_v)) ; + case Algo::Surface::Decimation::A_MidEdge : { + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_MidEdge(m_map, pos_v)) ; break ; } - case Algo::Decimation::A_hHalfCollapse : { - Algo::Decimation::Predictor_HalfCollapse* pred = new Algo::Decimation::Predictor_HalfCollapse(m_map, positionsTable) ; + case Algo::Surface::Decimation::A_hHalfCollapse : { + Algo::Surface::Decimation::Predictor_HalfCollapse* pred = new Algo::Surface::Decimation::Predictor_HalfCollapse(m_map, positionsTable) ; m_predictors.push_back(pred) ; - m_approximators.push_back(new Algo::Decimation::Approximator_HalfCollapse(m_map, pos_v, pred)) ; + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_HalfCollapse(m_map, pos_v, pred)) ; break ; } - case Algo::Decimation::A_CornerCutting : { - Algo::Decimation::Predictor_CornerCutting* pred = new Algo::Decimation::Predictor_CornerCutting(m_map, positionsTable) ; + case Algo::Surface::Decimation::A_CornerCutting : { + Algo::Surface::Decimation::Predictor_CornerCutting* pred = new Algo::Surface::Decimation::Predictor_CornerCutting(m_map, positionsTable) ; m_predictors.push_back(pred) ; - m_approximators.push_back(new Algo::Decimation::Approximator_CornerCutting(m_map, pos_v, pred)) ; + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_CornerCutting(m_map, pos_v, pred)) ; break ; } - case Algo::Decimation::A_TangentPredict1 : { - Algo::Decimation::Predictor_TangentPredict1* pred = new Algo::Decimation::Predictor_TangentPredict1(m_map, positionsTable) ; + case Algo::Surface::Decimation::A_TangentPredict1 : { + Algo::Surface::Decimation::Predictor_TangentPredict1* pred = new Algo::Surface::Decimation::Predictor_TangentPredict1(m_map, positionsTable) ; m_predictors.push_back(pred) ; - m_approximators.push_back(new Algo::Decimation::Approximator_MidEdge(m_map, pos_v, pred)) ; + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_MidEdge(m_map, pos_v, pred)) ; break ; } - case Algo::Decimation::A_TangentPredict2 : { - Algo::Decimation::Predictor_TangentPredict2* pred = new Algo::Decimation::Predictor_TangentPredict2(m_map, positionsTable) ; + case Algo::Surface::Decimation::A_TangentPredict2 : { + Algo::Surface::Decimation::Predictor_TangentPredict2* pred = new Algo::Surface::Decimation::Predictor_TangentPredict2(m_map, positionsTable) ; m_predictors.push_back(pred) ; - m_approximators.push_back(new Algo::Decimation::Approximator_MidEdge(m_map, pos_v, pred)) ; + m_approximators.push_back(new Algo::Surface::Decimation::Approximator_MidEdge(m_map, pos_v, pred)) ; break ; } } CGoGNout << "..done" << CGoGNendl ; @@ -79,23 +82,23 @@ ProgressiveMesh::ProgressiveMesh( CGoGNout << " creating selector.." << CGoGNflush ; switch(s) { - case Algo::Decimation::S_MapOrder : { - m_selector = new Algo::Decimation::EdgeSelector_MapOrder(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_MapOrder : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_MapOrder(m_map, positionsTable, m_approximators, dartSelect) ; break ; } - case Algo::Decimation::S_Random : { - m_selector = new Algo::Decimation::EdgeSelector_Random(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_Random : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_Random(m_map, positionsTable, m_approximators, dartSelect) ; break ; } - case Algo::Decimation::S_EdgeLength : { - m_selector = new Algo::Decimation::EdgeSelector_Length(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_EdgeLength : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_Length(m_map, positionsTable, m_approximators, dartSelect) ; break ; } - case Algo::Decimation::S_QEM : { - m_selector = new Algo::Decimation::EdgeSelector_QEM(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_QEM : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_QEM(m_map, positionsTable, m_approximators, dartSelect) ; break ; } - case Algo::Decimation::S_MinDetail : { - m_selector = new Algo::Decimation::EdgeSelector_MinDetail(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_MinDetail : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_MinDetail(m_map, positionsTable, m_approximators, dartSelect) ; break ; } - case Algo::Decimation::S_Curvature : { - m_selector = new Algo::Decimation::EdgeSelector_Curvature(m_map, positionsTable, m_approximators, dartSelect) ; + case Algo::Surface::Decimation::S_Curvature : { + m_selector = new Algo::Surface::Decimation::EdgeSelector_Curvature(m_map, positionsTable, m_approximators, dartSelect) ; break ; } } CGoGNout << "..done" << CGoGNendl ; @@ -103,17 +106,17 @@ ProgressiveMesh::ProgressiveMesh( m_initOk = true ; CGoGNout << " initializing approximators.." << CGoGNflush ; - for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) + for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) { if(! (*it)->init()) m_initOk = false ; if((*it)->getApproximatedAttributeName() == "position") - m_positionApproximator = reinterpret_cast*>(*it) ; + m_positionApproximator = reinterpret_cast*>(*it) ; } CGoGNout << "..done" << CGoGNendl ; CGoGNout << " initializing predictors.." << CGoGNflush ; - for(typename std::vector*>::iterator it = m_predictors.begin(); it != m_predictors.end(); ++it) + for(typename std::vector*>::iterator it = m_predictors.begin(); it != m_predictors.end(); ++it) if(! (*it)->init()) m_initOk = false ; CGoGNout << "..done" << CGoGNendl ; @@ -135,9 +138,9 @@ ProgressiveMesh::~ProgressiveMesh() delete m_splits[i] ; if(m_selector) delete m_selector ; - for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) + for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) delete (*it) ; - for(typename std::vector*>::iterator it = m_predictors.begin(); it != m_predictors.end(); ++it) + for(typename std::vector*>::iterator it = m_predictors.begin(); it != m_predictors.end(); ++it) delete (*it) ; if(quantizationInitialized) delete q ; @@ -164,7 +167,7 @@ void ProgressiveMesh::createPM(unsigned int percentWantedVertices) VSplit* vs = new VSplit(m_map, d, dd2, d2) ; // create new VSplit node m_splits.push_back(vs) ; // and store it - for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) + for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) { (*it)->approximate(d) ; // compute approximated attributes with its associated detail (*it)->saveApprox(d) ; @@ -181,7 +184,7 @@ void ProgressiveMesh::createPM(unsigned int percentWantedVertices) vs->setApproxE1(newE1) ; vs->setApproxE2(newE2) ; - for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) + for(typename std::vector*>::iterator it = m_approximators.begin(); it != m_approximators.end(); ++it) (*it)->affectApprox(d2); // affect data to the resulting vertex m_selector->updateAfterCollapse(d2, dd2) ; // update selector @@ -270,7 +273,7 @@ void ProgressiveMesh::refine() if(!m_predictors.empty()) { - for(typename std::vector*>::iterator pit = m_predictors.begin(); + for(typename std::vector*>::iterator pit = m_predictors.begin(); pit != m_predictors.end(); ++pit) { @@ -281,7 +284,7 @@ void ProgressiveMesh::refine() typename PFP::MATRIX33 invLocalFrame ; if(m_localFrameDetailVectors) { - typename PFP::MATRIX33 localFrame = Algo::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; + typename PFP::MATRIX33 localFrame = Algo::Surface::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; localFrame.invert(invLocalFrame) ; } @@ -296,8 +299,8 @@ void ProgressiveMesh::refine() if(!m_predictors.empty()) { - typename std::vector*>::iterator pit ; - typename std::vector*>::iterator ait ; + typename std::vector*>::iterator pit ; + typename std::vector*>::iterator ait ; for(pit = m_predictors.begin(), ait = m_approximators.begin(); pit != m_predictors.end(); ++pit, ++ait) @@ -307,7 +310,7 @@ void ProgressiveMesh::refine() detailTransform = &invLocalFrame ; (*pit)->affectPredict(d) ; - if((*ait)->getType() == Algo::Decimation::A_hHalfCollapse) + if((*ait)->getType() == Algo::Surface::Decimation::A_hHalfCollapse) { (*ait)->addDetail(dd, m_detailAmount, true, detailTransform) ; } @@ -378,7 +381,7 @@ void ProgressiveMesh::localizeDetailVectors() { Dart d = m_splits[m_cur-1]->getEdge() ; Dart dd2 = m_splits[m_cur-1]->getRightEdge() ; - typename PFP::MATRIX33 localFrame = Algo::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; + typename PFP::MATRIX33 localFrame = Algo::Surface::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; VEC3 det = m_positionApproximator->getDetail(d) ; det = localFrame * det ; m_positionApproximator->setDetail(d, det) ; @@ -409,7 +412,7 @@ void ProgressiveMesh::globalizeDetailVectors() { Dart d = m_splits[m_cur-1]->getEdge() ; Dart dd2 = m_splits[m_cur-1]->getRightEdge() ; - typename PFP::MATRIX33 localFrame = Algo::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; + typename PFP::MATRIX33 localFrame = Algo::Surface::Geometry::vertexLocalFrame(m_map, dd2, positionsTable) ; typename PFP::MATRIX33 invLocalFrame ; localFrame.invert(invLocalFrame) ; VEC3 det = m_positionApproximator->getDetail(d) ; @@ -573,7 +576,7 @@ void ProgressiveMesh::calculCourbeDebitDistortion() */ } //namespace PMesh - +} // Surface } //namespace Algo - +} } //namespace CGoGN diff --git a/include/Algo/ProgressiveMesh/vsplit.h b/include/Algo/ProgressiveMesh/vsplit.h index b8554dc0d..78e13afa5 100644 --- a/include/Algo/ProgressiveMesh/vsplit.h +++ b/include/Algo/ProgressiveMesh/vsplit.h @@ -31,6 +31,9 @@ namespace CGoGN namespace Algo { +namespace Surface +{ + namespace PMesh { @@ -98,9 +101,8 @@ public: } ; } //namespace PMesh - +} // Surface } //namespace Algo - } //namespace CGoGN #endif -- GitLab