From 5822568566d2f9fdde26b9a593f323aead58d10b Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 16 Apr 2022 14:39:10 +0200 Subject: [PATCH] Fem: fix handling of transparency in ViewProviderFemPostObject --- src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp index bbbf11e30c..65550015a4 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp @@ -332,7 +332,8 @@ void ViewProviderFemPostObject::update3D() { // write out point data if any WritePointData(points, normals, tcoords); - bool ResetColorBarRange = true; + WriteTransparency(); + bool ResetColorBarRange = false; WriteColorData(ResetColorBarRange); // write out polys if any @@ -490,14 +491,17 @@ void ViewProviderFemPostObject::WriteColorData(bool ResetColorBarRange) { m_material->diffuseColor.setNum(pd->GetNumberOfPoints()); SbColor* diffcol = m_material->diffuseColor.startEditing(); + + float overallTransp = Transparency.getValue() / 100.0f; m_material->transparency.setNum(pd->GetNumberOfPoints()); float* transp = m_material->transparency.startEditing(); for (int i = 0; i < pd->GetNumberOfPoints(); i++) { double value = 0; - if (component >= 0) + if (component >= 0) { value = data->GetComponent(i, component); + } else { for (int j = 0; j < data->GetNumberOfComponents(); ++j) value += std::pow(data->GetComponent(i, j), 2); @@ -507,7 +511,7 @@ void ViewProviderFemPostObject::WriteColorData(bool ResetColorBarRange) { App::Color c = m_colorBar->getColor(value); diffcol[i].setValue(c.r, c.g, c.b); - transp[i] = c.a; + transp[i] = std::max(c.a, overallTransp); } m_material->diffuseColor.finishEditing(); @@ -523,7 +527,10 @@ void ViewProviderFemPostObject::WriteTransparency() { float trans = float(Transparency.getValue()) / 100.0; m_material->transparency.setValue(trans); - update3D(); + + // In order to apply the transparency changes the shape nodes must be touched + m_faces->touch(); + m_triangleStrips->touch(); } void ViewProviderFemPostObject::updateData(const App::Property* p) {