diff --git a/SCHNApps/Plugins/renderTopoSurface/include/renderTopoSurfaceDockTab.h b/SCHNApps/Plugins/renderTopoSurface/include/renderTopoSurfaceDockTab.h new file mode 100644 index 0000000000000000000000000000000000000000..22cc081a9bde0d223b4fc21ff222263f8dc4cb76 --- /dev/null +++ b/SCHNApps/Plugins/renderTopoSurface/include/renderTopoSurfaceDockTab.h @@ -0,0 +1,42 @@ +#ifndef _RENDER_TOPO_DOCK_TAB_H_ +#define _RENDER_TOPO_DOCK_TAB_H_ + +#include "ui_renderTopoSurface.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +class Window; +class RenderTopoSurfacePlugin; +struct ParameterSet; + +class RenderTopoSurfaceDockTab : public QWidget, public Ui::RenderTopoSurfaceDockWidget +{ + Q_OBJECT + +public: + RenderTopoSurfaceDockTab(Window* w, RenderTopoSurfacePlugin* p); + +private: + Window* m_window; + RenderTopoSurfacePlugin* m_plugin; + ParameterSet* m_currentParams; + bool b_refreshingUI; + +public slots: + void refreshUI(ParameterSet* params); + + void selectedMapChanged(); + void positionAttributeChanged(int index); + void edgesScaleFactorChanged(int i); + void facesScaleFactorChanged(int i); +}; + +} // namespace SCHNApps + +} // namespace CGoGN + +#endif diff --git a/SCHNApps/Plugins/renderTopoSurface/src/renderTopoSurfaceDockTab.cpp b/SCHNApps/Plugins/renderTopoSurface/src/renderTopoSurfaceDockTab.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dd98c265f81f262be348cda64a1a5b5c332d27ae --- /dev/null +++ b/SCHNApps/Plugins/renderTopoSurface/src/renderTopoSurfaceDockTab.cpp @@ -0,0 +1,117 @@ +#include "renderTopoSurfaceDockTab.h" + +#include "renderTopoSurface.h" +#include "window.h" +#include "mapHandler.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +RenderTopoSurfaceDockTab::RenderTopoSurfaceDockTab(Window* w, RenderTopoSurfacePlugin* p) : + m_window(w), + m_plugin(p), + b_refreshingUI(false) +{ + setupUi(this); + + connect(mapList, SIGNAL(itemSelectionChanged()), this, SLOT(selectedMapChanged())); + + connect(combo_positionAttribute, SIGNAL(currentIndexChanged(int)), this, SLOT(positionAttributeChanged(int))); + + connect(slider_edgesScaleFactor, SIGNAL(valueChanged(int)), this, SLOT(edgesScaleFactorChanged(int))); + connect(slider_facesScaleFactor, SIGNAL(valueChanged(int)), this, SLOT(facesScaleFactorChanged(int))); +} + +void RenderTopoSurfaceDockTab::refreshUI(ParameterSet* params) +{ + m_currentParams = params; + + b_refreshingUI = true; + + mapList->clear(); + combo_positionAttribute->clear(); + + MapHandlerGen* mh = params->selectedMap; + + QHash::const_iterator i = params->perMap.constBegin(); + while (i != params->perMap.constEnd()) + { + mapList->addItem(i.key()); + if(mh != NULL && i.key() == mh->getName()) + { + QList item = mapList->findItems(mh->getName(), Qt::MatchExactly); + item[0]->setSelected(true); + + PerMapParameterSet* p = params->perMap[mh->getName()]; + + QString vec3TypeName = QString::fromStdString(nameOfType(PFP2::VEC3())); + + unsigned int j = 0; + const AttributeHash& attribs = mh->getAttributesList(VERTEX); + for(AttributeHash::const_iterator i = attribs.constBegin(); i != attribs.constEnd(); ++i) + { + if(i.value() == vec3TypeName) + { + combo_positionAttribute->addItem(i.key()); + if(i.key() == QString::fromStdString(p->positionAttribute.name())) + combo_positionAttribute->setCurrentIndex(j); + + ++j; + } + } + + slider_edgesScaleFactor->setSliderPosition(p->edgesScaleFactor * 50.0); + slider_facesScaleFactor->setSliderPosition(p->facesScaleFactor * 50.0); + } + ++i; + } + + b_refreshingUI = false; +} + +void RenderTopoSurfaceDockTab::selectedMapChanged() +{ + if(!b_refreshingUI) + { + QList currentItems = mapList->selectedItems(); + if(!currentItems.empty()) + m_plugin->changeSelectedMap(m_window->getCurrentView(), m_window->getMap(currentItems[0]->text()), true); + } +} + +void RenderTopoSurfaceDockTab::positionAttributeChanged(int index) +{ + if(!b_refreshingUI) + { + View* view = m_window->getCurrentView(); + MapHandlerGen* map = m_currentParams->selectedMap; + m_plugin->changePositionAttribute(view, map, map->getAttribute(combo_positionAttribute->currentText()), true); + } +} + +void RenderTopoSurfaceDockTab::facesScaleFactorChanged(int i) +{ + if(!b_refreshingUI) + { + View* view = m_window->getCurrentView(); + MapHandlerGen* map = m_currentParams->selectedMap; + m_plugin->changeEdgesScaleFactor(view, map, i, true); + } +} + +void RenderTopoSurfaceDockTab::edgesScaleFactorChanged(int i) +{ + if(!b_refreshingUI) + { + View* view = m_window->getCurrentView(); + MapHandlerGen* map = m_currentParams->selectedMap; + m_plugin->changeFacesScaleFactor(view, map, i, true); + } +} + +} // namespace SCHNApps + +} // namespace CGoGN