diff --git a/src/App/PropertyStandard.cpp b/src/App/PropertyStandard.cpp index 6e99f4e782..cd8f4f62c3 100644 --- a/src/App/PropertyStandard.cpp +++ b/src/App/PropertyStandard.cpp @@ -3203,8 +3203,8 @@ void PropertyMaterialList::RestoreDocFileV3(Base::Reader& reader) uint32_t count = 0; str >> count; std::vector values(count); - uint32_t value; // must be 32 bit long - float valueF; + uint32_t value {}; // must be 32 bit long + float valueF {}; for (auto& it : values) { str >> value; it.ambientColor.setPackedValue(value); @@ -3227,18 +3227,15 @@ void PropertyMaterialList::RestoreDocFileV3(Base::Reader& reader) setValues(values); } -void PropertyMaterialList::readString(Base::InputStream& str, - std::string& value) +void PropertyMaterialList::readString(Base::InputStream& str, std::string& value) { - uint32_t uCt; + uint32_t uCt {}; str >> uCt; - char *temp = new char[uCt]; + std::vector temp(uCt); - str.read(temp, uCt); - value.assign(temp, static_cast(uCt)); - - delete [] temp; + str.read(temp.data(), uCt); + value.assign(temp.data(), temp.size()); } const char* PropertyMaterialList::getEditorName() const diff --git a/src/Gui/DlgMaterialPropertiesImp.cpp b/src/Gui/DlgMaterialPropertiesImp.cpp index 13f48a4147..4c76a481de 100644 --- a/src/Gui/DlgMaterialPropertiesImp.cpp +++ b/src/Gui/DlgMaterialPropertiesImp.cpp @@ -22,10 +22,8 @@ #include "PreCompiled.h" -#include #include -#include "Application.h" #include "DlgMaterialPropertiesImp.h" #include "ui_DlgMaterialProperties.h" #include "ViewProvider.h" diff --git a/src/Gui/ViewProviderGeometryObject.h b/src/Gui/ViewProviderGeometryObject.h index 291d9d9c88..607cd42d2f 100644 --- a/src/Gui/ViewProviderGeometryObject.h +++ b/src/Gui/ViewProviderGeometryObject.h @@ -95,7 +95,6 @@ public: /// Get the python wrapper for that ViewProvider PyObject* getPyObject() override; - static App::Material getUserDefinedMaterial(); protected: /// get called by the container whenever a property has been changed diff --git a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp index 519a449fc0..998436403e 100644 --- a/src/Mod/Part/Gui/AppPartGui.cpp +++ b/src/Mod/Part/Gui/AppPartGui.cpp @@ -109,7 +109,6 @@ private: PyObject* initModule() { return Base::Interpreter().addModule(new Module); - ; } } // namespace PartGui @@ -140,15 +139,17 @@ PyMOD_INIT_FUNC(PartGui) Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/parametric")); Gui::BitmapFactory().addPath(QString::fromLatin1(":/icons/tools")); - static struct PyModuleDef pAttachEngineTextsModuleDef = {PyModuleDef_HEAD_INIT, - "AttachEngineResources", - "AttachEngineResources", - -1, - AttacherGui::AttacherGuiPy::Methods, - nullptr, - nullptr, - nullptr, - nullptr}; + // clang-format off + static struct PyModuleDef pAttachEngineTextsModuleDef = { + PyModuleDef_HEAD_INIT, + "AttachEngineResources", + "AttachEngineResources", + -1, + AttacherGui::AttacherGuiPy::Methods, + nullptr, nullptr, nullptr, nullptr + }; + // clang-format on + PyObject* pAttachEngineTextsModule = PyModule_Create(&pAttachEngineTextsModuleDef); Py_INCREF(pAttachEngineTextsModule); @@ -218,7 +219,6 @@ PyMOD_INIT_FUNC(PartGui) PartGui::Workbench ::init(); auto manip = std::make_shared(); Gui::WorkbenchManipulator::installManipulator(manip); - // clang-format on // instantiating the commands CreatePartCommands(); @@ -226,8 +226,8 @@ PyMOD_INIT_FUNC(PartGui) CreateParamPartCommands(); CreatePartSelectCommands(); try { - Py::Object ae = - Base::Interpreter().runStringObject("__import__('AttachmentEditor.Commands').Commands"); + const char* cmd = "__import__('AttachmentEditor.Commands').Commands"; + Py::Object ae = Base::Interpreter().runStringObject(cmd); Py::Module(partGuiModule).setAttr(std::string("AttachmentEditor"), ae); } catch (Base::PyException& err) { @@ -235,29 +235,18 @@ PyMOD_INIT_FUNC(PartGui) } // register preferences pages - Gui::Dialog::DlgPreferencesImp::setGroupData("Part/Part Design", - "Part design", - QObject::tr("Part and Part Design workbench")); - (void)new Gui::PrefPageProducer( - QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); - (void)new Gui::PrefPageProducer( - QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); - (void)new Gui::PrefPageProducer( - QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); - (void)new Gui::PrefPageProducer( - QT_TRANSLATE_NOOP("QObject", "Import-Export")); - (void)new Gui::PrefPageProducer( - QT_TRANSLATE_NOOP("QObject", "Import-Export")); + Gui::Dialog::DlgPreferencesImp::setGroupData("Part/Part Design", "Part design", QObject::tr("Part and Part Design workbench")); + (void)new Gui::PrefPageProducer(QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); + (void)new Gui::PrefPageProducer(QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); + (void)new Gui::PrefPageProducer(QT_TRANSLATE_NOOP("QObject", "Part/Part Design")); + (void)new Gui::PrefPageProducer(QT_TRANSLATE_NOOP("QObject", "Import-Export")); + (void)new Gui::PrefPageProducer(QT_TRANSLATE_NOOP("QObject", "Import-Export")); Gui::ViewProviderBuilder::add(Part::PropertyPartShape::getClassTypeId(), PartGui::ViewProviderPart::getClassTypeId()); + // clang-format on // add resources and reloads the translators loadPartResource(); - // register bitmaps - // Gui::BitmapFactoryInst& rclBmpFactory = Gui::BitmapFactory(); - // rclBmpFactory.addXPM("Part_Feature",(const char**) PartFeature_xpm); - // rclBmpFactory.addXPM("Part_FeatureImport",(const char**) PartFeatureImport_xpm); - PyMOD_Return(partGuiModule); } diff --git a/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp index 8dd5b95069..fc0781421e 100644 --- a/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp +++ b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp @@ -720,38 +720,34 @@ void PartGui::DlgProjectionOnSurface::higlight_object(Part::Feature* iCurrentObj auto vp = dynamic_cast( Gui::Application::Instance->getViewProvider(iCurrentObject)); if (vp) { - App::Color aColor; - aColor.setPackedValue(iColor); + std::vector colors; + App::Color defaultColor; if (currentShapeType == TopAbs_FACE) { - std::vector colors = vp->ShapeAppearance.getValues(); - App::Color defaultColor = vp->ShapeAppearance.getDiffuseColor(); - - if (static_cast(colors.size()) != anIndices.Extent()) { - colors.resize(anIndices.Extent(), vp->ShapeAppearance[0]); - } - - if (iHighlight) { - colors.at(index - 1).diffuseColor = aColor; - } - else { - colors.at(index - 1).diffuseColor = defaultColor; - } - vp->ShapeAppearance.setValues(colors); + colors = vp->ShapeAppearance.getDiffuseColors(); + defaultColor = colors.front(); } else if (currentShapeType == TopAbs_EDGE) { - std::vector colors = vp->LineColorArray.getValues(); - App::Color defaultColor = vp->LineColor.getValue(); + colors = vp->LineColorArray.getValues(); + defaultColor = vp->LineColor.getValue(); + } - if (static_cast(colors.size()) != anIndices.Extent()) { - colors.resize(anIndices.Extent(), defaultColor); - } + if (static_cast(colors.size()) != anIndices.Extent()) { + colors.resize(anIndices.Extent(), defaultColor); + } - if (iHighlight) { - colors.at(index - 1) = aColor; - } - else { - colors.at(index - 1) = defaultColor; - } + if (iHighlight) { + App::Color aColor; + aColor.setPackedValue(iColor); + colors.at(index - 1) = aColor; + } + else { + colors.at(index - 1) = defaultColor; + } + if (currentShapeType == TopAbs_FACE) { + vp->ShapeAppearance.setDiffuseColors(colors); + } + else if (currentShapeType == TopAbs_EDGE) { + vp->LineColorArray.setValues(colors); } } } diff --git a/src/Mod/Part/Gui/ViewProvider.cpp b/src/Mod/Part/Gui/ViewProvider.cpp index 7f17c6ee22..4c4b248746 100644 --- a/src/Mod/Part/Gui/ViewProvider.cpp +++ b/src/Mod/Part/Gui/ViewProvider.cpp @@ -72,8 +72,8 @@ void ViewProviderPart::applyColor(const Part::ShapeHistory& hist, } void ViewProviderPart::applyMaterial(const Part::ShapeHistory& hist, - const App::PropertyMaterialList& colBase, - std::vector& colBool) + const std::vector& colBase, + std::vector& colBool) { std::map>::const_iterator jt; // apply color from modified faces @@ -85,8 +85,7 @@ void ViewProviderPart::applyMaterial(const Part::ShapeHistory& hist, } } -void ViewProviderPart::applyTransparency(const float& transparency, - std::vector& colors) +void ViewProviderPart::applyTransparency(float transparency, std::vector& colors) { if (transparency != 0.0) { // transparency has been set object-wide @@ -99,7 +98,7 @@ void ViewProviderPart::applyTransparency(const float& transparency, } } -void ViewProviderPart::applyTransparency(const float& transparency, std::vector& colors) +void ViewProviderPart::applyTransparency(float transparency, std::vector& colors) { if (transparency != 0.0) { // transparency has been set object-wide diff --git a/src/Mod/Part/Gui/ViewProvider.h b/src/Mod/Part/Gui/ViewProvider.h index dae2d2ef29..1286a9a53d 100644 --- a/src/Mod/Part/Gui/ViewProvider.h +++ b/src/Mod/Part/Gui/ViewProvider.h @@ -58,12 +58,10 @@ protected: const std::vector& colBase, std::vector& colBool); void applyMaterial(const Part::ShapeHistory& hist, - const App::PropertyMaterialList& colBase, + const std::vector& colBase, std::vector& colBool); - void applyTransparency(const float& transparency, - std::vector& colors); - void applyTransparency(const float& transparency, - std::vector& colors); + void applyTransparency(float transparency, std::vector& colors); + void applyTransparency(float transparency, std::vector& colors); }; } // namespace PartGui diff --git a/src/Mod/Part/Gui/ViewProviderBoolean.cpp b/src/Mod/Part/Gui/ViewProviderBoolean.cpp index df8ebf5383..dd07cb959f 100644 --- a/src/Mod/Part/Gui/ViewProviderBoolean.cpp +++ b/src/Mod/Part/Gui/ViewProviderBoolean.cpp @@ -100,27 +100,27 @@ void ViewProviderBoolean::updateData(const App::Property* prop) auto vpTool = dynamic_cast( Gui::Application::Instance->getViewProvider(objTool)); if (vpBase && vpTool) { + std::vector colBase = vpBase->ShapeAppearance.getValues(); + std::vector colTool = vpTool->ShapeAppearance.getValues(); std::vector colBool; colBool.resize(boolMap.Extent(), this->ShapeAppearance[0]); - vpBase->ShapeAppearance.setTransparency(vpBase->Transparency.getValue()); - vpTool->ShapeAppearance.setTransparency(vpTool->Transparency.getValue()); + applyTransparency(vpBase->Transparency.getValue(),colBase); + applyTransparency(vpTool->Transparency.getValue(),colTool); - if (static_cast(vpBase->ShapeAppearance.getSize()) == baseMap.Extent()) { - applyMaterial(hist[0], vpBase->ShapeAppearance, colBool); + if (static_cast(colBase.size()) == baseMap.Extent()) { + applyMaterial(hist[0], colBase, colBool); } - else if (vpBase->ShapeAppearance.getSize() > 0 - && vpBase->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpBase->ShapeAppearance.setSize(baseMap.Extent(), vpBase->ShapeAppearance[0]); - applyMaterial(hist[0], vpBase->ShapeAppearance, colBool); + else if (!colBase.empty() && colBase[0] != this->ShapeAppearance[0]) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyMaterial(hist[0], colBase, colBool); } - if (static_cast(vpTool->ShapeAppearance.getSize()) == toolMap.Extent()) { - applyMaterial(hist[1], vpTool->ShapeAppearance, colBool); + if (static_cast(colTool.size()) == toolMap.Extent()) { + applyMaterial(hist[1], colTool, colBool); } - else if (vpTool->ShapeAppearance.getSize() > 0 - && vpTool->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpTool->ShapeAppearance.setSize(toolMap.Extent(), vpTool->ShapeAppearance[0]); - applyMaterial(hist[1], vpTool->ShapeAppearance, colBool); + else if (!colTool.empty() && colTool[0] != this->ShapeAppearance[0]) { + colTool.resize(toolMap.Extent(), colTool[0]); + applyMaterial(hist[1], colTool, colBool); } // If the view provider has set a transparency then override the values @@ -201,14 +201,14 @@ void ViewProviderMultiFuse::updateData(const App::Property* prop) auto vpBase = dynamic_cast(Gui::Application::Instance->getViewProvider(objBase)); if (vpBase) { - vpBase->ShapeAppearance.setTransparency(vpBase->Transparency.getValue()); - if (static_cast(vpBase->ShapeAppearance.getSize()) == baseMap.Extent()) { - applyMaterial(hist[index], vpBase->ShapeAppearance, colBool); + std::vector colBase = vpBase->ShapeAppearance.getValues(); + applyTransparency(vpBase->Transparency.getValue(),colBase); + if (static_cast(colBase.size()) == baseMap.Extent()) { + applyMaterial(hist[index], colBase, colBool); } - else if (vpBase->ShapeAppearance.getSize() > 0 - && vpBase->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpBase->ShapeAppearance.setSize(baseMap.Extent(), vpBase->ShapeAppearance[0]); - applyMaterial(hist[index], vpBase->ShapeAppearance, colBool); + else if (!colBase.empty() && colBase[0] != this->ShapeAppearance[0]) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyMaterial(hist[index], colBase, colBool); } } } @@ -336,14 +336,14 @@ void ViewProviderMultiCommon::updateData(const App::Property* prop) auto vpBase = dynamic_cast(Gui::Application::Instance->getViewProvider(objBase)); if (vpBase) { - vpBase->ShapeAppearance.setTransparency(vpBase->Transparency.getValue()); - if (static_cast(vpBase->ShapeAppearance.getSize()) == baseMap.Extent()) { - applyMaterial(hist[index], vpBase->ShapeAppearance, colBool); + std::vector colBase = vpBase->ShapeAppearance.getValues(); + applyTransparency(vpBase->Transparency.getValue(),colBase); + if (static_cast(colBase.size()) == baseMap.Extent()) { + applyMaterial(hist[index], colBase, colBool); } - else if (vpBase->ShapeAppearance.getSize() > 0 - && vpBase->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpBase->ShapeAppearance.setSize(baseMap.Extent(), vpBase->ShapeAppearance[0]); - applyMaterial(hist[index], vpBase->ShapeAppearance, colBool); + else if (!colBase.empty() && colBase[0] != this->ShapeAppearance[0]) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyMaterial(hist[index], colBase, colBool); } } } diff --git a/src/Mod/Part/Gui/ViewProviderCompound.cpp b/src/Mod/Part/Gui/ViewProviderCompound.cpp index 9754362524..50d34cd12d 100644 --- a/src/Mod/Part/Gui/ViewProviderCompound.cpp +++ b/src/Mod/Part/Gui/ViewProviderCompound.cpp @@ -111,14 +111,14 @@ void ViewProviderCompound::updateData(const App::Property* prop) auto vpBase = dynamic_cast(Gui::Application::Instance->getViewProvider(objBase)); if (vpBase) { - vpBase->ShapeAppearance.setTransparency(vpBase->Transparency.getValue()); - if (static_cast(vpBase->ShapeAppearance.getSize()) == baseMap.Extent()) { - applyMaterial(hist[index], vpBase->ShapeAppearance, compCol); + std::vector baseCol = vpBase->ShapeAppearance.getValues(); + applyTransparency(vpBase->Transparency.getValue(), baseCol); + if (static_cast(baseCol.size()) == baseMap.Extent()) { + applyMaterial(hist[index], baseCol, compCol); } - else if (vpBase->ShapeAppearance.getSize() > 0 - && vpBase->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpBase->ShapeAppearance.setSize(baseMap.Extent(), vpBase->ShapeAppearance[0]); - applyMaterial(hist[index], vpBase->ShapeAppearance, compCol); + else if (!baseCol.empty() && baseCol[0] != this->ShapeAppearance[0]) { + baseCol.resize(baseMap.Extent(), baseCol[0]); + applyMaterial(hist[index], baseCol, compCol); } } } diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index b9c7df7885..5f6f550601 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -66,7 +66,6 @@ # include # include # include -# include # include #endif @@ -199,16 +198,6 @@ ViewProviderPartExt::ViewProviderPartExt() ADD_PROPERTY_TYPE(DrawStyle,((long int)0), osgroup, App::Prop_None, "Defines the style of the edges in the 3D view."); DrawStyle.setEnums(DrawStyleEnums); - // This is needed to restore old DiffuseColor values since the restore - // function is asynchronous - App::PropertyColor noColor; - ADD_PROPERTY_TYPE(_diffuseColor, - (noColor.getValue()), - osgroup, - App::Prop_NoPersist, - "Object diffuse color."); - _diffuseColor.setStatus(App::Property::PropHidden, true); - coords = new SoCoordinate3(); coords->ref(); faceset = new SoBrepFaceSet(); @@ -353,7 +342,7 @@ void ViewProviderPartExt::onChanged(const App::Property* prop) else if (prop == &_diffuseColor) { // Used to load the old DiffuseColor values asynchronously ShapeAppearance.setDiffuseColors(_diffuseColor.getValues()); - ShapeAppearance.setTransparency(Transparency.getValue() / 100.0f); + ShapeAppearance.setTransparency(Transparency.getValue() / 100.0F); } else if (prop == &ShapeAppearance) { setHighlightedFaces(ShapeAppearance); @@ -364,11 +353,7 @@ void ViewProviderPartExt::onChanged(const App::Property* prop) long value = toPercent(Mat.transparency); if (value != Transparency.getValue()) { float trans = fromPercent(Transparency.getValue()); - - App::PropertyContainer* parent = ShapeAppearance.getContainer(); - ShapeAppearance.setContainer(nullptr); ShapeAppearance.setTransparency(trans); - ShapeAppearance.setContainer(parent); } } else if (prop == &Lighting) { @@ -615,6 +600,12 @@ std::vector ViewProviderPartExt::getSelectionShape(const char* / void ViewProviderPartExt::setHighlightedFaces(const std::vector& materials) { + if (getObject() && getObject()->testStatus(App::ObjectStatus::TouchOnColorChange)) + getObject()->touch(true); + + Gui::SoUpdateVBOAction action; + action.apply(this->faceset); + int size = static_cast(materials.size()); if (size > 1 && size == this->faceset->partIndex.getNum()) { pcFaceBind->value = SoMaterialBinding::PER_PART; @@ -654,49 +645,7 @@ void ViewProviderPartExt::setHighlightedFaces(const std::vector& void ViewProviderPartExt::setHighlightedFaces(const App::PropertyMaterialList& appearance) { - int size = static_cast(appearance.getSize()); - if (size > 1 && size == this->faceset->partIndex.getNum()) { - pcFaceBind->value = SoMaterialBinding::PER_PART; - texture.activateMaterial(); - - pcShapeMaterial->diffuseColor.setNum(size); - pcShapeMaterial->ambientColor.setNum(size); - pcShapeMaterial->specularColor.setNum(size); - pcShapeMaterial->emissiveColor.setNum(size); - pcShapeMaterial->shininess.setNum(size); - - SbColor* dc = pcShapeMaterial->diffuseColor.startEditing(); - SbColor* ac = pcShapeMaterial->ambientColor.startEditing(); - SbColor* sc = pcShapeMaterial->specularColor.startEditing(); - SbColor* ec = pcShapeMaterial->emissiveColor.startEditing(); - float* sh = pcShapeMaterial->shininess.startEditing(); - - for (int i = 0; i < size; i++) { - dc[i].setValue(appearance.getDiffuseColor(i).r, - appearance.getDiffuseColor(i).g, - appearance.getDiffuseColor(i).b); - ac[i].setValue(appearance.getAmbientColor(i).r, - appearance.getAmbientColor(i).g, - appearance.getAmbientColor(i).b); - sc[i].setValue(appearance.getSpecularColor(i).r, - appearance.getSpecularColor(i).g, - appearance.getSpecularColor(i).b); - ec[i].setValue(appearance.getEmissiveColor(i).r, - appearance.getEmissiveColor(i).g, - appearance.getEmissiveColor(i).b); - sh[i] = appearance.getShininess(i); - } - - pcShapeMaterial->diffuseColor.finishEditing(); - pcShapeMaterial->ambientColor.finishEditing(); - pcShapeMaterial->specularColor.finishEditing(); - pcShapeMaterial->emissiveColor.finishEditing(); - pcShapeMaterial->shininess.finishEditing(); - } - else if (size == 1) { - pcFaceBind->value = SoMaterialBinding::OVERALL; - setCoinAppearance(appearance[0]); - } + setHighlightedFaces(appearance.getValues()); } std::map ViewProviderPartExt::getElementColors(const char *element) const { @@ -790,7 +739,6 @@ std::map ViewProviderPartExt::getElementColors(const cha void ViewProviderPartExt::unsetHighlightedFaces() { - // DiffuseColor.touch(); ShapeAppearance.touch(); Transparency.touch(); } @@ -913,7 +861,9 @@ void ViewProviderPartExt::finishRestoring() // and currently sets a single color. // In case DiffuseColor has defined multiple colors they will // be passed to the scene graph now. - ShapeAppearance.touch(); + if (_diffuseColor.getSize() > 1) { + onChanged(&_diffuseColor); + } Gui::ViewProviderGeometryObject::finishRestoring(); } @@ -1359,8 +1309,7 @@ void ViewProviderPartExt::updateVisual() VisualTouched = false; // The material has to be checked again - // setHighlightedFaces(DiffuseColor.getValues()); - setHighlightedFaces(ShapeAppearance); + setHighlightedFaces(ShapeAppearance.getValues()); setHighlightedEdges(LineColorArray.getValues()); setHighlightedPoints(PointColorArray.getValue()); } diff --git a/src/Mod/Part/Gui/ViewProviderMirror.cpp b/src/Mod/Part/Gui/ViewProviderMirror.cpp index df93218245..579ec03e17 100644 --- a/src/Mod/Part/Gui/ViewProviderMirror.cpp +++ b/src/Mod/Part/Gui/ViewProviderMirror.cpp @@ -263,18 +263,17 @@ void ViewProviderFillet::updateData(const App::Property* prop) auto vpBase = dynamic_cast(Gui::Application::Instance->getViewProvider(objBase)); if (vpBase) { - // std::vector colBase = vpBase->DiffuseColor.getValues(); + auto colBase = static_cast(vpBase)->ShapeAppearance.getValues(); std::vector colFill; - colFill.resize(fillMap.Extent(), vpBase->ShapeAppearance[0]); - vpBase->ShapeAppearance.setTransparency(vpBase->Transparency.getValue()); + colFill.resize(fillMap.Extent(), colBase[0]); + applyTransparency(static_cast(vpBase)->Transparency.getValue(), colBase); - if (static_cast(vpBase->ShapeAppearance.getSize()) == baseMap.Extent()) { - applyMaterial(hist[0], vpBase->ShapeAppearance, colFill); + if (static_cast(colBase.size()) == baseMap.Extent()) { + applyMaterial(hist[0], colBase, colFill); } - else if (vpBase->ShapeAppearance.getSize() > 0 - && vpBase->ShapeAppearance[0] != this->ShapeAppearance[0]) { - vpBase->ShapeAppearance.setSize(baseMap.Extent(), vpBase->ShapeAppearance[0]); - applyMaterial(hist[0], vpBase->ShapeAppearance, colFill); + else if (!colBase.empty() && colBase[0] != this->ShapeAppearance[0]) { + colBase.resize(baseMap.Extent(), colBase[0]); + applyMaterial(hist[0], colBase, colFill); } // If the view provider has set a transparency then override the values @@ -374,17 +373,16 @@ void ViewProviderChamfer::updateData(const App::Property* prop) auto vpBase = dynamic_cast(Gui::Application::Instance->getViewProvider(objBase)); if (vpBase) { - // std::vector colBase = static_cast(vpBase)->DiffuseColor.getValues(); - auto& colBase = static_cast(vpBase)->ShapeAppearance; + auto colBase = static_cast(vpBase)->ShapeAppearance.getValues(); std::vector colCham; colCham.resize(chamMap.Extent(), colBase[0]); - colBase.setTransparency(static_cast(vpBase)->Transparency.getValue()); + applyTransparency(static_cast(vpBase)->Transparency.getValue(), colBase); - if (static_cast(colBase.getSize()) == baseMap.Extent()) { + if (static_cast(colBase.size()) == baseMap.Extent()) { applyMaterial(hist[0], colBase, colCham); } - else if (colBase.getSize() > 0 && colBase[0] != this->ShapeAppearance[0]) { - colBase.setSize(baseMap.Extent(), colBase[0]); + else if (!colBase.empty() && colBase[0] != this->ShapeAppearance[0]) { + colBase.resize(baseMap.Extent(), colBase[0]); applyMaterial(hist[0], colBase, colCham); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp index 429a359fd4..8722e0a024 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp @@ -427,6 +427,7 @@ void ViewProviderBody::unifyVisualProperty(const App::Property* prop) { if (prop == &Visibility || prop == &Selectable || prop == &DisplayModeBody || + prop == &ShapeAppearance || prop == &PointColorArray || prop == &LineColorArray) { return; diff --git a/src/Mod/Surface/Gui/TaskSections.cpp b/src/Mod/Surface/Gui/TaskSections.cpp index d7ee73aa54..b8f6d856f7 100644 --- a/src/Mod/Surface/Gui/TaskSections.cpp +++ b/src/Mod/Surface/Gui/TaskSections.cpp @@ -172,8 +172,8 @@ void ViewProviderSections::highlightReferences(ShapeType type, const References& // check again that the index is in range because it's possible that // the sub-names are invalid if (idx < materials.size()) { - materials[idx].diffuseColor = - App::Color(1.0, 0.0, 1.0); // magenta + // magenta + materials[idx].diffuseColor = App::Color(1.0, 0.0, 1.0); } }