diff --git a/src/common/interfaces.h b/src/common/interfaces.h index bb9330f5b..55570a15a 100644 --- a/src/common/interfaces.h +++ b/src/common/interfaces.h @@ -495,7 +495,7 @@ public: virtual bool startDecorate(QAction *, MeshDocument &, RichParameterSet *, GLArea *) {return false;} virtual bool startDecorate(QAction *, MeshModel &, RichParameterSet *, GLArea *) {return false;} - virtual void decorateMesh(QAction *, MeshModel &, RichParameterSet *,QPainter *, GLLogStream &) = 0; + virtual void decorateMesh(QAction *, MeshModel &, RichParameterSet *,GLArea *, QPainter *, GLLogStream &) = 0; virtual void decorateDoc(QAction *, MeshDocument &, RichParameterSet *, GLArea *, QPainter *, GLLogStream &) = 0; virtual void endDecorate(QAction *, MeshModel &, RichParameterSet *, GLArea *){} virtual void endDecorate(QAction *, MeshDocument &, RichParameterSet *, GLArea *){} diff --git a/src/common/ml_shared_data_context.cpp b/src/common/ml_shared_data_context.cpp index 41f23d074..9727edaee 100644 --- a/src/common/ml_shared_data_context.cpp +++ b/src/common/ml_shared_data_context.cpp @@ -657,6 +657,13 @@ void MLPoliciesStandAloneFunctions::setAttributePriorities(MLRenderingData::Rend atts[MLRenderingData::ATT_NAMES::ATT_VERTTEXTURE] &= !(atts[MLRenderingData::ATT_NAMES::ATT_WEDGETEXTURE]); } +//void MLPoliciesStandAloneFunctions::setPerViewRenderingDataPriorities( MeshModel* mm,MLRenderingData& dt ) +//{ +// if (mm == NULL) +// return; +// +//} + void MLPoliciesStandAloneFunctions::setPerViewGLOptionsPriorities(MeshModel* mm,MLRenderingData& dt ) { if (mm == NULL) diff --git a/src/common/ml_shared_data_context.h b/src/common/ml_shared_data_context.h index 585d9ea95..1d490ff32 100644 --- a/src/common/ml_shared_data_context.h +++ b/src/common/ml_shared_data_context.h @@ -44,7 +44,8 @@ struct MLPerViewGLOptions : public vcg::RenderingModalityGLOptions /*****************************/ bool _peredge_extra_enabled; - bool _peredge_boundary_enabled; + bool _peredge_edgeboundary_enabled; + bool _peredge_faceboundary_enabled; bool _peredge_edgemanifold_enabled; bool _peredge_vertmanifold_enabled; bool _peredge_text_boundary_enabled; @@ -71,9 +72,10 @@ struct MLPerViewGLOptions : public vcg::RenderingModalityGLOptions { _visible = true; _peredge_extra_enabled = false; - _peredge_boundary_enabled = true; - _peredge_edgemanifold_enabled = true; - _peredge_vertmanifold_enabled = true; + _peredge_edgeboundary_enabled = false; + _peredge_faceboundary_enabled = false; + _peredge_edgemanifold_enabled = false; + _peredge_vertmanifold_enabled = false; _peredge_text_boundary_enabled = false; _back_face_cull = false; _double_side_lighting = false; @@ -112,7 +114,8 @@ private: { _visible = opts._visible; _peredge_extra_enabled = opts._peredge_extra_enabled; - _peredge_boundary_enabled = opts._peredge_boundary_enabled; + _peredge_edgeboundary_enabled = opts._peredge_edgeboundary_enabled; + _peredge_faceboundary_enabled = opts._peredge_faceboundary_enabled; _peredge_edgemanifold_enabled = opts._peredge_edgemanifold_enabled; _peredge_vertmanifold_enabled = opts._peredge_vertmanifold_enabled; _peredge_text_boundary_enabled = opts._peredge_text_boundary_enabled; @@ -184,6 +187,8 @@ struct MLPoliciesStandAloneFunctions static void setPerViewGLOptionsPriorities(MeshModel* mm,MLRenderingData& dt ); + //static void setPerViewRenderingDataPriorities(MeshModel* mm,MLRenderingData& dt); + static void suggestedDefaultPerViewGLOptions(MLPerViewGLOptions& tmp); static void suggestedDefaultPerViewRenderingData(MeshModel* meshmodel,MLRenderingData& dt); @@ -224,6 +229,8 @@ public: //and the 'meaningful' gl parameters used by the rendering system typedef QMap PerMeshRenderingDataMap; + MeshDocument& meshDoc() {return _md;} + void initializeGL(); void deAllocateGPUSharedData(); diff --git a/src/meshlab/glarea.cpp b/src/meshlab/glarea.cpp index 52b82b28c..d53d45ad4 100644 --- a/src/meshlab/glarea.cpp +++ b/src/meshlab/glarea.cpp @@ -28,6 +28,7 @@ #include "glarea.h" #include "mainwindow.h" #include "multiViewer_Container.h" +#include "ml_default_decorators.h" #include #include @@ -414,12 +415,14 @@ int GLArea::RenderForSelection(int pickX, int pickY) void GLArea::paintEvent(QPaintEvent* /*event*/) { - if (mvc() == NULL) return; + if (mvc() == NULL) + return; QPainter painter(this); painter.beginNativePainting(); makeCurrent(); - if(!isValid() ) return; + if(!isValid()) + return; QTime time; time.start(); @@ -464,16 +467,23 @@ void GLArea::paintEvent(QPaintEvent* /*event*/) shared->getRenderInfoPerMeshView(context(),dt); iRenderer->Render(currentShader, *this->md(), dt, this); + + + MLDefaultMeshDecorators defdec; + foreach(MeshModel * mp, this->md()->meshList) { - if (mp->visible) + if ((mp != NULL) && (mp->visible)) { QList& tmpset = iPerMeshDecoratorsListMap[mp->id()]; for( QList::iterator it = tmpset.begin(); it != tmpset.end();++it) { MeshDecorateInterface * decorInterface = qobject_cast((*it)->parent()); - decorInterface->decorateMesh(*it,*mp,this->glas.currentGlobalParamSet,&painter,md()->Log); + decorInterface->decorateMesh(*it,*mp,this->glas.currentGlobalParamSet,this,&painter,md()->Log); } + MLRenderingData meshdt; + shared->getRenderInfoPerMeshView(mp->id(),context(),meshdt); + defdec.decorateMesh(*mp,meshdt,&painter,md()->Log); } } } @@ -506,15 +516,6 @@ void GLArea::paintEvent(QPaintEvent* /*event*/) throw MLException(QString("GLArea: invalid MLPerViewGLOptions")); setLightingColors(opts); - //union of all the attributes requested at least by a modality rendering - MLRenderingData::RendAtts unionatts; - for(int pm = 0;pm < (int)MLRenderingData::PR_ARITY;++pm) - { - MLRenderingData::RendAtts tmp; - if (curr.get(MLRenderingData::PRIMITIVE_MODALITY(pm),tmp) == false) - throw MLException(QString("GLArea: invalid PRIMITIVE_MODALITY")); - unionatts = MLRenderingData::RendAtts::unionSet(unionatts,tmp); - } if(opts._back_face_cull) glEnable(GL_CULL_FACE); @@ -529,8 +530,12 @@ void GLArea::paintEvent(QPaintEvent* /*event*/) for( QList::iterator it = tmpset.begin(); it != tmpset.end();++it) { MeshDecorateInterface * decorInterface = qobject_cast((*it)->parent()); - decorInterface->decorateMesh(*it,*mp,this->glas.currentGlobalParamSet, &painter,md()->Log); + decorInterface->decorateMesh(*it,*mp,this->glas.currentGlobalParamSet,this,&painter,md()->Log); } + + MLDefaultMeshDecorators defdec; + datacont->getRenderInfoPerMeshView(mp->id(),context(),curr); + defdec.decorateMesh(*mp,curr,&painter,md()->Log); } } } @@ -970,7 +975,11 @@ void GLArea::manageCurrentMeshChange() /// Note that it is rather inefficient. Such work should be done only once for each decorator. void GLArea::updateAllPerMeshDecorators() { + MeshDocument* mdoc = md(); + if (mdoc == NULL) + return; makeCurrent(); + for (QMap >::iterator i = iPerMeshDecoratorsListMap.begin(); i != iPerMeshDecoratorsListMap.end(); ++i ) { @@ -983,6 +992,23 @@ void GLArea::updateAllPerMeshDecorators() decorInterface->startDecorate(p,*m, this->glas.currentGlobalParamSet,this); } } + + MultiViewer_Container* viewcont = mvc(); + if (viewcont == NULL) + return; + + MLSceneGLSharedDataContext* shared = viewcont->sharedDataContext(); + if (shared == NULL) + return; + + MLDefaultMeshDecorators defdec; + for(MeshModel* mm = mdoc->nextMesh();mm != NULL;mm = mdoc->nextMesh(mm)) + { + MLRenderingData dt; + shared->getRenderInfoPerMeshView(mm->id(),context(),dt); + defdec.cleanMeshDecorationData(*mm,dt); + defdec.initMeshDecorationData(*mm,dt); + } } diff --git a/src/meshlab/layerDialog.cpp b/src/meshlab/layerDialog.cpp index 8d323b96f..fdebf5e00 100644 --- a/src/meshlab/layerDialog.cpp +++ b/src/meshlab/layerDialog.cpp @@ -817,29 +817,14 @@ void LayerDialog::updateRenderingDataAccordingToActions(int meshid,const QListgetRenderingData(meshid,dt); - foreach(MLRenderingAction* act,acts) - { - if (act != NULL) - act->updateRenderingData(dt); - } - mw->setRenderingData(meshid,dt); - mw->GLA()->update(); + mw->updateRenderingDataAccordingToActions(meshid,acts); } void LayerDialog::updateRenderingDataAccordingToAction( int meshid,MLRenderingAction* act) { if (mw == NULL) return; - MLRenderingData dt; - mw->getRenderingData(meshid,dt); - - if (act != NULL) - act->updateRenderingData(dt); - - mw->setRenderingData(meshid,dt); - mw->GLA()->update(); + mw->updateRenderingDataAccordingToAction(meshid,act); } MeshTreeWidgetItem::MeshTreeWidgetItem(MeshModel* meshmodel,QTreeWidget* tree,MLRenderingToolbar* rendertoolbar) diff --git a/src/meshlab/mainwindow.h b/src/meshlab/mainwindow.h index 6a9bbba8b..5d2aa5855 100644 --- a/src/meshlab/mainwindow.h +++ b/src/meshlab/mainwindow.h @@ -142,6 +142,9 @@ public: void defaultPerViewRenderingData(MLRenderingData& dt) const; void getRenderingData(int mid,MLRenderingData& dt) const; void setRenderingData(int mid,const MLRenderingData& dt); + + void updateRenderingDataAccordingToActions(int meshid,const QList& acts); + void updateRenderingDataAccordingToAction( int meshid,MLRenderingAction* act); private slots: //////////// Slot Menu File ////////////////////// void reload(); diff --git a/src/meshlab/mainwindow_RunTime.cpp b/src/meshlab/mainwindow_RunTime.cpp index 7160c72ab..24a549330 100644 --- a/src/meshlab/mainwindow_RunTime.cpp +++ b/src/meshlab/mainwindow_RunTime.cpp @@ -34,6 +34,7 @@ #include #include "xmlgeneratorgui.h" #include "filterthread.h" +#include "ml_default_decorators.h" #include #include @@ -3366,3 +3367,42 @@ void MainWindow::addRenderingSystemLogInfo(unsigned mmid) } } } + +void MainWindow::updateRenderingDataAccordingToActions(int meshid,const QList& acts) +{ + MLRenderingData olddt; + getRenderingData(meshid,olddt); + MLRenderingData dt(olddt); + foreach(MLRenderingAction* act,acts) + { + if (act != NULL) + act->updateRenderingData(dt); + } + setRenderingData(meshid,dt); + MeshModel* mm = meshDoc()->getMesh(meshid); + if (mm != NULL) + { + MLDefaultMeshDecorators dec; + dec.updateMeshDecorationData(*mm,olddt,dt); + } + GLA()->update(); +} + +void MainWindow::updateRenderingDataAccordingToAction( int meshid,MLRenderingAction* act) +{ + MLRenderingData olddt; + getRenderingData(meshid,olddt); + MLRenderingData dt(olddt); + + if (act != NULL) + act->updateRenderingData(dt); + + setRenderingData(meshid,dt); + MeshModel* mm = meshDoc()->getMesh(meshid); + if (mm != NULL) + { + MLDefaultMeshDecorators dec; + dec.updateMeshDecorationData(*mm,olddt,dt); + } + GLA()->update(); +} \ No newline at end of file diff --git a/src/meshlab/meshlab.pro b/src/meshlab/meshlab.pro index 5d5cfbc6c..1d3e21a58 100644 --- a/src/meshlab/meshlab.pro +++ b/src/meshlab/meshlab.pro @@ -33,6 +33,7 @@ HEADERS = ../common/interfaces.h \ snapshotsetting.h \ ml_render_gui.h \ ml_rendering_actions.h \ + ml_default_decorators.h \ $$VCGDIR/wrap/gui/trackball.h \ $$VCGDIR/wrap/gui/trackmode.h \ $$VCGDIR/wrap/gl/trimesh.h \ @@ -55,6 +56,7 @@ SOURCES = main.cpp \ xmlgeneratorgui.cpp \ ml_render_gui.cpp \ ml_rendering_actions.cpp \ + ml_default_decorators.cpp \ $$VCGDIR/wrap/gui/trackball.cpp \ $$VCGDIR/wrap/gui/trackmode.cpp \ #$$GLEWDIR/src/glew.c \ diff --git a/src/meshlab/ml_render_gui.cpp b/src/meshlab/ml_render_gui.cpp index aedb63280..4532a0a61 100644 --- a/src/meshlab/ml_render_gui.cpp +++ b/src/meshlab/ml_render_gui.cpp @@ -198,7 +198,7 @@ MLRenderingParametersFrame* MLRenderingParametersFrame::factory( MLRenderingActi return new MLRenderingBBoxParametersFrame(meshid,parent); if (qobject_cast(act) != NULL) - return new MLRenderingEdgeDecoratorParametersFrame(meshid,parent); + return new MLRenderingDefaultDecoratorParametersFrame(meshid,parent); return NULL; } @@ -577,87 +577,99 @@ void MLRenderingBBoxParametersFrame::initGui() adjustSize(); } -MLRenderingEdgeDecoratorParametersFrame::MLRenderingEdgeDecoratorParametersFrame( QWidget* parent ) +MLRenderingDefaultDecoratorParametersFrame::MLRenderingDefaultDecoratorParametersFrame( QWidget* parent ) :MLRenderingParametersFrame(-1,parent) { initGui(); } -MLRenderingEdgeDecoratorParametersFrame::MLRenderingEdgeDecoratorParametersFrame( int meshid,QWidget* parent ) +MLRenderingDefaultDecoratorParametersFrame::MLRenderingDefaultDecoratorParametersFrame( int meshid,QWidget* parent ) :MLRenderingParametersFrame(meshid,parent) { initGui(); } -MLRenderingEdgeDecoratorParametersFrame::~MLRenderingEdgeDecoratorParametersFrame() +MLRenderingDefaultDecoratorParametersFrame::~MLRenderingDefaultDecoratorParametersFrame() { - delete _boundarytool; + delete _boundearyedgetool; + delete _boundearyfacetool; delete _edgemanifoldtool; delete _vertmanifoldtool; delete _texturebordertool; } -void MLRenderingEdgeDecoratorParametersFrame::getCurrentRenderingDataAccordingToGUI( MLRenderingData& dt ) const +void MLRenderingDefaultDecoratorParametersFrame::getCurrentRenderingDataAccordingToGUI( MLRenderingData& dt ) const { - _boundarytool->getRenderingDataAccordingToGUI(dt); + _boundearyedgetool->getRenderingDataAccordingToGUI(dt); + _boundearyfacetool->getRenderingDataAccordingToGUI(dt); _edgemanifoldtool->getRenderingDataAccordingToGUI(dt); _vertmanifoldtool->getRenderingDataAccordingToGUI(dt); _texturebordertool->getRenderingDataAccordingToGUI(dt); } -void MLRenderingEdgeDecoratorParametersFrame::setPrimitiveButtonStatesAccordingToRenderingData( const MLRenderingData& dt ) +void MLRenderingDefaultDecoratorParametersFrame::setPrimitiveButtonStatesAccordingToRenderingData( const MLRenderingData& dt ) { - _boundarytool->setAccordingToRenderingData(dt); + _boundearyedgetool->setAccordingToRenderingData(dt); + _boundearyfacetool->setAccordingToRenderingData(dt); _edgemanifoldtool->setAccordingToRenderingData(dt); _vertmanifoldtool->setAccordingToRenderingData(dt); _texturebordertool->setAccordingToRenderingData(dt); } -void MLRenderingEdgeDecoratorParametersFrame::setAssociatedMeshId( int meshid ) +void MLRenderingDefaultDecoratorParametersFrame::setAssociatedMeshId( int meshid ) { - _boundarytool->setAssociatedMeshId(meshid); + _boundearyedgetool->setAssociatedMeshId(meshid); + _boundearyfacetool->setAssociatedMeshId(meshid); _edgemanifoldtool->setAssociatedMeshId(meshid); _vertmanifoldtool->setAssociatedMeshId(meshid); _texturebordertool->setAssociatedMeshId(meshid); } -void MLRenderingEdgeDecoratorParametersFrame::initGui() +void MLRenderingDefaultDecoratorParametersFrame::initGui() { setAutoFillBackground(true); QGridLayout* layout = new QGridLayout(); - QLabel* boundarylab = new QLabel("Boundary",this); + QLabel* boundarylab = new QLabel("Boundary Edges",this); QFont boldfont; boldfont.setBold(true); boundarylab->setFont(boldfont); layout->addWidget(boundarylab,0,0,Qt::AlignLeft); - _boundarytool = new MLRenderingOnOffToolbar(_meshid,this); - _boundarytool->setRenderingAction(new MLRenderingBoundaryAction(_meshid,_boundarytool)); - layout->addWidget(_boundarytool,0,1,Qt::AlignLeft); - connect(_boundarytool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); + _boundearyedgetool = new MLRenderingOnOffToolbar(_meshid,this); + _boundearyedgetool->setRenderingAction(new MLRenderingEdgeBoundaryAction(_meshid,_boundearyedgetool)); + layout->addWidget(_boundearyedgetool,0,1,Qt::AlignLeft); + connect(_boundearyedgetool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); + + QLabel* boundaryfacelab = new QLabel("Boundary Faces",this); + boundaryfacelab->setFont(boldfont); + layout->addWidget(boundaryfacelab,1,0,Qt::AlignLeft); + _boundearyfacetool = new MLRenderingOnOffToolbar(_meshid,this); + _boundearyfacetool->setRenderingAction(new MLRenderingFaceBoundaryAction(_meshid,_boundearyfacetool)); + layout->addWidget(_boundearyfacetool,1,1,Qt::AlignLeft); + connect(_boundearyfacetool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); QLabel* vertmanifoldlab = new QLabel("No-Manif Verts",this); vertmanifoldlab->setFont(boldfont); - layout->addWidget(vertmanifoldlab,1,0,Qt::AlignLeft); + layout->addWidget(vertmanifoldlab,2,0,Qt::AlignLeft); _vertmanifoldtool = new MLRenderingOnOffToolbar(_meshid,this); _vertmanifoldtool->setRenderingAction(new MLRenderingVertManifoldAction(_meshid,_vertmanifoldtool)); - layout->addWidget(_vertmanifoldtool,1,1,Qt::AlignLeft); + layout->addWidget(_vertmanifoldtool,2,1,Qt::AlignLeft); connect(_vertmanifoldtool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); QLabel* edgemanifoldlab = new QLabel("No-Manif Edges",this); edgemanifoldlab->setFont(boldfont); - layout->addWidget(edgemanifoldlab,2,0,Qt::AlignLeft); + layout->addWidget(edgemanifoldlab,3,0,Qt::AlignLeft); _edgemanifoldtool = new MLRenderingOnOffToolbar(_meshid,this); _edgemanifoldtool->setRenderingAction(new MLRenderingEdgeManifoldAction(_meshid,_edgemanifoldtool)); - layout->addWidget(_edgemanifoldtool,2,1,Qt::AlignLeft); + layout->addWidget(_edgemanifoldtool,3,1,Qt::AlignLeft); connect(_edgemanifoldtool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); QLabel* textureborderlab = new QLabel("Texture Border",this); textureborderlab->setFont(boldfont); - layout->addWidget(textureborderlab,3,0,Qt::AlignLeft); + layout->addWidget(textureborderlab,4,0,Qt::AlignLeft); _texturebordertool = new MLRenderingOnOffToolbar(_meshid,this); _texturebordertool->setRenderingAction(new MLRenderingTexBorderAction(_meshid,_texturebordertool)); - layout->addWidget(_texturebordertool,3,1,Qt::AlignLeft); + layout->addWidget(_texturebordertool,4,1,Qt::AlignLeft); connect(_texturebordertool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*))); setMinimumSize(layout->sizeHint()); diff --git a/src/meshlab/ml_render_gui.h b/src/meshlab/ml_render_gui.h index f26a9dc9f..7bf0c2532 100644 --- a/src/meshlab/ml_render_gui.h +++ b/src/meshlab/ml_render_gui.h @@ -282,20 +282,21 @@ private: MLRenderingOnOffToolbar* _faceseltool; }; -class MLRenderingEdgeDecoratorParametersFrame : public MLRenderingParametersFrame +class MLRenderingDefaultDecoratorParametersFrame : public MLRenderingParametersFrame { Q_OBJECT public: - MLRenderingEdgeDecoratorParametersFrame(QWidget* parent); - MLRenderingEdgeDecoratorParametersFrame(int meshid,QWidget* parent); - ~MLRenderingEdgeDecoratorParametersFrame(); + MLRenderingDefaultDecoratorParametersFrame(QWidget* parent); + MLRenderingDefaultDecoratorParametersFrame(int meshid,QWidget* parent); + ~MLRenderingDefaultDecoratorParametersFrame(); void setPrimitiveButtonStatesAccordingToRenderingData(const MLRenderingData& dt); void setAssociatedMeshId(int meshid); void getCurrentRenderingDataAccordingToGUI(MLRenderingData& dt) const; private: void initGui(); - MLRenderingOnOffToolbar* _boundarytool; + MLRenderingOnOffToolbar* _boundearyedgetool; + MLRenderingOnOffToolbar* _boundearyfacetool; MLRenderingOnOffToolbar* _vertmanifoldtool; MLRenderingOnOffToolbar* _edgemanifoldtool; MLRenderingOnOffToolbar* _texturebordertool; diff --git a/src/meshlab/ml_rendering_actions.cpp b/src/meshlab/ml_rendering_actions.cpp index 6d9e05fd3..49682ac7d 100644 --- a/src/meshlab/ml_rendering_actions.cpp +++ b/src/meshlab/ml_rendering_actions.cpp @@ -900,35 +900,67 @@ bool MLRenderingEdgeDecoratorAction::isRenderingDataEnabled( const MLRenderingDa return false; } -MLRenderingBoundaryAction::MLRenderingBoundaryAction( QObject* parent ) +MLRenderingEdgeBoundaryAction::MLRenderingEdgeBoundaryAction( QObject* parent ) :MLRenderingAction(-1,parent) { - setText("Boundary"); + setText("Edges Boundary"); } -MLRenderingBoundaryAction::MLRenderingBoundaryAction( int meshid,QObject* parent ) +MLRenderingEdgeBoundaryAction::MLRenderingEdgeBoundaryAction( int meshid,QObject* parent ) :MLRenderingAction(meshid,parent) { - setText("Boundary"); + setText("Edges Boundary"); } -void MLRenderingBoundaryAction::updateRenderingData( MLRenderingData& rd ) +void MLRenderingEdgeBoundaryAction::updateRenderingData( MLRenderingData& rd ) { MLPerViewGLOptions opts; bool valid = rd.get(opts); if (valid) { - opts._peredge_boundary_enabled = isChecked(); + opts._peredge_edgeboundary_enabled = isChecked(); rd.set(opts); } } -bool MLRenderingBoundaryAction::isRenderingDataEnabled( const MLRenderingData& rd ) const +bool MLRenderingEdgeBoundaryAction::isRenderingDataEnabled( const MLRenderingData& rd ) const { MLPerViewGLOptions opts; bool valid = rd.get(opts); if (valid) - return opts._peredge_boundary_enabled; + return opts._peredge_edgeboundary_enabled; + return false; +} + +MLRenderingFaceBoundaryAction::MLRenderingFaceBoundaryAction( QObject* parent ) + :MLRenderingAction(-1,parent) +{ + setText("Faces Boundary"); +} + +MLRenderingFaceBoundaryAction::MLRenderingFaceBoundaryAction( int meshid,QObject* parent ) + :MLRenderingAction(meshid,parent) +{ + setText("Faces Boundary"); +} + +void MLRenderingFaceBoundaryAction::updateRenderingData( MLRenderingData& rd ) +{ + MLPerViewGLOptions opts; + bool valid = rd.get(opts); + if (valid) + { + opts._peredge_faceboundary_enabled = isChecked(); + rd.set(opts); + } +} + +bool MLRenderingFaceBoundaryAction::isRenderingDataEnabled( const MLRenderingData& rd ) const +{ + MLPerViewGLOptions opts; + bool valid = rd.get(opts); + if (valid) + return opts._peredge_faceboundary_enabled; return false; } @@ -1150,4 +1182,6 @@ MLRenderingFloatAction::MLRenderingFloatAction(int meshid, QObject* parent ) { -} \ No newline at end of file +} + + diff --git a/src/meshlab/ml_rendering_actions.h b/src/meshlab/ml_rendering_actions.h index 3fbfa3aae..c43089cdf 100644 --- a/src/meshlab/ml_rendering_actions.h +++ b/src/meshlab/ml_rendering_actions.h @@ -367,12 +367,23 @@ public: bool isRenderingDataEnabled(const MLRenderingData& rd) const; }; -class MLRenderingBoundaryAction : public MLRenderingAction +class MLRenderingEdgeBoundaryAction : public MLRenderingAction { Q_OBJECT public: - MLRenderingBoundaryAction(QObject* parent); - MLRenderingBoundaryAction(int meshid,QObject* parent); + MLRenderingEdgeBoundaryAction(QObject* parent); + MLRenderingEdgeBoundaryAction(int meshid,QObject* parent); + + void updateRenderingData(MLRenderingData& rd); + bool isRenderingDataEnabled(const MLRenderingData& rd) const; +}; + +class MLRenderingFaceBoundaryAction : public MLRenderingAction +{ + Q_OBJECT +public: + MLRenderingFaceBoundaryAction(QObject* parent); + MLRenderingFaceBoundaryAction(int meshid,QObject* parent); void updateRenderingData(MLRenderingData& rd); bool isRenderingDataEnabled(const MLRenderingData& rd) const; diff --git a/src/meshlab_2016_tested_plugins.pro b/src/meshlab_2016_tested_plugins.pro index 0e8a5e45f..7cdad9ac8 100644 --- a/src/meshlab_2016_tested_plugins.pro +++ b/src/meshlab_2016_tested_plugins.pro @@ -5,52 +5,65 @@ # Compiling this minimal subset does not require any additional library (except obviously qt and vcg). # +#config += debug_and_release TEMPLATE = subdirs -CONFIG += ordered - - - # the common framework, used by all the plugins, +CONFIG += ordered SUBDIRS = common \ - meshlab \ # the GUI framework - meshlabplugins/io_base\ # a few basic file formats (ply, obj, off), without this you cannot open anything - meshlabplugins/filter_colorize \ - meshlabplugins/filter_create \ - meshlabplugins/filter_sampling \ - meshlabplugins/edit_quality \ - meshlabplugins/filter_meshing \ - meshlabplugins/filter_voronoi \ - meshlabplugins/filter_mutualinfoxml \ - meshlabplugins/filter_sdfgpu \ - meshlabplugins/filter_ao \ - meshlabplugins/filter_img_patch_param \ - meshlabplugins/filter_color_projection \ - sampleplugins/sample_filtergpu \ -# meshlabplugins/edit_align \ -# meshlabplugins/filter_mutualinfoxml \ -# meshlabplugins/filter_meshing \ -# meshlabplugins/decorate_base \ -# meshlabplugins/edit_select \ -# meshlabplugins/edit_align \ -# plugins_experimental/filter_sketchfab -# meshlabplugins/filter_mutualinfoxml -# -# -# Next some other useful, but still easy to be compiled, plugins -# Uncomment them if you succeed in compiling the above ones. -# meshlabplugins/decorate_background \ -# meshlabplugins/decorate_base \ -# meshlabplugins/edit_align \ -# meshlabplugins/edit_manipulators \ -# meshlabplugins/edit_select \ -# meshlabplugins/filter_clean\ -# meshlabplugins/filter_colorize\ -# meshlabplugins/filter_create\ -# meshlabplugins/filter_layer\ -# meshlabplugins/filter_measure\ -# meshlabplugins/filter_sampling\ -# meshlabplugins/filter_select \ -# meshlabplugins/filter_quality \ -# meshlabplugins/filter_unsharp \ -# meshlabplugins/io_collada \ -# meshlabplugins/io_x3d \ -# meshlabserver + meshlab \ +# IO plugins + meshlabplugins/io_base\ + meshlabplugins/io_3ds\ + meshlabplugins/io_collada \ + meshlabplugins/io_ctm \ + meshlabplugins/io_json \ + meshlabplugins/io_u3d\ + meshlabplugins/io_tri\ + meshlabplugins/io_x3d \ + meshlabplugins/io_gts \ + meshlabplugins/io_expe \ + meshlabplugins/io_pdb \ + plugins_experimental/io_TXT \ +# Filter plugins + meshlabplugins/filter_aging \ + meshlabplugins/filter_ao \ + meshlabplugins/filter_autoalign \ + meshlabplugins/filter_camera \ + meshlabplugins/filter_bnpts \ + meshlabplugins/filter_clean \ + meshlabplugins/filter_colorize \ + meshlabplugins/filter_colorproc \ + meshlabplugins/filter_color_projection \ + meshlabplugins/filter_create \ + meshlabplugins/filter_csg \ + meshlabplugins/filter_dirt \ + meshlabplugins/filter_fractal \ + meshlabplugins/filter_func \ + meshlabplugins/filter_img_patch_param \ + meshlabplugins/filter_isoparametrization \ + meshlabplugins/filter_layer \ + meshlabplugins/filter_measure \ + meshlabplugins/filter_meshing \ + meshlabplugins/filter_mutualinfoxml \ + meshlabplugins/filter_mls \ + meshlabplugins/filter_photosynth \ + meshlabplugins/filter_plymc \ + meshlabplugins/filter_poisson \ + meshlabplugins/filter_qhull \ + meshlabplugins/filter_quality \ + meshlabplugins/filter_sampling \ + meshlabplugins/filter_sdfgpu \ + meshlabplugins/filter_select \ + meshlabplugins/filter_ssynth \ + meshlabplugins/filter_texture \ + meshlabplugins/filter_trioptimize \ + meshlabplugins/filter_unsharp \ + meshlabplugins/filter_zippering \ + +# Edit Plugins + meshlabplugins/edit_quality \ +# Sample Plugins + sampleplugins/samplefilter \ + sampleplugins/samplefilterdyn \ + sampleplugins/io_m\ + sampleplugins/filter_geodesic \ + sampleplugins/filter_createiso \ No newline at end of file