From: dish Date: Tue, 11 Jun 2024 21:22:49 +0000 (+0000) Subject: Merge branch 'asozinov/subshape_color' into dish/CR35154--Edge_Thickness X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=077072f0536fa935f0e2f50736eb3b75b9fe03af;p=modules%2Fshaper.git Merge branch 'asozinov/subshape_color' into dish/CR35154--Edge_Thickness # Conflicts: # src/Model/Model_Objects.cpp # src/Model/Model_Objects.h # src/Model/Model_ResultBody.cpp # src/Model/Model_ResultPart.cpp # src/Model/Model_ResultPart.h # src/ModelAPI/ModelAPI_ResultPart.h # src/ModelAPI/ModelAPI_Tools.cpp # src/ModelAPI/ModelAPI_Tools.h # src/ModelHighAPI/ModelHighAPI_Dumper.cpp # src/PartSet/PartSet_Module.cpp # src/XGUI/XGUI_Selection.h --- 077072f0536fa935f0e2f50736eb3b75b9fe03af diff --cc src/Model/Model_Document.h index e54310864,f8e40c760..7fe1e21eb --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@@ -146,15 -146,14 +146,22 @@@ class Model_Document : public ModelAPI_ //! \returns index started from zero, or -1 if object is invisible or belongs to another document MODEL_EXPORT virtual const int index(std::shared_ptr theObject, const bool theAllowFolder = false); + //! Returns the shape index in the result. + //! \param theResult result + //! \param theShape result subshape + //! \returns index started from zero, or -1 if shape is not stored or is not a subshape of the result + MODEL_EXPORT virtual const int index(std::shared_ptr theResult, + std::shared_ptr theShape, + const bool theAllowFolder = false); + //! Returns the shape index in the result. + //! \param theResult result + //! \param theShape result subshape + //! \returns index started from zero, or -1 if shape is not stored or is not a subshape of the result + MODEL_EXPORT virtual const int index(std::shared_ptr theResult, + std::shared_ptr theShape, + const bool theAllowFolder = false); + //! Internal sub-document by ID MODEL_EXPORT virtual std::shared_ptr subDoc(int theDocID); diff --cc src/Model/Model_Objects.cpp index 48a01961f,7fc1ba3c1..cd69e1623 --- a/src/Model/Model_Objects.cpp +++ b/src/Model/Model_Objects.cpp @@@ -55,11 -55,14 +55,21 @@@ #include #include + // relocate to other file + #include + #include + ++// relocate to other file ++#include ++#include ++ +#include +#include + #if OCC_VERSION_LARGE < 0x07080000 + #include + // for TDF_Label map usage static Standard_Integer HashCode(const TDF_Label& theLab, const Standard_Integer theUpper); static Standard_Boolean IsEqual(const TDF_Label& theLab1, const TDF_Label& theLab2); @@@ -832,82 -824,85 +842,150 @@@ Handle(TDF_Attribute) Model_Objects::ge aMain = ModelAPI_Tools::mainBody(aMain); int anIndex = index(theResult, theShape); - Handle(TDataStd_IntegerArray) anColor; - - if (anIndex != -1) - { - TDF_Label aResultLabel; - if (aMain.get()) - aResultLabel = resultLabel(theResult->data(), index(aMain)); - else - aResultLabel = resultLabel(theResult->data(), index(theResult)); - - TDF_Label anAttributeLabel = subShapeLabel(aResultLabel, anIndex).FindChild(TAG_FEATURE_ARGUMENTS); - anAttributeLabel.FindAttribute(TDataStd_IntegerArray::GetID(), anColor); + if (anIndex == -1) { + return opencascade::handle(nullptr); } - return anColor; + + TDF_Label aResultLabel; + if (aMain.get()) + aResultLabel = resultLabel(theResult->data(), index(aMain)); + else + aResultLabel = resultLabel(theResult->data(), index(theResult)); + + TDF_Label anAttributeLabel = subShapeLabel(aResultLabel, anIndex).FindChild(TAG_FEATURE_ARGUMENTS); + + Handle(TDF_Attribute) anAttr; - anAttributeLabel.FindAttribute(theID, anAttr); ++ anAttributeLabel.FindAttribute(theID, anAttr); // ? TDataStd_IntegerArray::GetID() or TDataStd_Integer::GetID() + return anAttr; } + void Model_Objects::getColoredShapes(const std::shared_ptr theResult, + std::map, std::vector>& theColoredShapes) + { + ResultBodyPtr aMainBody = std::dynamic_pointer_cast(theResult); + aMainBody = ModelAPI_Tools::mainBody(aMainBody); + TDF_Label aShapesLabel; + if (aMainBody.get()) + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aMainBody))); + else + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(theResult))); + + for (TDF_ChildIterator aChilds(aShapesLabel); aChilds.More(); aChilds.Next()) + { + TDF_Label aCurSubShape = aChilds.Value(); + Handle(TNaming_NamedShape) aNamedShape; + aCurSubShape.FindAttribute(TNaming_NamedShape::GetID(), aNamedShape); + if (aNamedShape.IsNull()) + continue; + + std::shared_ptr aSub(new GeomAPI_Shape); + aSub->setImpl(new TopoDS_Shape(aNamedShape->Get())); + + Handle(TDataStd_IntegerArray) aColorAttr; + std::vector aColor; + aCurSubShape.FindChild(TAG_FEATURE_ARGUMENTS).FindAttribute(TDataStd_IntegerArray::GetID(), aColorAttr); + if (aColorAttr.IsNull()) + continue; + for (int anIndex = aColorAttr->Lower(); anIndex <= aColorAttr->Upper(); ++anIndex) + aColor.push_back(aColorAttr->Value(anIndex)); + if (aColor.size() != 3) + continue; + + theColoredShapes[aSub] = aColor; + } + } + + void Model_Objects::removeShapeColors(const std::shared_ptr theResult) + { + ResultBodyPtr aMainBody = std::dynamic_pointer_cast(theResult); + aMainBody = ModelAPI_Tools::mainBody(aMainBody); + + TDF_Label aShapesLabel; + if (aMainBody.get()) + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aMainBody))); + else + { + ResultPartPtr aResPart = std::dynamic_pointer_cast(theResult); + if (!aResPart.get()) + return; + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aResPart))); + } + for (TDF_ChildIterator aChilds(aShapesLabel); aChilds.More(); aChilds.Next()) + { + TDF_Label aCurSubShape = aChilds.Value(); + Handle(TNaming_NamedShape) aNamedShape; + aCurSubShape.FindAttribute(TNaming_NamedShape::GetID(), aNamedShape); + if (aNamedShape.IsNull()) + continue; + + aCurSubShape.FindChild(TAG_FEATURE_ARGUMENTS).ForgetAttribute(TDataStd_IntegerArray::GetID()); + } + } + ++TDF_Label Model_Objects::shapesFromResult(TDF_Label theResult) const ++{ ++ return theResult.Father().FindChild(TAG_RESULT_SHAPES); ++} ++ +void Model_Objects::getSubShapesWithEdgeThickness( + const std::shared_ptr theResult, + std::map, int>& oShapes +) const { + ResultBodyPtr aMainBody = std::dynamic_pointer_cast(theResult); + aMainBody = ModelAPI_Tools::mainBody(aMainBody); + TDF_Label aShapesLabel; + if (aMainBody.get()) + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aMainBody))); + else + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(theResult))); + + for (TDF_ChildIterator aChilds(aShapesLabel); aChilds.More(); aChilds.Next()) + { + TDF_Label aCurSubShape = aChilds.Value(); + Handle(TNaming_NamedShape) aNamedShape; + aCurSubShape.FindAttribute(TNaming_NamedShape::GetID(), aNamedShape); + if (aNamedShape.IsNull()) + continue; + + std::shared_ptr aSub(new GeomAPI_Shape); + aSub->setImpl(new TopoDS_Shape(aNamedShape->Get())); + + Handle(TDataStd_Integer) aEdgeThicknessAttr; + aCurSubShape.FindChild(TAG_FEATURE_ARGUMENTS).FindAttribute(TDataStd_Integer::GetID(), aEdgeThicknessAttr); + if (aEdgeThicknessAttr.IsNull()) + continue; + + oShapes[aSub] = aEdgeThicknessAttr->Get(); + } +} + +void Model_Objects::removeSubShapeEdgeThickness(const std::shared_ptr theResult) const +{ + ResultBodyPtr aMainBody = std::dynamic_pointer_cast(theResult); + aMainBody = ModelAPI_Tools::mainBody(aMainBody); + + TDF_Label aShapesLabel; + if (aMainBody.get()) + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aMainBody))); + else + { + ResultPartPtr aResPart = std::dynamic_pointer_cast(theResult); + if (!aResPart.get()) + return; + aShapesLabel = shapesFromResult(resultLabel(theResult->data(), index(aResPart))); + } + for (TDF_ChildIterator aChilds(aShapesLabel); aChilds.More(); aChilds.Next()) + { + TDF_Label aCurSubShape = aChilds.Value(); + Handle(TNaming_NamedShape) aNamedShape; + aCurSubShape.FindAttribute(TNaming_NamedShape::GetID(), aNamedShape); + if (aNamedShape.IsNull()) + continue; + + aCurSubShape.FindChild(TAG_FEATURE_ARGUMENTS).ForgetAttribute(TDataStd_Integer::GetID()); + } +} + static std::wstring composeName(const std::string& theFeatureKind, const int theIndex) { std::stringstream aNameStream; diff --cc src/Model/Model_Objects.h index b0ce8b4fe,364a3dddd..42ec31c56 --- a/src/Model/Model_Objects.h +++ b/src/Model/Model_Objects.h @@@ -199,12 -199,12 +199,18 @@@ class Model_Object std::shared_ptr theResult, std::shared_ptr theShape); + void getSubShapesWithEdgeThickness( + const std::shared_ptr theResult, + std::map, int>& oShapes + ) const; + + void removeSubShapeEdgeThickness(const std::shared_ptr theResult) const; + //! Get colored shapes from result + void getColoredShapes(const std::shared_ptr theResult, + std::map, std::vector>& theColoredShapes); + + //! Forget subshape colors + void removeShapeColors(const std::shared_ptr theResult); //! Sets the owner of this manager void setOwner(DocumentPtr theDoc); diff --cc src/Model/Model_ResultBody.cpp index c3915e428,6dc5538ef..8c2a2af58 --- a/src/Model/Model_ResultBody.cpp +++ b/src/Model/Model_ResultBody.cpp @@@ -253,51 -255,8 +255,94 @@@ void Model_ResultBody::updateConcealmen } } +void Model_ResultBody::setSubShapeEdgeThickness( + const std::shared_ptr theResult, + const std::shared_ptr theSubShape, + int theEdgeThickness +) +{ + TopoDS_Shape aShape = shape()->impl(); + TopoDS_Shape aSubShape = theSubShape->impl(); + if (!shape()->isSubShape(theSubShape)) + return; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + document()->storeShape(data(), theResult, theSubShape); + + Handle(TDataStd_Integer) aThickness = new TDataStd_Integer(); + aThickness->Set(theEdgeThickness); + anObjects->setAttribute(aThickness, theResult, theSubShape); +} + +int Model_ResultBody::getSubShapeEdgeThickness(const std::shared_ptr theResult, const std::shared_ptr theSubShape) const +{ + TopoDS_Shape aShape = shape()->impl(); + TopoDS_Shape aSubShape = theSubShape->impl(); + if (!shape()->isSubShape(theSubShape)) + return -1; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + auto anAttr = Handle(TDataStd_Integer)::DownCast(anObjects->getAttribute(TDataStd_Integer::GetID(), theResult, theSubShape)); + if (anAttr.IsNull()) + return; + + return anAttr->Get(); +} + +void Model_ResultBody::getSubShapesWithEdgeThickness( + const std::shared_ptr theResult, + std::map, int>& oShapes +) const +{ + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + anObjects->getSubShapesWithEdgeThickness(theResult, oShapes); +} + - void Model_ResultBody::addShapeColor( const std::wstring& theName,std::vector& color) { ++void Model_ResultBody::setSubShapeEdgeThickness( ++ const std::shared_ptr theResult, ++ const std::shared_ptr theSubShape, ++ int theEdgeThickness ++) ++{ ++ TopoDS_Shape aShape = shape()->impl(); ++ TopoDS_Shape aSubShape = theSubShape->impl(); ++ if (!shape()->isSubShape(theSubShape)) ++ return; ++ ++ Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); ++ document()->storeShape(data(), theResult, theSubShape); ++ ++ Handle(TDataStd_Integer) aThickness = new TDataStd_Integer(); ++ aThickness->Set(theEdgeThickness); ++ anObjects->setAttribute(aThickness, theResult, theSubShape); ++} ++ ++int Model_ResultBody::getSubShapeEdgeThickness(const std::shared_ptr theResult, const std::shared_ptr theSubShape) const ++{ ++ TopoDS_Shape aShape = shape()->impl(); ++ TopoDS_Shape aSubShape = theSubShape->impl(); ++ if (!shape()->isSubShape(theSubShape)) ++ return -1; ++ ++ Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); ++ auto anAttr = Handle(TDataStd_Integer)::DownCast(anObjects->getAttribute(TDataStd_Integer::GetID(), theResult, theSubShape)); ++ if (anAttr.IsNull()) ++ return; + ++ return anAttr->Get(); ++} ++ ++void Model_ResultBody::getSubShapesWithEdgeThickness( ++ const std::shared_ptr theResult, ++ std::map, int>& oShapes ++) const ++{ ++ Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); ++ anObjects->getSubShapesWithEdgeThickness(theResult, oShapes); ++} ++ + void Model_ResultBody::addShapeColor( const std::wstring& theName,std::vector& color) + { if (myColorsShape.find(theName) == myColorsShape.end()) myColorsShape[ theName ] = color; } diff --cc src/Model/Model_ResultPart.cpp index 91fdda8b5,5f46da178..e44fb02ab --- a/src/Model/Model_ResultPart.cpp +++ b/src/Model/Model_ResultPart.cpp @@@ -46,7 -45,7 +47,8 @@@ #include #include #include +#include + #include #include #include #include @@@ -434,48 -439,57 +443,99 @@@ std::shared_ptr Model_Re return aResult; } +void Model_ResultPart::setSubShapeEdgeThickness(const std::shared_ptr& theSubShape, int theThickness) +{ + TopoDS_Shape aShape = shape()->impl(); + TopoDS_Shape aSubShape = theSubShape->impl(); + if (!shape()->isSubShape(theSubShape)) + return; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + + document()->storeShape(data(), original(), theSubShape); + Handle(TDataStd_Integer) aThickness = new TDataStd_Integer(); + aThickness->Set(theThickness); + anObjects->setAttribute(aThickness, original(), theSubShape); +} + +int Model_ResultPart::getSubShapeEdgeThickness(const std::shared_ptr& theSubShape) const +{ + TopoDS_Shape aShape = shape()->impl(); + TopoDS_Shape aSubShape = theSubShape->impl(); + if (!shape()->isSubShape(theSubShape)) + return; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + Handle(TDataStd_Integer) anAttr = Handle(TDataStd_Integer)::DownCast(anObjects->getAttribute(TDataStd_Integer::GetID(), original(), theSubShape)); + if (anAttr.IsNull()) + return; + + return anAttr->Get(); +} + +void Model_ResultPart::getSubShapesWithEdgeThickness(std::map, int>& oShapes) +{ + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + anObjects->getSubShapesWithEdgeThickness(original(), oShapes); +} + +void Model_ResultPart::removeSubShapeEdgeThickness() +{ + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + anObjects->removeSubShapeEdgeThickness(original()); +} + + void Model_ResultPart::setSubShapeColor(const std::shared_ptr& theShape, + const std::vector& theColor) + { + TopoDS_Shape aShape = this->shape()->impl(); + TopoDS_Shape aSubShape = theShape->impl(); + if (!this->shape()->isSubShape(theShape)) + return; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + + document()->storeShape(data(), original(), theShape); + Handle(TDataStd_IntegerArray) aColor = new TDataStd_IntegerArray(); + aColor->Init(0, 2); + aColor->SetValue(0, theColor[0]); + aColor->SetValue(1, theColor[1]); + aColor->SetValue(2, theColor[2]); + anObjects->setAttribute(aColor, original(), theShape); + } + + void Model_ResultPart::getSubShapeColor(const std::shared_ptr& theShape, + std::vector& theColor) + { + TopoDS_Shape aShape = this->shape()->impl(); + TopoDS_Shape aSubShape = theShape->impl(); + if (!this->shape()->isSubShape(theShape)) + return; + + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + Handle(TDataStd_IntegerArray) anAttr = Handle(TDataStd_IntegerArray)::DownCast( + anObjects->getAttribute(TDataStd_IntegerArray::GetID(), original(), theShape)); + if (anAttr.IsNull()) + return; + for (int anIndex = anAttr->Lower(); anIndex <= anAttr->Upper(); ++anIndex) + theColor.push_back(anAttr->Value(anIndex)); + if (theColor.size() != 3) + theColor.clear(); + } + + void Model_ResultPart::getColoredShapes(std::map, + std::vector>&theColoredShapes) + { + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + anObjects->getColoredShapes(original(), theColoredShapes); + } + + void Model_ResultPart::removeShapeColors() + { + Model_Objects* anObjects = std::dynamic_pointer_cast(document())->objects(); + anObjects->removeShapeColors(original()); + } + std::shared_ptr Model_ResultPart::selectionValue(const int theIndex) { std::shared_ptr aResult; diff --cc src/Model/Model_ResultPart.h index 7c1d2551f,2ba7d9ac9..38a0cfc1d --- a/src/Model/Model_ResultPart.h +++ b/src/Model/Model_ResultPart.h @@@ -77,16 -78,21 +78,30 @@@ class Model_ResultPart : public ModelAP MODEL_EXPORT virtual bool updateInPart(const int theIndex); /// Returns the shape by the name in the part MODEL_EXPORT virtual std::shared_ptr shapeInPart( - const std::wstring& theName, const std::string& theType, int& theIndex); + const std::wstring& theName, const std::string& theType, int& theIndex); /// Set color on subshape + MODEL_EXPORT virtual void setSubShapeColor(const std::shared_ptr& theShape, + const std::vector& theColor); + + /// Get color on subshape + MODEL_EXPORT virtual void getSubShapeColor(const std::shared_ptr& theShape, + std::vector& theColor); + + /// Get colored shapes from result + MODEL_EXPORT virtual void getColoredShapes(std::map, + std::vector>&theColoredShapes); + + /// Forget subshape colors + MODEL_EXPORT virtual void removeShapeColors(); + + + MODEL_EXPORT virtual void setSubShapeEdgeThickness(const std::shared_ptr& theSubShape, int theThickness); + + MODEL_EXPORT virtual int getSubShapeEdgeThickness(const std::shared_ptr& theSubShape) const; + + MODEL_EXPORT virtual void getSubShapesWithEdgeThickness(std::map, int>& oSubShapes); + + MODEL_EXPORT virtual void removeSubShapeEdgeThickness(); + /// Updates the selection inside of the part as a geometrical selection MODEL_EXPORT virtual bool combineGeometrical(const int theIndex, std::wstring& theNewName); /// Updates the shape-result of the part (called on Part feature execution) diff --cc src/ModelAPI/ModelAPI_Document.h index f07b86c5d,64f638942..da907084d --- a/src/ModelAPI/ModelAPI_Document.h +++ b/src/ModelAPI/ModelAPI_Document.h @@@ -108,15 -109,14 +109,22 @@@ public //! \returns index started from zero, or -1 if object is invisible or belongs to another document virtual const int index(std::shared_ptr theObject, const bool theAllowFolder = false) = 0; + //! Returns the shape index in the result. + //! \param theResult result + //! \param theShape result subshape + //! \returns index started from zero, or -1 if shape is not stored or is not a subshape of the result + virtual const int index(std::shared_ptr theResult, + std::shared_ptr theShape, + const bool theAllowFolder = false) = 0; + //! Returns the shape index in the result. + //! \param theResult result + //! \param theShape result subshape + //! \returns index started from zero, or -1 if shape is not stored or is not a subshape of the result + virtual const int index(std::shared_ptr theResult, + std::shared_ptr theShape, + const bool theAllowFolder = false) = 0; + //! Returns the number of objects in the group of objects //! \param theGroupID group of objects //! \param theAllowFolder take into account grouping feature by folders diff --cc src/ModelAPI/ModelAPI_ResultPart.h index 2b23383f9,8dcd85723..294533fb7 --- a/src/ModelAPI/ModelAPI_ResultPart.h +++ b/src/ModelAPI/ModelAPI_ResultPart.h @@@ -90,15 -89,21 +90,29 @@@ class ModelAPI_ResultPart : public Mode /// Returns the shape by the name in the part virtual std::shared_ptr shapeInPart( const std::wstring& theName, const std::string& theType, int& theIndex) = 0; + /// Set color on subshape + virtual void setSubShapeColor(const std::shared_ptr& theShape, + const std::vector& theColor) = 0; + + /// Get subshape color + virtual void getSubShapeColor(const std::shared_ptr& theShape, + std::vector& theColor) = 0; + + /// Get colored shapes from result + virtual void getColoredShapes(std::map, + std::vector>&theColoredShapes) = 0; + + /// Forget subshape colors + virtual void removeShapeColors() = 0; + virtual void setSubShapeEdgeThickness(const std::shared_ptr& theSubShape, int theThickness) = 0; + + virtual int getSubShapeEdgeThickness(const std::shared_ptr& theSubShape) const = 0; + + virtual void getSubShapesWithEdgeThickness(std::map, int>& oSubShapes) = 0; + + virtual void removeSubShapeEdgeThickness() = 0; + /// Updates the selection inside of the part as a geometrical selection virtual bool combineGeometrical(const int theIndex, std::wstring& theNewName) = 0; diff --cc src/ModelHighAPI/ModelHighAPI_Dumper.cpp index f6d07c88b,f7cd5b96c..1403aafb8 --- a/src/ModelHighAPI/ModelHighAPI_Dumper.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Dumper.cpp @@@ -1340,8 -1373,9 +1391,9 @@@ ModelHighAPI_Dumper& ModelHighAPI_Dumpe ModelAPI_Tools::allResults(theEntity, allRes); for(std::list::iterator aRes = allRes.begin(); aRes != allRes.end(); aRes++) { if(!myNames[*aRes].myIsDefault || !isDefaultColor(*aRes) || - !isDefaultDeflection(*aRes) || !isDefaultTransparency(*aRes) || isEdgeThicknessDefined(*aRes)) - !isDefaultDeflection(*aRes) || !isDefaultTransparency(*aRes) || ++ !isDefaultDeflection(*aRes) || !isDefaultTransparency(*aRes) || isEdgeThicknessDefined(*aRes) || + (isParentResult(*aRes) && hasColoredShape(*aRes, true))) - aResultsWithNameOrColor.push_back(*aRes); + aResultsWithNonDefaultAttr.push_back(*aRes); } // store just dumped entity to stack if (myEntitiesStack.empty() || myEntitiesStack.top().myEntity != theEntity) diff --cc src/PartSet/PartSet_Module.cpp index 0ed547e95,825d5a254..9836754a3 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@@ -273,9 -273,13 +273,12 @@@ PartSet_Module::PartSet_Module(ModuleBa Config_PropManager::registerProp("Visualization", "axis_arrow_size", "Trihedron arrows constant size", Config_Prop::IntSpin, "10"); + Config_PropManager::registerProp("Visualization", "result_subshape_with_edge_thickness", + "Set edge thickness of subshape of result", Config_Prop::Boolean, "true"); + + Config_PropManager::registerProp("Visualization", "color_subshape_result", + "Set color on subshape of result", Config_Prop::Boolean, "true"); + - Config_PropManager::registerProp("Shortcuts", "add_parameter_shortcut", - "Add parameter in parameters manager dialog", - Config_Prop::Shortcut, "Ctrl+A"); - Config_PropManager::registerProp("Windows", "use_hide_faces_panel", "Use HideFaces panel in operations", Config_Prop::Boolean, "false"); }