diff --git a/Apps/Examples/Viewer.cpp b/Apps/Examples/Viewer.cpp index 67e1f187a78e1524f6c00ff9181cfd06a9ebafa5..770d44988e35809a6dc60502e5ae54a58e750916 100644 --- a/Apps/Examples/Viewer.cpp +++ b/Apps/Examples/Viewer.cpp @@ -246,7 +246,7 @@ void myGlutWin::myKeyboard(unsigned char keycode, int, int) case 's': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::CatmullClarkSubdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::CatmullClarkSubdivision(myMap, position); GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "catmull-clark: "<< seconds << "sec" << std::endl; @@ -259,11 +259,11 @@ void myGlutWin::myKeyboard(unsigned char keycode, int, int) case 'l': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "loop: "<< seconds << "sec" << std::endl; @@ -276,7 +276,7 @@ void myGlutWin::myKeyboard(unsigned char keycode, int, int) case 'd': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::Sqrt3Subdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::Sqrt3Subdivision(myMap, position); GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "dual: "<< seconds << "sec" << std::endl; diff --git a/Apps/Examples/miniTest.cpp b/Apps/Examples/miniTest.cpp index 507907a4632cc14e943e25e9734e0582373118e0..66d53181d2cc9499ed12f60ed880f2738d04cadd 100644 --- a/Apps/Examples/miniTest.cpp +++ b/Apps/Examples/miniTest.cpp @@ -433,7 +433,7 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y) case 'l': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "loop: "<< seconds << "sec" << std::endl; @@ -454,7 +454,7 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y) case 'c': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::CatmullClarkSubdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::CatmullClarkSubdivision(myMap, position); GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "catmull-clark: "<< seconds << "sec" << std::endl; @@ -475,7 +475,7 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y) case 't': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::trianguleFaces, PFP::VEC3>(myMap, position) ; + Algo::Modelisation::trianguleFaces(myMap, position) ; GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "triangulation: "<< seconds << "sec" << std::endl; @@ -495,7 +495,7 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y) case 'q': { GLint t1 = glutGet(GLUT_ELAPSED_TIME); - Algo::Modelisation::quadranguleFaces, PFP::VEC3>(myMap, position) ; + Algo::Modelisation::quadranguleFaces(myMap, position) ; GLint t2 = glutGet(GLUT_ELAPSED_TIME); GLfloat seconds = (t2 - t1) / 1000.0f; std::cout << "quadrangulation: "<< seconds << "sec" << std::endl; @@ -534,6 +534,64 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y) break ; } + case '3': + { + CellMarker markVisit(myMap, VERTEX_CELL) ; + + CellMarker markNoDelete(myMap, VERTEX_CELL) ; + + std::vector visited ; + visited.reserve(myMap.getNbCells(VERTEX_CELL)) ; + + visited.push_back(myMap.begin()) ; + markVisit.mark(myMap.begin()) ; + + for(std::vector::iterator vertex = visited.begin(); vertex != visited.end(); ++vertex) + { + bool deleteV = true ; + if(markNoDelete.isMarked(*vertex)) + deleteV = false ; + + Dart vit = *vertex ; + do // add all vertex neighbors to the table + { + Dart nv = myMap.phi1(vit) ; + if(!markVisit.isMarked(nv)) + { + visited.push_back(nv) ; + markVisit.mark(nv) ; + } + if(deleteV) + markNoDelete.mark(nv) ; + vit = myMap.alpha1(vit) ; + } while(vit != *vertex) ; + + if(deleteV) + myMap.deleteVertex(*vertex) ; + } + +// for(Dart d = myMap.begin(); d != myMap.end(); myMap.next(d)) +// { +// if(!markVisit.isMarked(d)) +// { +// Dart dd = myMap.phi1(d) ; +// myMap.deleteVertex(d) ; +// Dart fit = dd ; +// do +// { +// markVisit.mark(fit) ; +// fit = myMap.phi1(fit) ; +// } while(fit != dd) ; +// } +// } + + updateVBOprimitives(Algo::Render::VBO::TRIANGLES | Algo::Render::VBO::LINES | Algo::Render::VBO::POINTS) ; + updateVBOdata(Algo::Render::VBO::POSITIONS | Algo::Render::VBO::NORMALS) ; + topo_render->updateData(myMap, position, 0.9f, 0.9f) ; + glutPostRedisplay() ; + break ; + } + case 'a': { Algo::Geometry::computeLaplacianVertices(myMap, Algo::Geometry::TOPOLOGICAL, position, laplacian) ; diff --git a/Apps/Tuto/tuto_subdivision.cpp b/Apps/Tuto/tuto_subdivision.cpp index ec19e76dc0231164894e12d1dc540fa22504bb31..ad54044140612e36af6109f87edef99241d3c9bd 100644 --- a/Apps/Tuto/tuto_subdivision.cpp +++ b/Apps/Tuto/tuto_subdivision.cpp @@ -74,7 +74,7 @@ int main(int argc, char **argv) AttributeHandler position = myMap.getAttribute(VERTEX_ORBIT, attrNames[0]); for(unsigned int i = 0; i < nbSteps; ++i) - Algo::Modelisation::LoopSubdivision, PFP::VEC3>(myMap, position); + Algo::Modelisation::LoopSubdivision(myMap, position); Algo::Export::exportOFF(myMap, position, "result.off"); diff --git a/include/Algo/ImplicitHierarchicalMesh/ihm.h b/include/Algo/ImplicitHierarchicalMesh/ihm.h index 7c3b0f2901eed5fe628f851cd039af5a07e34748..a0e74447b382e2e2870e162150dd5649fe36512b 100644 --- a/include/Algo/ImplicitHierarchicalMesh/ihm.h +++ b/include/Algo/ImplicitHierarchicalMesh/ihm.h @@ -51,7 +51,7 @@ private: AttributeHandler m_dartLevel ; AttributeHandler m_edgeId ; - AttribMultiVect* m_nextLevelCell[NB_ORBITS] ; + AttributeMultiVector* m_nextLevelCell[NB_ORBITS] ; public: ImplicitHierarchicalMap() ; @@ -214,7 +214,7 @@ public: AttributeHandler_IHM(GenericMap* m, unsigned int idAttr) : AttributeHandler(m, idAttr) {} - AttribMultiVect* getDataVector() const + AttributeMultiVector* getDataVector() const { return AttributeHandler::getDataVector() ; } diff --git a/include/Algo/ImplicitHierarchicalMesh/ihm.hpp b/include/Algo/ImplicitHierarchicalMesh/ihm.hpp index 36a718d928a96f586dcd11f6e73d28220906b965..ad24cf24cd17e40859ed2a4ed332c4899259b6ce 100644 --- a/include/Algo/ImplicitHierarchicalMesh/ihm.hpp +++ b/include/Algo/ImplicitHierarchicalMesh/ihm.hpp @@ -46,9 +46,9 @@ AttributeHandler_IHM ImplicitHierarchicalMap::addAttribute(unsigned int orbit if(addNextLevelCell) { - AttribContainer& cellCont = m_attribs[orbit] ; + AttributeContainer& cellCont = m_attribs[orbit] ; unsigned int index = cellCont.addAttribute("nextLevelCell") ; - AttribMultiVect& amv = cellCont.getDataVector(index) ; + AttributeMultiVector& amv = cellCont.getDataVector(index) ; m_nextLevelCell[orbit] = &amv ; for(unsigned int i = cellCont.begin(); i < cellCont.end(); cellCont.next(i)) amv[i] = EMBNULL ; @@ -344,7 +344,7 @@ T& AttributeHandler_IHM::operator[](Dart d) assert(m->m_dartLevel[d] <= m->m_curLevel || !"Access to a dart introduced after current level") ; assert(m->vertexInsertionLevel(d) <= m->m_curLevel || !"Access to the embedding of a vertex inserted after current level") ; - unsigned int orbit = AttribContainer::orbitAttr(this->m_id) ; + unsigned int orbit = AttributeContainer::orbitAttr(this->m_id) ; unsigned int nbSteps = m->m_curLevel - m->vertexInsertionLevel(d) ; unsigned int index = m->getEmbedding(d, orbit) ; @@ -355,7 +355,7 @@ T& AttributeHandler_IHM::operator[](Dart d) return this->m_attrib->operator[](index); } - AttribContainer& cont = m->getAttributeContainer(orbit) ; + AttributeContainer& cont = m->getAttributeContainer(orbit) ; unsigned int step = 0 ; while(step < nbSteps) { @@ -381,7 +381,7 @@ const T& AttributeHandler_IHM::operator[](Dart d) const assert(m->m_dartLevel[d] <= m->m_curLevel || !"Access to a dart introduced after current level") ; assert(m->vertexInsertionLevel(d) <= m->m_curLevel || !"Access to the embedding of a vertex inserted after current level") ; - unsigned int orbit = AttribContainer::orbitAttr(this->m_id) ; + unsigned int orbit = AttributeContainer::orbitAttr(this->m_id) ; unsigned int nbSteps = m->m_curLevel - m->vertexInsertionLevel(d) ; unsigned int index = m->getEmbedding(d, orbit) ; diff --git a/include/Algo/Import/import2tables.h b/include/Algo/Import/import2tables.h index f5cbf44b88bc26cde19e78d9c5e139142cb82bbe..7177fc5aa431f00cdb54b5d6c1cf31174a88576b 100644 --- a/include/Algo/Import/import2tables.h +++ b/include/Algo/Import/import2tables.h @@ -83,7 +83,7 @@ protected: static ImportSurfacique::ImportType getFileType(const std::string& filename); - void extractMeshRec(AttribContainer& container, AttributeHandler& positions, const struct aiScene* scene, const struct aiNode* nd, struct aiMatrix4x4* trafo); + void extractMeshRec(AttributeContainer& container, AttributeHandler& positions, const struct aiScene* scene, const struct aiNode* nd, struct aiMatrix4x4* trafo); public: typedef typename PFP::VEC3 VEC3 ; diff --git a/include/Algo/Import/import2tablesSurface.hpp b/include/Algo/Import/import2tablesSurface.hpp index 2ac004cf87c4ec0cbc71beba1add18fd0dc1dfd1..81196ba275e97300d096a0973a70d3d12027f92d 100644 --- a/include/Algo/Import/import2tablesSurface.hpp +++ b/include/Algo/Import/import2tablesSurface.hpp @@ -119,7 +119,7 @@ bool MeshTablesSurface::importTrian(const std::string& filename, std::vecto AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; // open file std::ifstream fp(filename.c_str(), std::ios::in); @@ -182,7 +182,7 @@ bool MeshTablesSurface::importTrianBinGz(const std::string& filename, std:: AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; // open file igzstream fs(filename.c_str(), std::ios::in|std::ios::binary); @@ -248,7 +248,7 @@ bool MeshTablesSurface::importOff(const std::string& filename, std::vector< AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; // open file std::ifstream fp(filename.c_str(), std::ios::in); @@ -343,7 +343,7 @@ bool MeshTablesSurface::importObj(const std::string& filename, std::vector< AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; // open file std::ifstream fp(filename.c_str(), std::ios::binary); @@ -462,7 +462,7 @@ bool MeshTablesSurface::importPly(const std::string& filename, std::vector< AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; PlyImportData pid; @@ -517,7 +517,7 @@ bool MeshTablesSurface::importPlyPTM(const std::string& filename, std::vect AttributeHandler RGBfunctions = m_map.template addAttribute(VERTEX_ORBIT, "RGBfunctions") ; attrNames.push_back(RGBfunctions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; std::ifstream fp(filename.c_str(), std::ios::binary); if (!fp.good()) @@ -621,7 +621,7 @@ bool MeshTablesSurface::importCTM(const std::string& filename, std::vector< AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; // Load the file using the OpenCTM API CTMimporter ctm; @@ -665,7 +665,7 @@ bool MeshTablesSurface::importCTM(const std::string& filename, std::vector< } template -void MeshTablesSurface::extractMeshRec(AttribContainer& container, AttributeHandler& positions, const struct aiScene* scene, const struct aiNode* nd, struct aiMatrix4x4* trafo) +void MeshTablesSurface::extractMeshRec(AttributeContainer& container, AttributeHandler& positions, const struct aiScene* scene, const struct aiNode* nd, struct aiMatrix4x4* trafo) { struct aiMatrix4x4 prev; @@ -720,7 +720,7 @@ void MeshTablesSurface::extractMeshRec(AttribContainer& container, Attribut template bool MeshTablesSurface::importASSIMP(const std::string& filename, std::vector& attrNames) { - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; diff --git a/include/Algo/Import/import2tablesVolume.hpp b/include/Algo/Import/import2tablesVolume.hpp index 1705c42e2fe3a227e7ae9d488475d7269a777bff..b600f89ed4aa49c0a0ba7e8b463fc9ccdded70e6 100644 --- a/include/Algo/Import/import2tablesVolume.hpp +++ b/include/Algo/Import/import2tablesVolume.hpp @@ -73,7 +73,7 @@ bool MeshTablesVolume::importMesh(const std::string& filename, std::vector< template bool MeshTablesVolume::importTet(const std::string& filename, std::vector& attrNames, float scaleFactor=1.0f) { - AttribContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = m_map.getAttributeContainer(VERTEX_CELL) ; AttributeHandler positions = m_map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(positions.name()) ; diff --git a/include/Algo/Import/importInESS.hpp b/include/Algo/Import/importInESS.hpp index 7c40ddb5a8316a584791df55436c6114f901fde3..275287be2716e5c86083019f9565f3535022836d 100644 --- a/include/Algo/Import/importInESS.hpp +++ b/include/Algo/Import/importInESS.hpp @@ -62,7 +62,7 @@ bool importInESS(typename PFP::MAP& map, const std::string& filename, std::vecto AttributeHandler position = map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(position.name()) ; - AttribContainer& container = map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = map.getAttributeContainer(VERTEX_CELL) ; // open file std::ifstream fp(filename.c_str(), std::ios::in); diff --git a/include/Algo/Import/importMesh.hpp b/include/Algo/Import/importMesh.hpp index c6f7599c541ca1c75c26b167d6ebeb05e7c10189..578ad29ec5122d5c76aeeaae3eb3a104e5c62f90 100644 --- a/include/Algo/Import/importMesh.hpp +++ b/include/Algo/Import/importMesh.hpp @@ -457,7 +457,7 @@ bool importMesh(typename PFP::MAP& map, const std::string& filename, std::vector // // // // Attributes container for vertex orbit -// AttribContainer& vertexContainer = map.getAttributeContainer(VERTEX_ORBIT); +// AttributeContainer& vertexContainer = map.getAttributeContainer(VERTEX_ORBIT); // // AttributeHandler positions(idPositions,map); // diff --git a/include/Algo/Import/importObjEle.hpp b/include/Algo/Import/importObjEle.hpp index 66ecc48c47f556319f06fcecae22e2d8321b51bb..afa6a6a59bc9682c796103d1d7a6807a9b9050c9 100644 --- a/include/Algo/Import/importObjEle.hpp +++ b/include/Algo/Import/importObjEle.hpp @@ -42,7 +42,7 @@ bool importOFFWithELERegions(typename PFP::MAP& map, const std::string& filename AttributeHandler position = map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(position.name()) ; - AttribContainer& container = map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = map.getAttributeContainer(VERTEX_CELL) ; unsigned int m_nbVertices = 0, m_nbFaces = 0, m_nbEdges = 0, m_nbVolumes = 0; diff --git a/include/Algo/Import/importTet.hpp b/include/Algo/Import/importTet.hpp index 26484185a4db4beaeb3abe78c7a944117d265032..42fa5dd9e3e3be7ac49c51010b3fa2a850846e0d 100644 --- a/include/Algo/Import/importTet.hpp +++ b/include/Algo/Import/importTet.hpp @@ -40,7 +40,7 @@ bool importTet(typename PFP::MAP& map, const std::string& filename, std::vector< AttributeHandler position = map.template addAttribute(VERTEX_ORBIT, "position") ; attrNames.push_back(position.name()) ; - AttribContainer& container = map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = map.getAttributeContainer(VERTEX_CELL) ; unsigned int m_nbVertices = 0, m_nbFaces = 0, m_nbEdges = 0, m_nbVolumes = 0; AutoAttributeHandler< NoMathIONameAttribute< std::vector > > vecDartsPerVertex(map, VERTEX_ORBIT, "incidents"); diff --git a/include/Algo/Import/importTs.hpp b/include/Algo/Import/importTs.hpp index 4440d59c6573da89a6aa4669d7b44d837b5f603d..9c77ad36da4f07ac816b370ad91acd2b902662cb 100644 --- a/include/Algo/Import/importTs.hpp +++ b/include/Algo/Import/importTs.hpp @@ -48,7 +48,7 @@ bool importTs(typename PFP::MAP& map, const std::string& filename, std::vector scalaire = map.template addAttribute(VERTEX_ORBIT, "scalar"); attrNames.push_back(scalaire.name()) ; - AttribContainer& container = map.getAttributeContainer(VERTEX_CELL) ; + AttributeContainer& container = map.getAttributeContainer(VERTEX_CELL) ; unsigned int m_nbVertices = 0, m_nbFaces = 0, m_nbEdges = 0, m_nbVolumes = 0; AutoAttributeHandler< NoMathIONameAttribute< std::vector > > vecDartsPerVertex(map, VERTEX_ORBIT, "incidents"); diff --git a/include/Algo/Modelisation/subdivision.h b/include/Algo/Modelisation/subdivision.h index 7744158e12e3f039712efd7e0e945f2724ad16c9..74d7ae6338eb9dedf348225dec8aface2d69c2d6 100644 --- a/include/Algo/Modelisation/subdivision.h +++ b/include/Algo/Modelisation/subdivision.h @@ -22,8 +22,8 @@ * * *******************************************************************************/ -#ifndef _SUBDIVISION_H_ -#define _SUBDIVISION_H_ +#ifndef __SUBDIVISION_H__ +#define __SUBDIVISION_H__ #include #include @@ -51,6 +51,9 @@ Dart trianguleFace(typename PFP::MAP& map, Dart d); template void trianguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void trianguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; + /** * Quadrangule a face with central vertex * warning: edges are considered here as already cut !! @@ -67,29 +70,40 @@ Dart quadranguleFace(typename PFP::MAP& map, Dart d); template void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void quadranguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; + /** * Catmull-Clark subdivision scheme */ template void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void CatmullClarkSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; + /** * Loop subdivision scheme */ template void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; + /** * Dual mesh computation */ -template -void computeDual(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void computeDual(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; /** * Sqrt(3) subdivision scheme */ -template -void Sqrt3Subdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()) ; +template +void Sqrt3Subdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = SelectorTrue()) ; + + /* * TODO quadrangule volume @@ -111,7 +125,6 @@ void hexaCutVolume(typename PFP::MAP& map, Dart d, EMBV& attributs); template void quadranguleVolumes(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected = SelectorTrue()); -//double betaF(unsigned int n) ; // TODO a mettre ailleurs ? // diff --git a/include/Algo/Modelisation/subdivision.hpp b/include/Algo/Modelisation/subdivision.hpp index 1b4eb7bf459e1c0e2aa7dd407b12275951e559f9..e04cdccc59ab258d1b93956460f045846217f7c6 100644 --- a/include/Algo/Modelisation/subdivision.hpp +++ b/include/Algo/Modelisation/subdivision.hpp @@ -78,6 +78,12 @@ void trianguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect } } +template +void trianguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) +{ + trianguleFaces(map, position, selected) ; +} + template Dart quadranguleFace(typename PFP::MAP& map, Dart d) { @@ -140,8 +146,14 @@ void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSele } } +template +void quadranguleFaces(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) +{ + quadranguleFaces(map, position, selected) ; +} + template -void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected) +void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected) { std::vector l_middles; std::vector l_verts; @@ -261,6 +273,12 @@ void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const Fun } } +template +void CatmullClarkSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) +{ + CatmullClarkSubdivision(map, position, selected) ; +} + inline double betaF(unsigned int n) { switch(n) @@ -410,50 +428,48 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec } } -template -void computeDual(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected) +template +void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) +{ + LoopSubdivision(map, position, selected) ; +} + +template +void computeDual(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) { -// std::vector lstEmbs; -// lstEmbs.reserve(map.getNbDarts()/3); +// typedef typename PFP::MAP MAP ; +// typedef typename PFP::VEC3 VEC3 ; +// typedef typename PFP::REAL REAL ; // -// DartMarker m(map); -// for (Dart d = map.begin(); d != map.end(); map.next(d)) -// { -// if (!m.isMarked(d)) -// { -// EMB center = Algo::Geometry::faceCentroidGen(map, d, attributs); -// m.markOrbit(FACE_ORBIT, d); -// lstEmbs.push_back(center); -// } -// } +// AutoAttributeHandler faceCentroid(map, FACE_ORBIT, "faceCentroid") ; +// Algo::Geometry::computeCentroidFaces(map, position, faceCentroid, selected) ; // -// typename std::vector::iterator itEmb = lstEmbs.begin(); -// for (Dart d = map.begin(); d != map.end(); map.next(d)) +// for(Dart d = map.begin(); d != map.end(); map.next(d)) // { -// if (m.isMarked(d)) +// if(m.isMarked(d)) // { -// unsigned int em = map.newCell(VERTEX_ORBIT); -// Dart dd = d; +// unsigned int em = map.newCell(VERTEX_ORBIT) ; +// Dart dd = d ; // do // { -// map.setDartEmbedding(map.phi2(dd),VERTEX_ORBIT,em); -// m.unmark(dd); -// dd = map.phi1(dd); +// map.setDartEmbedding(map.phi2(dd), VERTEX_ORBIT, em) ; +// m.unmark(dd) ; +// dd = map.phi1(dd) ; // } -// while (dd != d); -// attributs[map.phi2(d)] = *itEmb; -// ++itEmb; +// while (dd != d) ; +// attributs[map.phi2(d)] = *itEmb ; +// ++itEmb ; // } // } // -// map.computeDual(); +// map.computeDual() ; } -template -void Sqrt3Subdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelect& selected) +template +void Sqrt3Subdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected) { - computeDual(map, attributs, selected); - trianguleFaces(map, attributs, selected); + computeDual(map, position, selected); + trianguleFaces(map, position, selected); } template diff --git a/include/Algo/ProgressiveMesh/vsplit.h b/include/Algo/ProgressiveMesh/vsplit.h index 73ad0f705e82cd068c45157e5bcc3569a38481b4..5171ca593fc7ae55143773da2446e608458ae36d 100644 --- a/include/Algo/ProgressiveMesh/vsplit.h +++ b/include/Algo/ProgressiveMesh/vsplit.h @@ -56,7 +56,7 @@ public: {} ~VSplit() { - AttribContainer& cont = map.getAttributeContainer(VERTEX_ORBIT) ; + AttributeContainer& cont = map.getAttributeContainer(VERTEX_ORBIT) ; if(approxVertexId != EMBNULL) cont.unrefLine(approxVertexId) ; } @@ -68,7 +68,7 @@ public: void setApproxV(unsigned int id) { if(approxVertexId == id) return ; - AttribContainer& cont = map.getAttributeContainer(VERTEX_ORBIT) ; + AttributeContainer& cont = map.getAttributeContainer(VERTEX_ORBIT) ; if(approxVertexId != EMBNULL) cont.unrefLine(approxVertexId) ; if(id != EMBNULL) cont.refLine(id) ; @@ -79,7 +79,7 @@ public: void setApproxE1(unsigned int id) { if(approxEdgeId1 == id) return ; - AttribContainer& cont = map.getAttributeContainer(EDGE_ORBIT) ; + AttributeContainer& cont = map.getAttributeContainer(EDGE_ORBIT) ; if(approxEdgeId1 != EMBNULL) cont.unrefLine(approxEdgeId1) ; if(id != EMBNULL) cont.refLine(id) ; @@ -90,7 +90,7 @@ public: void setApproxE2(unsigned int id) { if(approxEdgeId2 == id) return ; - AttribContainer& cont = map.getAttributeContainer(EDGE_ORBIT) ; + AttributeContainer& cont = map.getAttributeContainer(EDGE_ORBIT) ; if(approxEdgeId2 != EMBNULL) cont.unrefLine(approxEdgeId2) ; if(id != EMBNULL) cont.refLine(id) ; diff --git a/include/Algo/Render/vbo_MapRender.hpp b/include/Algo/Render/vbo_MapRender.hpp index 34428567b333257a50c9d34cf5d6f15b7139ab34..54b4101f0f214d7a94da3a7226484b08e61e49b6 100644 --- a/include/Algo/Render/vbo_MapRender.hpp +++ b/include/Algo/Render/vbo_MapRender.hpp @@ -69,7 +69,7 @@ void MapRender_VBO::updateData(int upType, const ATTR_HANDLER& attrib, ConvertAt template void MapRender_VBO::fillBufferDirect(unsigned int indexVBO, const ATTR_HANDLER& attrib) { - AttribMultiVect* mv = attrib.getDataVector() ; + AttributeMultiVector* mv = attrib.getDataVector() ; std::vector addr; unsigned int byteTableSize; @@ -92,7 +92,7 @@ void MapRender_VBO::fillBufferDirect(unsigned int indexVBO, const ATTR_HANDLER& template void MapRender_VBO::fillBufferConvert(unsigned int indexVBO, const ATTR_HANDLER& attrib, ConvertAttrib* conv) { - AttribMultiVect* mv = attrib.getDataVector() ; + AttributeMultiVector* mv = attrib.getDataVector() ; std::vector addr; unsigned int byteTableSize; diff --git a/include/Container/attrib_container.h b/include/Container/attributeContainer.h similarity index 95% rename from include/Container/attrib_container.h rename to include/Container/attributeContainer.h index 53d3bfa1de183c96b9dfd84b43de7a2e98cc982a..04260618ad031edac6b43b16fcd0b2165e183cea 100644 --- a/include/Container/attrib_container.h +++ b/include/Container/attributeContainer.h @@ -22,12 +22,12 @@ * * *******************************************************************************/ -#ifndef __ATTRIB_CONTAINER__ -#define __ATTRIB_CONTAINER__ +#ifndef __ATTRIBUTE_CONTAINER__ +#define __ATTRIBUTE_CONTAINER__ #include "Container/sizeblock.h" #include "Container/holeblockref.h" -#include "Container/attribmv.h" +#include "Container/attributeMultiVector.h" #include #include @@ -48,17 +48,12 @@ class RegisteredBaseAttribute; * trous (et les indices) sont les mêmes pour tous les attributs * On peut ajouter et enlever des attributs a la volée */ -class AttribContainer +class AttributeContainer { protected: typedef std::map MapNameId; - /** - * counter for attributes without name - */ - unsigned int m_nbunknown; - /** * vecteur des blocs qui gerent les cases libres */ @@ -74,7 +69,7 @@ protected: /** * vecteur de pointeur sur les gestionnaires d'attributs */ - std::vector m_tableAttribs; + std::vector m_tableAttribs; /** * map de correspondance string / indice pour les attributs @@ -88,6 +83,11 @@ protected: */ unsigned int m_nbAttributes; + /** + * counter for attributes without name + */ + unsigned int m_nbUnknown; + /** * size (number of elts) of the container */ @@ -142,12 +142,12 @@ public: /** * constructor */ - AttribContainer(); + AttributeContainer(); /** * destructor */ - ~AttribContainer(); + ~AttributeContainer(); /** * is the line used in the container @@ -162,12 +162,12 @@ public: /** * swapping */ - void swap(AttribContainer&); + void swap(AttributeContainer&); /** * merge */ - void merge(AttribContainer& cont); + void merge(AttributeContainer& cont); /** * extract orbit from code (orbit & id) @@ -331,9 +331,9 @@ public: * @param codeAttrib code de l'attribut */ template - AttribMultiVect& getDataVector(unsigned int codeAttrib); + AttributeMultiVector& getDataVector(unsigned int codeAttrib); - AttribMultiVectGen& getVirtualDataVector(unsigned int codeAttrib); + AttributeMultiVectorGen& getVirtualDataVector(unsigned int codeAttrib); /** * Renvoit un pseudo vecteur d'attribut (operateur []) @@ -341,7 +341,7 @@ public: * @param name nom de l'attribut */ // template -// AttribMultiVect& getAttributesVector(const std::string& name); +// AttributeMultiVector& getAttributesVector(const std::string& name); /** * Renvoit un pseudo vecteur d'attribut (operateur []) @@ -351,7 +351,7 @@ public: * @return vrai si OK faux si pb */ template - bool getAttributesVector(const std::string& name, AttribMultiVect** ptr); + bool getAttributesVector(const std::string& name, AttributeMultiVector** ptr); /** * insert un attribut dans le container la ligne est crée @@ -532,6 +532,6 @@ public: } // namespace CGoGN -#include "attrib_container.hpp" +#include "attributeContainer.hpp" #endif diff --git a/include/Container/attrib_container.hpp b/include/Container/attributeContainer.hpp similarity index 64% rename from include/Container/attrib_container.hpp rename to include/Container/attributeContainer.hpp index 713e7784339e7543b6c324a4bca0da5ef2524f88..968a225e55c0dfaaea1ac2fc5114633bc46bf424 100644 --- a/include/Container/attrib_container.hpp +++ b/include/Container/attributeContainer.hpp @@ -18,7 +18,7 @@ namespace CGoGN /////////////////////////// template -unsigned int AttribContainer::addAttribute(const std::string& attribName) +unsigned int AttributeContainer::addAttribute(const std::string& attribName) { std::string nametype = nameOfType(T()); @@ -33,7 +33,7 @@ unsigned int AttribContainer::addAttribute(const std::string& attribName) } // new attribut - AttribMultiVect* ptr = new AttribMultiVect(attribName, nametype); + AttributeMultiVector* ptr = new AttributeMultiVector(attribName, nametype); unsigned int idxAttrib = m_tableAttribs.size(); // add it to table of attribut_manager m_tableAttribs.push_back(ptr); @@ -42,7 +42,7 @@ unsigned int AttribContainer::addAttribute(const std::string& attribName) if (attribName == "") // if no name, generate a fake name { std::stringstream ss; - ss << "unknown" << m_nbunknown++; + ss << "unknown" << m_nbUnknown++; m_attribNameMap.insert(std::pair(ss.str(), idxAttrib)); } else @@ -61,7 +61,7 @@ unsigned int AttribContainer::addAttribute(const std::string& attribName) } template -unsigned int AttribContainer::addAttribute(const std::string& attribName, const std::string& nametype, unsigned int idxAttrib) +unsigned int AttributeContainer::addAttribute(const std::string& attribName, const std::string& nametype, unsigned int idxAttrib) { // first check if attribute already exist if (attribName != "") @@ -74,7 +74,7 @@ unsigned int AttribContainer::addAttribute(const std::string& attribName, const } // new attribut - AttribMultiVect* ptr = new AttribMultiVect(attribName, nametype); + AttributeMultiVector* ptr = new AttributeMultiVector(attribName, nametype); // add it to table of attribut_manager m_tableAttribs[idxAttrib] = ptr; // add it in the map @@ -92,7 +92,7 @@ unsigned int AttribContainer::addAttribute(const std::string& attribName, const return idxAttrib; } -inline unsigned int AttribContainer::getNbAttributes() +inline unsigned int AttributeContainer::getNbAttributes() { return m_tableAttribs.size(); } @@ -102,47 +102,47 @@ inline unsigned int AttribContainer::getNbAttributes() /////////////////////////// template -T& AttribContainer::getData(unsigned int codeAttrib, unsigned int eltIdx) +T& AttributeContainer::getData(unsigned int codeAttrib, unsigned int eltIdx) { assert(eltIdx < m_maxSize && "Attribut non existant (indice trop grand)"); assert(m_holesBlocks[eltIdx/_BLOCKSIZE_]->used(eltIdx%_BLOCKSIZE_)&&"Attribut non existant"); assert((m_tableAttribs[codeAttrib]!=NULL)&&"Attribut detruit"); - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[codeAttrib]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[codeAttrib]); assert((atm!=NULL)&& "type attribut non concordant"); return atm->operator[](eltIdx); } template -const T& AttribContainer::getData(unsigned int codeAttrib, unsigned int eltIdx) const +const T& AttributeContainer::getData(unsigned int codeAttrib, unsigned int eltIdx) const { assert(eltIdx < m_maxSize && "Attribut non existant (indice trop grand)"); assert(m_holesBlocks[eltIdx/_BLOCKSIZE_]->used(eltIdx%_BLOCKSIZE_)&&"Attribut non existant"); assert((m_tableAttribs[codeAttrib]!=NULL)&&"Attribut detruit"); - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[codeAttrib]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[codeAttrib]); assert((atm!=NULL)&& "type attribut non concordant"); return atm->operator[](eltIdx); } template -void AttribContainer::setData(unsigned int codeAttrib, unsigned int eltIdx, const T& data) +void AttributeContainer::setData(unsigned int codeAttrib, unsigned int eltIdx, const T& data) { assert(eltIdx < m_maxSize && "Attribut non existant (indice trop grand)"); assert(m_holesBlocks[eltIdx/_BLOCKSIZE_]->used(eltIdx%_BLOCKSIZE_)&&"Attribut non existant"); assert((m_tableAttribs[codeAttrib]!=NULL)&&"Attribut detruit"); - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[codeAttrib]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[codeAttrib]); assert((atm!=NULL)&& "type attribut non concordant"); atm->operator[](eltIdx) = data; } //template -//unsigned int AttribContainer::insertLineWidthData(unsigned int codeAttrib,const T& data) +//unsigned int AttributeContainer::insertLineWidthData(unsigned int codeAttrib,const T& data) //{ // unsigned int it = insertLine(); // setData(codeAttrib, it, data); @@ -150,18 +150,18 @@ void AttribContainer::setData(unsigned int codeAttrib, unsigned int eltIdx, con //} template -AttribMultiVect& AttribContainer::getDataVector(unsigned int codeAttrib) +AttributeMultiVector& AttributeContainer::getDataVector(unsigned int codeAttrib) { assert((codeAttrib < m_tableAttribs.size()) && "Attribut inexistant"); assert((m_tableAttribs[codeAttrib] != NULL) && "Attribut detruit"); - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[codeAttrib]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[codeAttrib]); assert((atm!=NULL)&& "type attribut non concordant"); return *atm; } template -bool AttribContainer::getAttributesVector(const std::string& attribName, AttribMultiVect** ptr) +bool AttributeContainer::getAttributesVector(const std::string& attribName, AttributeMultiVector** ptr) { MapNameId::iterator it = m_attribNameMap.find(attribName); if (it == m_attribNameMap.end()) @@ -172,7 +172,7 @@ bool AttribContainer::getAttributesVector(const std::string& attribName, AttribM if (m_tableAttribs[codeAttrib]==NULL) return false; - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[codeAttrib]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[codeAttrib]); if (atm==NULL) return false; @@ -185,9 +185,9 @@ bool AttribContainer::getAttributesVector(const std::string& attribName, AttribM /////////////////////////// template -unsigned int AttribContainer::getAddresses(unsigned int attr, std::vector& vect_adr) +unsigned int AttributeContainer::getAddresses(unsigned int attr, std::vector& vect_adr) { - AttribMultiVect* atm = dynamic_cast< AttribMultiVect* >(m_tableAttribs[attr]); + AttributeMultiVector* atm = dynamic_cast< AttributeMultiVector* >(m_tableAttribs[attr]); assert((atm!=NULL)&& "type attribut non concordant"); return atm->getStartAddresses(vect_adr); } @@ -197,32 +197,32 @@ unsigned int AttribContainer::getAddresses(unsigned int attr, std::vector& v ////////////////////////////// //// INLINED FUNCTIONS -inline bool AttribContainer::used(unsigned int eltIdx) const +inline bool AttributeContainer::used(unsigned int eltIdx) const { return m_holesBlocks[ eltIdx / _BLOCKSIZE_ ]->used( eltIdx % _BLOCKSIZE_ ); } -inline void AttribContainer::setRegistry(std::map< std::string, RegisteredBaseAttribute* >* re) +inline void AttributeContainer::setRegistry(std::map< std::string, RegisteredBaseAttribute* >* re) { m_attributes_registry_map = re; } -inline bool AttribContainer::copyAttribute(unsigned int index_dst, unsigned int index_src) +inline bool AttributeContainer::copyAttribute(unsigned int index_dst, unsigned int index_src) { return m_tableAttribs[index_dst]->copy(m_tableAttribs[index_src]); } -inline bool AttribContainer::swapAttributes(unsigned int index1, unsigned int index2) +inline bool AttributeContainer::swapAttributes(unsigned int index1, unsigned int index2) { return m_tableAttribs[index1]->swap(m_tableAttribs[index2]); } -inline void AttribContainer::refLine(unsigned int eltIdx) +inline void AttributeContainer::refLine(unsigned int eltIdx) { m_holesBlocks[eltIdx / _BLOCKSIZE_]->ref(eltIdx % _BLOCKSIZE_); } -inline bool AttribContainer::unrefLine(unsigned int eltIdx) +inline bool AttributeContainer::unrefLine(unsigned int eltIdx) { if (m_holesBlocks[eltIdx / _BLOCKSIZE_]->unref(eltIdx % _BLOCKSIZE_)) { @@ -232,22 +232,22 @@ inline bool AttribContainer::unrefLine(unsigned int eltIdx) return false; } -inline void AttribContainer::setRefLine(unsigned int eltIdx, unsigned int nb) +inline void AttributeContainer::setRefLine(unsigned int eltIdx, unsigned int nb) { m_holesBlocks[ eltIdx / _BLOCKSIZE_]->setNbRefs(eltIdx % _BLOCKSIZE_,nb); } -inline AttribMultiVectGen& AttribContainer::getVirtualDataVector(unsigned int codeAttrib) +inline AttributeMultiVectorGen& AttributeContainer::getVirtualDataVector(unsigned int codeAttrib) { return *(m_tableAttribs[indexAttr(codeAttrib)]); } -inline unsigned int AttribContainer::end() const +inline unsigned int AttributeContainer::end() const { return m_maxSize; } -inline unsigned int AttribContainer::begin() const +inline unsigned int AttributeContainer::begin() const { unsigned int it = 0; while ((it < m_maxSize) && (!used(it))) @@ -255,7 +255,7 @@ inline unsigned int AttribContainer::begin() const return it; } -inline void AttribContainer::next(unsigned int &it) const +inline void AttributeContainer::next(unsigned int &it) const { do { @@ -263,12 +263,12 @@ inline void AttribContainer::next(unsigned int &it) const } while ((it < m_maxSize) && (!used(it))); } -inline void AttribContainer::toggleProcess(unsigned int id) +inline void AttributeContainer::toggleProcess(unsigned int id) { m_tableAttribs[indexAttr(id)]->toggleProcess(); } -inline void AttribContainer::toggleNoProcess(unsigned int id) +inline void AttributeContainer::toggleNoProcess(unsigned int id) { m_tableAttribs[indexAttr(id)]->toggleNoProcess(); } diff --git a/include/Container/attribmv.h b/include/Container/attributeMultiVector.h similarity index 86% rename from include/Container/attribmv.h rename to include/Container/attributeMultiVector.h index 67170d50134799a7869d9869e5f45fa453f6b102..b090b6af6b7cddf6b4e27a78ba95472b624b6a52 100644 --- a/include/Container/attribmv.h +++ b/include/Container/attributeMultiVector.h @@ -22,8 +22,8 @@ * * *******************************************************************************/ -#ifndef __ATTRIB_MV__ -#define __ATTRIB_MV__ +#ifndef __ATTRIBUTE_MULTI_VECTOR__ +#define __ATTRIBUTE_MULTI_VECTOR__ #include #include @@ -33,12 +33,12 @@ #include -#include "sizeblock.h" +#include "Container/sizeblock.h" namespace CGoGN { -class AttribMultiVectGen +class AttributeMultiVectorGen { protected: std::string m_attName; @@ -49,11 +49,11 @@ protected: public: - AttribMultiVectGen(const std::string& strName, const std::string& strType); + AttributeMultiVectorGen(const std::string& strName, const std::string& strType); - AttribMultiVectGen(); + AttributeMultiVectorGen(); - virtual ~AttribMultiVectGen(); + virtual ~AttributeMultiVectorGen(); void toggleProcess(); @@ -66,11 +66,11 @@ public: /** * construct a new object using this type */ - virtual AttribMultiVectGen* new_obj()=0; + virtual AttributeMultiVectorGen* new_obj()=0; - virtual bool copy(const AttribMultiVectGen* atmvg)=0; + virtual bool copy(const AttributeMultiVectorGen* atmvg)=0; - virtual bool swap(AttribMultiVectGen* atmvg)=0; + virtual bool swap(AttributeMultiVectorGen* atmvg)=0; /** * add a vector in table @@ -115,9 +115,9 @@ public: virtual void input(unsigned int i,const std::string& st)=0; - virtual bool swap(AttribMultiVectGen& att)=0; + virtual bool swap(AttributeMultiVectorGen& att)=0; - virtual bool merge(const AttribMultiVectGen& att)=0; + virtual bool merge(const AttributeMultiVectorGen& att)=0; virtual void addBlocksBefore(unsigned int nbb)=0; @@ -159,13 +159,10 @@ public: * @param name [out] name of attribute * @param type [out] type of attribute */ - }; - - template -class AttribMultiVect: public AttribMultiVectGen +class AttributeMultiVector: public AttributeMultiVectorGen { /** * table of blocks of data ptr: vectors! @@ -175,21 +172,21 @@ class AttribMultiVect: public AttribMultiVectGen public: - AttribMultiVect(const std::string& strName, const std::string& strType); + AttributeMultiVector(const std::string& strName, const std::string& strType); - AttribMultiVect(); + AttributeMultiVector(); - ~AttribMultiVect(); + ~AttributeMultiVector(); - bool copy(const AttribMultiVectGen* atmvg); + bool copy(const AttributeMultiVectorGen* atmvg); - bool swap(AttribMultiVectGen* atmvg); + bool swap(AttributeMultiVectorGen* atmvg); - AttribMultiVectGen* new_obj(); + AttributeMultiVectorGen* new_obj(); - bool swap(AttribMultiVectGen& att); + bool swap(AttributeMultiVectorGen& att); - bool merge(const AttribMultiVectGen& att); + bool merge(const AttributeMultiVectorGen& att); /** * get a reference on a elt @@ -284,6 +281,6 @@ public: } -#include "attribmv.hpp" +#include "attributeMultiVector.hpp" #endif diff --git a/include/Container/attribmv.hpp b/include/Container/attributeMultiVector.hpp similarity index 68% rename from include/Container/attribmv.hpp rename to include/Container/attributeMultiVector.hpp index 026a26dea37361b6798e1f54e4b0091c16c17812..10f1554e4dd3b62372444f079a6f8608a2340fbb 100644 --- a/include/Container/attribmv.hpp +++ b/include/Container/attributeMultiVector.hpp @@ -2,32 +2,32 @@ namespace CGoGN { -inline AttribMultiVectGen::AttribMultiVectGen(const std::string& strName, const std::string& strType): +inline AttributeMultiVectorGen::AttributeMultiVectorGen(const std::string& strName, const std::string& strType): m_attName(strName), m_typeName(strType), m_toProcess(true) {} -inline AttribMultiVectGen::AttribMultiVectGen(): m_toProcess(true) +inline AttributeMultiVectorGen::AttributeMultiVectorGen(): m_toProcess(true) {} -inline AttribMultiVectGen::~AttribMultiVectGen() +inline AttributeMultiVectorGen::~AttributeMultiVectorGen() {} -inline void AttribMultiVectGen::toggleProcess() +inline void AttributeMultiVectorGen::toggleProcess() { m_toProcess = true; } -inline void AttribMultiVectGen::toggleNoProcess() +inline void AttributeMultiVectorGen::toggleNoProcess() { m_toProcess = false; } -inline bool AttribMultiVectGen::toProcess() +inline bool AttributeMultiVectorGen::toProcess() { return m_toProcess; } -inline unsigned int AttribMultiVectGen::BlockSize() +inline unsigned int AttributeMultiVectorGen::BlockSize() { return _BLOCKSIZE_; } @@ -38,35 +38,35 @@ inline unsigned int AttribMultiVectGen::BlockSize() template -AttribMultiVect::AttribMultiVect(const std::string& strName, const std::string& strType): -AttribMultiVectGen(strName,strType) +AttributeMultiVector::AttributeMultiVector(const std::string& strName, const std::string& strType): +AttributeMultiVectorGen(strName,strType) { m_tableData.reserve(1024); } template -AttribMultiVect::AttribMultiVect() +AttributeMultiVector::AttributeMultiVector() { m_tableData.reserve(1024); } template -AttribMultiVect::~AttribMultiVect() +AttributeMultiVector::~AttributeMultiVector() { for (typename std::vector< T* >::iterator it = m_tableData.begin(); it != m_tableData.end(); ++it) delete[] (*it); } template -AttribMultiVectGen* AttribMultiVect::new_obj() +AttributeMultiVectorGen* AttributeMultiVector::new_obj() { - return new AttribMultiVect; + return new AttributeMultiVector; } template -bool AttribMultiVect::copy(const AttribMultiVectGen* atmvg) +bool AttributeMultiVector::copy(const AttributeMultiVectorGen* atmvg) { - const AttribMultiVect* atmv = dynamic_cast*>(atmvg); + const AttributeMultiVector* atmv = dynamic_cast*>(atmvg); if (atmv == NULL) { @@ -82,9 +82,9 @@ bool AttribMultiVect::copy(const AttribMultiVectGen* atmvg) } template -bool AttribMultiVect::swap(AttribMultiVectGen* atmvg) +bool AttributeMultiVector::swap(AttributeMultiVectorGen* atmvg) { - AttribMultiVect* atmv = dynamic_cast*>(atmvg); + AttributeMultiVector* atmv = dynamic_cast*>(atmvg); if (atmv == NULL) { @@ -97,9 +97,9 @@ bool AttribMultiVect::swap(AttribMultiVectGen* atmvg) } template -bool AttribMultiVect::swap(AttribMultiVectGen& att) +bool AttributeMultiVector::swap(AttributeMultiVectorGen& att) { - AttribMultiVect* attrib = dynamic_cast< AttribMultiVect* >(&att); + AttributeMultiVector* attrib = dynamic_cast< AttributeMultiVector* >(&att); if (attrib==NULL) { std::cerr << "Erreur, swap de container de types differents"<::swap(AttribMultiVectGen& att) } template -bool AttribMultiVect::merge(const AttribMultiVectGen& att) +bool AttributeMultiVector::merge(const AttributeMultiVectorGen& att) { - const AttribMultiVect* attrib = dynamic_cast< const AttribMultiVect* >(&att); + const AttributeMultiVector* attrib = dynamic_cast< const AttributeMultiVector* >(&att); if (attrib==NULL) { std::cerr << "Erreur, merge de container de types differents"<::merge(const AttribMultiVectGen& att) } template -T& AttribMultiVect::operator[](unsigned int i) { return m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_];} +T& AttributeMultiVector::operator[](unsigned int i) { return m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_];} template -const T& AttribMultiVect::operator[](unsigned int i) const { return m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_];} +const T& AttributeMultiVector::operator[](unsigned int i) const { return m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_];} template -std::string AttribMultiVect::output(unsigned int i) +std::string AttributeMultiVector::output(unsigned int i) { std::stringstream ss; ss << m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_]; @@ -153,14 +153,14 @@ std::string AttribMultiVect::output(unsigned int i) } template -void AttribMultiVect::input(unsigned int i,const std::string& st) +void AttributeMultiVector::input(unsigned int i,const std::string& st) { std::stringstream ss(st); ss >> m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_]; } template -void AttribMultiVect::addBlock() +void AttributeMultiVector::addBlock() { T* ptr = new T[_BLOCKSIZE_]; m_tableData.push_back( ptr ); @@ -171,19 +171,19 @@ void AttribMultiVect::addBlock() } template -void AttribMultiVect::initElt(unsigned int id) +void AttributeMultiVector::initElt(unsigned int id) { m_tableData[id/_BLOCKSIZE_][id%_BLOCKSIZE_] = T(0); } template -void AttribMultiVect::copyElt(unsigned int dst, unsigned int src) +void AttributeMultiVector::copyElt(unsigned int dst, unsigned int src) { m_tableData[dst/_BLOCKSIZE_][dst%_BLOCKSIZE_] = m_tableData[src/_BLOCKSIZE_][src%_BLOCKSIZE_]; } template -void AttribMultiVect::setNbBlocks(unsigned int nbb) +void AttributeMultiVector::setNbBlocks(unsigned int nbb) { if (nbb >=m_tableData.size()) { @@ -205,7 +205,7 @@ void AttribMultiVect::setNbBlocks(unsigned int nbb) } template -void AttribMultiVect::addBlocksBefore(unsigned int nbb) +void AttributeMultiVector::addBlocksBefore(unsigned int nbb) { std::vector< T* > tempo; tempo.reserve(1024); @@ -224,13 +224,13 @@ void AttribMultiVect::addBlocksBefore(unsigned int nbb) } template -void AttribMultiVect::overwrite(unsigned int src_b, unsigned int src_id, unsigned int dst_b, unsigned int dst_id) +void AttributeMultiVector::overwrite(unsigned int src_b, unsigned int src_id, unsigned int dst_b, unsigned int dst_id) { m_tableData[dst_b][dst_id] = m_tableData[src_b][src_id]; } template -void AttribMultiVect::free() +void AttributeMultiVector::free() { for (typename std::vector< T* >::iterator it = m_tableData.begin(); it != m_tableData.end(); ++it) delete[] (*it); @@ -238,7 +238,7 @@ void AttribMultiVect::free() } template -unsigned int AttribMultiVect::getStartAddresses(std::vector& addr, unsigned int& byteTableSize) +unsigned int AttributeMultiVector::getStartAddresses(std::vector& addr, unsigned int& byteTableSize) { byteTableSize = _BLOCKSIZE_ * sizeof(T); @@ -253,7 +253,7 @@ unsigned int AttribMultiVect::getStartAddresses(std::vector& addr, uns } template -void AttribMultiVect::saveBin(CGoGNostream& fs, unsigned int id) +void AttributeMultiVector::saveBin(CGoGNostream& fs, unsigned int id) { unsigned int nbs[3]; nbs[0] = id; @@ -282,7 +282,7 @@ void AttribMultiVect::saveBin(CGoGNostream& fs, unsigned int id) } } -inline unsigned int AttribMultiVectGen::loadBinInfos(CGoGNistream& fs, std::string& name, std::string& type) +inline unsigned int AttributeMultiVectorGen::loadBinInfos(CGoGNistream& fs, std::string& name, std::string& type) { unsigned int nbs[3]; fs.read(reinterpret_cast(nbs), 3*sizeof(unsigned int)); @@ -301,7 +301,7 @@ inline unsigned int AttribMultiVectGen::loadBinInfos(CGoGNistream& fs, std::stri } template -bool AttribMultiVect::loadBin(CGoGNistream& fs) +bool AttributeMultiVector::loadBin(CGoGNistream& fs) { unsigned int nbs[2]; fs.read(reinterpret_cast(nbs), 2*sizeof(unsigned int)); @@ -320,7 +320,7 @@ bool AttribMultiVect::loadBin(CGoGNistream& fs) return true; } -inline bool AttribMultiVectGen::skipLoadBin(CGoGNistream& fs) +inline bool AttributeMultiVectorGen::skipLoadBin(CGoGNistream& fs) { unsigned int nbs[2]; fs.read(reinterpret_cast(nbs), 2*sizeof(unsigned int)); @@ -348,42 +348,42 @@ inline bool AttribMultiVectGen::skipLoadBin(CGoGNistream& fs) } template -void AttribMultiVect::affect(unsigned int i, unsigned int j) +void AttributeMultiVector::affect(unsigned int i, unsigned int j) { if (m_toProcess) m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_] = m_tableData[j/_BLOCKSIZE_][j%_BLOCKSIZE_]; } template -void AttribMultiVect::add(unsigned int i, unsigned int j) +void AttributeMultiVector::add(unsigned int i, unsigned int j) { if (m_toProcess) m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_] += m_tableData[j/_BLOCKSIZE_][j%_BLOCKSIZE_]; } template -void AttribMultiVect::sub(unsigned int i, unsigned int j) +void AttributeMultiVector::sub(unsigned int i, unsigned int j) { if (m_toProcess) m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_] -= m_tableData[j/_BLOCKSIZE_][j%_BLOCKSIZE_]; } template -void AttribMultiVect::mult(unsigned int i, double alpha) +void AttributeMultiVector::mult(unsigned int i, double alpha) { if (m_toProcess) m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_] *= alpha; } template -void AttribMultiVect::div(unsigned int i, double alpha) +void AttributeMultiVector::div(unsigned int i, double alpha) { if (m_toProcess) m_tableData[i/_BLOCKSIZE_][i%_BLOCKSIZE_] /= alpha; } template -void AttribMultiVect::lerp(unsigned res, unsigned int i, unsigned int j, double alpha) +void AttributeMultiVector::lerp(unsigned res, unsigned int i, unsigned int j, double alpha) { if (m_toProcess) { diff --git a/include/Container/registered.h b/include/Container/registered.h index 8a152dabab6e83a1597210bb08efb39e231f9818..d1440c2e2f3c91c257664a9d66fbc8ebcbe635c1 100644 --- a/include/Container/registered.h +++ b/include/Container/registered.h @@ -50,7 +50,7 @@ public: /** * Ajout de l'attribut au container (A IMPLEMENTER) */ - virtual unsigned int addAttribute(AttribContainer& container, const std::string& attribName)=0; + virtual unsigned int addAttribute(AttributeContainer& container, const std::string& attribName)=0; }; /** @@ -64,7 +64,7 @@ class RegisteredAttribute : public RegisteredBaseAttribute { public: - unsigned int addAttribute(AttribContainer& container, const std::string& attribName) + unsigned int addAttribute(AttributeContainer& container, const std::string& attribName) { return container.addAttribute(attribName); } diff --git a/include/Topology/generic/attribmap.h b/include/Topology/generic/attribmap.h index 61e13c680a3c43736311899a1c5a5911ee5a5ee1..1b46541ab316cffda80b3669bffe16cc6fdcf6aa 100644 --- a/include/Topology/generic/attribmap.h +++ b/include/Topology/generic/attribmap.h @@ -40,7 +40,7 @@ class AttribMap : public GenericMap template friend class AutoAttributeHandler ; public: - static const unsigned int UNKNOWN_ATTRIB = AttribContainer::UNKNOWN ; + static const unsigned int UNKNOWN_ATTRIB = AttributeContainer::UNKNOWN ; AttribMap(); @@ -110,7 +110,7 @@ protected: * Add a toological relation in the map * @param name name of relation */ - AttribMultiVect* addRelation(const std::string& name); + AttributeMultiVector* addRelation(const std::string& name); public: /**************************************** diff --git a/include/Topology/generic/attribmap.hpp b/include/Topology/generic/attribmap.hpp index dc42642e7470ef9edc23f05ed58c77dfdb9498df..1a83a7d047d014378e567da06455368d32b9ab3a 100644 --- a/include/Topology/generic/attribmap.hpp +++ b/include/Topology/generic/attribmap.hpp @@ -30,9 +30,9 @@ inline AttributeHandler AttribMap::addAttribute(unsigned int orbit, const std { if(!isOrbitEmbedded(orbit)) addEmbedding(orbit) ; - AttribContainer& cellCont = m_attribs[orbit] ; + AttributeContainer& cellCont = m_attribs[orbit] ; unsigned int index = cellCont.addAttribute(nameAttr) ; - unsigned int idAttr = AttribContainer::attrId(orbit, index) ; // assume here that we have less than 16M attributes and 255 orbits!! + unsigned int idAttr = AttributeContainer::attrId(orbit, index) ; // assume here that we have less than 16M attributes and 255 orbits!! return AttributeHandler(this, idAttr) ; } @@ -41,7 +41,7 @@ inline bool AttribMap::removeAttribute(AttributeHandler& attr) { assert(attr.isValid() || !"Invalid attribute handler") ; unsigned int idAttr = attr.id() ; - return m_attribs[AttribContainer::orbitAttr(idAttr)].removeAttribute(AttribContainer::indexAttr(idAttr)) ; + return m_attribs[AttributeContainer::orbitAttr(idAttr)].removeAttribute(AttributeContainer::indexAttr(idAttr)) ; } template @@ -49,17 +49,17 @@ inline AttributeHandler AttribMap::getAttribute(unsigned int orbit, const std { assert(isOrbitEmbedded(orbit) || !"Invalid parameter: orbit not embedded"); unsigned int index = m_attribs[orbit].getAttribute(nameAttr) ; - return AttributeHandler(this, AttribContainer::attrId(orbit, index)) ; + return AttributeHandler(this, AttributeContainer::attrId(orbit, index)) ; } template inline bool AttribMap::swapAttributes(AttributeHandler& attr1, AttributeHandler& attr2) { assert((attr1.isValid() && attr2.isValid()) || !"Invalid attribute handler") ; - unsigned int orbit = AttribContainer::orbitAttr(attr1.id()) ; - assert(orbit == AttribContainer::orbitAttr(attr2.id()) || !"Cannot swap attributes of different orbits") ; - unsigned int index1 = AttribContainer::indexAttr(attr1.id()) ; - unsigned int index2 = AttribContainer::indexAttr(attr2.id()) ; + unsigned int orbit = AttributeContainer::orbitAttr(attr1.id()) ; + assert(orbit == AttributeContainer::orbitAttr(attr2.id()) || !"Cannot swap attributes of different orbits") ; + unsigned int index1 = AttributeContainer::indexAttr(attr1.id()) ; + unsigned int index2 = AttributeContainer::indexAttr(attr2.id()) ; if(index1 != index2) return m_attribs[orbit].swapAttributes(index1, index2) ; return false ; @@ -69,10 +69,10 @@ template inline bool AttribMap::copyAttribute(AttributeHandler& dst, AttributeHandler& src) { assert((dst.isValid() && src.isValid()) || !"Invalid attribute handler") ; - unsigned int orbit = AttribContainer::orbitAttr(dst.id()) ; - assert(orbit == AttribContainer::orbitAttr(src.id()) || !"Cannot copy attributes of different orbits") ; - unsigned int index_dst = AttribContainer::indexAttr(dst.id()) ; - unsigned int index_src = AttribContainer::indexAttr(src.id()) ; + unsigned int orbit = AttributeContainer::orbitAttr(dst.id()) ; + assert(orbit == AttributeContainer::orbitAttr(src.id()) || !"Cannot copy attributes of different orbits") ; + unsigned int index_dst = AttributeContainer::indexAttr(dst.id()) ; + unsigned int index_src = AttributeContainer::indexAttr(src.id()) ; if(index_dst != index_src) return m_attribs[orbit].copyAttribute(index_dst, index_src) ; return false ; @@ -88,12 +88,12 @@ inline unsigned int AttribMap::getNbCells(unsigned int orbit) * TOPOLOGICAL ATTRIBUTES MANAGEMENT * ****************************************/ -inline AttribMultiVect* AttribMap::addRelation(const std::string& name) +inline AttributeMultiVector* AttribMap::addRelation(const std::string& name) { - AttribContainer& cont = m_attribs[DART_ORBIT] ; + AttributeContainer& cont = m_attribs[DART_ORBIT] ; unsigned int index = cont.addAttribute(name) ; - AttribMultiVect& amv = cont.getDataVector(index) ; + AttributeMultiVector& amv = cont.getDataVector(index) ; // set new relation to fix point for all the darts of the map for(unsigned int i = cont.begin(); i < cont.end(); cont.next(i)) diff --git a/include/Topology/generic/attributeHandler.h b/include/Topology/generic/attributeHandler.h index 8a810ee783305ac7e94e153b923b6b7dc2a52e00..0924ad14b653cc6ec40040857cfac8333b196e0a 100644 --- a/include/Topology/generic/attributeHandler.h +++ b/include/Topology/generic/attributeHandler.h @@ -53,7 +53,7 @@ protected: unsigned int m_id; // access to the data - AttribMultiVect* m_attrib; + AttributeMultiVector* m_attrib; protected: /** @@ -66,7 +66,7 @@ protected: public: typedef T DATA_TYPE ; - AttributeHandler() : m_map(NULL), m_id(AttribContainer::UNKNOWN), m_attrib(NULL) {} + AttributeHandler() : m_map(NULL), m_id(AttributeContainer::UNKNOWN), m_attrib(NULL) {} /** * Copy constructor @@ -93,7 +93,7 @@ public: /** * get attribute data vector */ - AttribMultiVect* getDataVector() const ; + AttributeMultiVector* getDataVector() const ; /** * get attribute id diff --git a/include/Topology/generic/attributeHandler.hpp b/include/Topology/generic/attributeHandler.hpp index 71475404524d981bca02be52b4d45f3387dcdcda..97893296a498f81ed74f41229be3f8c6a414165d 100644 --- a/include/Topology/generic/attributeHandler.hpp +++ b/include/Topology/generic/attributeHandler.hpp @@ -29,9 +29,9 @@ template AttributeHandler::AttributeHandler(GenericMap* m, unsigned int idAttr): m_map(m), m_id(idAttr) { - if(idAttr != AttribContainer::UNKNOWN) + if(idAttr != AttributeContainer::UNKNOWN) { - AttribMultiVect& atm = m_map->getAttributeVector(m_id); + AttributeMultiVector& atm = m_map->getAttributeVector(m_id); m_attrib = &atm; } else @@ -62,7 +62,7 @@ GenericMap* AttributeHandler::map() const } template -AttribMultiVect* AttributeHandler::getDataVector() const +AttributeMultiVector* AttributeHandler::getDataVector() const { return m_attrib ; } @@ -76,23 +76,23 @@ unsigned int AttributeHandler::id() const template const std::string& AttributeHandler::name() const { - return m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).getAttributeName(AttribContainer::indexAttr(m_id)) ; + return m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).getAttributeName(AttributeContainer::indexAttr(m_id)) ; } template bool AttributeHandler::isValid() const { - return (m_id != AttribContainer::UNKNOWN) && (m_map != NULL) && (m_attrib != NULL) ; + return (m_id != AttributeContainer::UNKNOWN) && (m_map != NULL) && (m_attrib != NULL) ; } template inline T& AttributeHandler::operator[](Dart d) { assert(isValid() || !"Invalid AttributeHandler") ; - unsigned int a = m_map->getEmbedding(d, AttribContainer::orbitAttr(m_id)); + unsigned int a = m_map->getEmbedding(d, AttributeContainer::orbitAttr(m_id)); if (a == EMBNULL) - a = m_map->embedNewCell(AttribContainer::orbitAttr(m_id), d); + a = m_map->embedNewCell(AttributeContainer::orbitAttr(m_id), d); return m_attrib->operator[](a); } @@ -101,7 +101,7 @@ template inline const T& AttributeHandler::operator[](Dart d) const { assert(isValid() || !"Invalid AttributeHandler") ; - unsigned int a = m_map->getEmbedding(d, AttribContainer::orbitAttr(m_id)); + unsigned int a = m_map->getEmbedding(d, AttributeContainer::orbitAttr(m_id)); return m_attrib->operator[](a); } @@ -123,7 +123,7 @@ template inline unsigned int AttributeHandler::insert(const T& elt) { assert(isValid() || !"Invalid AttributeHandler") ; - unsigned int idx = m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).insertLine(); + unsigned int idx = m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).insertLine(); m_attrib->operator[](idx) = elt; return idx; } @@ -132,7 +132,7 @@ template inline unsigned int AttributeHandler::newElt() { assert(isValid() || !"Invalid AttributeHandler") ; - unsigned int idx = m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).insertLine(); + unsigned int idx = m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).insertLine(); return idx; } @@ -140,21 +140,21 @@ template inline unsigned int AttributeHandler::begin() const { assert(isValid() || !"Invalid AttributeHandler") ; - return m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).begin(); + return m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).begin(); } template inline unsigned int AttributeHandler::end() const { assert(isValid() || !"Invalid AttributeHandler") ; - return m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).end(); + return m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).end(); } template inline void AttributeHandler::next(unsigned int& iter) const { assert(isValid() || !"Invalid AttributeHandler") ; - m_map->getAttributeContainer(AttribContainer::orbitAttr(m_id)).next(iter); + m_map->getAttributeContainer(AttributeContainer::orbitAttr(m_id)).next(iter); } } //namespace CGoGN diff --git a/include/Topology/generic/autoAttributeHandler.h b/include/Topology/generic/autoAttributeHandler.h index cb8fd41aed7bfffe5126b55fc10662eba249fdcb..fcfb8d9a1632726e1927859df07a4efc790846cc 100644 --- a/include/Topology/generic/autoAttributeHandler.h +++ b/include/Topology/generic/autoAttributeHandler.h @@ -52,11 +52,11 @@ public: this->m_map = &m ; if(!m.isOrbitEmbedded(orbit)) m.addEmbedding(orbit) ; - AttribContainer& cellCont = this->m_map->m_attribs[orbit] ; + AttributeContainer& cellCont = this->m_map->m_attribs[orbit] ; unsigned int index = cellCont.addAttribute(nameAttr) ; - AttribMultiVect& atm = cellCont.getDataVector(index); + AttributeMultiVector& atm = cellCont.getDataVector(index); this->m_attrib = &atm; - this->m_id = AttribContainer::attrId(orbit, index) ; + this->m_id = AttributeContainer::attrId(orbit, index) ; } ~AutoAttributeHandler() diff --git a/include/Topology/generic/cellmarker.h b/include/Topology/generic/cellmarker.h index fce616e8c6638ffec977434706ecdd05d7a51359..621f36e391df43888213b5abd5376de8b5df0037 100644 --- a/include/Topology/generic/cellmarker.h +++ b/include/Topology/generic/cellmarker.h @@ -139,7 +139,7 @@ public: virtual void markAll() { unsigned int cell = m_marker.getCell() ; - AttribContainer& cont = m_map.getAttributeContainer(cell) ; + AttributeContainer& cont = m_map.getAttributeContainer(cell) ; for (unsigned int i = cont.begin(); i != cont.end(); cont.next(i)) m_map.getMarkerVector(cell)->operator[](i).setMark(m_marker); } @@ -147,7 +147,7 @@ public: virtual void unmarkAll() { unsigned int cell = m_marker.getCell() ; - AttribContainer& cont = m_map.getAttributeContainer(cell) ; + AttributeContainer& cont = m_map.getAttributeContainer(cell) ; for (unsigned int i = cont.begin(); i != cont.end(); cont.next(i)) m_map.getMarkerVector(cell)->operator[](i).unsetMark(m_marker); } diff --git a/include/Topology/generic/dartmarker.h b/include/Topology/generic/dartmarker.h index ee7815877815305e93c269dfcfbf1168f64901b6..91b78765a25de41df17481c0e3a5430fa2bab717 100644 --- a/include/Topology/generic/dartmarker.h +++ b/include/Topology/generic/dartmarker.h @@ -40,9 +40,9 @@ class FunctorMarker : public FunctorMap { protected: Marker m_marker; - AttribMultiVect* m_markerTable; + AttributeMultiVector* m_markerTable; public: - FunctorMarker(MAP& map, Marker m, AttribMultiVect* mTable) : FunctorMap(map), m_marker(m), m_markerTable(mTable) {} + FunctorMarker(MAP& map, Marker m, AttributeMultiVector* mTable) : FunctorMap(map), m_marker(m), m_markerTable(mTable) {} Marker getMarker() { return m_marker; } }; @@ -50,7 +50,7 @@ template class FunctorMark: public FunctorMarker { public: - FunctorMark(MAP& map, Marker m, AttribMultiVect* mTable) : FunctorMarker(map, m, mTable) {} + FunctorMark(MAP& map, Marker m, AttributeMultiVector* mTable) : FunctorMarker(map, m, mTable) {} bool operator()(Dart d) { this->m_markerTable->operator[](d.index).setMark(this->m_marker); @@ -62,7 +62,7 @@ template class FunctorUnmark: public FunctorMarker { public: - FunctorUnmark(MAP& map, Marker m, AttribMultiVect* mTable) : FunctorMarker(map, m, mTable) {} + FunctorUnmark(MAP& map, Marker m, AttributeMultiVector* mTable) : FunctorMarker(map, m, mTable) {} bool operator()(Dart d) { this->m_markerTable->operator[](d.index).unsetMark(this->m_marker); @@ -153,14 +153,14 @@ public: virtual void markAll() { - AttribContainer& cont = m_map.getAttributeContainer(DART_ORBIT) ; + AttributeContainer& cont = m_map.getAttributeContainer(DART_ORBIT) ; for (unsigned int i = cont.begin(); i != cont.end(); cont.next(i)) m_map.getMarkerVector(DART_ORBIT)->operator[](i).setMark(m_marker); } virtual void unmarkAll() { - AttribContainer& cont = m_map.getAttributeContainer(DART_ORBIT) ; + AttributeContainer& cont = m_map.getAttributeContainer(DART_ORBIT) ; for (unsigned int i = cont.begin(); i != cont.end(); cont.next(i)) m_map.getMarkerVector(DART_ORBIT)->operator[](i).unsetMark(m_marker); } diff --git a/include/Topology/generic/ecell.h b/include/Topology/generic/ecell.h index 708b8106cb233e2ebca053cd638b907967d18bc4..371901ed1fde4e488c2c64122668607231e19e05 100644 --- a/include/Topology/generic/ecell.h +++ b/include/Topology/generic/ecell.h @@ -50,7 +50,7 @@ class ECellDart static GenericMap* s_map; ///container ptr acces (static, all ECellDart) - static AttribContainer* s_cont; + static AttributeContainer* s_cont; ///id of cell unsigned int m_id; @@ -83,7 +83,7 @@ class ECellDart /** * assign container */ - static void setContainer(AttribContainer& cont); + static void setContainer(AttributeContainer& cont); /** * assign map diff --git a/include/Topology/generic/ecell.hpp b/include/Topology/generic/ecell.hpp index 5a9b9aa352a68ef17bc0354adf03602b32760ebd..e3e6b599f64a910a56e62e1643e039be22b80e08 100644 --- a/include/Topology/generic/ecell.hpp +++ b/include/Topology/generic/ecell.hpp @@ -51,7 +51,7 @@ ECellDart::~ECellDart() } template -void ECellDart::setContainer(AttribContainer& cont) +void ECellDart::setContainer(AttributeContainer& cont) { s_cont = &cont; } diff --git a/include/Topology/generic/genericmap.h b/include/Topology/generic/genericmap.h index 6bcb95806f89e92ccf56769d96bb01b461274d71..76f749dabb25da0c60ea4f09fe749eab1a404980 100644 --- a/include/Topology/generic/genericmap.h +++ b/include/Topology/generic/genericmap.h @@ -45,7 +45,7 @@ #define DART_ORBIT (unsigned int)(4) -#include "Container/attrib_container.h" +#include "Container/attributeContainer.h" #include "Topology/generic/dart.h" #include "Topology/generic/marker.h" #include "Topology/generic/functor.h" @@ -81,7 +81,7 @@ protected: /** * Attributes Containers */ - AttribContainer m_attribs[NB_ORBITS] ; + AttributeContainer m_attribs[NB_ORBITS] ; static std::map< std::string, RegisteredBaseAttribute* >* m_attributes_registry_map ; @@ -89,7 +89,7 @@ protected: * Direct access to the Dart attributes that store the orbits embeddings * (only initialized when necessary) */ - AttribMultiVect* m_embeddings[NB_ORBITS] ; + AttributeMultiVector* m_embeddings[NB_ORBITS] ; /** * Markers manager @@ -99,10 +99,10 @@ protected: /** * Direct access to the attributes that store Marks */ - AttribMultiVect* m_markerTables[NB_ORBITS]; + AttributeMultiVector* m_markerTables[NB_ORBITS]; public: - static const unsigned int UNKNOWN_ATTRIB = AttribContainer::UNKNOWN ; + static const unsigned int UNKNOWN_ATTRIB = AttributeContainer::UNKNOWN ; GenericMap(); @@ -144,12 +144,6 @@ public: */ bool isOrbitEmbedded(unsigned int orbit) const; - /** - * return a pointer to the Dart attribute vector that store the embedding of the given orbit - * (may be NULL if the orbit is not embedded) - */ - AttribMultiVect* getEmbeddingAttributeVector(unsigned int orbit) const; - /** * return the number of embedded orbits (including DART_ORBIT) */ @@ -231,36 +225,36 @@ public: ****************************************/ /** - * Traverse the map and embed all orbits of the given dimension with a new cell - * @param realloc if true -> all the orbits are embedded on new cells, if false -> already embedded orbits are not impacted + * get the attrib container of a given orbit + * @param orbit the orbit !!! (bilbo the orbit !) */ - void initOrbitEmbedding(unsigned int orbit, bool realloc = false); + AttributeContainer& getAttributeContainer(unsigned int orbit); /** - * get a pseudo vector of attribute (direct access with [i]) + * get a multi vector of attribute (direct access with [i]) * @param idAttr code (orbit+attribute) */ template - AttribMultiVect& getAttributeVector(unsigned int idAttr); + AttributeMultiVector& getAttributeVector(unsigned int idAttr); /** - * get a pseudo vector of marker attribute (direct access with [i]) - * @param orbit code + * get a virtual multi vector of attribute + * No access to data, usefull for access to address (VBO) + * @param idAttr code (orbit+attribute) */ - AttribMultiVect* getMarkerVector(unsigned int orbit); + AttributeMultiVectorGen& getAttributeVectorGen(unsigned int idAttr); /** - * get a virtual vector of attribute - * No access to data, usefull for access to address (VBO) - * @param idAttr code (orbit+attribute) + * get a multi vector of marker attribute (direct access with [i]) + * @param orbit code */ - AttribMultiVectGen& getMultiVec(unsigned int idAttr); + AttributeMultiVector* getMarkerVector(unsigned int orbit); /** - * get the attrib container of a given orbit - * @param orbit the orbit !!! (bilbo the orbit !) + * return a pointer to the Dart attribute vector that store the embedding of the given orbit + * (may be NULL if the orbit is not embedded) */ - AttribContainer& getAttributeContainer(unsigned int orbit); + AttributeMultiVector* getEmbeddingAttributeVector(unsigned int orbit); /** * static function for type registration @@ -268,6 +262,12 @@ public: template static bool registerAttribute(const std::string &nameType) ; + /** + * Traverse the map and embed all orbits of the given dimension with a new cell + * @param realloc if true -> all the orbits are embedded on new cells, if false -> already embedded orbits are not impacted + */ + void initOrbitEmbedding(unsigned int orbit, bool realloc = false); + /**************************************** * MARKERS MANAGEMENT * ****************************************/ diff --git a/include/Topology/generic/genericmap.hpp b/include/Topology/generic/genericmap.hpp index 3367084c2035a5cf2d7bc06e419e6588964688b4..1ef11a7a6b7d52a659f2039c01a1acf8ee58bef2 100644 --- a/include/Topology/generic/genericmap.hpp +++ b/include/Topology/generic/genericmap.hpp @@ -77,11 +77,6 @@ inline bool GenericMap::isOrbitEmbedded(unsigned int orbit) const return (orbit == DART_ORBIT) || (m_embeddings[orbit] != NULL) ; } -inline AttribMultiVect* GenericMap::getEmbeddingAttributeVector(unsigned int orbit) const -{ - return m_embeddings[orbit] ; -} - inline unsigned int GenericMap::nbEmbeddings() const { unsigned int nb = 0; @@ -107,7 +102,7 @@ inline unsigned int GenericMap::getEmbedding(Dart d, unsigned int orbit) protected: GenericMap& m_map; unsigned int m_orbit; - AttribMultiVect* m_emb; + AttributeMultiVector* m_emb; unsigned int m_val; std::vector m_darts; @@ -134,7 +129,7 @@ inline unsigned int GenericMap::getEmbedding(Dart d, unsigned int orbit) { if(m_val != EMBNULL) { - AttribContainer& cont = m_map.getAttributeContainer(m_orbit) ; + AttributeContainer& cont = m_map.getAttributeContainer(m_orbit) ; for(std::vector::iterator it = m_darts.begin(); it != m_darts.end(); ++it) { (*m_emb)[it->index] = m_val; @@ -221,28 +216,32 @@ inline void GenericMap::initCell(unsigned int orbit, unsigned int i) * ATTRIBUTES MANAGEMENT * ****************************************/ +inline AttributeContainer& GenericMap::getAttributeContainer(unsigned int orbit) +{ + return m_attribs[orbit] ; +} + template -inline AttribMultiVect& GenericMap::getAttributeVector(unsigned int idAttr) +inline AttributeMultiVector& GenericMap::getAttributeVector(unsigned int idAttr) { - assert(idAttr != AttribContainer::UNKNOWN) ; - return m_attribs[AttribContainer::orbitAttr(idAttr)].getDataVector(AttribContainer::indexAttr(idAttr)) ; + assert(idAttr != AttributeContainer::UNKNOWN) ; + return m_attribs[AttributeContainer::orbitAttr(idAttr)].getDataVector(AttributeContainer::indexAttr(idAttr)) ; } -inline AttribMultiVect* GenericMap::getMarkerVector(unsigned int orbit) +inline AttributeMultiVectorGen& GenericMap::getAttributeVectorGen(unsigned int idAttr) { - assert(isOrbitEmbedded(orbit) || !"Invalid parameter: orbit not embedded"); - return m_markerTables[orbit] ; + assert(idAttr != AttributeContainer::UNKNOWN) ; + return m_attribs[AttributeContainer::orbitAttr(idAttr)].getVirtualDataVector(AttributeContainer::indexAttr(idAttr)) ; } -inline AttribMultiVectGen& GenericMap::getMultiVec(unsigned int idAttr) +inline AttributeMultiVector* GenericMap::getMarkerVector(unsigned int orbit) { - assert(idAttr != AttribContainer::UNKNOWN) ; - return m_attribs[AttribContainer::orbitAttr(idAttr)].getVirtualDataVector(AttribContainer::indexAttr(idAttr)) ; + return m_markerTables[orbit] ; } -inline AttribContainer& GenericMap::getAttributeContainer(unsigned int orbit) +inline AttributeMultiVector* GenericMap::getEmbeddingAttributeVector(unsigned int orbit) { - return m_attribs[orbit] ; + return m_embeddings[orbit] ; } /**************************************** diff --git a/include/Topology/gmap/gmap0.h b/include/Topology/gmap/gmap0.h index 6fd37a81cafe12a2192563cdfe33364aaafb7ca3..76e644d61007915fb9ff31cd05c26abe8057c4e8 100644 --- a/include/Topology/gmap/gmap0.h +++ b/include/Topology/gmap/gmap0.h @@ -39,7 +39,7 @@ namespace CGoGN class GMap0 : public AttribMap { protected: - AttribMultiVect* m_beta0 ; + AttributeMultiVector* m_beta0 ; public: GMap0(); diff --git a/include/Topology/gmap/gmap1.h b/include/Topology/gmap/gmap1.h index f5511badf9f52993e914961f02c711bd3134db93..8ac7ea394c8ff2e630c72e46a64cc15dfec4cd5a 100644 --- a/include/Topology/gmap/gmap1.h +++ b/include/Topology/gmap/gmap1.h @@ -36,7 +36,7 @@ namespace CGoGN class GMap1 : public GMap0 { protected: - AttribMultiVect* m_beta1 ; + AttributeMultiVector* m_beta1 ; public: GMap1(); diff --git a/include/Topology/gmap/gmap2.h b/include/Topology/gmap/gmap2.h index 75f82df492fe3cd16f9d939f9556deb05559fcb0..fc2e1ca2f25366e95cd8be560c174bc1822b0fd8 100644 --- a/include/Topology/gmap/gmap2.h +++ b/include/Topology/gmap/gmap2.h @@ -36,7 +36,7 @@ namespace CGoGN class GMap2 : public GMap1 { protected: - AttribMultiVect* m_beta2 ; + AttributeMultiVector* m_beta2 ; public: GMap2(); diff --git a/include/Topology/gmap/gmap3.h b/include/Topology/gmap/gmap3.h index 0229401ef1275985be34539364b13c8e0e1c2e6d..fdf7219c4403274e5df613cd202f4c702a911373 100644 --- a/include/Topology/gmap/gmap3.h +++ b/include/Topology/gmap/gmap3.h @@ -36,7 +36,7 @@ namespace CGoGN class GMap3 : public GMap2 { protected: - AttribMultiVect* m_beta3 ; + AttributeMultiVector* m_beta3 ; public: GMap3(); diff --git a/include/Topology/map/map1.h b/include/Topology/map/map1.h index 4700c68f84e19c6ac9263aff0739c94f77cf1f4e..6862d6cfca3fa7e6f4ed2b0c774da956affa0179 100644 --- a/include/Topology/map/map1.h +++ b/include/Topology/map/map1.h @@ -44,8 +44,8 @@ namespace CGoGN class Map1 : public AttribMap { protected: - AttribMultiVect* m_phi1 ; - AttribMultiVect* m_phi_1 ; + AttributeMultiVector* m_phi1 ; + AttributeMultiVector* m_phi_1 ; public: Map1(); diff --git a/include/Topology/map/map2.h b/include/Topology/map/map2.h index ce4a141f0aebcac89fbee51057aede42f59b983b..ee75a56b329478d5e30db0919ab42085967f2e55 100644 --- a/include/Topology/map/map2.h +++ b/include/Topology/map/map2.h @@ -48,7 +48,7 @@ namespace CGoGN class Map2 : public Map1 { protected: - AttribMultiVect* m_phi2 ; + AttributeMultiVector* m_phi2 ; public: typedef Map1 ParentMap; @@ -242,12 +242,6 @@ public: * no dart created, each dart keeps its embedding, only changing phi1 and phi2 */ void reverseOrientation(); - - // TODO a mettre en algo - /** - * compute the topological dual of the current map - */ - void computeDual(); //@} /*! @name Topological Queries diff --git a/include/Topology/map/map3.h b/include/Topology/map/map3.h index 51d65e12e740ef263ba25a2cebed272ec80d2dcc..2340802a6c493ea4631b3446ffb47eb1b986681a 100644 --- a/include/Topology/map/map3.h +++ b/include/Topology/map/map3.h @@ -50,7 +50,7 @@ namespace CGoGN class Map3 : public Map2 { protected: - AttribMultiVect* m_phi3 ; + AttributeMultiVector* m_phi3 ; public: typedef Map2 ParentMap; diff --git a/src/Algo/ImplicitHierarchicalMesh/ihm.cpp b/src/Algo/ImplicitHierarchicalMesh/ihm.cpp index dc67e31039e93bcd6547f61d415ffc2773228890..95434c7374230bdef5812399c47b31856f19fef3 100644 --- a/src/Algo/ImplicitHierarchicalMesh/ihm.cpp +++ b/src/Algo/ImplicitHierarchicalMesh/ihm.cpp @@ -56,7 +56,7 @@ void ImplicitHierarchicalMap::init() { if(m_nextLevelCell[orbit] != NULL) { - AttribContainer& cellCont = m_attribs[orbit] ; + AttributeContainer& cellCont = m_attribs[orbit] ; for(unsigned int i = cellCont.begin(); i < cellCont.end(); cellCont.next(i)) m_nextLevelCell[orbit]->operator[](i) = EMBNULL ; } diff --git a/src/Container/attrib_container.cpp b/src/Container/attributeContainer.cpp similarity index 83% rename from src/Container/attrib_container.cpp rename to src/Container/attributeContainer.cpp index f726378f9611315c538d5ac88b29eae4c71ccf9e..56a39e1efa6305c80fa1530244986688a061fde8 100644 --- a/src/Container/attrib_container.cpp +++ b/src/Container/attributeContainer.cpp @@ -12,14 +12,14 @@ #include #include -#include "Container/attrib_container.h" +#include "Container/attributeContainer.h" namespace CGoGN { -AttribContainer::AttribContainer(): -m_nbunknown(0), +AttributeContainer::AttributeContainer(): m_nbAttributes(0), +m_nbUnknown(0), m_size(0), m_maxSize(0), m_lineCost(0), @@ -28,11 +28,11 @@ m_attributes_registry_map(NULL) m_holesBlocks.reserve(512); } -AttribContainer::~AttribContainer() +AttributeContainer::~AttributeContainer() { } -void AttribContainer::swap(AttribContainer& cont) +void AttributeContainer::swap(AttributeContainer& cont) { m_holesBlocks.swap(cont.m_holesBlocks); m_tableBlocksWithFree.swap(cont.m_tableBlocksWithFree); @@ -43,6 +43,10 @@ void AttribContainer::swap(AttribContainer& cont) m_nbAttributes = cont.m_nbAttributes; cont.m_nbAttributes = temp; + temp = m_nbUnknown ; + m_nbUnknown = cont.m_nbUnknown ; + cont.m_nbUnknown = temp ; + temp = m_size; m_size = cont.m_size; cont.m_size = temp; @@ -56,7 +60,7 @@ void AttribContainer::swap(AttribContainer& cont) cont.m_lineCost = temp; } -bool AttribContainer::removeAttribute(const std::string& attribName) +bool AttributeContainer::removeAttribute(const std::string& attribName) { MapNameId::iterator it = m_attribNameMap.find(attribName); if (it == m_attribNameMap.end()) @@ -77,7 +81,7 @@ bool AttribContainer::removeAttribute(const std::string& attribName) return true; } -bool AttribContainer::removeAttribute(unsigned int index) +bool AttributeContainer::removeAttribute(unsigned int index) { MapNameId::iterator it = m_attribNameMap.begin(); while ((it != m_attribNameMap.end()) && (it->second != index)) @@ -98,7 +102,7 @@ bool AttribContainer::removeAttribute(unsigned int index) return true; } -void AttribContainer::merge(AttribContainer& cont) +void AttributeContainer::merge(AttributeContainer& cont) { /* // tableau de correspondance pour reperer les tables de cont et les mettre ou il faut dans this @@ -119,7 +123,7 @@ void AttribContainer::merge(AttribContainer& cont) m_nbAttributes++; newId[idxAttrib] = it->second; - AttribMultiVectGen* ptr = cont.m_tableAttribs[it->second]; + AttributeMultiVectorGen* ptr = cont.m_tableAttribs[it->second]; ptr->addBlocksBefore(nbb); m_tableAttribs.push_back( ptr ); } @@ -164,7 +168,7 @@ void AttribContainer::merge(AttribContainer& cont) */ } -void AttribContainer::saveXml(xmlTextWriterPtr writer, unsigned int id) +void AttributeContainer::saveXml(xmlTextWriterPtr writer, unsigned int id) { if (m_nbAttributes == 0) return; @@ -228,7 +232,7 @@ void AttribContainer::saveXml(xmlTextWriterPtr writer, unsigned int id) } -bool AttribContainer::loadXmlBWF(xmlNodePtr node) +bool AttributeContainer::loadXmlBWF(xmlNodePtr node) { xmlChar* prop = xmlGetProp(node, BAD_CAST "nb"); unsigned int nb = atoi((char*)prop); @@ -248,7 +252,7 @@ bool AttribContainer::loadXmlBWF(xmlNodePtr node) return true; } -bool AttribContainer::loadXmlAN(xmlNodePtr node, unsigned int nbb) +bool AttributeContainer::loadXmlAN(xmlNodePtr node, unsigned int nbb) { xmlChar* prop = xmlGetProp(node, BAD_CAST "nb"); // unsigned int nb = atoi((char*)prop); @@ -299,7 +303,7 @@ bool AttribContainer::loadXmlAN(xmlNodePtr node, unsigned int nbb) return true; } -bool AttribContainer::loadXmlDL(xmlNodePtr node) +bool AttributeContainer::loadXmlDL(xmlNodePtr node) { // charge et cree les attributs for (xmlNode* x_node = node->children; x_node!=NULL; x_node = x_node->next) @@ -333,14 +337,14 @@ bool AttribContainer::loadXmlDL(xmlNodePtr node) } -unsigned int AttribContainer::getIdXmlNode(xmlNodePtr node) +unsigned int AttributeContainer::getIdXmlNode(xmlNodePtr node) { xmlChar *prop = xmlGetProp(node, BAD_CAST "id"); unsigned int id = atoi((char*)prop); return id; } -bool AttribContainer::loadXml(xmlNodePtr node) +bool AttributeContainer::loadXml(xmlNodePtr node) { xmlChar *prop = xmlGetProp(node, BAD_CAST "BlockSize"); unsigned int bs = atoi((char*)prop); @@ -395,7 +399,7 @@ bool AttribContainer::loadXml(xmlNodePtr node) return true; } -void AttribContainer::saveBin(CGoGNostream& fs, unsigned int id) +void AttributeContainer::saveBin(CGoGNostream& fs, unsigned int id) { // en ascii id et taille les tailles @@ -415,7 +419,7 @@ void AttribContainer::saveBin(CGoGNostream& fs, unsigned int id) fs.write(reinterpret_cast(&bufferui[0]) ,bufferui.size()*sizeof(unsigned int)); unsigned int i = 0; - for(std::vector::iterator it=m_tableAttribs.begin(); it!=m_tableAttribs.end(); ++it) + for(std::vector::iterator it=m_tableAttribs.begin(); it!=m_tableAttribs.end(); ++it) { if (*it !=NULL) (*it)->saveBin(fs, i++); @@ -429,14 +433,14 @@ void AttribContainer::saveBin(CGoGNostream& fs, unsigned int id) fs.write(reinterpret_cast(&m_tableBlocksWithFree[0]), m_tableBlocksWithFree.size() * sizeof(unsigned int)); } -unsigned int AttribContainer::loadBinId(CGoGNistream& fs) +unsigned int AttributeContainer::loadBinId(CGoGNistream& fs) { unsigned int id; fs.read(reinterpret_cast(&id), sizeof(unsigned int)); return id; } -bool AttribContainer::loadBin(CGoGNistream& fs) +bool AttributeContainer::loadBin(CGoGNistream& fs) { if (m_attributes_registry_map ==NULL) { @@ -467,13 +471,13 @@ bool AttribContainer::loadBin(CGoGNistream& fs) { std::string nameAtt; std::string typeAtt; - /*unsigned int id = */AttribMultiVectGen::loadBinInfos(fs,nameAtt, typeAtt); + /*unsigned int id = */AttributeMultiVectorGen::loadBinInfos(fs,nameAtt, typeAtt); std::map::iterator itAtt = m_attributes_registry_map->find(typeAtt); if (itAtt == m_attributes_registry_map->end()) { std::cout << "Skipping non registred attribute of type name"<< typeAtt <second; } -bool AttribContainer::isValidAttribute(unsigned int attr) +bool AttributeContainer::isValidAttribute(unsigned int attr) { if (attr == UNKNOWN) return false; @@ -530,7 +534,7 @@ bool AttribContainer::isValidAttribute(unsigned int attr) return false; } -unsigned int AttribContainer::getAttributesStrings(std::vector& strings) +unsigned int AttributeContainer::getAttributesStrings(std::vector& strings) { strings.clear(); @@ -544,7 +548,7 @@ unsigned int AttribContainer::getAttributesStrings(std::vector& str return m_attribNameMap.size(); } -const std::string& AttribContainer::getAttributeName(unsigned int attrIndex) +const std::string& AttributeContainer::getAttributeName(unsigned int attrIndex) { for (MapNameId::iterator it = m_attribNameMap.begin(); it!= m_attribNameMap.end(); ++it) { @@ -556,7 +560,7 @@ const std::string& AttribContainer::getAttributeName(unsigned int attrIndex) return m_attribNameMap.begin()->first; // just for compiling } -unsigned int AttribContainer::nbAttributes() +unsigned int AttributeContainer::nbAttributes() { return m_attribNameMap.size(); } @@ -565,7 +569,7 @@ unsigned int AttribContainer::nbAttributes() // GESTION DES LIGNES /////////////////////////// -unsigned int AttribContainer::insertLine() +unsigned int AttributeContainer::insertLine() { // if no more rooms if (m_tableBlocksWithFree.empty()) @@ -606,7 +610,7 @@ unsigned int AttribContainer::insertLine() return idx; } -void AttribContainer::initLine(unsigned int idx) +void AttributeContainer::initLine(unsigned int idx) { for(unsigned int i = 0; i < m_tableAttribs.size(); ++i) { @@ -615,7 +619,7 @@ void AttribContainer::initLine(unsigned int idx) } } -void AttribContainer::removeLine(unsigned int eltIdx) +void AttributeContainer::removeLine(unsigned int eltIdx) { unsigned int bi = eltIdx / _BLOCKSIZE_; unsigned int j = eltIdx % _BLOCKSIZE_; @@ -640,7 +644,7 @@ void AttribContainer::removeLine(unsigned int eltIdx) } } -void AttribContainer::copyLine(unsigned int dstIdx, unsigned int srcIdx) +void AttributeContainer::copyLine(unsigned int dstIdx, unsigned int srcIdx) { for(unsigned int i = 0; i < m_tableAttribs.size(); ++i) { @@ -653,7 +657,7 @@ void AttribContainer::copyLine(unsigned int dstIdx, unsigned int srcIdx) // GESTION DES ITERATEURS /////////////////////////// -//void AttribContainer::next(iterator& it) +//void AttributeContainer::next(iterator& it) //{ // do // { @@ -661,7 +665,7 @@ void AttribContainer::copyLine(unsigned int dstIdx, unsigned int srcIdx) // } while ((it& mapOldNew) +void AttributeContainer::compact(std::vector& mapOldNew) { unsigned int nbe = _BLOCKSIZE_*m_holesBlocks.size(); @@ -811,7 +815,7 @@ void AttribContainer::compact(std::vector& mapOldNew) // NETTOYAGE /////////////////////////// -void AttribContainer::clear(bool clearAttrib) +void AttributeContainer::clear(bool clearAttrib) { m_size = 0; m_maxSize = 0; @@ -828,7 +832,7 @@ void AttribContainer::clear(bool clearAttrib) m_tableBlocksWithFree.swap(bwf); // detruit les données - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->free(); @@ -843,8 +847,8 @@ void AttribContainer::clear(bool clearAttrib) m_attribNameMap.clear(); // detruit tous les attributs - std::vector< AttribMultiVectGen* > amg; - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it != m_tableAttribs.end(); ++it) + std::vector< AttributeMultiVectorGen* > amg; + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it != m_tableAttribs.end(); ++it) { if ((*it) != NULL) delete (*it); @@ -857,54 +861,54 @@ void AttribContainer::clear(bool clearAttrib) // OLD INLINE FUNCTIONS /////////////////////////// -void AttribContainer::affect(unsigned int i, unsigned int j) +void AttributeContainer::affect(unsigned int i, unsigned int j) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if (*it != NULL) (*it)->affect(i, j); } } -void AttribContainer::add(unsigned int i, unsigned int j) +void AttributeContainer::add(unsigned int i, unsigned int j) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->add(i, j); } } -void AttribContainer::sub(unsigned int i, unsigned int j) +void AttributeContainer::sub(unsigned int i, unsigned int j) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->sub(i, j); } } -void AttribContainer::mult(unsigned int i, double alpha) +void AttributeContainer::mult(unsigned int i, double alpha) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->mult(i, alpha); } } -void AttribContainer::div(unsigned int i, double alpha) +void AttributeContainer::div(unsigned int i, double alpha) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->div(i, alpha); } } -void AttribContainer::lerp(unsigned res, unsigned int i, unsigned int j, double alpha) +void AttributeContainer::lerp(unsigned res, unsigned int i, unsigned int j, double alpha) { - for (std::vector< AttribMultiVectGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) + for (std::vector< AttributeMultiVectorGen* >::iterator it = m_tableAttribs.begin(); it!= m_tableAttribs.end(); ++it) { if ((*it) != NULL) (*it)->lerp(res, i, j, alpha); diff --git a/src/Topology/generic/attribmap.cpp b/src/Topology/generic/attribmap.cpp index 7b8261f2ea1d1279c0a15a8e0d193bc458d04535..279a8fbf5fa835710d66cc40bc06d2218fcebfbc 100644 --- a/src/Topology/generic/attribmap.cpp +++ b/src/Topology/generic/attribmap.cpp @@ -29,9 +29,9 @@ namespace CGoGN AttribMap::AttribMap() : GenericMap() { - AttribContainer& dartCont = m_attribs[DART_ORBIT] ; + AttributeContainer& dartCont = m_attribs[DART_ORBIT] ; unsigned int mark_index = dartCont.addAttribute("Mark") ; - AttribMultiVect& amv = dartCont.getDataVector(mark_index) ; + AttributeMultiVector& amv = dartCont.getDataVector(mark_index) ; m_markerTables[DART_ORBIT] = &amv ; } @@ -44,18 +44,18 @@ void AttribMap::addEmbedding(unsigned int orbit) std::ostringstream oss; oss << "EMB_" << orbit; - AttribContainer& dartCont = m_attribs[DART_ORBIT] ; + AttributeContainer& dartCont = m_attribs[DART_ORBIT] ; unsigned int index = dartCont.addAttribute(oss.str()) ; - AttribMultiVect& amv = dartCont.getDataVector(index) ; + AttributeMultiVector& amv = dartCont.getDataVector(index) ; m_embeddings[orbit] = &amv ; // set new embedding to EMBNULL for all the darts of the map for(unsigned int i = dartCont.begin(); i < dartCont.end(); dartCont.next(i)) amv[i] = EMBNULL ; - AttribContainer& cellCont = m_attribs[orbit] ; + AttributeContainer& cellCont = m_attribs[orbit] ; unsigned int mark_index = cellCont.addAttribute("Mark") ; - AttribMultiVect& amvMark = cellCont.getDataVector(mark_index) ; + AttributeMultiVector& amvMark = cellCont.getDataVector(mark_index) ; m_markerTables[orbit] = &amvMark ; } @@ -65,7 +65,7 @@ void AttribMap::addEmbedding(unsigned int orbit) unsigned int AttribMap::computeIndexCells(AttributeHandler& idx) { - AttribContainer& cont = m_attribs[AttribContainer::orbitAttr(idx.id())] ; + AttributeContainer& cont = m_attribs[AttributeContainer::orbitAttr(idx.id())] ; unsigned int cpt = 0 ; for (unsigned int i = cont.begin(); i != cont.end(); cont.next(i)) { diff --git a/src/Topology/generic/genericmap.cpp b/src/Topology/generic/genericmap.cpp index c8331d704c54301444f4d88ab29e48aefded44e9..979433441b793af8f7c9a1654eb8cf2e23e452c2 100644 --- a/src/Topology/generic/genericmap.cpp +++ b/src/Topology/generic/genericmap.cpp @@ -30,13 +30,14 @@ namespace CGoGN { -std::map< std::string, RegisteredBaseAttribute* >* GenericMap::m_attributes_registry_map = NULL; + +std::map* GenericMap::m_attributes_registry_map = NULL ; GenericMap::GenericMap() { + if(m_attributes_registry_map == NULL) + m_attributes_registry_map = new std::map< std::string, RegisteredBaseAttribute* > ; - if (m_attributes_registry_map ==NULL) - m_attributes_registry_map = new std::map< std::string, RegisteredBaseAttribute* >; // register all known types registerAttribute("Dart"); registerAttribute("Mark"); @@ -65,7 +66,7 @@ GenericMap::GenericMap() registerAttribute(Geom::Matrix33d::CGoGNnameOfType()); registerAttribute(Geom::Matrix44d::CGoGNnameOfType()); - for (unsigned int i = 0; i < NB_ORBITS; ++i) + for(unsigned int i = 0; i < NB_ORBITS; ++i) { m_attribs[i].setRegistry(m_attributes_registry_map) ; m_embeddings[i] = NULL ; @@ -82,7 +83,7 @@ GenericMap::~GenericMap() m_attribs[i].clear(true) ; } } - if (m_attributes_registry_map) + if(m_attributes_registry_map) delete m_attributes_registry_map; } @@ -155,7 +156,7 @@ bool GenericMap::registerAttribute(const std::string &nameType) void GenericMap::update_m_emb_afterLoad() { // get container of dart orbit - AttribContainer& cont = m_attribs[DART_ORBIT] ; + AttributeContainer& cont = m_attribs[DART_ORBIT] ; // get the list of attributes std::vector listeNames; @@ -169,7 +170,7 @@ void GenericMap::update_m_emb_afterLoad() { unsigned int orb = listeNames[i][4]-'0'; // easy atoi computation for one char; - AttribMultiVect& amv = cont.getDataVector(i); + AttributeMultiVector& amv = cont.getDataVector(i); m_embeddings[orb] = &amv ; std::cout << "Ajoute m_emb["< tableNames; // contDart.getAttributesStrings(tableNames); // @@ -286,7 +287,7 @@ bool GenericMap::loadMapXml(const std::string& filename, bool compress) // std::string is_an_emb = name.substr(0,4); // if (is_an_emb == "EMB_") // { -// AttribMultiVect& amv = contDart.getDataVector(i) ; +// AttributeMultiVector& amv = contDart.getDataVector(i) ; // // std::string orbitname = name.substr(4, name.size()-4); // std::istringstream iss(orbitname); @@ -442,7 +443,7 @@ bool GenericMap::loadMapBin(const std::string& filename) // load attrib container for (unsigned int i=0; i("new_phi1") ; - - AttribMultiVect& new_phi1 = cont.getDataVector(new_phi1_idx) ; - - for (Dart d = begin() ; d != end() ; next(d)) - { - Dart dd = alpha1(d) ; - new_phi1[d.index] = dd ; - (*m_phi_1)[dd.index] = d ; - } - - cont.swapAttributes(phi1_idx, new_phi1_idx) ; - - cont.removeAttribute(new_phi1_idx) ; -} +//void Map2::computeDual() +//{ +// AttributeContainer& cont = m_attribs[DART_ORBIT] ; +// +// unsigned int phi1_idx = cont.getAttribute("phi1") ; +// unsigned int new_phi1_idx = cont.addAttribute("new_phi1") ; +// +// AttributeMultiVector& new_phi1 = cont.getDataVector(new_phi1_idx) ; +// +// for (Dart d = begin() ; d != end() ; next(d)) +// { +// Dart dd = alpha1(d) ; +// new_phi1[d.index] = dd ; +// (*m_phi_1)[dd.index] = d ; +// } +// +// cont.swapAttributes(phi1_idx, new_phi1_idx) ; +// +// cont.removeAttribute(new_phi1_idx) ; +//} /*! @name Topological Queries * Return or set various topological information diff --git a/src/Topology/map/map3.cpp b/src/Topology/map/map3.cpp index 56639f04ed45dcd20cd4232f6d1023a5cf3ce327..2ad1d03867242ec1966ae163aa9074c0620ae748 100644 --- a/src/Topology/map/map3.cpp +++ b/src/Topology/map/map3.cpp @@ -39,12 +39,10 @@ namespace CGoGN void Map3::deleteOrientedVolume(Dart d) { DartMarkerStore mark(*this); // Lock a marker - bool found = false; // Last functor return value std::vector visitedFaces; // Faces that are traversed visitedFaces.reserve(16); visitedFaces.push_back(d); // Start with the face of d - std::vector::iterator face; // // For every face added to the list // for (face = visitedFaces.begin(); !found && face != visitedFaces.end(); ++face) @@ -67,7 +65,7 @@ void Map3::deleteOrientedVolume(Dart d) mark.markOrbit(FACE_ORBIT, d) ; - for(face = visitedFaces.begin(); !found && face != visitedFaces.end(); ++face) + for(std::vector::iterator face = visitedFaces.begin(); face != visitedFaces.end(); ++face) { Dart e = *face ; @@ -87,7 +85,7 @@ void Map3::deleteOrientedVolume(Dart d) // delete every visited face - for (face = visitedFaces.begin(); face != visitedFaces.end(); ++face) + for (std::vector::iterator face = visitedFaces.begin(); face != visitedFaces.end(); ++face) Map1::deleteOrientedFace(*face); }