Commit 950f5e11 authored by Pierre Kraemer's avatar Pierre Kraemer

replace some functors by lambdas

parent cc63ab5a
...@@ -115,11 +115,12 @@ typename V_ATT::DATA_TYPE vertexBorderNormal(typename PFP::MAP& map, Vertex v, c ...@@ -115,11 +115,12 @@ typename V_ATT::DATA_TYPE vertexBorderNormal(typename PFP::MAP& map, Vertex v, c
typedef typename V_ATT::DATA_TYPE VEC3 ; typedef typename V_ATT::DATA_TYPE VEC3 ;
VEC3 N(0) ; VEC3 N(0) ;
std::vector<Dart> faces; std::vector<Dart> faces;
CellMarker<typename PFP::MAP, FACE> f(map); faces.reserve(16);
map.foreach_dart_of_vertex(v, [&] (Dart d) { faces.push_back(d); });
FunctorStore fs(faces); CellMarker<typename PFP::MAP, FACE> f(map);
map.foreach_dart_of_vertex(v, fs);
for(std::vector<Dart>::iterator it = faces.begin() ; it != faces.end() ; ++it) for(std::vector<Dart>::iterator it = faces.begin() ; it != faces.end() ; ++it)
{ {
......
This diff is collapsed.
...@@ -1635,7 +1635,10 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string ...@@ -1635,7 +1635,10 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string
std::vector<unsigned int> localIndices; std::vector<unsigned int> localIndices;
localIndices.reserve(64*3); localIndices.reserve(64*3);
FunctorInitEmb<typename PFP::MAP, VERTEX> fsetemb(m_map);
unsigned int vemb = EMBNULL;
auto fsetemb = [&] (Dart d) { m_map.template initDartEmbedding<VERTEX>(d, vemb); };
// FunctorInitEmb<typename PFP::MAP, VERTEX> fsetemb(m_map);
VertexAutoAttribute< NoTypeNameAttribute< std::vector<Dart> >, MAP_IMPL> vecDartsPerVertex(m_map, "incidents"); VertexAutoAttribute< NoTypeNameAttribute< std::vector<Dart> >, MAP_IMPL> vecDartsPerVertex(m_map, "incidents");
VertexAutoAttribute< NoTypeNameAttribute< std::vector<unsigned int> >, MAP_IMPL> vecNormIndPerVertex(m_map, "incidentsN"); VertexAutoAttribute< NoTypeNameAttribute< std::vector<unsigned int> >, MAP_IMPL> vecNormIndPerVertex(m_map, "incidentsN");
...@@ -1739,13 +1742,12 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string ...@@ -1739,13 +1742,12 @@ bool OBJModel<PFP>::import( const std::string& filename, std::vector<std::string
for (short j = 0; j < nbe; ++j) for (short j = 0; j < nbe; ++j)
{ {
unsigned int em = localIndices[3*j]-1; // get embedding vemb = localIndices[3*j]-1; // get embedding
fsetemb.changeEmb(em) ;
m_map.template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map.template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
mk.mark(d) ; // mark on the fly to unmark on second loop mk.mark(d) ; // mark on the fly to unmark on second loop
vecDartsPerVertex[em].push_back(d); // store incident darts for fast adjacency reconstruction vecDartsPerVertex[vemb].push_back(d); // store incident darts for fast adjacency reconstruction
vecTCIndPerVertex[em].push_back(localIndices[3*j+1]-1); vecTCIndPerVertex[vemb].push_back(localIndices[3*j+1]-1);
vecNormIndPerVertex[em].push_back(localIndices[3*j+2]-1); vecNormIndPerVertex[vemb].push_back(localIndices[3*j+2]-1);
d = m_map.phi1(d); d = m_map.phi1(d);
} }
} }
......
...@@ -119,13 +119,16 @@ Dart MarchingCube<DataType, Windowing, PFP>::createTriEmb(unsigned int e1, unsi ...@@ -119,13 +119,16 @@ Dart MarchingCube<DataType, Windowing, PFP>::createTriEmb(unsigned int e1, unsi
{ {
L_DART d = m_map->newFace(3,false); L_DART d = m_map->newFace(3,false);
FunctorSetEmb<typename PFP::MAP, VERTEX> fsetemb(*m_map, e1); unsigned int vemb = e1;
auto fsetemb = [&] (Dart d) { m_map->template setDartEmbedding<VERTEX>(d, vemb); };
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
fsetemb.changeEmb(e2); vemb = e2;
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
fsetemb.changeEmb(e3); vemb = e3;
m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb); m_map->template foreach_dart_of_orbit<PFP::MAP::VERTEX_OF_PARENT>(d, fsetemb);
d = m_map->phi1(d); d = m_map->phi1(d);
...@@ -136,7 +139,7 @@ template< typename DataType, template < typename D2 > class Windowing, typename ...@@ -136,7 +139,7 @@ template< typename DataType, template < typename D2 > class Windowing, typename
void MarchingCube<DataType, Windowing, PFP>::simpleMeshing() void MarchingCube<DataType, Windowing, PFP>::simpleMeshing()
{ {
// create the mesh if needed // create the mesh if needed
if (m_map==NULL) if (m_map == NULL)
{ {
m_map = new L_MAP(); m_map = new L_MAP();
} }
......
...@@ -267,39 +267,39 @@ public: ...@@ -267,39 +267,39 @@ public:
// Embedding Functors // Embedding Functors
/********************************************************/ /********************************************************/
template <typename MAP, unsigned int ORBIT> //template <typename MAP, unsigned int ORBIT>
class FunctorSetEmb : public FunctorMap<MAP> //class FunctorSetEmb : public FunctorMap<MAP>
{ //{
protected: //protected:
unsigned int emb; // unsigned int emb;
public: //public:
FunctorSetEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e) // FunctorSetEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e)
{} // {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
this->m_map.template setDartEmbedding<ORBIT>(d, emb); // this->m_map.template setDartEmbedding<ORBIT>(d, emb);
return false; // return false;
} // }
void changeEmb(unsigned int e) { emb = e; } // void changeEmb(unsigned int e) { emb = e; }
}; //};
template <typename MAP, unsigned int ORBIT> //template <typename MAP, unsigned int ORBIT>
class FunctorInitEmb : public FunctorMap<MAP> //class FunctorInitEmb : public FunctorMap<MAP>
{ //{
protected: //protected:
unsigned int emb; // unsigned int emb;
public: //public:
FunctorInitEmb(MAP& map) : FunctorMap<MAP>(map), emb(EMBNULL) // FunctorInitEmb(MAP& map) : FunctorMap<MAP>(map), emb(EMBNULL)
{} // {}
FunctorInitEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e) // FunctorInitEmb(MAP& map, unsigned int e) : FunctorMap<MAP>(map), emb(e)
{} // {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
this->m_map.template initDartEmbedding<ORBIT>(d, emb); // this->m_map.template initDartEmbedding<ORBIT>(d, emb);
return false; // return false;
} // }
void changeEmb(unsigned int e) { emb = e; } // void changeEmb(unsigned int e) { emb = e; }
}; //};
// Search Functor: look for a given dart when applied // Search Functor: look for a given dart when applied
/********************************************************/ /********************************************************/
...@@ -332,18 +332,18 @@ public: ...@@ -332,18 +332,18 @@ public:
// Functor Store: to store the traversed darts in a given vector // Functor Store: to store the traversed darts in a given vector
/********************************************************/ /********************************************************/
class FunctorStore : public FunctorType //class FunctorStore : public FunctorType
{ //{
protected: //protected:
std::vector<Dart>& m_vec; // std::vector<Dart>& m_vec;
public: //public:
FunctorStore(std::vector<Dart>& vec) : m_vec(vec) {} // FunctorStore(std::vector<Dart>& vec) : m_vec(vec) {}
bool operator()(Dart d) // bool operator()(Dart d)
{ // {
m_vec.push_back(d); // m_vec.push_back(d);
return false; // return false;
} // }
}; //};
template <typename MAP> template <typename MAP>
......
...@@ -301,8 +301,7 @@ Dart Map3<MAP_IMPL>::deleteVertex(Dart d) ...@@ -301,8 +301,7 @@ Dart Map3<MAP_IMPL>::deleteVertex(Dart d)
// (one dart per face should be enough) // (one dart per face should be enough)
std::vector<Dart> fstoretmp; std::vector<Dart> fstoretmp;
fstoretmp.reserve(128); fstoretmp.reserve(128);
FunctorStore fs(fstoretmp); foreach_dart_of_vertex(d, [&] (Dart it) { fstoretmp.push_back(it); });
foreach_dart_of_vertex(d, fs);
// just one dart per face // just one dart per face
std::vector<Dart> fstore; std::vector<Dart> fstore;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment