From ada7c5ba2b745545d612e85add19127645dc6f0e Mon Sep 17 00:00:00 2001 From: Pierre Kraemer Date: Wed, 1 Apr 2015 17:37:43 +0200 Subject: [PATCH] SCHNApps: bug fix in render vector plugin --- CGoGN/src/Utils/Shaders/shaderPhong.cpp | 35 ++++-- .../surface_radiance/src/surface_radiance.cpp | 71 ++++++------ .../src/surface_render_dockTab.cpp | 12 +-- .../forms/surface_renderVector.ui | 68 +++++------- .../include/surface_renderVector.h | 18 ---- .../include/surface_renderVector_dockTab.h | 2 - .../src/surface_renderVector.cpp | 13 --- .../src/surface_renderVector_dockTab.cpp | 102 ++++++++---------- SCHNApps/src/view.cpp | 1 + 9 files changed, 133 insertions(+), 189 deletions(-) diff --git a/CGoGN/src/Utils/Shaders/shaderPhong.cpp b/CGoGN/src/Utils/Shaders/shaderPhong.cpp index 6f4ecebc..8684df60 100644 --- a/CGoGN/src/Utils/Shaders/shaderPhong.cpp +++ b/CGoGN/src/Utils/Shaders/shaderPhong.cpp @@ -54,17 +54,30 @@ ShaderPhong::ShaderPhong(bool withClipping, bool doubleSided, bool withEyePositi std::string glxvert(GLSLShader::defines_gl()); std::string glxfrag(GLSLShader::defines_gl()); - // get choose GL defines (2 or 3) - // ans compile shaders - std::string glxvert(GLSLShader::defines_gl()); - if (m_with_eyepos) - glxvert.append("#define WITH_EYEPOSITION"); - glxvert.append(vertexShaderText); - std::string glxfrag(GLSLShader::defines_gl()); - // Use double sided lighting if set - if (doubleSided) - glxfrag.append("#define DOUBLE_SIDED\n"); - glxfrag.append(fragmentShaderText); + if (withClipping) + { + m_nameVS = "ShaderPhongClip_vs"; + m_nameFS = "ShaderPhongClip_fs"; + if (m_with_eyepos) + glxvert.append("#define WITH_EYEPOSITION"); + glxvert.append(vertexShaderClipText); + // Use double sided lighting if set + if (doubleSided) + glxfrag.append("#define DOUBLE_SIDED\n"); + glxfrag.append(fragmentShaderClipText); + } + else + { + m_nameVS = "ShaderPhong_vs"; + m_nameFS = "ShaderPhong_fs"; + if (m_with_eyepos) + glxvert.append("#define WITH_EYEPOSITION"); + glxvert.append(vertexShaderText); + // Use double sided lighting if set + if (doubleSided) + glxfrag.append("#define DOUBLE_SIDED\n"); + glxfrag.append(fragmentShaderText); + } loadShadersFromMemory(glxvert.c_str(), glxfrag.c_str()); diff --git a/SCHNApps/Plugins/surface_radiance/src/surface_radiance.cpp b/SCHNApps/Plugins/surface_radiance/src/surface_radiance.cpp index 60ef685e..1f62a64c 100644 --- a/SCHNApps/Plugins/surface_radiance/src/surface_radiance.cpp +++ b/SCHNApps/Plugins/surface_radiance/src/surface_radiance.cpp @@ -335,50 +335,43 @@ void Surface_Radiance_Plugin::decimate(const QString& mapName, const QString& po mapParams.positionApproximator = new Algo::Surface::Decimation::Approximator_QEM(*map, position); } -// if (mapParams.normalApproximator == NULL) -// { -// mapParams.normalApproximator = -// new Algo::Surface::Decimation::Approximator_InterpolateAlongEdge( -// *map, -// normal, -// position, -// ((Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator))->getApproximationResultAttribute() -// ); -// } - -// if (mapParams.radianceApproximator == NULL) -// { -// mapParams.radianceApproximator = -// new Algo::Surface::Decimation::Approximator_InterpolateAlongEdge >( -// *map, -// mapParams.radiance, -// position, -// ((Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator))->getApproximationResultAttribute() -// ); -// } + if (mapParams.normalApproximator == NULL) + { + mapParams.normalApproximator = + new Algo::Surface::Decimation::Approximator_InterpolateAlongEdge( + *map, + normal, + position, + ((Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator))->getApproximationResultAttribute() + ); + } + + if (mapParams.radianceApproximator == NULL) + { + mapParams.radianceApproximator = + new Algo::Surface::Decimation::Approximator_InterpolateAlongEdge >( + *map, + mapParams.radiance, + position, + ((Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator))->getApproximationResultAttribute() + ); + } if (mapParams.selector == NULL) { -// mapParams.selector = -// new EdgeSelector_Radiance( -// *map, -// position, -// normal, -// mapParams.radiance, -// *(Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator), -// *(Algo::Surface::Decimation::Approximator*)(mapParams.normalApproximator), -// *(Algo::Surface::Decimation::Approximator, EDGE>*)(mapParams.radianceApproximator) -// ); - -// mapParams.selector = -// new Algo::Surface::Decimation::EdgeSelector_QEM( -// *map, -// position, -// *(Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator) -// ); + mapParams.selector = + new EdgeSelector_Radiance( + *map, + position, + normal, + mapParams.radiance, + *(Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator), + *(Algo::Surface::Decimation::Approximator*)(mapParams.normalApproximator), + *(Algo::Surface::Decimation::Approximator, EDGE>*)(mapParams.radianceApproximator) + ); mapParams.selector = - new Algo::Surface::Decimation::EdgeSelector_ColorNaive( + new Algo::Surface::Decimation::EdgeSelector_QEM( *map, position, *(Algo::Surface::Decimation::Approximator*)(mapParams.positionApproximator) diff --git a/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp b/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp index 02aa5809..071bfed9 100644 --- a/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp +++ b/SCHNApps/Plugins/surface_render/src/surface_render_dockTab.cpp @@ -50,7 +50,7 @@ void Surface_Render_DockTab::positionVBOChanged(int index) { m_plugin->h_viewParameterSet[view][map].positionVBO = map->getVBO(combo_positionVBO->currentText()); view->updateGL(); - m_plugin->pythonRecording("changeVertexColor", "", view->getName(), map->getName(), rgbCol[0], rgbCol[1], rgbCol[2]); + m_plugin->pythonRecording("changePositionVBO", "", view->getName(), map->getName(), combo_positionVBO->currentText()); } } } @@ -65,7 +65,7 @@ void Surface_Render_DockTab::normalVBOChanged(int index) { m_plugin->h_viewParameterSet[view][map].normalVBO = map->getVBO(combo_normalVBO->currentText()); view->updateGL(); - m_plugin->pythonRecording("changePositionVBO", "", view->getName(), map->getName(), combo_positionVBO->currentText()); + m_plugin->pythonRecording("changeNormalVBO", "", view->getName(), map->getName(), combo_normalVBO->currentText()); } } } @@ -80,7 +80,7 @@ void Surface_Render_DockTab::colorVBOChanged(int index) { m_plugin->h_viewParameterSet[view][map].colorVBO = map->getVBO(combo_colorVBO->currentText()); view->updateGL(); - m_plugin->pythonRecording("changeNormalVBO", "", view->getName(), map->getName(), combo_normalVBO->currentText()); + m_plugin->pythonRecording("changeColorVBO", "", view->getName(), map->getName(), combo_colorVBO->currentText()); } } } @@ -208,7 +208,6 @@ void Surface_Render_DockTab::colorSelected(const QColor& col) { if (m_currentColorDial == 1) { - m_diffuseColor = col; dcolorButton->setStyleSheet("QPushButton { background-color:" + col.name() + "}"); @@ -220,12 +219,12 @@ void Surface_Render_DockTab::colorSelected(const QColor& col) { m_plugin->h_viewParameterSet[view][map].diffuseColor = rgbCol; view->updateGL(); + m_plugin->pythonRecording("changeFaceColor", "", view->getName(), map->getName(), rgbCol[0], rgbCol[1], rgbCol[2]); } } if (m_currentColorDial == 2) { - m_simpleColor = col; scolorButton->setStyleSheet("QPushButton { background-color:" + col.name() + "}"); @@ -237,12 +236,12 @@ void Surface_Render_DockTab::colorSelected(const QColor& col) { m_plugin->h_viewParameterSet[view][map].simpleColor = rgbCol; view->updateGL(); + m_plugin->pythonRecording("changeEdgeColor", "", view->getName(), map->getName(), rgbCol[0], rgbCol[1], rgbCol[2]); } } if (m_currentColorDial == 3) { - m_vertexColor = col; vcolorButton->setStyleSheet("QPushButton { background-color:" + col.name() + "}"); @@ -254,6 +253,7 @@ void Surface_Render_DockTab::colorSelected(const QColor& col) { m_plugin->h_viewParameterSet[view][map].vertexColor = rgbCol; view->updateGL(); + m_plugin->pythonRecording("changeVertexColor", "", view->getName(), map->getName(), rgbCol[0], rgbCol[1], rgbCol[2]); } } } diff --git a/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui b/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui index f98b6594..acaa8aee 100644 --- a/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui +++ b/SCHNApps/Plugins/surface_renderVector/forms/surface_renderVector.ui @@ -14,23 +14,6 @@ Form - - - - true - - - - - - - - - - Position : - - - @@ -46,13 +29,23 @@ - - + + - Vectors : + Selected vector size : + + + + + + + Position : + + + @@ -60,7 +53,14 @@ - + + + + Vectors : + + + + Qt::Vertical @@ -73,7 +73,7 @@ - + 50 @@ -83,30 +83,10 @@ - - - - Vectors Size : - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + - Color: + Selected vector color : diff --git a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h index a161c9e7..0bb81b9b 100644 --- a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h +++ b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector.h @@ -12,22 +12,8 @@ namespace CGoGN namespace SCHNApps { -//struct SVectorInfo -//{ -// Utils::VBO* vbo; -// QColor color; -// float scaleFactor; -// SVectorInfo() : -// vbo(NULL), color(QColor("red")), scaleFactor(1.0f) -// {} -// SVectorInfo(Utils::VBO* ptr) : -// vbo(ptr), color(QColor("red")), scaleFactor(1.0f) -// {} -//}; - struct MapParameters { - MapParameters() : positionVBO(NULL) {} @@ -36,10 +22,6 @@ struct MapParameters QList vectorVBOs; QList colors; QList scaleFactors; - - //float vectorsScaleFactor; - - }; class Surface_RenderVector_Plugin : public PluginInteraction diff --git a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h index df16e328..ebc22bd3 100644 --- a/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h +++ b/SCHNApps/Plugins/surface_renderVector/include/surface_renderVector_dockTab.h @@ -26,8 +26,6 @@ private: SCHNApps* m_schnapps; Surface_RenderVector_Plugin* m_plugin; bool b_updatingUI; - int m_current_vbo; - QString m_currentVBOName; private slots: void positionVBOChanged(int index); diff --git a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp index 5ae95a7d..e5f0b797 100644 --- a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp +++ b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector.cpp @@ -51,19 +51,6 @@ 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); - // } - //} - - if (p.positionVBO) { m_vectorShader->setAttributePosition(p.positionVBO); diff --git a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp index ec6dedff..2a84cab0 100644 --- a/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp +++ b/SCHNApps/Plugins/surface_renderVector/src/surface_renderVector_dockTab.cpp @@ -15,8 +15,7 @@ namespace SCHNApps Surface_RenderVector_DockTab::Surface_RenderVector_DockTab(SCHNApps* s, Surface_RenderVector_Plugin* p) : m_schnapps(s), m_plugin(p), - b_updatingUI(false), - m_current_vbo(-1) + b_updatingUI(false) { setupUi(this); @@ -24,11 +23,6 @@ Surface_RenderVector_DockTab::Surface_RenderVector_DockTab(SCHNApps* s, Surface_ slider_vectorsScaleFactor->setDisabled(true); combo_color->setDisabled(true); - QFont font = selectedName->font(); - font.setBold(true); - selectedName->setFont(font); - selectedName->setText("not selected"); - connect(combo_positionVBO, SIGNAL(currentIndexChanged(int)), this, SLOT(positionVBOChanged(int))); connect(slider_vectorsScaleFactor, SIGNAL(valueChanged(int)), this, SLOT(vectorsScaleFactorChanged(int))); connect(list_vectorVBO, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(vectorsVBOChecked(QListWidgetItem*))); @@ -37,10 +31,9 @@ Surface_RenderVector_DockTab::Surface_RenderVector_DockTab(SCHNApps* s, Surface_ connect(combo_color, SIGNAL(currentIndexChanged(int)), this, SLOT(colorChanged(int))); } - void Surface_RenderVector_DockTab::positionVBOChanged(int index) { - if(!b_updatingUI) + if (!b_updatingUI) { View* view = m_schnapps->getSelectedView(); MapHandlerGen* map = m_schnapps->getSelectedMap(); @@ -55,38 +48,31 @@ void Surface_RenderVector_DockTab::positionVBOChanged(int index) void Surface_RenderVector_DockTab::selectedVectorVBOChanged(QListWidgetItem* item, QListWidgetItem* old) { - if(!b_updatingUI) + if (!b_updatingUI) { - if ((item->checkState() == Qt::Checked)) + View* view = m_schnapps->getSelectedView(); + MapHandlerGen* map = m_schnapps->getSelectedMap(); + if (view && map) { - selectedName->setText(item->text()); - slider_vectorsScaleFactor->setEnabled(true); - combo_color->setEnabled(true); - View* view = m_schnapps->getSelectedView(); - MapHandlerGen* map = m_schnapps->getSelectedMap(); - if (view && map) + if ((item->checkState() == Qt::Checked)) { const MapParameters& p = m_plugin->h_viewParameterSet[view][map]; Utils::VBO* v = map->getVBO(item->text()); - m_current_vbo = p.vectorVBOs.indexOf(v); - if (m_current_vbo >= 0) - { - slider_vectorsScaleFactor->setSliderPosition(p.scaleFactors[m_current_vbo] * 50.0f); - std::cout << item->text().toStdString() << " : " << p.scaleFactors[m_current_vbo] << " / " << slider_vectorsScaleFactor->value() << std::endl; - combo_color->setColor(p.colors[m_current_vbo]); - } + int idx = p.vectorVBOs.indexOf(v); + slider_vectorsScaleFactor->setEnabled(true); + slider_vectorsScaleFactor->setSliderPosition(p.scaleFactors[idx] * 50.0f); + combo_color->setEnabled(true); + combo_color->setColor(p.colors[idx]); + } + else + { + slider_vectorsScaleFactor->setDisabled(true); + combo_color->setDisabled(true); } - } - else - { - selectedName->setText("not selected"); - slider_vectorsScaleFactor->setDisabled(true); - combo_color->setDisabled(true); } } } - void Surface_RenderVector_DockTab::vectorsVBOChecked(QListWidgetItem* item) { if (!b_updatingUI) @@ -97,6 +83,7 @@ void Surface_RenderVector_DockTab::vectorsVBOChecked(QListWidgetItem* item) { MapParameters& p = m_plugin->h_viewParameterSet[view][map]; Utils::VBO* vbo = map->getVBO(item->text()); + if (item->checkState() == Qt::Checked) { p.vectorVBOs.append(vbo); @@ -114,11 +101,10 @@ void Surface_RenderVector_DockTab::vectorsVBOChecked(QListWidgetItem* item) p.vectorVBOs.removeAt(idx); p.scaleFactors.removeAt(idx); p.colors.removeAt(idx); - list_vectorVBO->setCurrentItem(item); - list_vectorVBO->clearSelection(); +// list_vectorVBO->setCurrentItem(item); +// list_vectorVBO->clearSelection(); slider_vectorsScaleFactor->setDisabled(true); combo_color->setDisabled(true); - m_current_vbo = -1; m_plugin->pythonRecording("removeVectorVBO", "", view->getName(), map->getName(), QString(item->text())); } view->updateGL(); @@ -126,45 +112,49 @@ void Surface_RenderVector_DockTab::vectorsVBOChecked(QListWidgetItem* item) } } - - void Surface_RenderVector_DockTab::vectorsScaleFactorChanged(int i) { if(!b_updatingUI) { View* view = m_schnapps->getSelectedView(); MapHandlerGen* map = m_schnapps->getSelectedMap(); - if (view && map && (m_current_vbo>=0)) + QListWidgetItem* item = list_vectorVBO->currentItem(); + if (view && map && item) { - float& scale = m_plugin->h_viewParameterSet[view][map].scaleFactors[m_current_vbo]; + MapParameters& p = m_plugin->h_viewParameterSet[view][map]; + Utils::VBO* vbo = map->getVBO(item->text()); + int idx = p.vectorVBOs.indexOf(vbo); + float& scale = p.scaleFactors[idx]; float newScale = float(i) / 50.0f; - std::cout << "vectorsScaleFactorChanged " << i << " -> " << newScale << " / old:" << scale << std::endl; if (fabs(scale - newScale) > 0.01f) { scale = newScale; m_plugin->pythonRecording("changeVectorScaleFactor", "", view->getName(), map->getName(), - selectedName->text(), newScale); + item->text(), newScale); view->updateGL(); } } } } - void Surface_RenderVector_DockTab::colorChanged(int i) { if (!b_updatingUI) { View* view = m_schnapps->getSelectedView(); MapHandlerGen* map = m_schnapps->getSelectedMap(); - if (view && map && (m_current_vbo >= 0)) + QListWidgetItem* item = list_vectorVBO->currentItem(); + if (view && map && item) { - QColor& col = m_plugin->h_viewParameterSet[view][map].colors[m_current_vbo]; + MapParameters& p = m_plugin->h_viewParameterSet[view][map]; + Utils::VBO* vbo = map->getVBO(item->text()); + int idx = p.vectorVBOs.indexOf(vbo); + QColor& col = p.colors[idx]; if (col != combo_color->color()) { col = combo_color->color(); m_plugin->pythonRecording("changeVectorColor", "", view->getName(), map->getName(), - selectedName->text(), combo_color->color().name()); + item->text(), combo_color->color().name()); view->updateGL(); } } @@ -172,6 +162,9 @@ void Surface_RenderVector_DockTab::colorChanged(int i) } + + + void Surface_RenderVector_DockTab::addPositionVBO(QString name) { b_updatingUI = true; @@ -211,14 +204,13 @@ void Surface_RenderVector_DockTab::removeVectorVBO(QString name) void Surface_RenderVector_DockTab::updateMapParameters() { - std::cout << "Surface_RenderVector_DockTab::updateMapParameters" << std::endl; - b_updatingUI = true; combo_positionVBO->clear(); combo_positionVBO->addItem("- select VBO -"); list_vectorVBO->clear(); + list_vectorVBO->clearSelection(); View* view = m_schnapps->getSelectedView(); MapHandlerGen* map = m_schnapps->getSelectedMap(); @@ -226,32 +218,30 @@ void Surface_RenderVector_DockTab::updateMapParameters() { const MapParameters& p = m_plugin->h_viewParameterSet[view][map]; - unsigned int i = 0; + unsigned int i = 1; 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+1); // +1 for "- select VBO -" + combo_positionVBO->setCurrentIndex(i); + list_vectorVBO->addItem(QString::fromStdString(vbo->name())); QListWidgetItem* item = list_vectorVBO->item(list_vectorVBO->count() - 1); item->setFlags(item->flags() | Qt::ItemIsEditable); item->setCheckState(Qt::Unchecked); if(p.vectorVBOs.contains(vbo)) - list_vectorVBO->item(i)->setCheckState(Qt::Checked); + list_vectorVBO->item(i-1)->setCheckState(Qt::Checked); + ++i; } } - if (m_current_vbo >= 0) - { - slider_vectorsScaleFactor->setSliderPosition(p.scaleFactors[m_current_vbo] * 50.0f); - combo_color->setColor(p.colors[m_current_vbo]); - } - - // set color } + slider_vectorsScaleFactor->setDisabled(true); + combo_color->setDisabled(true); + b_updatingUI = false; } diff --git a/SCHNApps/src/view.cpp b/SCHNApps/src/view.cpp index 1228b73a..e504c790 100644 --- a/SCHNApps/src/view.cpp +++ b/SCHNApps/src/view.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace CGoGN { -- GitLab