diff --git a/Apps/Examples/clipping.h b/Apps/Examples/clipping.h index 2b79ecc6fd2f68da0ef75de77e82cc6001623c3f..b4be7d558d3f661bfc1ee517ff4bf0255aafcb41 100644 --- a/Apps/Examples/clipping.h +++ b/Apps/Examples/clipping.h @@ -99,9 +99,6 @@ public: Utils::ShaderSimpleColor* m_shader; - Utils::Drawer* influence_area; - Utils::Drawer* chips_area; - Geom::Vec3f m_coeffTopoExplod; Geom::Vec3f gPosObj ; float gWidthObj ; diff --git a/Apps/Examples/viewer.cpp b/Apps/Examples/viewer.cpp index e9607aed9e167c967d7576439a0c5036fa0071f3..ccc2bc831b92b2bc68d6d81b0b9aa1e82c49441a 100644 --- a/Apps/Examples/viewer.cpp +++ b/Apps/Examples/viewer.cpp @@ -35,7 +35,8 @@ Viewer::Viewer() : m_flatShader(NULL), m_vectorShader(NULL), m_simpleColorShader(NULL), - m_pointSprite(NULL) + m_pointSprite(NULL), + m_strings(NULL) { normalScaleFactor = 1.0f ; vertexScaleFactor = 0.1f ; @@ -110,15 +111,21 @@ void Viewer::cb_initGL() m_pointSprite = new Utils::PointSprite() ; m_pointSprite->setAttributePosition(m_positionVBO) ; + m_strings = new Utils::Strings3D(true, Geom::Vec3f(0.1f,0.0f,0.3f)); + storeVerticesInfo(); + m_strings->sendToVBO(); + registerShader(m_phongShader) ; registerShader(m_flatShader) ; registerShader(m_vectorShader) ; registerShader(m_simpleColorShader) ; registerShader(m_pointSprite) ; + registerShader(m_strings); } void Viewer::cb_redraw() { + glClearColor(1,1,1,0); if(m_drawVertices) { float size = vertexScaleFactor ; @@ -126,6 +133,7 @@ void Viewer::cb_redraw() m_pointSprite->predraw(Geom::Vec3f(0.0f, 0.0f, 1.0f)) ; m_render->draw(m_pointSprite, Algo::Render::GL2::POINTS) ; m_pointSprite->postdraw() ; + m_strings->drawAll(Geom::Vec3f(0.0f, 1.0f, 1.0f)); } if(m_drawEdges) @@ -175,9 +183,10 @@ void Viewer::cb_Open() void Viewer::cb_Save() { - std::string filters("off (*.off)") ; + std::string filters("off (*.off);; map (*.map)") ; std::string filename = selectFileSave("Save Mesh", "", filters) ; - Algo::Export::exportOFF(myMap, position, filename.c_str(), allDarts) ; + + exportMesh(filename); } void Viewer::importMesh(std::string& filename) @@ -220,10 +229,41 @@ void Viewer::importMesh(std::string& filename) m_positionVBO->updateData(position) ; m_normalVBO->updateData(normal) ; + storeVerticesInfo(); + m_strings->sendToVBO(); + setParamObject(bb.maxSize(), bb.center().data()) ; updateGLMatrices() ; } +void Viewer::exportMesh(std::string& filename) +{ + size_t pos = filename.rfind("."); // position of "." in filename + std::string extension = filename.substr(pos); + + if (extension == std::string(".map")) + myMap.saveMapBin(filename); + else + Algo::Export::exportOFF(myMap, position, filename.c_str(), allDarts) ; +} + + +void Viewer::storeVerticesInfo() +{ + CellMarker mv(myMap,VERTEX); + for (Dart d=myMap.begin(); d!=myMap.end(); myMap.next(d)) + { + if (!mv.isMarked(d)) + { + mv.mark(d); + std::stringstream ss; + ss << d << " : "<< position[d]; + m_strings->addString(ss.str(),position[d]); + } + } +} + + void Viewer::slot_drawVertices(bool b) { m_drawVertices = b ; @@ -233,6 +273,7 @@ void Viewer::slot_drawVertices(bool b) void Viewer::slot_verticesSize(int i) { vertexScaleFactor = i / 500.0f ; + m_strings->setScale(0.02f*i); updateGL() ; } diff --git a/Apps/Examples/viewer.h b/Apps/Examples/viewer.h index beea4764ee49af0d0d950de21d0a4d9b506f0095..6f6573d11e5d77337d2474a08c3a598ef4c120f0 100644 --- a/Apps/Examples/viewer.h +++ b/Apps/Examples/viewer.h @@ -44,6 +44,7 @@ #include "Utils/Shaders/shaderSimpleColor.h" #include "Utils/Shaders/shaderVectorPerVertex.h" #include "Utils/pointSprite.h" +#include "Utils/text3d.h" #include "Algo/Geometry/boundingbox.h" #include "Algo/Geometry/normal.h" @@ -102,6 +103,7 @@ public: Utils::ShaderVectorPerVertex* m_vectorShader ; Utils::ShaderSimpleColor* m_simpleColorShader ; Utils::PointSprite* m_pointSprite ; + Utils::Strings3D* m_strings; Viewer() ; @@ -113,6 +115,11 @@ public: void cb_Save() ; void importMesh(std::string& filename) ; + void exportMesh(std::string& filename); + +protected: + void storeVerticesInfo(); + public slots: void slot_drawVertices(bool b) ; diff --git a/Apps/Tuto/tuto5.cpp b/Apps/Tuto/tuto5.cpp index 12a2cce799313c38cc06ee61accf32e22639190f..c8daaa94c80abaeca4b05991f9806c2cf356253d 100644 --- a/Apps/Tuto/tuto5.cpp +++ b/Apps/Tuto/tuto5.cpp @@ -93,6 +93,7 @@ void MyQT::animate() // transfoMatrix() = glm::rotate(transfoMatrix(), 0.5f, glm::vec3(0.5773f,0.5773f,0.5773f)); transfoRotate( 0.5f, 0.5773f,0.5773f,0.5773f); updateGLMatrices(); + updateGL(); } diff --git a/Apps/Tuto/tuto5.h b/Apps/Tuto/tuto5.h index 08d83be12b94a036eb7b01d608a2c5e1bbf57465..a5c71438b8e3b6dbe330822aa3c5dde088b03a81 100644 --- a/Apps/Tuto/tuto5.h +++ b/Apps/Tuto/tuto5.h @@ -39,7 +39,7 @@ #include "Geometry/vector_gen.h" #include "Algo/Geometry/boundingbox.h" #include "Algo/Render/GL2/mapRender.h" -#include "Utils/Shaders/shaderSimpleColor.h" + #include "Algo/Render/GL2/topo3Render.h" @@ -47,6 +47,7 @@ #include "Utils/text3d.h" #include "Utils/pointSprite.h" +#include "Utils/Shaders/shaderSimpleColor.h" #include "Utils/Shaders/shaderVectorPerVertex.h" #include "Utils/cgognStream.h" diff --git a/include/Algo/ImplicitHierarchicalMesh/ihm3.hpp b/include/Algo/ImplicitHierarchicalMesh/ihm3.hpp index 0ad9e5e040fc64e5ee09ab9e502542bf51c76604..efe2f4e0c3cdbc2386ee6d2fbf70f26d588242d1 100644 --- a/include/Algo/ImplicitHierarchicalMesh/ihm3.hpp +++ b/include/Algo/ImplicitHierarchicalMesh/ihm3.hpp @@ -514,6 +514,7 @@ inline unsigned int ImplicitHierarchicalMap3::edgeLevel(Dart d) return r; } + /*************************************************** * ATTRIBUTE HANDLER * ***************************************************/ diff --git a/include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp b/include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp index 39f7c71f136e08949d5f52133a590845f7b49875..11ce326808a9352b0dccc14ce28b75398111f58a 100644 --- a/include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp +++ b/include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp @@ -354,8 +354,8 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, typename PFP::TVEC3& dd = map.phi1(map.phi1(map.phi1(ne))); map.splitFace(ne, dd) ; - //unsigned int idface = map.getNewFaceId(); - //map.setFaceId(dd,idface, FACE); + unsigned int idface = map.getNewFaceId(); + map.setFaceId(dd,idface, FACE); newEdges.push_back(map.phi1(dd)); diff --git a/include/Algo/Render/GL2/topoRender.hpp b/include/Algo/Render/GL2/topoRender.hpp index 311a6a6142dcf7b88aed33cf2017655bd31bad7f..6020d88d21c828fddaf15e73ec230e9be8fd1b95 100644 --- a/include/Algo/Render/GL2/topoRender.hpp +++ b/include/Algo/Render/GL2/topoRender.hpp @@ -366,9 +366,9 @@ void TopoRender::setDartsIdColor(typename PFP::MAP& map, const FunctorSelect& go for (Dart d = map.begin(); d != map.end(); map.next(d)) { - if (nb < m_nbDarts) + if (good(d)) { - if (good(d)) + if (nb < m_nbDarts) { float r,g,b; dartToCol(d, r,g,b); @@ -382,11 +382,11 @@ void TopoRender::setDartsIdColor(typename PFP::MAP& map, const FunctorSelect& go nb++; } - } - else - { - CGoGNerr << "Error buffer too small for color picking (change the good parameter ?)" << CGoGNendl; - d = map.end(); + else + { + CGoGNerr << "Error buffer too small for color picking (change the good parameter ?)" << CGoGNendl; + d = map.end(); + } } } glUnmapBuffer(GL_ARRAY_BUFFER); diff --git a/src/Algo/ImplicitHierarchicalMesh/ihm3.cpp b/src/Algo/ImplicitHierarchicalMesh/ihm3.cpp index ebd2ae1606d79989be0b19a0aa0780db20a2c4bc..9c44652eb7be28f80109ecc1ec9aa734c7782156 100644 --- a/src/Algo/ImplicitHierarchicalMesh/ihm3.cpp +++ b/src/Algo/ImplicitHierarchicalMesh/ihm3.cpp @@ -509,11 +509,10 @@ Dart ImplicitHierarchicalMap3::volumeOldestDart(Dart d) std::vector visitedFaces; // Faces that are traversed visitedFaces.reserve(512); visitedFaces.push_back(d); // Start with the face of d - std::vector::iterator face; // For every face added to the list //the oldest dart from a volume is the oldest dart from all faces of this volume - mark.markOrbit(FACE, d) ; + mark.markOrbit(ORIENTED_FACE, d) ; for(unsigned int i = 0; i < visitedFaces.size(); ++i) { diff --git a/src/Topology/map/map3.cpp b/src/Topology/map/map3.cpp index f0699aafc4d15d928b3b28d3c03705cc3cfb772d..9f9316e18022790bd0d31421d890c3f59fa1e39f 100644 --- a/src/Topology/map/map3.cpp +++ b/src/Topology/map/map3.cpp @@ -656,13 +656,13 @@ bool Map3::isBoundaryVolume(Dart d) DartMarkerStore mark(*this); // Lock a marker std::vector visitedFaces ; - visitedFaces.reserve(128) ; + visitedFaces.reserve(512) ; visitedFaces.push_back(d) ; mark.markOrbit(ORIENTED_FACE, d) ; for(unsigned int i = 0; i < visitedFaces.size(); ++i) { - if (isBoundaryMarked(phi3(visitedFaces[i]))) + if(isBoundaryMarked(phi3(visitedFaces[i]))) return true ; Dart e = visitedFaces[i] ;