From 1ef44c5fb4825914f554e37f4f38c1f379508142 Mon Sep 17 00:00:00 2001 From: mpv Date: Fri, 28 Dec 2018 14:36:50 +0300 Subject: [PATCH] Update for the spheres centers correct initialization on open: selection should not reset to Origin. --- src/Model/Model_AttributeSelection.cpp | 19 ++++--- src/ModelAPI/CMakeLists.txt | 1 + .../Test/TestSelectionInitialization.py | 56 +++++++++++++++++++ 3 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 src/ModelAPI/Test/TestSelectionInitialization.py diff --git a/src/Model/Model_AttributeSelection.cpp b/src/Model/Model_AttributeSelection.cpp index 063642c3f..f370d4873 100644 --- a/src/Model/Model_AttributeSelection.cpp +++ b/src/Model/Model_AttributeSelection.cpp @@ -419,15 +419,18 @@ bool Model_AttributeSelection::isInitialized() if (selectionLabel().FindAttribute(TNaming_NamedShape::GetID(), aSelection)) { return !aSelection->Get().IsNull(); } else { // for simple construction element: just shape of this construction element - std::shared_ptr aConstr = - std::dynamic_pointer_cast(context()); - if (aConstr.get()) { - return true; - } - // for the whole feature, a feature object - FeaturePtr aFeat = contextFeature(); - if (aFeat.get()) + if (myRef.value().get()) return true; + // check that this is on open of document, so, results are not initialized yet + TDF_Label aRefLab = myRef.myRef->Get(); + if (aRefLab.IsNull() || !owner().get()) + return false; + std::shared_ptr aMyDoc = + std::dynamic_pointer_cast(owner()->document()); + if (!aMyDoc.get()) + return false; + // check at least the feature exists + return aMyDoc->featureByLab(aRefLab).get() != NULL; } } } diff --git a/src/ModelAPI/CMakeLists.txt b/src/ModelAPI/CMakeLists.txt index 71a3e37a6..c1e32f58e 100644 --- a/src/ModelAPI/CMakeLists.txt +++ b/src/ModelAPI/CMakeLists.txt @@ -236,4 +236,5 @@ ADD_UNIT_TESTS(TestConstants.py TestContainerSelector.py TestSaveOpen1.py TestSaveOpen2.py + TestSelectionInitialization.py ) diff --git a/src/ModelAPI/Test/TestSelectionInitialization.py b/src/ModelAPI/Test/TestSelectionInitialization.py new file mode 100644 index 000000000..876dc3726 --- /dev/null +++ b/src/ModelAPI/Test/TestSelectionInitialization.py @@ -0,0 +1,56 @@ +## Copyright (C) 2014-2017 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 +## + +# -*- coding: utf-8 -*- + +from salome.shaper import model +from ModelAPI import * + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Point_2 = model.addPoint(Part_1_doc, 1, 2, 3) +Sphere_1 = model.addSphere(Part_1_doc, model.selection("VERTEX", "Point_1"), 10) +model.end() + +# save document in a current folder +aSession = ModelAPI_Session.get() +aFiles = StringList() +aSession.save(".", aFiles) +# close the current document +aSession.closeAll() +# open the saved document +assert(aSession.load(".")) + +# activate the Part of session +model.begin() +partSet = model.moduleDocument() +assert(partSet.size("Features") == 1) +aPart = objectToFeature(partSet.object("Features", 0)) +aPartResult = modelAPI_ResultPart(aPart.results()[0]) +aPartResult.activate() +aPartDoc = aPartResult.partDoc() +aSession.setActiveDocument(aPartDoc, True) +model.end() + +# check the sphere location (it should not be "Origin" - default one) +aSphere = objectToFeature(aPartDoc.objectByName("Features", "Sphere_1")) +assert(aSphere.selection("center_point").namingName() == "Point_1") -- 2.39.2