From e32c1ed7efd0b04de4ee65e6365bdfe5298f882e Mon Sep 17 00:00:00 2001 From: Guido Ranzuglia granzuglia Date: Wed, 7 Sep 2016 06:07:00 +0000 Subject: [PATCH] - added support for switching among per wedge/vertex texture coords --- src/common/ml_shared_data_context.cpp | 2 +- src/meshlab/layerDialog.cpp | 15 ++++++++++-- src/meshlab/ml_render_gui.cpp | 34 ++++++++++++++++++++++++--- src/meshlab/ml_render_gui.h | 3 +++ src/meshlab/ml_rendering_actions.cpp | 3 ++- 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/common/ml_shared_data_context.cpp b/src/common/ml_shared_data_context.cpp index 0647cb616..7dd341135 100644 --- a/src/common/ml_shared_data_context.cpp +++ b/src/common/ml_shared_data_context.cpp @@ -652,6 +652,7 @@ void MLPoliciesStandAloneFunctions::suggestedDefaultPerViewRenderingData(MeshMod tmpatts[MLRenderingData::ATT_NAMES::ATT_VERTNORMAL] = true; tmpatts[MLRenderingData::ATT_NAMES::ATT_VERTCOLOR] = true; tmpatts[MLRenderingData::ATT_NAMES::ATT_WEDGETEXTURE] = true; + tmpatts[MLRenderingData::ATT_NAMES::ATT_VERTTEXTURE] = true; dt.set(MLRenderingData::PR_SOLID,tmpatts); } else @@ -664,7 +665,6 @@ void MLPoliciesStandAloneFunctions::suggestedDefaultPerViewRenderingData(MeshMod tmpatts[MLRenderingData::ATT_NAMES::ATT_VERTNORMAL] = true; tmpatts[MLRenderingData::ATT_NAMES::ATT_VERTCOLOR] = true; dt.set(MLRenderingData::PR_WIREFRAME_EDGES,tmpatts); - return; } } } diff --git a/src/meshlab/layerDialog.cpp b/src/meshlab/layerDialog.cpp index 0f5aee8b1..271c24305 100644 --- a/src/meshlab/layerDialog.cpp +++ b/src/meshlab/layerDialog.cpp @@ -747,8 +747,19 @@ void LayerDialog::updateRenderingParametersTab(int meshid,const MLRenderingData& if (tabw != NULL) { tabw->setAssociatedMeshId(meshid); - if ((mw != NULL) && (mw->meshDoc() != NULL)) - tabw->updateVisibility(mw->meshDoc()->getMesh(meshid)); + MeshModel* mm; + if ((mw != NULL) && (mw->meshDoc() != NULL)) + { + mm = mw->meshDoc()->getMesh(meshid); + if (mm != NULL) + { + if (mm->hasDataMask(MeshModel::MM_VERTTEXCOORD) && !(mm->hasDataMask(MeshModel::MM_WEDGTEXCOORD))) + tabw->setTextureAction(MLRenderingData::ATT_NAMES::ATT_VERTTEXTURE); + else + tabw->setTextureAction(MLRenderingData::ATT_NAMES::ATT_WEDGETEXTURE); + tabw->updateVisibility(mm); + } + } tabw->updateGUIAccordingToRenderingData(dt); } } diff --git a/src/meshlab/ml_render_gui.cpp b/src/meshlab/ml_render_gui.cpp index f13d500ac..7394d8232 100644 --- a/src/meshlab/ml_render_gui.cpp +++ b/src/meshlab/ml_render_gui.cpp @@ -66,8 +66,10 @@ void MLRenderingToolbar::toggle( QAction* act) void MLRenderingToolbar::setAccordingToRenderingData(const MLRenderingData& dt) { - foreach(MLRenderingAction* rendact,_acts) - rendact->setChecked(rendact->isRenderingDataEnabled(dt)); + foreach(MLRenderingAction* rendact, _acts) + { + rendact->setChecked(rendact->isRenderingDataEnabled(dt)); + } } void MLRenderingToolbar::setAssociatedMeshId( int meshid ) @@ -388,6 +390,23 @@ void MLRenderingSolidParametersFrame::allTopLevelGuiActions(QList& tpl tplevelactions.append(_texttool->actions()); } +void MLRenderingSolidParametersFrame::setTextureAction(MLRenderingData::ATT_NAMES textattname) +{ + if (textattname == MLRenderingData::ATT_NAMES::ATT_WEDGETEXTURE) + { + MLRenderingPerWedgeTextCoordAction* wedact = new MLRenderingPerWedgeTextCoordAction(_meshid, this); + _texttool->setRenderingAction(wedact); + } + else + { + if (textattname == MLRenderingData::ATT_NAMES::ATT_VERTTEXTURE) + { + MLRenderingPerVertTextCoordAction* vertact = new MLRenderingPerVertTextCoordAction(MLRenderingData::PR_SOLID, this); + _texttool->setRenderingAction(vertact); + } + } +} + MLRenderingWireParametersFrame::MLRenderingWireParametersFrame( QWidget* parent ) :MLRenderingParametersFrame(-1,parent) { @@ -468,7 +487,7 @@ void MLRenderingWireParametersFrame::initGui() connect(_dimension,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); connect(_dimension, SIGNAL(updateRenderingDataAccordingToAction(int, MLRenderingAction*, bool)), this, SIGNAL(updateRenderingDataAccordingToAction(int, MLRenderingAction*, bool))); - QLabel* wirelab = new QLabel("Wire Modality",this); + QLabel* wirelab = new QLabel("Polygonal Modality",this); wirelab->setFont(boldfont); layout->addWidget(wirelab,3,0,Qt::AlignLeft); _edgetool = new MLRenderingOnOffToolbar(_meshid,this); @@ -1029,6 +1048,15 @@ void MLRenderingParametersTab::actionsList(QList& actions) } } +void MLRenderingParametersTab::setTextureAction(MLRenderingData::ATT_NAMES textattname) +{ + for (QMap::iterator it = _parframe.begin(); it != _parframe.end(); ++it) + { + if (it.value() != NULL) + it.value()->setTextureAction(textattname); + } +} + MLRenderingParametersTab::~MLRenderingParametersTab() { for(QMap::iterator it = _parframe.begin();it != _parframe.end();++it) diff --git a/src/meshlab/ml_render_gui.h b/src/meshlab/ml_render_gui.h index da3940a2b..c80adbaf5 100644 --- a/src/meshlab/ml_render_gui.h +++ b/src/meshlab/ml_render_gui.h @@ -236,6 +236,7 @@ public: virtual void getCurrentRenderingDataAccordingToGUI(MLRenderingData& dt) const = 0; virtual void actionsList(QList& actions) = 0; virtual void allTopLevelGuiActions(QList& tplevelactions) = 0; + virtual void setTextureAction(MLRenderingData::ATT_NAMES textattname) {} virtual void updateVisibility(MeshModel*) {} static MLRenderingParametersFrame* factory(MLRenderingAction* act, int meshid, QWidget* parent); static void destroy(MLRenderingParametersFrame* pf); @@ -283,6 +284,7 @@ public: void updateVisibility(MeshModel* mm); void actionsList(QList& actions); void allTopLevelGuiActions(QList& tplevelactions); + void setTextureAction(MLRenderingData::ATT_NAMES textattname); private: void initGui(); @@ -425,6 +427,7 @@ public: void updatePerMeshRenderingAction(QList& acts); void actionsList(QList& actions); + void setTextureAction(MLRenderingData::ATT_NAMES textattname); private: void initGui(const QList& tab); diff --git a/src/meshlab/ml_rendering_actions.cpp b/src/meshlab/ml_rendering_actions.cpp index 10b9da280..1e0e743c1 100644 --- a/src/meshlab/ml_rendering_actions.cpp +++ b/src/meshlab/ml_rendering_actions.cpp @@ -155,11 +155,12 @@ void MLRenderingWireAction::createSisterAction(MLRenderingAction *& sisteract, Q void MLRenderingWireAction::updateRenderingData(MLRenderingData& rd ) { rd.set(MLRenderingData::PR_WIREFRAME_TRIANGLES,isChecked()); + //rd.set(MLRenderingData::PR_WIREFRAME_EDGES, isChecked()); } bool MLRenderingWireAction::isRenderingDataEnabled( const MLRenderingData& rd ) const { - return rd.isPrimitiveActive(MLRenderingData::PR_WIREFRAME_TRIANGLES); + return (rd.isPrimitiveActive(MLRenderingData::PR_WIREFRAME_TRIANGLES) /*|| rd.isPrimitiveActive(MLRenderingData::PR_WIREFRAME_EDGES)*/); } MLRenderingSolidAction::MLRenderingSolidAction( QObject* parent )