Link: make OverrideMaterial use the per-face override. (#23544)

* Link: make OverrideMaterial use the per-face override.

* Fix small issue on per face transparency

* update names

* Update ViewProviderExt.cpp
This commit is contained in:
PaddleStroke
2025-09-23 00:47:12 +02:00
committed by GitHub
parent 3ffb861d11
commit b905c0dd95
2 changed files with 62 additions and 18 deletions

View File

@@ -686,17 +686,19 @@ std::map<std::string,Base::Color> ViewProviderPartExt::getElementColors(const ch
auto color = ShapeAppearance.getDiffuseColor();
color.setTransparency(Base::fromPercent(Transparency.getValue()));
bool singleColor = true;
for(int i=0;i<size;++i) {
if (ShapeAppearance.getDiffuseColor(i) != color) {
ret[std::string(element, 4) + std::to_string(i + 1)] =
ShapeAppearance.getDiffuseColor(i);
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;
}
singleColor = singleColor
&& ShapeAppearance.getDiffuseColor(0) == ShapeAppearance.getDiffuseColor(i);
Base::Color firstFaceColor = ShapeAppearance.getDiffuseColor(0);
firstFaceColor.setTransparency(ShapeAppearance.getTransparency(0));
singleColor = singleColor && (faceColor == firstFaceColor);
}
if(size && singleColor) {
if (size > 0 && singleColor) {
color = ShapeAppearance.getDiffuseColor(0);
color.setTransparency(Base::fromPercent(0.0F));
color.setTransparency(ShapeAppearance.getTransparency(0));
ret.clear();
}
ret["Face"] = color;
@@ -1403,3 +1405,6 @@ void ViewProviderPartExt::handleChangedPropertyName(Base::XMLReader& reader,
Gui::ViewProviderGeometryObject::handleChangedPropertyName(reader, TypeName, PropName);
}
}