- added separated actions for "no 2-manifold edges" and "no 2-manifold vertices" decorators

This commit is contained in:
Guido Ranzuglia granzuglia 2016-06-06 15:43:45 +00:00
parent f48013551f
commit 6880ea4453
5 changed files with 118 additions and 33 deletions

View File

@ -45,7 +45,8 @@ struct MLPerViewGLOptions : public vcg::RenderingModalityGLOptions
bool _peredge_extra_enabled;
bool _peredge_boundary_enabled;
bool _peredge_manifold_enabled;
bool _peredge_edgemanifold_enabled;
bool _peredge_vertmanifold_enabled;
bool _peredge_text_boundary_enabled;
bool _back_face_cull;
@ -71,7 +72,8 @@ struct MLPerViewGLOptions : public vcg::RenderingModalityGLOptions
_visible = true;
_peredge_extra_enabled = false;
_peredge_boundary_enabled = true;
_peredge_manifold_enabled = true;
_peredge_edgemanifold_enabled = true;
_peredge_vertmanifold_enabled = true;
_peredge_text_boundary_enabled = false;
_back_face_cull = false;
_double_side_lighting = false;
@ -111,7 +113,8 @@ private:
_visible = opts._visible;
_peredge_extra_enabled = opts._peredge_extra_enabled;
_peredge_boundary_enabled = opts._peredge_boundary_enabled;
_peredge_manifold_enabled = opts._peredge_manifold_enabled;
_peredge_edgemanifold_enabled = opts._peredge_edgemanifold_enabled;
_peredge_vertmanifold_enabled = opts._peredge_vertmanifold_enabled;
_peredge_text_boundary_enabled = opts._peredge_text_boundary_enabled;
_back_face_cull = opts._back_face_cull;
_double_side_lighting = opts._double_side_lighting;

View File

@ -8,6 +8,7 @@
#include <QMenu>
#include <QWidgetAction>
#include <QStylePainter>
#include <QApplication>
#include <wrap/qt/col_qt_convert.h>
MLRenderingToolbar::MLRenderingToolbar(QWidget* parent )
@ -124,6 +125,7 @@ void MLRenderingToolbar::getCurrentRenderingDataAccordingToGUI( MLRenderingData&
}
}
MLRenderingSideToolbar::MLRenderingSideToolbar(QWidget* parent /*= NULL*/ )
:MLRenderingToolbar(parent)
{
@ -147,6 +149,26 @@ void MLRenderingSideToolbar::initGui()
addRenderingAction(new MLRenderingEdgeDecoratorAction(_meshid,this));
}
void MLRenderingSideToolbar::toggle( QAction* clickedact )
{
if ((clickedact != NULL) && (_actgroup != NULL))
{
Qt::KeyboardModifiers mod = QApplication::keyboardModifiers();
if (_actgroup != NULL)
{
if (mod == Qt::ControlModifier)
{
foreach(MLRenderingAction* act,_acts)
{
if (act != NULL)
act->setChecked(clickedact == act);
}
}
}
}
MLRenderingToolbar::toggle(clickedact);
}
MLRenderingParametersFrame::MLRenderingParametersFrame( int meshid,QWidget* parent )
:QFrame(parent),_meshid(meshid)
{
@ -195,7 +217,6 @@ MLRenderingSolidParametersFrame::MLRenderingSolidParametersFrame( int meshid,QWi
void MLRenderingSolidParametersFrame::initGui()
{
setAutoFillBackground(true);
QGridLayout* layout = new QGridLayout();
_shadingtool = new MLRenderingToolbar(_meshid,this);
@ -558,14 +579,16 @@ MLRenderingEdgeDecoratorParametersFrame::MLRenderingEdgeDecoratorParametersFrame
MLRenderingEdgeDecoratorParametersFrame::~MLRenderingEdgeDecoratorParametersFrame()
{
delete _boundarytool;
delete _manifoldtool;
delete _edgemanifoldtool;
delete _vertmanifoldtool;
delete _texturebordertool;
}
void MLRenderingEdgeDecoratorParametersFrame::getCurrentRenderingDataAccordingToGUI( MLRenderingData& dt ) const
{
_boundarytool->getRenderingDataAccordingToGUI(dt);
_manifoldtool->getRenderingDataAccordingToGUI(dt);
_edgemanifoldtool->getRenderingDataAccordingToGUI(dt);
_vertmanifoldtool->getRenderingDataAccordingToGUI(dt);
_texturebordertool->getRenderingDataAccordingToGUI(dt);
}
@ -573,14 +596,16 @@ void MLRenderingEdgeDecoratorParametersFrame::getCurrentRenderingDataAccordingTo
void MLRenderingEdgeDecoratorParametersFrame::setPrimitiveButtonStatesAccordingToRenderingData( const MLRenderingData& dt )
{
_boundarytool->setAccordingToRenderingData(dt);
_manifoldtool->setAccordingToRenderingData(dt);
_edgemanifoldtool->setAccordingToRenderingData(dt);
_vertmanifoldtool->setAccordingToRenderingData(dt);
_texturebordertool->setAccordingToRenderingData(dt);
}
void MLRenderingEdgeDecoratorParametersFrame::setAssociatedMeshId( int meshid )
{
_boundarytool->setAssociatedMeshId(meshid);
_manifoldtool->setAssociatedMeshId(meshid);
_edgemanifoldtool->setAssociatedMeshId(meshid);
_vertmanifoldtool->setAssociatedMeshId(meshid);
_texturebordertool->setAssociatedMeshId(meshid);
}
@ -598,20 +623,28 @@ void MLRenderingEdgeDecoratorParametersFrame::initGui()
layout->addWidget(_boundarytool,0,1,Qt::AlignLeft);
connect(_boundarytool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)));
QLabel* manifoldlab = new QLabel("Manifold",this);
manifoldlab->setFont(boldfont);
layout->addWidget(manifoldlab,1,0,Qt::AlignLeft);
_manifoldtool = new MLRenderingOnOffToolbar(_meshid,this);
_manifoldtool->setRenderingAction(new MLRenderingManifoldAction(_meshid,_manifoldtool));
layout->addWidget(_manifoldtool,1,1,Qt::AlignLeft);
connect(_manifoldtool,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);
_vertmanifoldtool = new MLRenderingOnOffToolbar(_meshid,this);
_vertmanifoldtool->setRenderingAction(new MLRenderingVertManifoldAction(_meshid,_vertmanifoldtool));
layout->addWidget(_vertmanifoldtool,1,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);
_edgemanifoldtool = new MLRenderingOnOffToolbar(_meshid,this);
_edgemanifoldtool->setRenderingAction(new MLRenderingEdgeManifoldAction(_meshid,_edgemanifoldtool));
layout->addWidget(_edgemanifoldtool,2,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,2,0,Qt::AlignLeft);
layout->addWidget(textureborderlab,3,0,Qt::AlignLeft);
_texturebordertool = new MLRenderingOnOffToolbar(_meshid,this);
_texturebordertool->setRenderingAction(new MLRenderingTexBorderAction(_meshid,_manifoldtool));
layout->addWidget(_texturebordertool,2,1,Qt::AlignLeft);
_texturebordertool->setRenderingAction(new MLRenderingTexBorderAction(_meshid,_texturebordertool));
layout->addWidget(_texturebordertool,3,1,Qt::AlignLeft);
connect(_texturebordertool,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)),this,SIGNAL(updateRenderingDataAccordingToAction(int,MLRenderingAction*)));
setMinimumSize(layout->sizeHint());

View File

@ -125,15 +125,16 @@ protected:
QList<MLRenderingAction*> _acts;
int _meshid;
MLRenderingAction* _previoussel;
private slots:
void toggle(QAction* act);
protected slots:
virtual void toggle(QAction* act);
void extraUpdateRequired(int,MLRenderingAction*);
signals:
void updateRenderingDataAccordingToActions(int,const QList<MLRenderingAction*>& acts);
void activatedAction(MLRenderingAction*);
protected:
//if meshid is -1 it means that the actions are intended to be deployed to all the document and not to a specific mesh model
QActionGroup* _actgroup;
@ -148,6 +149,9 @@ public:
MLRenderingSideToolbar(int meshid,QWidget* parent = NULL);
~MLRenderingSideToolbar() {}
private slots:
void toggle(QAction* act);
private:
void initGui();
};
@ -292,7 +296,8 @@ public:
private:
void initGui();
MLRenderingOnOffToolbar* _boundarytool;
MLRenderingOnOffToolbar* _manifoldtool;
MLRenderingOnOffToolbar* _vertmanifoldtool;
MLRenderingOnOffToolbar* _edgemanifoldtool;
MLRenderingOnOffToolbar* _texturebordertool;
};

View File

@ -934,35 +934,67 @@ bool MLRenderingBoundaryAction::isRenderingDataEnabled( const MLRenderingData& r
return false;
}
MLRenderingManifoldAction::MLRenderingManifoldAction( QObject* parent )
MLRenderingEdgeManifoldAction::MLRenderingEdgeManifoldAction( QObject* parent )
:MLRenderingAction(-1,parent)
{
setText("2-Manifold Decorator");
setText("No 2-Manifold Edges Decorator");
}
MLRenderingManifoldAction::MLRenderingManifoldAction( int meshid,QObject* parent )
MLRenderingEdgeManifoldAction::MLRenderingEdgeManifoldAction( int meshid,QObject* parent )
:MLRenderingAction(meshid,parent)
{
setText("2-Manifold Decorator");
setText("No 2-Manifold Edges Decorator");
}
void MLRenderingManifoldAction::updateRenderingData( MLRenderingData& rd )
void MLRenderingEdgeManifoldAction::updateRenderingData( MLRenderingData& rd )
{
MLPerViewGLOptions opts;
bool valid = rd.get(opts);
if (valid)
{
opts._peredge_manifold_enabled = isChecked();
opts._peredge_edgemanifold_enabled = isChecked();
rd.set(opts);
}
}
bool MLRenderingManifoldAction::isRenderingDataEnabled( const MLRenderingData& rd ) const
bool MLRenderingEdgeManifoldAction::isRenderingDataEnabled( const MLRenderingData& rd ) const
{
MLPerViewGLOptions opts;
bool valid = rd.get(opts);
if (valid)
return opts._peredge_manifold_enabled;
return opts._peredge_edgemanifold_enabled;
return false;
}
MLRenderingVertManifoldAction::MLRenderingVertManifoldAction( QObject* parent )
:MLRenderingAction(-1,parent)
{
setText("No 2-Manifold Vertices Decorator");
}
MLRenderingVertManifoldAction::MLRenderingVertManifoldAction( int meshid,QObject* parent )
:MLRenderingAction(meshid,parent)
{
setText("No 2-Manifold Vertices Decorator");
}
void MLRenderingVertManifoldAction::updateRenderingData( MLRenderingData& rd )
{
MLPerViewGLOptions opts;
bool valid = rd.get(opts);
if (valid)
{
opts._peredge_vertmanifold_enabled = isChecked();
rd.set(opts);
}
}
bool MLRenderingVertManifoldAction::isRenderingDataEnabled( const MLRenderingData& rd ) const
{
MLPerViewGLOptions opts;
bool valid = rd.get(opts);
if (valid)
return opts._peredge_vertmanifold_enabled;
return false;
}

View File

@ -378,17 +378,29 @@ public:
bool isRenderingDataEnabled(const MLRenderingData& rd) const;
};
class MLRenderingManifoldAction : public MLRenderingAction
class MLRenderingEdgeManifoldAction : public MLRenderingAction
{
Q_OBJECT
public:
MLRenderingManifoldAction(QObject* parent);
MLRenderingManifoldAction(int meshid,QObject* parent);
MLRenderingEdgeManifoldAction(QObject* parent);
MLRenderingEdgeManifoldAction(int meshid,QObject* parent);
void updateRenderingData(MLRenderingData& rd);
bool isRenderingDataEnabled(const MLRenderingData& rd) const;
};
class MLRenderingVertManifoldAction : public MLRenderingAction
{
Q_OBJECT
public:
MLRenderingVertManifoldAction(QObject* parent);
MLRenderingVertManifoldAction(int meshid,QObject* parent);
void updateRenderingData(MLRenderingData& rd);
bool isRenderingDataEnabled(const MLRenderingData& rd) const;
};
class MLRenderingTexBorderAction : public MLRenderingAction
{
Q_OBJECT