Commit 9584150d authored by Lionel Untereiner's avatar Lionel Untereiner

Merge cgogn.unistra.fr:~untereiner/CGoGN

parents ce12a6a6 b5d8570a
...@@ -31,6 +31,7 @@ Viewer::Viewer() : ...@@ -31,6 +31,7 @@ Viewer::Viewer() :
m_drawFaces(true), m_drawFaces(true),
m_drawNormals(false), m_drawNormals(false),
m_drawTopo(false), m_drawTopo(false),
m_drawBoundaryTopo(true),
m_render(NULL), m_render(NULL),
m_phongShader(NULL), m_phongShader(NULL),
m_flatShader(NULL), m_flatShader(NULL),
...@@ -78,8 +79,6 @@ void Viewer::cb_initGL() ...@@ -78,8 +79,6 @@ void Viewer::cb_initGL()
{ {
Utils::GLSLShader::setCurrentOGLVersion(2) ; Utils::GLSLShader::setCurrentOGLVersion(2) ;
setFocal(5.0f) ;
m_render = new Algo::Render::GL2::MapRender() ; m_render = new Algo::Render::GL2::MapRender() ;
m_topoRender = new Algo::Render::GL2::TopoRender() ; m_topoRender = new Algo::Render::GL2::TopoRender() ;
...@@ -109,7 +108,7 @@ void Viewer::cb_initGL() ...@@ -109,7 +108,7 @@ void Viewer::cb_initGL()
m_simpleColorShader = new Utils::ShaderSimpleColor() ; m_simpleColorShader = new Utils::ShaderSimpleColor() ;
m_simpleColorShader->setAttributePosition(m_positionVBO) ; m_simpleColorShader->setAttributePosition(m_positionVBO) ;
Geom::Vec4f c(0.1f, 0.1f, 0.1f, 1.0f) ; Geom::Vec4f c(0.0f, 0.0f, 0.0f, 1.0f) ;
m_simpleColorShader->setColor(c) ; m_simpleColorShader->setColor(c) ;
m_pointSprite = new Utils::PointSprite() ; m_pointSprite = new Utils::PointSprite() ;
...@@ -231,7 +230,7 @@ void Viewer::importMesh(std::string& filename) ...@@ -231,7 +230,7 @@ void Viewer::importMesh(std::string& filename)
m_render->initPrimitives<PFP>(myMap, Algo::Render::GL2::LINES) ; m_render->initPrimitives<PFP>(myMap, Algo::Render::GL2::LINES) ;
m_render->initPrimitives<PFP>(myMap, Algo::Render::GL2::TRIANGLES) ; m_render->initPrimitives<PFP>(myMap, Algo::Render::GL2::TRIANGLES) ;
m_topoRender->updateData<PFP>(myMap, position, 0.85f, 0.85f) ; m_topoRender->updateData<PFP>(myMap, position, 0.85f, 0.85f, m_drawBoundaryTopo) ;
bb = Algo::Geometry::computeBoundingBox<PFP>(myMap, position) ; bb = Algo::Geometry::computeBoundingBox<PFP>(myMap, position) ;
normalBaseSize = bb.diagSize() / 100.0f ; normalBaseSize = bb.diagSize() / 100.0f ;
...@@ -294,6 +293,17 @@ void Viewer::slot_drawEdges(bool b) ...@@ -294,6 +293,17 @@ void Viewer::slot_drawEdges(bool b)
void Viewer::slot_drawFaces(bool b) void Viewer::slot_drawFaces(bool b)
{ {
m_drawFaces = b ; m_drawFaces = b ;
if (b)
{
Geom::Vec4f c(0.0f, 0.0f, 0.0f, 1.0f) ;
m_simpleColorShader->setColor(c) ;
}
else
{
Geom::Vec4f c(0.9f, 0.9f, 0.1f, 1.0f) ;
m_simpleColorShader->setColor(c) ;
}
updateGL() ; updateGL() ;
} }
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
#include <iostream> #include <iostream>
#include "Utils/Qt/qtSimple.h" //#include "Utils/Qt/qtSimple.h"
#include "Utils/Qt/qtQGLV.h"
#include "ui_viewer.h" #include "ui_viewer.h"
#include "Utils/Qt/qtui.h" #include "Utils/Qt/qtui.h"
...@@ -65,7 +66,8 @@ struct PFP: public PFP_STANDARD ...@@ -65,7 +66,8 @@ struct PFP: public PFP_STANDARD
typedef PFP::MAP MAP ; typedef PFP::MAP MAP ;
typedef PFP::VEC3 VEC3 ; typedef PFP::VEC3 VEC3 ;
class Viewer : public Utils::QT::SimpleQT //class Viewer : public Utils::QT::SimpleQT
class Viewer : public Utils::QT::SimpleQGLV
{ {
Q_OBJECT Q_OBJECT
...@@ -96,6 +98,7 @@ public: ...@@ -96,6 +98,7 @@ public:
bool m_drawFaces ; bool m_drawFaces ;
bool m_drawNormals ; bool m_drawNormals ;
bool m_drawTopo ; bool m_drawTopo ;
bool m_drawBoundaryTopo;
VertexAttribute<VEC3> position ; VertexAttribute<VEC3> position ;
VertexAttribute<VEC3> normal ; VertexAttribute<VEC3> normal ;
......
...@@ -357,8 +357,10 @@ void MyQT::cb_Open() ...@@ -357,8 +357,10 @@ void MyQT::cb_Open()
void MyQT::cb_Save() void MyQT::cb_Save()
{ {
std::string filename = selectFileSave("Export SVG file ",".","(*.off)"); std::string filename = selectFileSave("Export Map file ",".","(*.map)");
Algo::Surface::Export::exportOFF<PFP>(myMap,position,filename.c_str()); //Algo::Surface::Export::exportOFF<PFP>(myMap,position,filename.c_str());
if(!myMap.saveMapBin(filename))
std::cout << "could not save file : " << filename << std::endl;
} }
void MyQT::importMesh(std::string& filename) void MyQT::importMesh(std::string& filename)
......
...@@ -259,9 +259,20 @@ void MyQT::createMap(int n) ...@@ -259,9 +259,20 @@ void MyQT::createMap(int n)
position = myMap.getAttribute<VEC3, VERTEX>("position"); position = myMap.getAttribute<VEC3, VERTEX>("position");
if (!position.isValid()) if (!position.isValid())
position = myMap.addAttribute<VEC3, VERTEX>("position"); position = myMap.addAttribute<VEC3, VERTEX>("position");
Algo::Volume::Modelisation::Primitive3D<PFP> prim(myMap, position); // Algo::Volume::Modelisation::Primitive3D<PFP> prim(myMap, position);
prim.hexaGrid_topo(n,n,n); // prim.hexaGrid_topo(n,n,n);
prim.embedHexaGrid(1.0f,1.0f,1.0f); // prim.embedHexaGrid(1.0f,1.0f,1.0f);
// Algo::Surface::Modelisation::Polyhedron<PFP> poly(myMap, position);
// poly.cylinder_topo(6,1,true,true);
// poly.embedCylinder(6.0,6.0,5.0);
// myMap.closeMap();
Dart d = Algo::Surface::Modelisation::embedPrism<PFP>(myMap, position, 5, true,6.0,6.0,5.0);
Dart d2 = Algo::Surface::Modelisation::embedPyramid<PFP>(myMap, position, 4, true,6.0,5.0);
myMap.sewVolumes(myMap.phi2(d),d2);
position[myMap.phi_1(myMap.phi2(d2))] += VEC3(9.0,-5.0,-2.5);
myMap.check(); myMap.check();
...@@ -565,8 +576,8 @@ void MyQT::cb_keyPress(int keycode) ...@@ -565,8 +576,8 @@ void MyQT::cb_keyPress(int keycode)
updateGL(); updateGL();
break; break;
case 'W': case 'W':
m_ex1 = 0.9f; m_ex1 = 0.95f;
m_ex2 = 0.9f; m_ex2 = 0.95f;
m_render_topo->updateData<PFP>(myMap, position, m_ex1,m_ex2,m_ex3/*, nb*/); m_render_topo->updateData<PFP>(myMap, position, m_ex1,m_ex2,m_ex3/*, nb*/);
updateGL(); updateGL();
break; break;
......
...@@ -64,7 +64,7 @@ public: ...@@ -64,7 +64,7 @@ public:
virtual void keyPress(View* view, QKeyEvent* event) {} virtual void keyPress(View* view, QKeyEvent* event) {}
virtual void keyRelease(View* view, QKeyEvent* event) {} virtual void keyRelease(View* view, QKeyEvent* event) {}
virtual void mousePress(View* view, QMouseEvent* event) {} virtual void mousePress(View* view, QMouseEvent* event);
virtual void mouseRelease(View* view, QMouseEvent* event) {} virtual void mouseRelease(View* view, QMouseEvent* event) {}
virtual void mouseMove(View* view, QMouseEvent* event) {} virtual void mouseMove(View* view, QMouseEvent* event) {}
virtual void wheelEvent(View* view, QWheelEvent* event) {} virtual void wheelEvent(View* view, QWheelEvent* event) {}
...@@ -100,6 +100,9 @@ public slots: ...@@ -100,6 +100,9 @@ public slots:
void attributeModified(unsigned int orbit, QString nameAttr); void attributeModified(unsigned int orbit, QString nameAttr);
void connectivityModified(); void connectivityModified();
signals:
void dartSelected(Dart d);
}; };
} // namespace SCHNApps } // namespace SCHNApps
......
...@@ -86,6 +86,22 @@ void RenderTopoSurfacePlugin::redraw(View* view) ...@@ -86,6 +86,22 @@ void RenderTopoSurfacePlugin::redraw(View* view)
} }
} }
void RenderTopoSurfacePlugin::mousePress(View* view, QMouseEvent* event)
{
// if (Shift())
// {
// ParameterSet* params = h_viewParams[view];
// m_renderTopo->updateData<PFP>(myMap, position, m_coeff_topo_explod[0], m_coeff_topo_explod[1], m_coeff_topo_explod[2], *m_selNoBoundary) ;
// Dart d = m_renderTopo->picking<PFP>(myMap, x, y, *m_selNoBoundary);
// if (d != Dart::nil())
// {
// emit(dartSelected(d);
// }
// }
}
void RenderTopoSurfacePlugin::viewLinked(View* view, Plugin* plugin) void RenderTopoSurfacePlugin::viewLinked(View* view, Plugin* plugin)
{ {
if(plugin == this) if(plugin == this)
......
...@@ -37,7 +37,7 @@ namespace Algo ...@@ -37,7 +37,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
enum ApproximatorType enum ApproximatorType
...@@ -144,9 +144,9 @@ public: ...@@ -144,9 +144,9 @@ public:
}; };
} // namespace DecimationVolumes } // namespace Decimation
} } // namespace Volume
} // namespace Algo } // namespace Algo
......
...@@ -39,7 +39,7 @@ namespace Algo ...@@ -39,7 +39,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
template <typename PFP> template <typename PFP>
...@@ -51,9 +51,9 @@ void decimate( ...@@ -51,9 +51,9 @@ void decimate(
unsigned int percentWantedVertices unsigned int percentWantedVertices
); );
} //namespace DecimationVolumes } //namespace Decimation
} } //namesapce Volume
} //namespace Algo } //namespace Algo
......
...@@ -31,7 +31,7 @@ namespace Algo ...@@ -31,7 +31,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
template <typename PFP> template <typename PFP>
...@@ -56,10 +56,10 @@ void decimate(typename PFP::MAP& map, SelectorType s, ApproximatorType a, ...@@ -56,10 +56,10 @@ void decimate(typename PFP::MAP& map, SelectorType s, ApproximatorType a,
switch(s) switch(s)
{ {
case S_MapOrder : case S_MapOrder :
selector = new Algo::DecimationVolumes::EdgeSelector_MapOrder<PFP>(map, position, approximators) ; selector = new Algo::Volume::Decimation::EdgeSelector_MapOrder<PFP>(map, position, approximators) ;
break ; break ;
case S_Random : case S_Random :
selector = new Algo::DecimationVolumes::EdgeSelector_Random<PFP>(map, position, approximators) ; selector = new Algo::Volume::Decimation::EdgeSelector_Random<PFP>(map, position, approximators) ;
break ; break ;
default: default:
CGoGNout << "not yet implemented" << CGoGNendl; CGoGNout << "not yet implemented" << CGoGNendl;
...@@ -122,9 +122,9 @@ void decimate(typename PFP::MAP& map, SelectorType s, ApproximatorType a, ...@@ -122,9 +122,9 @@ void decimate(typename PFP::MAP& map, SelectorType s, ApproximatorType a,
delete (*it) ; delete (*it) ;
} }
} //namespace DecimationVolumes } //namespace Decimation
} } //namespace Volume
} //namespace Algo } //namespace Algo
......
...@@ -15,7 +15,7 @@ namespace Algo ...@@ -15,7 +15,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
/* /*
...@@ -186,9 +186,9 @@ public: ...@@ -186,9 +186,9 @@ public:
} //end namespace DecimationVolumes } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
......
...@@ -35,7 +35,7 @@ namespace Algo ...@@ -35,7 +35,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
/************************************************************************************ /************************************************************************************
* MAP ORDER * * MAP ORDER *
...@@ -323,7 +323,7 @@ void EdgeSelector_SG98<PFP>::computeEdgeInfo(Dart d, EdgeInfo& einfo) ...@@ -323,7 +323,7 @@ void EdgeSelector_SG98<PFP>::computeEdgeInfo(Dart d, EdgeInfo& einfo)
// einfo.valid = true ; // einfo.valid = true ;
} }
} //end namespace DecimationVolumique } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
} //end namespace CGoGN } //end namespace CGoGN
...@@ -36,7 +36,7 @@ namespace Algo ...@@ -36,7 +36,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
template <typename PFP> template <typename PFP>
...@@ -78,9 +78,9 @@ public: ...@@ -78,9 +78,9 @@ public:
} ; } ;
} //namespace DecimationVolumes } //namespace Decimation
} } //namespace Volume
} //namespace Algo } //namespace Algo
......
...@@ -34,7 +34,7 @@ namespace Algo ...@@ -34,7 +34,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
/************************************************************************************ /************************************************************************************
...@@ -122,9 +122,9 @@ void Approximator_HalfCollapse<PFP>::approximate(Dart d) ...@@ -122,9 +122,9 @@ void Approximator_HalfCollapse<PFP>::approximate(Dart d)
// } // }
} }
} //end namespace DecimationVolumes } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
......
...@@ -37,7 +37,7 @@ namespace Algo ...@@ -37,7 +37,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
enum OperatorType enum OperatorType
...@@ -179,9 +179,9 @@ public: ...@@ -179,9 +179,9 @@ public:
}; };
} //end namespace DecimationVolumes } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
......
...@@ -31,7 +31,7 @@ namespace Algo ...@@ -31,7 +31,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
/************************************************************************************ /************************************************************************************
...@@ -161,9 +161,9 @@ void OperatorList<PFP>::refine(VertexAttribute<typename PFP::VEC3>& position) ...@@ -161,9 +161,9 @@ void OperatorList<PFP>::refine(VertexAttribute<typename PFP::VEC3>& position)
} }
} //end namespace DecimationVolumes } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
......
...@@ -13,7 +13,7 @@ namespace Algo ...@@ -13,7 +13,7 @@ namespace Algo
namespace Volume namespace Volume
{ {
namespace DecimationVolumes namespace Decimation
{ {
enum SelectorType enum SelectorType
...@@ -62,9 +62,9 @@ public: ...@@ -62,9 +62,9 @@ public:
virtual void updateWithoutCollapse() = 0; virtual void updateWithoutCollapse() = 0;
}; };
} //end namespace DecimationVolumes } //end namespace Decimation
} } //namespace Volume
} //end namespace Algo } //end namespace Algo
......
...@@ -60,7 +60,21 @@ public: ...@@ -60,7 +60,21 @@ public:
static const unsigned int DIMENSION = 2 ; static const unsigned int DIMENSION = 2 ;
void init() ; //!
/*!
*
*/
void update_topo_shortcuts();
void initImplicitProperties() ;
/**
* clear the map
* @param remove attrib remove attribute (not only clear the content)
*/
void clear(bool removeAttrib);
/*************************************************** /***************************************************
* ATTRIBUTES MANAGEMENT * * ATTRIBUTES MANAGEMENT *
......
...@@ -66,6 +66,17 @@ AttributeHandler_IHM<T, ORBIT> ImplicitHierarchicalMap::getAttribute(const std:: ...@@ -66,6 +66,17 @@ AttributeHandler_IHM<T, ORBIT> ImplicitHierarchicalMap::getAttribute(const std::
return AttributeHandler_IHM<T, ORBIT>(this, h.getDataVector()) ; return AttributeHandler_IHM<T, ORBIT>(this, h.getDataVector()) ;
} }
inline void ImplicitHierarchicalMap::update_topo_shortcuts()
{
Map2::update_topo_shortcuts();
m_dartLevel = Map2::getAttribute<unsigned int, DART>("dartLevel") ;
m_edgeId = Map2::getAttribute<unsigned int, DART>("edgeId") ;
//AttributeContainer& cont = m_attribs[DART] ;
//m_nextLevelCell = cont.getDataVector<unsigned int>(cont.getAttributeIndex("nextLevelCell")) ;
}
/*************************************************** /***************************************************
* MAP TRAVERSAL * * MAP TRAVERSAL *
***************************************************/ ***************************************************/
...@@ -278,7 +289,6 @@ inline unsigned int ImplicitHierarchicalMap::getCurrentLevel() ...@@ -278,7 +289,6 @@ inline unsigned int ImplicitHierarchicalMap::getCurrentLevel()
inline void ImplicitHierarchicalMap::setCurrentLevel(unsigned int l) inline void ImplicitHierarchicalMap::setCurrentLevel(unsigned int l)
{ {
assert(l >= 0 || !"Trying to set current level to a negative value") ;
m_curLevel = l ; m_curLevel = l ;
} }
......
...@@ -80,7 +80,7 @@ inline void ImplicitHierarchicalMap3::update_topo_shortcuts() ...@@ -80,7 +80,7 @@ inline void ImplicitHierarchicalMap3::update_topo_shortcuts()
/*************************************************** /***************************************************
* MAP TRAVERSAL * * MAP TRAVERSAL *
***************************************************/ ***************************************************/