Salome HOME
Update for the spheres centers correct initialization on open: selection should not...
authormpv <mpv@opencascade.com>
Fri, 28 Dec 2018 11:36:50 +0000 (14:36 +0300)
committermpv <mpv@opencascade.com>
Fri, 28 Dec 2018 11:36:50 +0000 (14:36 +0300)
src/Model/Model_AttributeSelection.cpp
src/ModelAPI/CMakeLists.txt
src/ModelAPI/Test/TestSelectionInitialization.py [new file with mode: 0644]

index 063642c3fbaadcd01f747925fc5c2d378079c2dd..f370d48736f5bb5ab45ab39dd5f61c7627fb11b0 100644 (file)
@@ -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<Model_ResultConstruction> aConstr =
-          std::dynamic_pointer_cast<Model_ResultConstruction>(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<Model_Document> aMyDoc =
+          std::dynamic_pointer_cast<Model_Document>(owner()->document());
+        if (!aMyDoc.get())
+          return false;
+        // check at least the feature exists
+        return aMyDoc->featureByLab(aRefLab).get() != NULL;
       }
     }
   }
index 71a3e37a6d62c9eca273bf5af72b77e756b0a2d9..c1e32f58ed793272d50ac506ebe04835e3224a67 100644 (file)
@@ -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 (file)
index 0000000..876dc37
--- /dev/null
@@ -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<mailto: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")