Commit 6d1a2ce6 authored by Sylvain Thery's avatar Sylvain Thery

Merge branch 'schnapps_update' into 'develop'

Schnapps update

See merge request !2
parents 208dd6f9 fd256f83
...@@ -2,4 +2,5 @@ ...@@ -2,4 +2,5 @@
CMakeLists.txt.user CMakeLists.txt.user
bin/ bin/
ThirdParty/bin/ ThirdParty/bin/
SCHNApps/bin SCHNApps/bin/
\ No newline at end of file windows_dependencies/
...@@ -38,16 +38,14 @@ MapHandlerGen* Surface_Import_Plugin::importMeshFromFile(const QString& nameOfFi ...@@ -38,16 +38,14 @@ MapHandlerGen* Surface_Import_Plugin::importMeshFromFile(const QString& nameOfFi
QFileInfo fi(fileName); QFileInfo fi(fileName);
if(fi.exists()) if(fi.exists())
{ {
pythonRecording("importMeshFromFile", fi.baseName(), fileName); MapHandlerGen* mhg = m_schnapps->addMap(SCHNApps::forceASCII(fi.baseName()), 2);
MapHandlerGen* mhg = m_schnapps->addMap(fi.baseName(), 2);
if(mhg) if(mhg)
{ {
MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(mhg); MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(mhg);
PFP2::MAP* map = mh->getMap(); PFP2::MAP* map = mh->getMap();
std::vector<std::string> attrNames; std::vector<std::string> attrNames;
Algo::Surface::Import::importMesh<PFP2>(*map, fileName.toStdString(), attrNames); Algo::Surface::Import::importMesh<PFP2>(*map, SCHNApps::niceStdString(fileName), attrNames);
for (unsigned int orbit = VERTEX; orbit <= VOLUME; orbit++) for (unsigned int orbit = VERTEX; orbit <= VOLUME; orbit++)
{ {
...@@ -60,6 +58,7 @@ MapHandlerGen* Surface_Import_Plugin::importMeshFromFile(const QString& nameOfFi ...@@ -60,6 +58,7 @@ MapHandlerGen* Surface_Import_Plugin::importMeshFromFile(const QString& nameOfFi
mhg->registerAttribute(orbit, QString::fromStdString(names[i]), QString::fromStdString(types[i])); mhg->registerAttribute(orbit, QString::fromStdString(names[i]), QString::fromStdString(types[i]));
} }
} }
pythonRecording("importMeshFromFile", mhg->getName(), fileName);
return mhg; return mhg;
} }
else else
...@@ -84,9 +83,7 @@ MapHandlerGen* Surface_Import_Plugin::importImageFromFile(const QString& nameOfF ...@@ -84,9 +83,7 @@ MapHandlerGen* Surface_Import_Plugin::importImageFromFile(const QString& nameOfF
QFileInfo fi(fileName); QFileInfo fi(fileName);
if(fi.exists()) if(fi.exists())
{ {
pythonRecording("importImageFromFile", fi.baseName(), fileName); MapHandlerGen* mhg = m_schnapps->addMap(SCHNApps::forceASCII(fi.baseName()), 2);
MapHandlerGen* mhg = m_schnapps->addMap(fi.baseName(), 2);
if(mhg) if(mhg)
{ {
MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(mhg); MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(mhg);
...@@ -123,6 +120,7 @@ MapHandlerGen* Surface_Import_Plugin::importImageFromFile(const QString& nameOfF ...@@ -123,6 +120,7 @@ MapHandlerGen* Surface_Import_Plugin::importImageFromFile(const QString& nameOfF
mh->registerAttribute(color); mh->registerAttribute(color);
} }
pythonRecording("importImageFromFile", mhg->getName(), fileName);
return mhg; return mhg;
} }
else else
......
...@@ -14,10 +14,30 @@ ...@@ -14,10 +14,30 @@
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="5" column="0" colspan="2"> <item row="9" column="0" colspan="2">
<widget class="QPushButton" name="button_clear"> <widget class="QSlider" name="slider_verticesScaleFactor">
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Clear current selection</string> <string>Normal :</string>
</property> </property>
</widget> </widget>
</item> </item>
...@@ -30,10 +50,10 @@ ...@@ -30,10 +50,10 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="6" column="0" colspan="2">
<widget class="QLabel" name="label"> <widget class="QPushButton" name="button_clear">
<property name="text"> <property name="text">
<string>Normal :</string> <string>Clear current selection</string>
</property> </property>
</widget> </widget>
</item> </item>
...@@ -62,40 +82,6 @@ ...@@ -62,40 +82,6 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="2">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QSlider" name="slider_verticesScaleFactor">
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Position :</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="combo_positionAttribute"> <widget class="QComboBox" name="combo_positionAttribute">
<property name="sizePolicy"> <property name="sizePolicy">
...@@ -111,10 +97,10 @@ ...@@ -111,10 +97,10 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="7" column="0" colspan="2"> <item row="5" column="0" colspan="2">
<widget class="QLabel" name="label_4"> <widget class="Line" name="line_2">
<property name="text"> <property name="orientation">
<string>Selected vertice size</string> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
...@@ -125,14 +111,35 @@ ...@@ -125,14 +111,35 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0" colspan="2"> <item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Position :</string>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Selected vertice size</string>
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
<string>Selected vertices color</string> <string>Selected vertices color</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="1"> <item row="7" column="0" colspan="2">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="15" column="1">
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
...@@ -145,13 +152,35 @@ ...@@ -145,13 +152,35 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="10" column="0" colspan="2"> <item row="11" column="0" colspan="2">
<widget class="ColorComboBox" name="combo_color"/> <widget class="ColorComboBox" name="combo_color"/>
</item> </item>
<item row="6" column="0" colspan="2"> <item row="4" column="1">
<widget class="Line" name="line_3"> <widget class="QDoubleSpinBox" name="spin_angle_radius">
<property name="orientation"> <property name="toolTip">
<enum>Qt::Horizontal</enum> <string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_angle_radius">
<property name="text">
<string/>
</property> </property>
</widget> </widget>
</item> </item>
......
...@@ -24,7 +24,7 @@ Surface_Selection_Plugin::Surface_Selection_Plugin() : ...@@ -24,7 +24,7 @@ Surface_Selection_Plugin::Surface_Selection_Plugin() :
m_selectedFaces_dirty(false), m_selectedFaces_dirty(false),
m_selectionRadiusBase(1), m_selectionRadiusBase(1),
m_selectionRadiusCoeff(1), m_selectionRadiusCoeff(1),
m_normalAngleThreshold(10) m_normalAngleThreshold(float(10*M_PI/180))
{} {}
bool Surface_Selection_Plugin::enable() bool Surface_Selection_Plugin::enable()
...@@ -89,8 +89,11 @@ void Surface_Selection_Plugin::disable() ...@@ -89,8 +89,11 @@ void Surface_Selection_Plugin::disable()
delete m_selectionSphereVBO; delete m_selectionSphereVBO;
disconnect(m_schnapps, SIGNAL(selectedViewChanged(View*, View*)), this, SLOT(selectedViewChanged(View*, View*))); //disconnect(m_schnapps, SIGNAL(selectedViewChanged(View*, View*)), this, SLOT(selectedViewChanged(View*, View*)));
disconnect(m_schnapps, SIGNAL(mapRemoved(MapHandlerGen*)), this, SLOT(mapRemoved(MapHandlerGen*))); //disconnect(m_schnapps, SIGNAL(mapRemoved(MapHandlerGen*)), this, SLOT(mapRemoved(MapHandlerGen*)));
disconnect(m_schnapps, SIGNAL(selectedMapChanged(MapHandlerGen*, MapHandlerGen*)), this, SLOT(selectedMapChanged(MapHandlerGen*, MapHandlerGen*)));
disconnect(m_schnapps, SIGNAL(selectedCellSelectorChanged(CellSelectorGen*)), this, SLOT(updateSelectedCellsRendering()));
} }
void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
...@@ -115,13 +118,11 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -115,13 +118,11 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
{ {
if (m_selectedVertices_dirty) if (m_selectedVertices_dirty)
updateSelectedCellsRendering(); updateSelectedCellsRendering();
m_pointSprite->setAttributePosition(m_selectedVerticesVBO); m_pointSprite->setAttributePosition(m_selectedVerticesVBO);
const QColor& col = p.color; const QColor& col = p.color;
m_pointSprite->setColor(Geom::Vec4f(col.redF(), col.greenF(), col.blueF(), 0.0f)); m_pointSprite->setColor(Geom::Vec4f(col.redF(), col.greenF(), col.blueF(), 0.0f));
m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f)); m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f));
m_pointSprite->setSize(p.basePSradius*p.verticesScaleFactor); m_pointSprite->setSize(p.basePSradius*p.verticesScaleFactor);
m_pointSprite->enableVertexAttribs(); m_pointSprite->enableVertexAttribs();
glDrawArrays(GL_POINTS, 0, selector->getNbSelectedCells()); glDrawArrays(GL_POINTS, 0, selector->getNbSelectedCells());
m_pointSprite->disableVertexAttribs(); m_pointSprite->disableVertexAttribs();
...@@ -132,11 +133,9 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -132,11 +133,9 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
std::vector<PFP2::VEC3> selectionPoint; std::vector<PFP2::VEC3> selectionPoint;
selectionPoint.push_back(p.positionAttribute[m_selectingVertex]); selectionPoint.push_back(p.positionAttribute[m_selectingVertex]);
m_selectionSphereVBO->updateData(selectionPoint); m_selectionSphereVBO->updateData(selectionPoint);
m_pointSprite->setAttributePosition(m_selectionSphereVBO); m_pointSprite->setAttributePosition(m_selectionSphereVBO);
m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f)); m_pointSprite->setColor(CGoGN::Geom::Vec4f(0.0f, 0.0f, 1.0f, 0.5f));
m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f)); m_pointSprite->setLightPosition(CGoGN::Geom::Vec3f(0.0f, 0.0f, 1.0f));
switch(p.selectionMethod) switch(p.selectionMethod)
{ {
case NormalAngle : case NormalAngle :
...@@ -147,7 +146,6 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map) ...@@ -147,7 +146,6 @@ void Surface_Selection_Plugin::drawMap(View* view, MapHandlerGen* map)
m_pointSprite->setSize(m_selectionRadiusBase * m_selectionRadiusCoeff); m_pointSprite->setSize(m_selectionRadiusBase * m_selectionRadiusCoeff);
break; break;
} }
m_pointSprite->enableVertexAttribs(); m_pointSprite->enableVertexAttribs();
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
...@@ -502,14 +500,16 @@ void Surface_Selection_Plugin::wheelEvent(View* view, QWheelEvent* event) ...@@ -502,14 +500,16 @@ void Surface_Selection_Plugin::wheelEvent(View* view, QWheelEvent* event)
else else
m_selectionRadiusCoeff *= 1.1f; m_selectionRadiusCoeff *= 1.1f;
view->updateGL(); view->updateGL();
m_dockTab->spin_angle_radius->setValue(m_selectionRadiusBase * m_selectionRadiusCoeff);
break; break;
} }
case NormalAngle : { case NormalAngle : {
if(event->delta() > 0) if(event->delta() > 0)
m_normalAngleThreshold *= 0.9f; m_normalAngleThreshold -= CGoGN::PFP_SCHNAPPS::REAL(M_PI / 180);
else else
m_normalAngleThreshold *= 1.1f; m_normalAngleThreshold += CGoGN::PFP_SCHNAPPS::REAL(M_PI / 180);
// view->displayMessage(QString("Angle threshold : ") + m_normalAngleThreshold); // view->displayMessage(QString("Angle threshold : ") + m_normalAngleThreshold);
m_dockTab->spin_angle_radius->setValue(m_normalAngleThreshold/M_PI*180);
break; break;
} }
} }
...@@ -573,7 +573,6 @@ void Surface_Selection_Plugin::updateSelectedCellsRendering() ...@@ -573,7 +573,6 @@ void Surface_Selection_Plugin::updateSelectedCellsRendering()
m_selectedEdgesDrawer->newList(GL_COMPILE); m_selectedEdgesDrawer->newList(GL_COMPILE);
m_selectedEdgesDrawer->lineWidth(3.0f); m_selectedEdgesDrawer->lineWidth(3.0f);
// m_selectedEdgesDrawer->color3f(1.0f, 0.0f, 0.0f);
m_selectedEdgesDrawer->color3f(p.color.redF(), p.color.greenF(), p.color.blueF()); m_selectedEdgesDrawer->color3f(p.color.redF(), p.color.greenF(), p.color.blueF());
m_selectedEdgesDrawer->begin(GL_LINES); m_selectedEdgesDrawer->begin(GL_LINES);
for(std::vector<Edge>::const_iterator e = selectedCells.begin(); e != selectedCells.end(); ++e) for(std::vector<Edge>::const_iterator e = selectedCells.begin(); e != selectedCells.end(); ++e)
......
...@@ -43,6 +43,7 @@ void Surface_Selection_DockTab::positionAttributeChanged(int index) ...@@ -43,6 +43,7 @@ void Surface_Selection_DockTab::positionAttributeChanged(int index)
{ {
MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(map); MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(map);
m_plugin->h_parameterSet[map].positionAttribute = mh->getAttribute<PFP2::VEC3, VERTEX>(combo_positionAttribute->currentText()); m_plugin->h_parameterSet[map].positionAttribute = mh->getAttribute<PFP2::VEC3, VERTEX>(combo_positionAttribute->currentText());
m_plugin->updateSelectedCellsRendering();
m_plugin->pythonRecording("changePositionAttribute", "", map->getName(), combo_positionAttribute->currentText()); m_plugin->pythonRecording("changePositionAttribute", "", map->getName(), combo_positionAttribute->currentText());
} }
} }
...@@ -57,6 +58,7 @@ void Surface_Selection_DockTab::normalAttributeChanged(int index) ...@@ -57,6 +58,7 @@ void Surface_Selection_DockTab::normalAttributeChanged(int index)
{ {
MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(map); MapHandler<PFP2>* mh = static_cast<MapHandler<PFP2>*>(map);
m_plugin->h_parameterSet[map].normalAttribute = mh->getAttribute<PFP2::VEC3, VERTEX>(combo_normalAttribute->currentText()); m_plugin->h_parameterSet[map].normalAttribute = mh->getAttribute<PFP2::VEC3, VERTEX>(combo_normalAttribute->currentText());
m_plugin->updateSelectedCellsRendering();
m_plugin->pythonRecording("changeNormalAttribute", "", map->getName(), combo_normalAttribute->currentText()); m_plugin->pythonRecording("changeNormalAttribute", "", map->getName(), combo_normalAttribute->currentText());
} }
} }
...@@ -72,6 +74,26 @@ void Surface_Selection_DockTab::selectionMethodChanged(int index) ...@@ -72,6 +74,26 @@ void Surface_Selection_DockTab::selectionMethodChanged(int index)
m_plugin->h_parameterSet[map].selectionMethod = SelectionMethod(index); m_plugin->h_parameterSet[map].selectionMethod = SelectionMethod(index);
m_plugin->pythonRecording("changeSelectionMethod", "", map->getName(), index); m_plugin->pythonRecording("changeSelectionMethod", "", map->getName(), index);
} }
switch (index)
{
case 0:
this->spin_angle_radius->setHidden(true);
this->label_angle_radius->setText(QString());
break;
case 1:
this->spin_angle_radius->setHidden(false);
this->spin_angle_radius->setValue(m_plugin->m_selectionRadiusBase * m_plugin->m_selectionRadiusCoeff);
this->label_angle_radius->setText(QString("Radius:"));
break;
case 2:
this->spin_angle_radius->setHidden(false);
this->spin_angle_radius->setValue(m_plugin->m_normalAngleThreshold / M_PI * 180);
this->label_angle_radius->setText(QString("Angle:"));
break;
default:
break;
}
} }
} }
...@@ -204,6 +226,27 @@ void Surface_Selection_DockTab::updateMapParameters() ...@@ -204,6 +226,27 @@ void Surface_Selection_DockTab::updateMapParameters()
combo_color->setColor(p.color); combo_color->setColor(p.color);
slider_verticesScaleFactor->setValue(int(50.0*p.verticesScaleFactor)); slider_verticesScaleFactor->setValue(int(50.0*p.verticesScaleFactor));
switch (p.selectionMethod)
{
case 0:
this->spin_angle_radius->setHidden(true);
this->label_angle_radius->setText(QString());
break;
case 1:
this->spin_angle_radius->setHidden(false);
this->spin_angle_radius->setValue(m_plugin->m_selectionRadiusBase * m_plugin->m_selectionRadiusCoeff);
this->label_angle_radius->setText(QString("Radius:"));
break;
case 2:
this->spin_angle_radius->setHidden(false);
this->spin_angle_radius->setValue(m_plugin->m_normalAngleThreshold / M_PI * 180);
this->label_angle_radius->setText(QString("Angle:"));
break;
default:
break;
}
} }
b_updatingUI = false; b_updatingUI = false;
......
...@@ -106,6 +106,12 @@ public slots: ...@@ -106,6 +106,12 @@ public slots:
*/ */
bool isBBshown() const; bool isBBshown() const;
/**
* @brief [PYTHON] set color for drawing BB the bounding-box
* @param color color name (red,green,...) or color format #rrggbb
*/
void setBBColor(const QString& color);
/** /**
* @brief [PYTHON] choose the vertex attribute used to compute the bounding-box * @brief [PYTHON] choose the vertex attribute used to compute the bounding-box
* @param name name of attribute * @param name name of attribute
...@@ -347,7 +353,23 @@ public slots: ...@@ -347,7 +353,23 @@ public slots:
* @param sz scaling z factor * @param sz scaling z factor
*/ */
void setScaling(float sx, float sy, float sz); void setScaling(float sx, float sy, float sz);
/**
* @brief [PYTHON] Save the frame into a string
* @return the storage string
*/
QString frameToString();
/**
* @brief [PYTHON] restore frame from string storage
* @param frame the string with frame info
*/
void frameFromString(QString frame);
/**
* @brief reset the frame manipulator to its initial position
*/
void frameReset();
/********************************************************* /*********************************************************
* SIGNALS * SIGNALS
...@@ -385,6 +407,7 @@ protected: ...@@ -385,6 +407,7 @@ protected:
AttributeMultiVectorGen* m_bbVertexAttribute; AttributeMultiVectorGen* m_bbVertexAttribute;
float m_bbDiagSize; float m_bbDiagSize;
Utils::Drawer* m_bbDrawer; Utils::Drawer* m_bbDrawer;
glm::vec3 m_bbColor;
Algo::Render::GL2::MapRender* m_render; Algo::Render::GL2::MapRender* m_render;
Algo::Render::GL2::TopoRender* m_topoRender; Algo::Render::GL2::TopoRender* m_topoRender;
...@@ -409,11 +432,7 @@ public: ...@@ -409,11 +432,7 @@ public:
MapHandlerGen(name, s, map) MapHandlerGen(name, s, map)
{} {}
~MapHandler() ~MapHandler();
{
if (m_map)
delete m_map;
}
inline MAP* getMap() { return static_cast<MAP*>(m_map); } inline MAP* getMap() { return static_cast<MAP*>(m_map); }
......
...@@ -9,6 +9,8 @@ namespace CGoGN ...@@ -9,6 +9,8 @@ namespace CGoGN
namespace SCHNApps namespace SCHNApps
{ {
inline void MapHandlerGen::registerAttribute(const AttributeHandlerGen& ah) inline void MapHandlerGen::registerAttribute(const AttributeHandlerGen& ah)
{ {
m_attribs[ah.getOrbit()].insert(QString::fromStdString(ah.name()), QString::fromStdString(ah.typeName())); m_attribs[ah.getOrbit()].insert(QString::fromStdString(ah.name()), QString::fromStdString(ah.typeName()));
...@@ -31,6 +33,29 @@ inline QString MapHandlerGen::getAttributeTypeName(unsigned int orbit, const QSt ...@@ -31,6 +33,29 @@ inline QString MapHandlerGen::getAttributeTypeName(unsigned int orbit, const QSt
template <typename PFP>
MapHandler<PFP>::~MapHandler()
{
// clean the cell selector
for (unsigned int orbit = 0; orbit < NB_ORBITS; ++orbit)
{
foreach(CellSelectorGen* cs, m_cellSelectors[orbit])
{
if (cs)
{
emit(cellSelectorRemoved(orbit, cs->getName()));