From 353f07b89801271238eff2df34deac725d55f493 Mon Sep 17 00:00:00 2001 From: Pierre Kraemer Date: Mon, 2 Sep 2013 17:03:59 +0200 Subject: [PATCH] new plugin -> renderVector --- SCHNApps/Plugins/CMakeLists.txt | 1 + .../CMakeLists.txt | 2 +- .../surface_render/forms/surface_render.ui | 4 +- .../surface_render/include/surface_render.h | 10 +- .../include/surface_render_dockTab.h | 10 +- .../surface_render/src/surface_render.cpp | 48 ++-- .../src/surface_render_dockTab.cpp | 34 +-- .../surface_renderVector/CMakeLists.txt | 8 +- ...enderVector.ui => surface_renderVector.ui} | 58 +++-- .../include/renderVector.h | 95 ------- .../include/renderVectorDockTab.h | 46 ---- .../include/surface_renderVector.h | 86 +++++++ .../include/surface_renderVector_dockTab.h | 49 ++++ .../surface_renderVector/src/renderVector.cpp | 236 ------------------ .../src/renderVectorDockTab.cpp | 136 ---------- .../src/surface_renderVector.cpp | 215 ++++++++++++++++ .../src/surface_renderVector_dockTab.cpp | 153 ++++++++++++ 17 files changed, 592 insertions(+), 599 deletions(-) rename SCHNApps/Plugins/surface_renderVector/forms/{renderVector.ui => surface_renderVector.ui} (58%) delete mode 100644 SCHNApps/Plugins/surface_renderVector/include/renderVector.h delete mode 100644 SCHNApps/Plugins/surface_renderVector/include/renderVectorDockTab.h create mode 100644 SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h create mode 100644 SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h delete mode 100644 SCHNApps/Plugins/surface_renderVector/src/renderVector.cpp delete mode 100644 SCHNApps/Plugins/surface_renderVector/src/renderVectorDockTab.cpp create mode 100644 SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp create mode 100644 SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp diff --git a/SCHNApps/Plugins/CMakeLists.txt b/SCHNApps/Plugins/CMakeLists.txt index 52c6998d9..1a966114d 100644 --- a/SCHNApps/Plugins/CMakeLists.txt +++ b/SCHNApps/Plugins/CMakeLists.txt @@ -2,4 +2,5 @@ cmake_minimum_required(VERSION 2.8) ADD_SUBDIRECTORY(surface_import) ADD_SUBDIRECTORY(surface_render) +ADD_SUBDIRECTORY(surface_renderVector) ADD_SUBDIRECTORY(surface_differentialProperties) diff --git a/SCHNApps/Plugins/surface_differentialProperties/CMakeLists.txt b/SCHNApps/Plugins/surface_differentialProperties/CMakeLists.txt index c4270eabc..778377457 100644 --- a/SCHNApps/Plugins/surface_differentialProperties/CMakeLists.txt +++ b/SCHNApps/Plugins/surface_differentialProperties/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -SET( PLUGIN_NAME DifferentialProperties ) +SET( PLUGIN_NAME Surface_DifferentialProperties ) SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/surface_differentialProperties ) diff --git a/SCHNApps/Plugins/surface_render/forms/surface_render.ui b/SCHNApps/Plugins/surface_render/forms/surface_render.ui index 0ce867c95..bbb072ae3 100644 --- a/SCHNApps/Plugins/surface_render/forms/surface_render.ui +++ b/SCHNApps/Plugins/surface_render/forms/surface_render.ui @@ -1,7 +1,7 @@ - SurfaceRender_TabWidget - + Surface_Render_TabWidget + 0 diff --git a/SCHNApps/Plugins/surface_render/include/surface_render.h b/SCHNApps/Plugins/surface_render/include/surface_render.h index 1a869bdf0..efc618c81 100644 --- a/SCHNApps/Plugins/surface_render/include/surface_render.h +++ b/SCHNApps/Plugins/surface_render/include/surface_render.h @@ -44,18 +44,18 @@ struct MapParameters FaceShadingStyle faceStyle; }; -class SurfaceRenderPlugin : public PluginInteraction +class Surface_Render_Plugin : public PluginInteraction { Q_OBJECT Q_INTERFACES(CGoGN::SCHNApps::Plugin) - friend class SurfaceRender_DockTab; + friend class Surface_Render_DockTab; public: - SurfaceRenderPlugin() + Surface_Render_Plugin() {} - ~SurfaceRenderPlugin() + ~Surface_Render_Plugin() {} private: @@ -97,7 +97,7 @@ public slots: void changeFacesStyle(const QString& view, const QString& map, MapParameters::FaceShadingStyle style); protected: - SurfaceRender_DockTab* m_dockTab; + Surface_Render_DockTab* m_dockTab; QHash > h_viewParameterSet; CGoGN::Utils::ShaderFlat* m_flatShader; diff --git a/SCHNApps/Plugins/surface_render/include/surface_render_dockTab.h b/SCHNApps/Plugins/surface_render/include/surface_render_dockTab.h index 257ea910b..d84cf167d 100644 --- a/SCHNApps/Plugins/surface_render/include/surface_render_dockTab.h +++ b/SCHNApps/Plugins/surface_render/include/surface_render_dockTab.h @@ -11,21 +11,21 @@ namespace SCHNApps { class SCHNApps; -class SurfaceRenderPlugin; +class Surface_Render_Plugin; struct MapParameters; -class SurfaceRender_DockTab : public QWidget, public Ui::SurfaceRender_TabWidget +class Surface_Render_DockTab : public QWidget, public Ui::Surface_Render_TabWidget { Q_OBJECT - friend class SurfaceRenderPlugin; + friend class Surface_Render_Plugin; public: - SurfaceRender_DockTab(SCHNApps* s, SurfaceRenderPlugin* p); + Surface_Render_DockTab(SCHNApps* s, Surface_Render_Plugin* p); private: SCHNApps* m_schnapps; - SurfaceRenderPlugin* m_plugin; + Surface_Render_Plugin* m_plugin; bool b_updatingUI; private slots: diff --git a/SCHNApps/Plugins/surface_render/src/surface_render.cpp b/SCHNApps/Plugins/surface_render/src/surface_render.cpp index 591661caf..45eb4b881 100644 --- a/SCHNApps/Plugins/surface_render/src/surface_render.cpp +++ b/SCHNApps/Plugins/surface_render/src/surface_render.cpp @@ -8,10 +8,10 @@ namespace CGoGN namespace SCHNApps { -bool SurfaceRenderPlugin::enable() +bool Surface_Render_Plugin::enable() { - m_dockTab = new SurfaceRender_DockTab(m_schnapps, this); - m_schnapps->addPluginDockTab(this, m_dockTab, "SurfaceRender"); + m_dockTab = new Surface_Render_DockTab(m_schnapps, this); + m_schnapps->addPluginDockTab(this, m_dockTab, "Surface_Render"); m_flatShader = new CGoGN::Utils::ShaderFlat(); m_flatShader->setAmbiant(CGoGN::Geom::Vec4f(0.2f, 0.2f, 0.2f, 0.1f)); @@ -48,7 +48,7 @@ bool SurfaceRenderPlugin::enable() return true; } -void SurfaceRenderPlugin::disable() +void Surface_Render_Plugin::disable() { delete m_flatShader; delete m_phongShader; @@ -59,7 +59,7 @@ void SurfaceRenderPlugin::disable() mapRemoved(map); } -void SurfaceRenderPlugin::drawMap(View* view, MapHandlerGen* map) +void Surface_Render_Plugin::drawMap(View* view, MapHandlerGen* map) { const MapParameters& p = h_viewParameterSet[view][map]; if(p.positionVBO) @@ -88,15 +88,15 @@ void SurfaceRenderPlugin::drawMap(View* view, MapHandlerGen* map) case MapParameters::FLAT : m_flatShader->setAttributePosition(p.positionVBO); map->draw(m_flatShader, CGoGN::Algo::Render::GL2::TRIANGLES); - break ; + break; case MapParameters::PHONG : if(p.normalVBO != NULL) { - m_phongShader->setAttributePosition(p.positionVBO) ; - m_phongShader->setAttributeNormal(p.normalVBO) ; + m_phongShader->setAttributePosition(p.positionVBO); + m_phongShader->setAttributeNormal(p.normalVBO); map->draw(m_phongShader, CGoGN::Algo::Render::GL2::TRIANGLES); } - break ; + break; } glDisable(GL_POLYGON_OFFSET_FILL); } @@ -107,23 +107,23 @@ void SurfaceRenderPlugin::drawMap(View* view, MapHandlerGen* map) -void SurfaceRenderPlugin::selectedViewChanged(View *prev, View *cur) +void Surface_Render_Plugin::selectedViewChanged(View *prev, View *cur) { m_dockTab->updateMapParameters(); } -void SurfaceRenderPlugin::selectedMapChanged(MapHandlerGen *prev, MapHandlerGen *cur) +void Surface_Render_Plugin::selectedMapChanged(MapHandlerGen *prev, MapHandlerGen *cur) { m_dockTab->updateMapParameters(); } -void SurfaceRenderPlugin::mapAdded(MapHandlerGen *map) +void Surface_Render_Plugin::mapAdded(MapHandlerGen *map) { connect(map, SIGNAL(vboAdded(Utils::VBO*)), this, SLOT(vboAdded(Utils::VBO*))); connect(map, SIGNAL(vboRemoved(Utils::VBO*)), this, SLOT(vboRemoved(Utils::VBO*))); } -void SurfaceRenderPlugin::mapRemoved(MapHandlerGen *map) +void Surface_Render_Plugin::mapRemoved(MapHandlerGen *map) { disconnect(map, SIGNAL(vboAdded(Utils::VBO*)), this, SLOT(vboAdded(Utils::VBO*))); disconnect(map, SIGNAL(vboRemoved(Utils::VBO*)), this, SLOT(vboRemoved(Utils::VBO*))); @@ -133,7 +133,7 @@ void SurfaceRenderPlugin::mapRemoved(MapHandlerGen *map) -void SurfaceRenderPlugin::vboAdded(Utils::VBO *vbo) +void Surface_Render_Plugin::vboAdded(Utils::VBO *vbo) { MapHandlerGen* map = static_cast(QObject::sender()); @@ -147,7 +147,7 @@ void SurfaceRenderPlugin::vboAdded(Utils::VBO *vbo) } } -void SurfaceRenderPlugin::vboRemoved(Utils::VBO *vbo) +void Surface_Render_Plugin::vboRemoved(Utils::VBO *vbo) { MapHandlerGen* map = static_cast(QObject::sender()); @@ -188,7 +188,7 @@ void SurfaceRenderPlugin::vboRemoved(Utils::VBO *vbo) -void SurfaceRenderPlugin::changePositionVBO(const QString& view, const QString& map, const QString& vbo) +void Surface_Render_Plugin::changePositionVBO(const QString& view, const QString& map, const QString& vbo) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -204,7 +204,7 @@ void SurfaceRenderPlugin::changePositionVBO(const QString& view, const QString& } } -void SurfaceRenderPlugin::changeNormalVBO(const QString& view, const QString& map, const QString& vbo) +void Surface_Render_Plugin::changeNormalVBO(const QString& view, const QString& map, const QString& vbo) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -220,7 +220,7 @@ void SurfaceRenderPlugin::changeNormalVBO(const QString& view, const QString& ma } } -void SurfaceRenderPlugin::changeRenderVertices(const QString& view, const QString& map, bool b) +void Surface_Render_Plugin::changeRenderVertices(const QString& view, const QString& map, bool b) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -235,7 +235,7 @@ void SurfaceRenderPlugin::changeRenderVertices(const QString& view, const QStrin } } -void SurfaceRenderPlugin::changeVerticesScaleFactor(const QString& view, const QString& map, float f) +void Surface_Render_Plugin::changeVerticesScaleFactor(const QString& view, const QString& map, float f) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -250,7 +250,7 @@ void SurfaceRenderPlugin::changeVerticesScaleFactor(const QString& view, const Q } } -void SurfaceRenderPlugin::changeRenderEdges(const QString& view, const QString& map, bool b) +void Surface_Render_Plugin::changeRenderEdges(const QString& view, const QString& map, bool b) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -265,7 +265,7 @@ void SurfaceRenderPlugin::changeRenderEdges(const QString& view, const QString& } } -void SurfaceRenderPlugin::changeRenderFaces(const QString& view, const QString& map, bool b) +void Surface_Render_Plugin::changeRenderFaces(const QString& view, const QString& map, bool b) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -280,7 +280,7 @@ void SurfaceRenderPlugin::changeRenderFaces(const QString& view, const QString& } } -void SurfaceRenderPlugin::changeFacesStyle(const QString& view, const QString& map, MapParameters::FaceShadingStyle style) +void Surface_Render_Plugin::changeFacesStyle(const QString& view, const QString& map, MapParameters::FaceShadingStyle style) { View* v = m_schnapps->getView(view); MapHandlerGen* m = m_schnapps->getMap(map); @@ -296,9 +296,9 @@ void SurfaceRenderPlugin::changeFacesStyle(const QString& view, const QString& m } #ifndef DEBUG -Q_EXPORT_PLUGIN2(SurfaceRenderPlugin, SurfaceRenderPlugin) +Q_EXPORT_PLUGIN2(Surface_Render_Plugin, Surface_Render_Plugin) #else -Q_EXPORT_PLUGIN2(SurfaceRenderPluginD, SurfaceRenderPlugin) +Q_EXPORT_PLUGIN2(Surface_Render_PluginD, Surface_Render_Plugin) #endif } // namespace SCHNApps diff --git a/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp b/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp index 26a99d43a..97d23590b 100644 --- a/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp +++ b/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp @@ -10,7 +10,7 @@ namespace CGoGN namespace SCHNApps { -SurfaceRender_DockTab::SurfaceRender_DockTab(SCHNApps* s, SurfaceRenderPlugin* p) : +Surface_Render_DockTab::Surface_Render_DockTab(SCHNApps* s, Surface_Render_Plugin* p) : m_schnapps(s), m_plugin(p), b_updatingUI(false) @@ -26,7 +26,11 @@ SurfaceRender_DockTab::SurfaceRender_DockTab(SCHNApps* s, SurfaceRenderPlugin* p connect(group_faceShading, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(faceStyleChanged(QAbstractButton*))); } -void SurfaceRender_DockTab::positionVBOChanged(int index) + + + + +void Surface_Render_DockTab::positionVBOChanged(int index) { if(!b_updatingUI) { @@ -40,7 +44,7 @@ void SurfaceRender_DockTab::positionVBOChanged(int index) } } -void SurfaceRender_DockTab::normalVBOChanged(int index) +void Surface_Render_DockTab::normalVBOChanged(int index) { if(!b_updatingUI) { @@ -54,7 +58,7 @@ void SurfaceRender_DockTab::normalVBOChanged(int index) } } -void SurfaceRender_DockTab::renderVerticesChanged(bool b) +void Surface_Render_DockTab::renderVerticesChanged(bool b) { if(!b_updatingUI) { @@ -68,7 +72,7 @@ void SurfaceRender_DockTab::renderVerticesChanged(bool b) } } -void SurfaceRender_DockTab::verticesScaleFactorChanged(int i) +void Surface_Render_DockTab::verticesScaleFactorChanged(int i) { if(!b_updatingUI) { @@ -82,7 +86,7 @@ void SurfaceRender_DockTab::verticesScaleFactorChanged(int i) } } -void SurfaceRender_DockTab::renderEdgesChanged(bool b) +void Surface_Render_DockTab::renderEdgesChanged(bool b) { if(!b_updatingUI) { @@ -96,7 +100,7 @@ void SurfaceRender_DockTab::renderEdgesChanged(bool b) } } -void SurfaceRender_DockTab::renderFacesChanged(bool b) +void Surface_Render_DockTab::renderFacesChanged(bool b) { if(!b_updatingUI) { @@ -110,7 +114,7 @@ void SurfaceRender_DockTab::renderFacesChanged(bool b) } } -void SurfaceRender_DockTab::faceStyleChanged(QAbstractButton* b) +void Surface_Render_DockTab::faceStyleChanged(QAbstractButton* b) { if(!b_updatingUI) { @@ -131,14 +135,14 @@ void SurfaceRender_DockTab::faceStyleChanged(QAbstractButton* b) -void SurfaceRender_DockTab::addPositionVBO(QString name) +void Surface_Render_DockTab::addPositionVBO(QString name) { b_updatingUI = true; combo_positionVBO->addItem(name); b_updatingUI = false; } -void SurfaceRender_DockTab::removePositionVBO(QString name) +void Surface_Render_DockTab::removePositionVBO(QString name) { b_updatingUI = true; int curIndex = combo_positionVBO->currentIndex(); @@ -149,14 +153,14 @@ void SurfaceRender_DockTab::removePositionVBO(QString name) b_updatingUI = false; } -void SurfaceRender_DockTab::addNormalVBO(QString name) +void Surface_Render_DockTab::addNormalVBO(QString name) { b_updatingUI = true; combo_normalVBO->addItem(name); b_updatingUI = false; } -void SurfaceRender_DockTab::removeNormalVBO(QString name) +void Surface_Render_DockTab::removeNormalVBO(QString name) { b_updatingUI = true; int curIndex = combo_normalVBO->currentIndex(); @@ -167,14 +171,14 @@ void SurfaceRender_DockTab::removeNormalVBO(QString name) b_updatingUI = false; } -void SurfaceRender_DockTab::updateMapParameters() +void Surface_Render_DockTab::updateMapParameters() { b_updatingUI = true; combo_positionVBO->clear(); - combo_normalVBO->clear(); - combo_positionVBO->addItem("- select VBO -"); + + combo_normalVBO->clear(); combo_normalVBO->addItem("- select VBO -"); View* view = m_schnapps->getSelectedView(); diff --git a/SCHNApps/Plugins/surface_renderVector/CMakeLists.txt b/SCHNApps/Plugins/surface_renderVector/CMakeLists.txt index de5e22201..506936280 100644 --- a/SCHNApps/Plugins/surface_renderVector/CMakeLists.txt +++ b/SCHNApps/Plugins/surface_renderVector/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 2.8) -SET( PLUGIN_NAME RenderVector ) +SET( PLUGIN_NAME Surface_RenderVector ) -SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/renderVector ) +SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/surface_renderVector ) INCLUDE_DIRECTORIES( ${PLUGIN_ROOT_DIR}/include @@ -25,8 +25,8 @@ file( SET( PLUGIN_QOBJECT_FILES - ${PLUGIN_ROOT_DIR}/include/renderVector.h - ${PLUGIN_ROOT_DIR}/include/renderVectorDockTab.h + ${PLUGIN_ROOT_DIR}/include/surface_renderVector.h + ${PLUGIN_ROOT_DIR}/include/surface_renderVector_dockTab.h ) include( ${SCHNApps_ROOT_DIR}/Plugins/plugins_cmake.txt ) diff --git a/SCHNApps/Plugins/surface_renderVector/forms/renderVector.ui b/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui similarity index 58% rename from SCHNApps/Plugins/surface_renderVector/forms/renderVector.ui rename to SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui index cba7d87d9..4530b2eed 100644 --- a/SCHNApps/Plugins/surface_renderVector/forms/renderVector.ui +++ b/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui @@ -1,65 +1,63 @@ - RenderVectorDockWidget - + Surface_RenderVector_TabWidget + 0 0 - 174 - 545 + 200 + 600 Form - - - + + + + + Position : + + - - - - - - Position : - - - + + + + + 0 + 0 + + - - - - 0 - 0 - - - + + - select VBO - + - + - + Vectors : - + QAbstractItemView::MultiSelection - + Vectors Size : - + 50 @@ -69,7 +67,7 @@ - + Qt::Vertical diff --git a/SCHNApps/Plugins/surface_renderVector/include/renderVector.h b/SCHNApps/Plugins/surface_renderVector/include/renderVector.h deleted file mode 100644 index d67b1a53c..000000000 --- a/SCHNApps/Plugins/surface_renderVector/include/renderVector.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef _RENDERVECTOR_PLUGIN_H_ -#define _RENDERVECTOR_PLUGIN_H_ - -#include "plugin.h" -#include "renderVectorDockTab.h" - -#include "Utils/Shaders/shaderVectorPerVertex.h" - -namespace CGoGN -{ - -namespace SCHNApps -{ - -struct PerMapParameterSet -{ - PerMapParameterSet() : - positionVBO(NULL), - vectorsScaleFactor(1.0f) - {} - - PerMapParameterSet(MapHandlerGen* map); - - Utils::VBO* positionVBO; - std::vector vectorVBO; - float vectorsScaleFactor; -}; - -struct ParameterSet -{ - ParameterSet() : selectedMap(NULL) - {} - - QHash perMap; - MapHandlerGen* selectedMap; -}; - - -class RenderVectorPlugin : public Plugin -{ - Q_OBJECT - Q_INTERFACES(CGoGN::SCHNApps::Plugin) - -public: - RenderVectorPlugin() - { - setProvidesRendering(true); - } - - ~RenderVectorPlugin() - {} - - virtual bool enable(); - virtual void disable(); - - virtual void redraw(View *view); - - virtual void keyPress(View* view, QKeyEvent* event) {} - virtual void keyRelease(View* view, QKeyEvent* event) {} - virtual void mousePress(View* view, QMouseEvent* event) {} - virtual void mouseRelease(View* view, QMouseEvent* event) {} - virtual void mouseMove(View* view, QMouseEvent* event) {} - virtual void wheelEvent(View* view, QWheelEvent* event) {} - -protected: - RenderVectorDockTab* m_dockTab; - QHash h_viewParams; - - CGoGN::Utils::ShaderVectorPerVertex* m_vectorShader; - -public slots: - void viewLinked(View* view, Plugin* plugin); - void viewUnlinked(View* view, Plugin* plugin); - void currentViewChanged(View* view); - - void mapLinked(MapHandlerGen* m); - void mapUnlinked(MapHandlerGen* m); - -protected: - void addManagedMap(View *v, MapHandlerGen* m); - void removeManagedMap(View *v, MapHandlerGen* m); - -public slots: - void changeSelectedMap(View* view, MapHandlerGen* map); - - void changePositionVBO(View* view, MapHandlerGen* map, Utils::VBO* vbo, bool fromUI = false); - void changeSelectedVectorsVBO(View* view, MapHandlerGen* map, const std::vector& vbos, bool fromUI = false); - void changeVectorsScaleFactor(View* view, MapHandlerGen* map, int i, bool fromUI = false); -}; - -} // namespace SCHNApps - -} // namespace CGoGN - -#endif diff --git a/SCHNApps/Plugins/surface_renderVector/include/renderVectorDockTab.h b/SCHNApps/Plugins/surface_renderVector/include/renderVectorDockTab.h deleted file mode 100644 index b0f2e5466..000000000 --- a/SCHNApps/Plugins/surface_renderVector/include/renderVectorDockTab.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _RENDERVECTOR_DOCK_TAB_H_ -#define _RENDERVECTOR_DOCK_TAB_H_ - -#include "ui_renderVector.h" -#include "Utils/vbo.h" - -namespace CGoGN -{ - -namespace SCHNApps -{ - -class Window; -class RenderVectorPlugin; -struct ParameterSet; - -class RenderVectorDockTab : public QWidget, public Ui::RenderVectorDockWidget -{ - Q_OBJECT - -public: - RenderVectorDockTab(Window* w, RenderVectorPlugin* p); - -private: - Window* m_window; - RenderVectorPlugin* m_plugin; - ParameterSet* m_currentParams; - bool b_refreshingUI; - -public slots: - void refreshUI(ParameterSet* params); - - void selectedMapChanged(); - - void positionVBOChanged(int index); - void selectedVectorsVBOChanged(); - void vectorsScaleFactorChanged(int i); - - void addVBOToList(Utils::VBO* vbo); -}; - -} // namespace SCHNApps - -} // namespace CGoGN - -#endif diff --git a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h new file mode 100644 index 000000000..82c8fab7a --- /dev/null +++ b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h @@ -0,0 +1,86 @@ +#ifndef _SURFACE_RENDERVECTOR_PLUGIN_H_ +#define _SURFACE_RENDERVECTOR_PLUGIN_H_ + +#include "plugin_interaction.h" +#include "surface_renderVector_dockTab.h" + +#include "Utils/Shaders/shaderVectorPerVertex.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +struct MapParameters +{ + MapParameters() : + positionVBO(NULL), + vectorsScaleFactor(1.0f) + {} + + Utils::VBO* positionVBO; + QList vectorVBOs; + float vectorsScaleFactor; +}; + +class Surface_RenderVector_Plugin : public PluginInteraction +{ + Q_OBJECT + Q_INTERFACES(CGoGN::SCHNApps::Plugin) + + friend class Surface_RenderVector_DockTab; + +public: + Surface_RenderVector_Plugin() + {} + + ~Surface_RenderVector_Plugin() + {} + + virtual bool enable(); + virtual void disable(); + + virtual void draw(View *view) {} + virtual void drawMap(View* view, MapHandlerGen* map); + + virtual void keyPress(View* view, QKeyEvent* event) {} + virtual void keyRelease(View* view, QKeyEvent* event) {} + virtual void mousePress(View* view, QMouseEvent* event) {} + virtual void mouseRelease(View* view, QMouseEvent* event) {} + virtual void mouseMove(View* view, QMouseEvent* event) {} + virtual void wheelEvent(View* view, QWheelEvent* event) {} + + virtual void viewLinked(View *view) {} + virtual void viewUnlinked(View *view) {} + +private slots: + // slots called from SCHNApps signals + void selectedViewChanged(View* prev, View* cur); + void selectedMapChanged(MapHandlerGen* prev, MapHandlerGen* cur); + void mapAdded(MapHandlerGen* map); + void mapRemoved(MapHandlerGen* map); + + // slots called from MapHandler signals + void vboAdded(Utils::VBO* vbo); + void vboRemoved(Utils::VBO* vbo); + +public slots: + // slots for Python calls + void changePositionVBO(const QString& view, const QString& map, const QString& vbo); + void addVectorVBO(const QString& view, const QString& map, const QString& vbo); + void removeVectorVBO(const QString& view, const QString& map, const QString& vbo); + void changeVectorsScaleFactor(const QString& view, const QString& map, float f); + +protected: + Surface_RenderVector_DockTab* m_dockTab; + QHash > h_viewParameterSet; + + CGoGN::Utils::ShaderVectorPerVertex* m_vectorShader; +}; + +} // namespace SCHNApps + +} // namespace CGoGN + +#endif diff --git a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h new file mode 100644 index 000000000..d0c16e31a --- /dev/null +++ b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h @@ -0,0 +1,49 @@ +#ifndef _RENDERVECTOR_DOCK_TAB_H_ +#define _RENDERVECTOR_DOCK_TAB_H_ + +#include "ui_surface_renderVector.h" +#include "Utils/vbo.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +class SCHNApps; +class Surface_RenderVector_Plugin; +struct MapParameters; + +class Surface_RenderVector_DockTab : public QWidget, public Ui::Surface_RenderVector_TabWidget +{ + Q_OBJECT + + friend class Surface_RenderVector_Plugin; + +public: + Surface_RenderVector_DockTab(SCHNApps* s, Surface_RenderVector_Plugin* p); + +private: + SCHNApps* m_schnapps; + Surface_RenderVector_Plugin* m_plugin; + bool b_updatingUI; + +private slots: + void positionVBOChanged(int index); + void selectedVectorsVBOChanged(); + void vectorsScaleFactorChanged(int i); + +private: + void addPositionVBO(QString name); + void removePositionVBO(QString name); + void addVectorVBO(QString name); + void removeVectorVBO(QString name); + + void updateMapParameters(); +}; + +} // namespace SCHNApps + +} // namespace CGoGN + +#endif diff --git a/SCHNApps/Plugins/surface_renderVector/src/renderVector.cpp b/SCHNApps/Plugins/surface_renderVector/src/renderVector.cpp deleted file mode 100644 index cd0d24135..000000000 --- a/SCHNApps/Plugins/surface_renderVector/src/renderVector.cpp +++ /dev/null @@ -1,236 +0,0 @@ -#include "renderVector.h" - -#include "mapHandler.h" - -namespace CGoGN -{ - -namespace SCHNApps -{ - -PerMapParameterSet::PerMapParameterSet(MapHandlerGen* map) : - positionVBO(NULL), - vectorsScaleFactor(1.0f) -{ - bool positionFound = false; - - QList vbos = map->getVBOList(); - for(int i = 0; i < vbos.count(); ++i) - { - if(vbos[i]->dataSize() == 3) - { - if(!positionFound) positionVBO = vbos[i]; - if(vbos[i]->name() == "position") // try to select a VBO named "position" - { - positionVBO = vbos[i]; - positionFound = true; - } - } - } -} - - -bool RenderVectorPlugin::enable() -{ - m_dockTab = new RenderVectorDockTab(m_window, this); - addTabInDock(m_dockTab, "RenderVector"); - - m_vectorShader = new Utils::ShaderVectorPerVertex(); - m_vectorShader->setColor(Geom::Vec4f(1.0f, 0.0f, 0.0f, 1.0f)); - - registerShader(m_vectorShader); - - connect(m_window, SIGNAL(viewAndPluginLinked(View*, Plugin*)), this, SLOT(viewLinked(View*, Plugin*))); - connect(m_window, SIGNAL(viewAndPluginUnlinked(View*, Plugin*)), this, SLOT(viewUnlinked(View*, Plugin*))); - connect(m_window, SIGNAL(currentViewChanged(View*)), this, SLOT(currentViewChanged(View*))); - - return true; -} - -void RenderVectorPlugin::disable() -{ - delete m_vectorShader; -} - -void RenderVectorPlugin::redraw(View* view) -{ - ParameterSet* params = h_viewParams[view]; - - const QList& maps = view->getLinkedMaps(); - foreach(MapHandlerGen* m, maps) - { - PerMapParameterSet* p = params->perMap[m->getName()]; - m_vectorShader->setScale(m->getBBdiagSize() / 100.0f * p->vectorsScaleFactor) ; - if(p->positionVBO != NULL) - { - m_vectorShader->setAttributePosition(p->positionVBO) ; - for(std::vector::const_iterator it = p->vectorVBO.begin(); it != p->vectorVBO.end(); ++it) - { - m_vectorShader->setAttributeVector(*it) ; - glLineWidth(1.0f) ; - m->draw(m_vectorShader, Algo::Render::GL2::POINTS) ; - } - } - } -} - -void RenderVectorPlugin::viewLinked(View* view, Plugin* plugin) -{ - if(plugin == this) - { - ParameterSet* params = new ParameterSet(); - h_viewParams.insert(view, params); - - const QList& maps = view->getLinkedMaps(); - foreach(MapHandlerGen* mh, maps) - addManagedMap(view, mh); - - connect(view, SIGNAL(mapLinked(MapHandlerGen*)), this, SLOT(mapLinked(MapHandlerGen*))); - connect(view, SIGNAL(mapUnlinked(MapHandlerGen*)), this, SLOT(mapUnlinked(MapHandlerGen*))); - - if(view->isCurrentView()) - m_dockTab->refreshUI(params); - } -} - -void RenderVectorPlugin::viewUnlinked(View* view, Plugin* plugin) -{ - if(plugin == this) - { - const QList& maps = view->getLinkedMaps(); - foreach(MapHandlerGen* mh, maps) - removeManagedMap(view, mh); - - ParameterSet* params = h_viewParams[view]; - delete params; - h_viewParams.remove(view); - - disconnect(view, SIGNAL(mapLinked(MapHandlerGen*)), this, SLOT(mapLinked(MapHandlerGen*))); - disconnect(view, SIGNAL(mapUnlinked(MapHandlerGen*)), this, SLOT(mapUnlinked(MapHandlerGen*))); - } -} - -void RenderVectorPlugin::currentViewChanged(View* view) -{ - if(isLinkedToView(view)) - m_dockTab->refreshUI(h_viewParams[view]); -} - -void RenderVectorPlugin::mapLinked(MapHandlerGen* m) -{ - View* view = static_cast(QObject::sender()); - assert(isLinkedToView(view)); - addManagedMap(view, m); -} - -void RenderVectorPlugin::mapUnlinked(MapHandlerGen* m) -{ - View* view = static_cast(QObject::sender()); - assert(isLinkedToView(view)); - removeManagedMap(view, m); -} - -void RenderVectorPlugin::addManagedMap(View* v, MapHandlerGen *m) -{ -// connect(m, SIGNAL(attributeModified(unsigned int, QString)), this, SLOT(attributeModified(unsigned int, QString))); -// connect(m, SIGNAL(connectivityModified()), this, SLOT(connectivityModified())); - - ParameterSet* params = h_viewParams[v]; - PerMapParameterSet* perMap = new PerMapParameterSet(m); - - params->perMap.insert(m->getName(), perMap); - - if(params->selectedMap == NULL || params->perMap.count() == 1) - changeSelectedMap(v, m); - else - m_dockTab->refreshUI(params); -} - -void RenderVectorPlugin::removeManagedMap(View *v, MapHandlerGen *m) -{ -// disconnect(m, SIGNAL(attributeModified(unsigned int, QString)), this, SLOT(attributeModified(unsigned int, QString))); -// disconnect(m, SIGNAL(connectivityModified()), this, SLOT(connectivityModified())); - - ParameterSet* params = h_viewParams[v]; - PerMapParameterSet* perMap = params->perMap[m->getName()]; - - delete perMap; - params->perMap.remove(m->getName()); - - if(params->selectedMap == m) - { - if(!params->perMap.empty()) - changeSelectedMap(v, m_window->getMap(params->perMap.begin().key())); - else - changeSelectedMap(v, NULL); - } - else - m_dockTab->refreshUI(params); -} - -void RenderVectorPlugin::changeSelectedMap(View* view, MapHandlerGen* map) -{ - ParameterSet* params = h_viewParams[view]; - - MapHandlerGen* prev = params->selectedMap; - params->selectedMap = map; - - if(view->isCurrentView()) - { - if(prev) - disconnect(prev, SIGNAL(vboAdded(Utils::VBO*)), m_dockTab, SLOT(addVBOToList(Utils::VBO*))); - if(map) - connect(map, SIGNAL(vboAdded(Utils::VBO*)), m_dockTab, SLOT(addVBOToList(Utils::VBO*))); - - m_dockTab->refreshUI(params); - } -} - -void RenderVectorPlugin::changePositionVBO(View* view, MapHandlerGen* map, Utils::VBO* vbo, bool fromUI) -{ - ParameterSet* params = h_viewParams[view]; - params->perMap[map->getName()]->positionVBO = vbo; - - if(view->isCurrentView()) - { - if(!fromUI) - m_dockTab->refreshUI(params); - view->updateGL(); - } -} - -void RenderVectorPlugin::changeSelectedVectorsVBO(View* view, MapHandlerGen* map, const std::vector& vbos, bool fromUI) -{ - ParameterSet* params = h_viewParams[view]; - params->perMap[map->getName()]->vectorVBO = vbos; - - if(view->isCurrentView()) - { - if(!fromUI) - m_dockTab->refreshUI(params); - view->updateGL(); - } -} - -void RenderVectorPlugin::changeVectorsScaleFactor(View* view, MapHandlerGen* map, int i, bool fromUI) -{ - ParameterSet* params = h_viewParams[view]; - params->perMap[map->getName()]->vectorsScaleFactor = i / 50.0; - - if(view->isCurrentView()) - { - if(!fromUI) - m_dockTab->refreshUI(params); - view->updateGL(); - } -} - -#ifndef DEBUG -Q_EXPORT_PLUGIN2(RenderVectorPlugin, RenderVectorPlugin) -#else -Q_EXPORT_PLUGIN2(RenderVectorPluginD, RenderVectorPlugin) -#endif - -} // namespace SCHNApps - -} // namespace CGoGN diff --git a/SCHNApps/Plugins/surface_renderVector/src/renderVectorDockTab.cpp b/SCHNApps/Plugins/surface_renderVector/src/renderVectorDockTab.cpp deleted file mode 100644 index de91436c4..000000000 --- a/SCHNApps/Plugins/surface_renderVector/src/renderVectorDockTab.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "renderVectorDockTab.h" - -#include "renderVector.h" -#include "window.h" -#include "mapHandler.h" - -namespace CGoGN -{ - -namespace SCHNApps -{ - -RenderVectorDockTab::RenderVectorDockTab(Window* w, RenderVectorPlugin* p) : - m_window(w), - m_plugin(p), - b_refreshingUI(false) -{ - setupUi(this); - - connect(mapList, SIGNAL(itemSelectionChanged()), this, SLOT(selectedMapChanged())); - connect(combo_positionVBO, SIGNAL(currentIndexChanged(int)), this, SLOT(positionVBOChanged(int))); - connect(list_vectorVBO, SIGNAL(itemSelectionChanged()), this, SLOT(selectedVectorsVBOChanged())); - connect(slider_vectorsScaleFactor, SIGNAL(valueChanged(int)), this, SLOT(vectorsScaleFactorChanged(int))); -} - -void RenderVectorDockTab::refreshUI(ParameterSet* params) -{ - m_currentParams = params; - - b_refreshingUI = true; - - mapList->clear(); - combo_positionVBO->clear(); - list_vectorVBO->clear(); - - MapHandlerGen* map = params->selectedMap; - - QHash::const_iterator i = params->perMap.constBegin(); - while (i != params->perMap.constEnd()) - { - mapList->addItem(i.key()); - if(map != NULL && i.key() == map->getName()) - { - QList item = mapList->findItems(map->getName(), Qt::MatchExactly); - item[0]->setSelected(true); - - PerMapParameterSet* p = params->perMap[map->getName()]; - - QList vbos = map->getVBOList(); - unsigned int j = 0; - for(int i = 0; i < vbos.count(); ++i) - { - if(vbos[i]->dataSize() == 3) - { - combo_positionVBO->addItem(QString::fromStdString(vbos[i]->name())); - if(vbos[i] == p->positionVBO) - combo_positionVBO->setCurrentIndex(j); - - list_vectorVBO->addItem(QString::fromStdString(vbos[i]->name())); - if(std::find(p->vectorVBO.begin(), p->vectorVBO.end(), vbos[i]) != p->vectorVBO.end()) - list_vectorVBO->item(j)->setSelected(true); - - ++j; - } - } - - slider_vectorsScaleFactor->setSliderPosition(p->vectorsScaleFactor * 50.0); - } - ++i; - } - - b_refreshingUI = false; -} - -void RenderVectorDockTab::selectedMapChanged() -{ - if(!b_refreshingUI) - { - QList currentItems = mapList->selectedItems(); - if(!currentItems.empty()) - m_plugin->changeSelectedMap(m_window->getCurrentView(), m_window->getMap(currentItems[0]->text())); - } -} - -void RenderVectorDockTab::positionVBOChanged(int index) -{ - if(!b_refreshingUI) - { - View* view = m_window->getCurrentView(); - MapHandlerGen* map = m_currentParams->selectedMap; - if(map) - m_plugin->changePositionVBO(view, map, map->getVBO(combo_positionVBO->currentText()), true); - } -} - -void RenderVectorDockTab::selectedVectorsVBOChanged() -{ - if(!b_refreshingUI) - { - View* view = m_window->getCurrentView(); - MapHandlerGen* map = m_currentParams->selectedMap; - if(map) - { - QList currentItems = list_vectorVBO->selectedItems(); - std::vector vbos; - foreach(QListWidgetItem* item, currentItems) - vbos.push_back(map->getVBO(item->text())); - m_plugin->changeSelectedVectorsVBO(view, map, vbos, true); - } - } -} - -void RenderVectorDockTab::vectorsScaleFactorChanged(int i) -{ - if(!b_refreshingUI) - { - View* view = m_window->getCurrentView(); - MapHandlerGen* map = m_currentParams->selectedMap; - if(map) - m_plugin->changeVectorsScaleFactor(view, map, i, true); - } -} - -void RenderVectorDockTab::addVBOToList(Utils::VBO* vbo) -{ - if(vbo->dataSize() == 3) - { - QString name = QString::fromStdString(vbo->name()); - combo_positionVBO->addItem(name); - list_vectorVBO->addItem(name); - } -} - -} // namespace SCHNApps - -} // namespace CGoGN diff --git a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp new file mode 100644 index 000000000..3f6f2cae0 --- /dev/null +++ b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp @@ -0,0 +1,215 @@ +#include "surface_renderVector.h" + +#include "mapHandler.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +bool Surface_RenderVector_Plugin::enable() +{ + m_dockTab = new Surface_RenderVector_DockTab(m_schnapps, this); + m_schnapps->addPluginDockTab(this, m_dockTab, "Surface_RenderVector"); + + m_vectorShader = new Utils::ShaderVectorPerVertex(); + m_vectorShader->setColor(Geom::Vec4f(1.0f, 0.0f, 0.0f, 1.0f)); + + registerShader(m_vectorShader); + + connect(m_schnapps, SIGNAL(selectedViewChanged(View*, View*)), this, SLOT(selectedViewChanged(View*, View*))); + connect(m_schnapps, SIGNAL(selectedMapChanged(MapHandlerGen*, MapHandlerGen*)), this, SLOT(selectedMapChanged(MapHandlerGen*, MapHandlerGen*))); + connect(m_schnapps, SIGNAL(mapAdded(MapHandlerGen*)), this, SLOT(mapAdded(MapHandlerGen*))); + connect(m_schnapps, SIGNAL(mapRemoved(MapHandlerGen*)), this, SLOT(mapRemoved(MapHandlerGen*))); + + foreach(MapHandlerGen* map, m_schnapps->getMapSet().values()) + mapAdded(map); + + m_dockTab->updateMapParameters(); + + return true; +} + +void Surface_RenderVector_Plugin::disable() +{ + delete m_vectorShader; + + foreach(MapHandlerGen* map, m_schnapps->getMapSet().values()) + mapRemoved(map); +} + +void Surface_RenderVector_Plugin::drawMap(View* view, MapHandlerGen* map) +{ + const MapParameters& p = h_viewParameterSet[view][map]; + + m_vectorShader->setScale(map->getBBdiagSize() / 100.0f * p.vectorsScaleFactor) ; + if(p.positionVBO) + { + m_vectorShader->setAttributePosition(p.positionVBO); + for(QList::const_iterator it = p.vectorVBOs.begin(); it != p.vectorVBOs.end(); ++it) + { + m_vectorShader->setAttributeVector(*it); + glLineWidth(1.0f); + map->draw(m_vectorShader, Algo::Render::GL2::POINTS); + } + } +} + + + + + +void Surface_RenderVector_Plugin::selectedViewChanged(View *prev, View *cur) +{ + m_dockTab->updateMapParameters(); +} + +void Surface_RenderVector_Plugin::selectedMapChanged(MapHandlerGen *prev, MapHandlerGen *cur) +{ + m_dockTab->updateMapParameters(); +} + +void Surface_RenderVector_Plugin::mapAdded(MapHandlerGen* map) +{ + connect(map, SIGNAL(vboAdded(Utils::VBO*)), this, SLOT(vboAdded(Utils::VBO*))); + connect(map, SIGNAL(vboRemoved(Utils::VBO*)), this, SLOT(vboRemoved(Utils::VBO*))); +} + +void Surface_RenderVector_Plugin::mapRemoved(MapHandlerGen* map) +{ + disconnect(map, SIGNAL(vboAdded(Utils::VBO*)), this, SLOT(vboAdded(Utils::VBO*))); + disconnect(map, SIGNAL(vboRemoved(Utils::VBO*)), this, SLOT(vboRemoved(Utils::VBO*))); +} + + + + + +void Surface_RenderVector_Plugin::vboAdded(Utils::VBO *vbo) +{ + MapHandlerGen* map = static_cast(QObject::sender()); + + if(map == m_schnapps->getSelectedMap()) + { + if(vbo->dataSize() == 3) + { + m_dockTab->addPositionVBO(QString::fromStdString(vbo->name())); + m_dockTab->addVectorVBO(QString::fromStdString(vbo->name())); + } + } +} + +void Surface_RenderVector_Plugin::vboRemoved(Utils::VBO *vbo) +{ + MapHandlerGen* map = static_cast(QObject::sender()); + + if(map == m_schnapps->getSelectedMap()) + { + if(vbo->dataSize() == 3) + { + m_dockTab->removePositionVBO(QString::fromStdString(vbo->name())); + m_dockTab->removeVectorVBO(QString::fromStdString(vbo->name())); + } + } + + QSet viewsToUpdate; + + QHash >::iterator i; + for (i = h_viewParameterSet.begin(); i != h_viewParameterSet.end(); ++i) + { + View* view = i.key(); + QHash& viewParamSet = i.value(); + MapParameters& mapParam = viewParamSet[map]; + if(mapParam.positionVBO == vbo) + { + mapParam.positionVBO = NULL; + if(view->isLinkedToMap(map)) viewsToUpdate.insert(view); + } + if(mapParam.vectorVBOs.contains(vbo)) + { + mapParam.vectorVBOs.removeOne(vbo); + if(view->isLinkedToMap(map)) viewsToUpdate.insert(view); + } + } + + foreach(View* v, viewsToUpdate) + v->updateGL(); +} + + + + + +void Surface_RenderVector_Plugin::changePositionVBO(const QString& view, const QString& map, const QString& vbo) +{ + View* v = m_schnapps->getView(view); + MapHandlerGen* m = m_schnapps->getMap(map); + if(v && m) + { + Utils::VBO* vbuf = m->getVBO(vbo); + h_viewParameterSet[v][m].positionVBO = vbuf; + if(v->isSelectedView()) + { + if(v->isLinkedToMap(m)) v->updateGL(); + if(m->isSelectedMap()) m_dockTab->updateMapParameters(); + } + } +} + +void Surface_RenderVector_Plugin::addVectorVBO(const QString& view, const QString& map, const QString& vbo) +{ + View* v = m_schnapps->getView(view); + MapHandlerGen* m = m_schnapps->getMap(map); + if(v && m) + { + Utils::VBO* vbuf = m->getVBO(vbo); + h_viewParameterSet[v][m].vectorVBOs.append(vbuf); + if(v->isSelectedView()) + { + if(v->isLinkedToMap(m)) v->updateGL(); + if(m->isSelectedMap()) m_dockTab->updateMapParameters(); + } + } +} + +void Surface_RenderVector_Plugin::removeVectorVBO(const QString& view, const QString& map, const QString& vbo) +{ + View* v = m_schnapps->getView(view); + MapHandlerGen* m = m_schnapps->getMap(map); + if(v && m) + { + Utils::VBO* vbuf = m->getVBO(vbo); + h_viewParameterSet[v][m].vectorVBOs.removeOne(vbuf); + if(v->isSelectedView()) + { + if(v->isLinkedToMap(m)) v->updateGL(); + if(m->isSelectedMap()) m_dockTab->updateMapParameters(); + } + } +} + +void Surface_RenderVector_Plugin::changeVectorsScaleFactor(const QString& view, const QString& map, float f) +{ + View* v = m_schnapps->getView(view); + MapHandlerGen* m = m_schnapps->getMap(map); + if(v && m) + { + h_viewParameterSet[v][m].vectorsScaleFactor = f; + if(v->isSelectedView()) + { + if(v->isLinkedToMap(m)) v->updateGL(); + if(m->isSelectedMap()) m_dockTab->updateMapParameters(); + } + } +} + +#ifndef DEBUG +Q_EXPORT_PLUGIN2(Surface_RenderVector_Plugin, Surface_RenderVector_Plugin) +#else +Q_EXPORT_PLUGIN2(Surface_RenderVector_PluginD, Surface_RenderVector_Plugin) +#endif + +} // namespace SCHNApps + +} // namespace CGoGN diff --git a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp new file mode 100644 index 000000000..5328983c7 --- /dev/null +++ b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp @@ -0,0 +1,153 @@ +#include "surface_renderVector_dockTab.h" + +#include "surface_renderVector.h" +#include "schnapps.h" +#include "mapHandler.h" + +namespace CGoGN +{ + +namespace SCHNApps +{ + +Surface_RenderVector_DockTab::Surface_RenderVector_DockTab(SCHNApps* s, Surface_RenderVector_Plugin* p) : + m_schnapps(s), + m_plugin(p), + b_updatingUI(false) +{ + setupUi(this); + + connect(combo_positionVBO, SIGNAL(currentIndexChanged(int)), this, SLOT(positionVBOChanged(int))); + connect(list_vectorVBO, SIGNAL(itemSelectionChanged()), this, SLOT(selectedVectorsVBOChanged())); + connect(slider_vectorsScaleFactor, SIGNAL(valueChanged(int)), this, SLOT(vectorsScaleFactorChanged(int))); +} + + + + + +void Surface_RenderVector_DockTab::positionVBOChanged(int index) +{ + if(!b_updatingUI) + { + View* view = m_schnapps->getSelectedView(); + MapHandlerGen* map = m_schnapps->getSelectedMap(); + if(view && map) + { + m_plugin->h_viewParameterSet[view][map].positionVBO = map->getVBO(combo_positionVBO->currentText()); + view->updateGL(); + } + } +} + +void Surface_RenderVector_DockTab::selectedVectorsVBOChanged() +{ + if(!b_updatingUI) + { + View* view = m_schnapps->getSelectedView(); + MapHandlerGen* map = m_schnapps->getSelectedMap(); + if(view && map) + { + QList currentItems = list_vectorVBO->selectedItems(); + QList vbos; + foreach(QListWidgetItem* item, currentItems) + vbos.append(map->getVBO(item->text())); + m_plugin->h_viewParameterSet[view][map].vectorVBOs = vbos; + view->updateGL(); + } + } +} + +void Surface_RenderVector_DockTab::vectorsScaleFactorChanged(int i) +{ + if(!b_updatingUI) + { + View* view = m_schnapps->getSelectedView(); + MapHandlerGen* map = m_schnapps->getSelectedMap(); + if(view && map) + { + m_plugin->h_viewParameterSet[view][map].vectorsScaleFactor = i / 50.0; + view->updateGL(); + } + } +} + + + + + +void Surface_RenderVector_DockTab::addPositionVBO(QString name) +{ + b_updatingUI = true; + combo_positionVBO->addItem(name); + b_updatingUI = false; +} + +void Surface_RenderVector_DockTab::removePositionVBO(QString name) +{ + b_updatingUI = true; + int curIndex = combo_positionVBO->currentIndex(); + int index = combo_positionVBO->findText(name, Qt::MatchExactly); + if(curIndex == index) + combo_positionVBO->setCurrentIndex(0); + combo_positionVBO->removeItem(index); + b_updatingUI = false; +} + +void Surface_RenderVector_DockTab::addVectorVBO(QString name) +{ + b_updatingUI = true; + list_vectorVBO->addItem(name); + b_updatingUI = false; +} + +void Surface_RenderVector_DockTab::removeVectorVBO(QString name) +{ + b_updatingUI = true; + QList vbo = list_vectorVBO->findItems(name, Qt::MatchExactly); + if(!vbo.empty()) + delete vbo[0]; + b_updatingUI = false; +} + +void Surface_RenderVector_DockTab::updateMapParameters() +{ + b_updatingUI = true; + + combo_positionVBO->clear(); + combo_positionVBO->addItem("- select VBO -"); + + list_vectorVBO->clear(); + + View* view = m_schnapps->getSelectedView(); + MapHandlerGen* map = m_schnapps->getSelectedMap(); + if(view && map) + { + const MapParameters& p = m_plugin->h_viewParameterSet[view][map]; + + unsigned int i = 0; + foreach(Utils::VBO* vbo, map->getVBOSet().values()) + { + if(vbo->dataSize() == 3) + { + combo_positionVBO->addItem(QString::fromStdString(vbo->name())); + if(vbo == p.positionVBO) + combo_positionVBO->setCurrentIndex(i); + + list_vectorVBO->addItem(QString::fromStdString(vbo->name())); + if(p.vectorVBOs.contains(vbo)) + list_vectorVBO->item(i)->setSelected(true); + + ++i; + } + } + + slider_vectorsScaleFactor->setSliderPosition(p.vectorsScaleFactor * 50.0); + } + + b_updatingUI = false; +} + +} // namespace SCHNApps + +} // namespace CGoGN -- GitLab