diff --git a/src/Mod/Import/Gui/ExportOCAFGui.cpp b/src/Mod/Import/Gui/ExportOCAFGui.cpp index a640e3808a..91fdb54a09 100644 --- a/src/Mod/Import/Gui/ExportOCAFGui.cpp +++ b/src/Mod/Import/Gui/ExportOCAFGui.cpp @@ -21,22 +21,25 @@ * * **************************************************************************/ - #include "ExportOCAFGui.h" #include #include using namespace ImportGui; - ExportOCAFGui::ExportOCAFGui(Handle(TDocStd_Document) hDoc, bool explicitPlacement) : ExportOCAF(hDoc, explicitPlacement) {} void ExportOCAFGui::findColors(Part::Feature* part, std::vector& colors) const { - Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(part); - if (vp && vp->isDerivedFrom()) { - colors = static_cast(vp)->ShapeAppearance.getDiffuseColors(); + if (auto vp = Gui::Application::Instance->getViewProvider(part)) { + if (auto vppe = freecad_cast(vp)) { + colors = vppe->ShapeAppearance.getDiffuseColors(); + auto transp = vppe->ShapeAppearance.getTransparency(); + for (auto& it : colors) { + it.setTransparency(transp); + } + } } } diff --git a/src/Mod/Import/Gui/ImportOCAFGui.cpp b/src/Mod/Import/Gui/ImportOCAFGui.cpp index 3f8cd1a580..780cefe895 100644 --- a/src/Mod/Import/Gui/ImportOCAFGui.cpp +++ b/src/Mod/Import/Gui/ImportOCAFGui.cpp @@ -52,6 +52,15 @@ void ImportOCAFGui::applyFaceColors(Part::Feature* part, const std::vectorShapeAppearance.setDiffuseColors(colors); + std::vector transp; + transp.reserve(colors.size()); + std::transform( + colors.cbegin(), + colors.cend(), + std::back_inserter(transp), + [](const Base::Color& col) { return col.transparency(); } + ); + vp->ShapeAppearance.setTransparencies(transp); } } diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index b632d1b702..3709c3959f 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -759,7 +759,7 @@ std::map ViewProviderPartExt::getElementColors(const c if (!element || !element[0]) { auto color = ShapeAppearance.getDiffuseColor(); - color.setTransparency(Base::fromPercent(Transparency.getValue())); + color.setTransparency(ShapeAppearance.getTransparency()); ret["Face"] = color; ret["Edge"] = LineColor.getValue(); ret["Vertex"] = PointColor.getValue(); @@ -773,18 +773,16 @@ std::map ViewProviderPartExt::getElementColors(const c color.setTransparency(Base::fromPercent(Transparency.getValue())); bool singleColor = true; for (int i = 0; i < size; ++i) { - Base::Color faceColor = ShapeAppearance.getDiffuseColor(i); - faceColor.setTransparency(ShapeAppearance.getTransparency(i)); - if (faceColor != color) { - ret[std::string(element, 4) + std::to_string(i + 1)] = faceColor; + auto color_i = ShapeAppearance.getDiffuseColor(i); + color_i.setTransparency(ShapeAppearance.getTransparency(i)); + if (color_i != color) { + ret[std::string(element, 4) + std::to_string(i + 1)] = color_i; } - Base::Color firstFaceColor = ShapeAppearance.getDiffuseColor(0); - firstFaceColor.setTransparency(ShapeAppearance.getTransparency(0)); - singleColor = singleColor && (faceColor == firstFaceColor); + singleColor = singleColor && color == color_i; } if (size > 0 && singleColor) { color = ShapeAppearance.getDiffuseColor(0); - color.setTransparency(ShapeAppearance.getTransparency(0)); + color.setTransparency(ShapeAppearance.getTransparency()); ret.clear(); } ret["Face"] = color; @@ -792,13 +790,17 @@ std::map ViewProviderPartExt::getElementColors(const c else { int idx = atoi(element + 4); if (idx > 0 && idx <= size) { - ret[element] = ShapeAppearance.getDiffuseColor(idx - 1); + auto color_i = ShapeAppearance.getDiffuseColor(idx - 1); + color_i.setTransparency(ShapeAppearance.getTransparency(idx - 1)); + ret[element] = color_i; } else { - ret[element] = ShapeAppearance.getDiffuseColor(); + auto color_i = ShapeAppearance.getDiffuseColor(); + color_i.setTransparency(ShapeAppearance.getTransparency()); + ret[element] = color_i; } if (size == 1) { - ret[element].setTransparency(Base::fromPercent(Transparency.getValue())); + ret[element].setTransparency(ShapeAppearance.getTransparency()); } } }