From 302437da7f4443349276e835e87452c29dd7c07a Mon Sep 17 00:00:00 2001 From: mpv Date: Thu, 12 Dec 2019 17:27:40 +0300 Subject: [PATCH] Fix for the issue #3116 : Create Edge, Wire all-in is missed for feature in Partset --- src/Model/Model_AttributeSelection.cpp | 22 +++++++++------ src/ModelAPI/CMakeLists.txt | 1 + src/ModelAPI/Test/Test3116.py | 39 ++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 src/ModelAPI/Test/Test3116.py diff --git a/src/Model/Model_AttributeSelection.cpp b/src/Model/Model_AttributeSelection.cpp index e8f99e894..9d1e6cb65 100644 --- a/src/Model/Model_AttributeSelection.cpp +++ b/src/Model/Model_AttributeSelection.cpp @@ -185,10 +185,11 @@ bool Model_AttributeSelection::setValue(const ObjectPtr& theContext, } else if (theContext->groupName() == ModelAPI_ResultGroup::group()) { aSelLab.ForgetAllAttributes(true); TDataStd_UAttribute::Set(aSelLab, kSIMPLE_REF_ID); - } else { // check the feature context: parent-Part of this feature should not be used + } else { // check the feature context: only construction features of PartSet could be selected FeaturePtr aFeatureContext = std::dynamic_pointer_cast(theContext); - if (aFeatureContext.get()) { - if (owner()->document() != aFeatureContext->document()) { + if (aFeatureContext.get() && owner()->document() != aFeatureContext->document()) { + if (aFeatureContext->results().empty() || + aFeatureContext->firstResult()->groupName() != ModelAPI_ResultConstruction::group()) { aSelLab.ForgetAllAttributes(true); myRef.setValue(ObjectPtr()); if (aToUnblock) @@ -773,19 +774,22 @@ std::string Model_AttributeSelection::namingName(const std::string& theDefaultNa CenterType aCenterType = NOT_CENTER; std::shared_ptr aSubSh = internalValue(aCenterType); - ResultPtr aCont = context(); - if (!aCont.get() || - (aCont->groupName() == ModelAPI_ResultConstruction::group() && contextFeature().get())) { + FeaturePtr aContFeature = contextFeature(); + if (aContFeature.get()) { + std::string aResName; + // checking part-owner + if (aContFeature->document() != owner()->document()) + aResName += aContFeature->document()->kind() + "/"; // selection of a full feature - FeaturePtr aFeatureCont = contextFeature(); - if (aFeatureCont.get()) { - return kWHOLE_FEATURE + aFeatureCont->name(); + if (aContFeature.get()) { + return aResName + kWHOLE_FEATURE + aContFeature->name(); } // in case of selection of removed result return ""; } + ResultPtr aCont = context(); TDF_Label aSelLab = selectionLabel(); if (aSelLab.IsAttribute(kSIMPLE_REF_ID)) { // whole context, no value return contextName(aCont); diff --git a/src/ModelAPI/CMakeLists.txt b/src/ModelAPI/CMakeLists.txt index a1894001e..6df21ce5b 100644 --- a/src/ModelAPI/CMakeLists.txt +++ b/src/ModelAPI/CMakeLists.txt @@ -254,4 +254,5 @@ ADD_UNIT_TESTS(TestConstants.py Test2901.py Test2903.py Test3020.py + Test3116.py ) diff --git a/src/ModelAPI/Test/Test3116.py b/src/ModelAPI/Test/Test3116.py new file mode 100644 index 000000000..2540307ca --- /dev/null +++ b/src/ModelAPI/Test/Test3116.py @@ -0,0 +1,39 @@ +# Copyright (C) 2014-2019 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# Cheching for selection of the whole feature (Sketch) in PartSet from the Part + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Sketch_1 = model.addSketch(partSet, model.defaultPlane("XOY")) +SketchCircle_1 = Sketch_1.addCircle(16, 15, 3) +model.do() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Edge_1 = model.addEdge(Part_1_doc, [model.selection("COMPOUND", "PartSet/all-in-Sketch_1")], False) +model.end() + +# check the result validity +from ModelAPI import * +aFactory = ModelAPI_Session.get().validators() +assert(aFactory.validate(Edge_1.feature())) + +assert(model.checkPythonDump()) -- 2.39.2