From 312f63e43e8df6d49fca03e53d1e98ddd443558a Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 20 Feb 2015 22:28:37 +0100 Subject: [PATCH] + edit command for meshes to display components --- src/Mod/Mesh/App/Mesh.h | 2 +- src/Mod/Mesh/Gui/ViewProvider.cpp | 36 +++++++++++++++++++++++++++++++ src/Mod/Mesh/Gui/ViewProvider.h | 2 ++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index becc08f61..b66d223d4 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -189,7 +189,7 @@ public: * Checks for the given facet indices what will be the degree for each point * when these facets are removed from the mesh kernel. * The point degree information is stored in \a point_degree. The return value - * gices the number of points which will have a degree of zero. + * gives the number of points which will have a degree of zero. */ unsigned long getPointDegree(const std::vector& facets, std::vector& point_degree) const; diff --git a/src/Mod/Mesh/Gui/ViewProvider.cpp b/src/Mod/Mesh/Gui/ViewProvider.cpp index 6dfe674e2..8c2c6cf75 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.cpp +++ b/src/Mod/Mesh/Gui/ViewProvider.cpp @@ -24,6 +24,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include +# include # include # include # include @@ -572,10 +574,19 @@ bool ViewProviderMesh::exportToVrml(const char* filename, const MeshCore::Materi return false; } +void ViewProviderMesh::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +{ + ViewProviderGeometryObject::setupContextMenu(menu, receiver, member); + QAction* act = menu->addAction(QObject::tr("Display components"), receiver, member); + act->setData(QVariant((int)ViewProvider::Color)); +} + bool ViewProviderMesh::setEdit(int ModNum) { if (ModNum == ViewProvider::Transform) return ViewProviderGeometryObject::setEdit(ModNum); + else if (ModNum == ViewProvider::Color) + highlightComponents(); return true; } @@ -583,6 +594,8 @@ void ViewProviderMesh::unsetEdit(int ModNum) { if (ModNum == ViewProvider::Transform) ViewProviderGeometryObject::unsetEdit(ModNum); + else if (ModNum == ViewProvider::Color) + unhighlightSelection(); } bool ViewProviderMesh::createToolMesh(const std::vector& rclPoly, const SbViewVolume& vol, @@ -1667,6 +1680,29 @@ void ViewProviderMesh::unhighlightSelection() pcShapeMaterial->diffuseColor.setValue(c.r,c.g,c.b); } +void ViewProviderMesh::highlightComponents() +{ + const Mesh::MeshObject& rMesh = static_cast(pcObject)->Mesh.getValue(); + std::vector > comps = rMesh.getComponents(); + + // Colorize the components + pcMatBinding->value = SoMaterialBinding::PER_FACE; + int uCtFacets = (int)rMesh.countFacets(); + pcShapeMaterial->diffuseColor.setNum(uCtFacets); + + SbColor* cols = pcShapeMaterial->diffuseColor.startEditing(); + for (std::vector >::iterator it = comps.begin(); it != comps.end(); ++it) { + float fMax = (float)RAND_MAX; + float fRed = (float)rand()/fMax; + float fGrn = (float)rand()/fMax; + float fBlu = (float)rand()/fMax; + for (std::vector::iterator jt = it->begin(); jt != it->end(); ++jt) { + cols[*jt].setValue(fRed,fGrn,fBlu); + } + } + pcShapeMaterial->diffuseColor.finishEditing(); +} + // ------------------------------------------------------ PROPERTY_SOURCE(MeshGui::ViewProviderIndexedFaceSet, MeshGui::ViewProviderMesh) diff --git a/src/Mod/Mesh/Gui/ViewProvider.h b/src/Mod/Mesh/Gui/ViewProvider.h index 79648b1b9..4bb7b6ccf 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.h +++ b/src/Mod/Mesh/Gui/ViewProvider.h @@ -129,6 +129,7 @@ public: /// returns a list of all possible modes virtual std::vector getDisplayModes(void) const; bool exportToVrml(const char* filename, const MeshCore::Material&, bool binary=false) const; + void setupContextMenu(QMenu*, QObject*, const char*); /** @name Editing */ //@{ @@ -169,6 +170,7 @@ protected: virtual void selectArea(short, short, short, short, const SbViewportRegion&, SoCamera*); void highlightSelection(); void unhighlightSelection(); + void highlightComponents(); virtual SoShape* getShapeNode() const; virtual SoNode* getCoordNode() const;