diff --git a/src/Mod/Mesh/Gui/ViewProvider.cpp b/src/Mod/Mesh/Gui/ViewProvider.cpp index c8389960e..174e26a91 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.cpp +++ b/src/Mod/Mesh/Gui/ViewProvider.cpp @@ -1582,6 +1582,32 @@ void ViewProviderMesh::fillHole(unsigned long uFacet) Gui::Application::Instance->activeDocument()->commitCommand(); } +void ViewProviderMesh::setFacetTransparency(const std::vector& facetTransparency) +{ + App::Color c = ShapeColor.getValue(); + pcShapeMaterial->diffuseColor.setNum(facetTransparency.size()); + SbColor* cols = pcShapeMaterial->diffuseColor.startEditing(); + for (std::size_t index = 0; index < facetTransparency.size(); ++index) + cols[index].setValue(c.r, c.g, c.b); + pcShapeMaterial->diffuseColor.finishEditing(); + + pcShapeMaterial->transparency.setNum(facetTransparency.size()); + float* tran = pcShapeMaterial->transparency.startEditing(); + for (std::size_t index = 0; index < facetTransparency.size(); ++index) + tran[index] = facetTransparency[index]; + + pcShapeMaterial->transparency.finishEditing(); + pcMatBinding->value = SoMaterialBinding::PER_FACE; +} + +void ViewProviderMesh::resetFacetTransparency() +{ + pcMatBinding->value = SoMaterialBinding::OVERALL; + App::Color c = ShapeColor.getValue(); + pcShapeMaterial->diffuseColor.setValue(c.r, c.g, c.b); + pcShapeMaterial->transparency.setValue(0); +} + void ViewProviderMesh::removeFacets(const std::vector& facets) { // Get the attached mesh property diff --git a/src/Mod/Mesh/Gui/ViewProvider.h b/src/Mod/Mesh/Gui/ViewProvider.h index 18fd34589..638c09cc8 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.h +++ b/src/Mod/Mesh/Gui/ViewProvider.h @@ -156,6 +156,9 @@ public: std::vector getVisibleFacetsAfterZoom(const SbBox2s&, const SbViewportRegion&, SoCamera*) const; std::vector getVisibleFacets(const SbViewportRegion&, SoCamera*) const; virtual void removeFacets(const std::vector&); + /*! The size of the array must be equal to the number of facets. */ + void setFacetTransparency(const std::vector&); + void resetFacetTransparency(); //@} protected: