]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Added a unit test and additional update for the issue #1757
authormpv <mpv@opencascade.com>
Wed, 9 Nov 2016 10:52:34 +0000 (13:52 +0300)
committermpv <mpv@opencascade.com>
Wed, 9 Nov 2016 10:52:34 +0000 (13:52 +0300)
src/Model/Model_AttributeSelection.cpp
src/Model/Model_SelectionNaming.cpp
src/ModelAPI/CMakeLists.txt
src/ModelAPI/Test/Test1757.py [new file with mode: 0644]

index 776460cbafc67e6e1ac50a71be0a016d359f2576..54b3d0f834a54e4f83c83a9228a1fc661e05cfb3 100644 (file)
@@ -979,7 +979,7 @@ void Model_AttributeSelection::selectSubShape(
   std::shared_ptr<GeomAPI_Shape> aShapeToBeSelected;
   ResultPtr aCont;
   if (aSelNaming.selectSubShape(theType, theSubShapeName, aDoc, aShapeToBeSelected, aCont)) {
-    // try to find the last context to find the up to dat shape
+    // try to find the last context to find the up to date shape
     if (aCont->shape().get() && !aCont->shape()->isNull() &&
       aCont->groupName() == ModelAPI_ResultBody::group() && aDoc == owner()->document()) {
       const TopoDS_Shape aConShape = aCont->shape()->impl<TopoDS_Shape>();
index a433e99601b525147793c2ec5b996711dcc526e0..b3090cef99080abaee2b0df2839c4f739e28f204 100644 (file)
@@ -81,6 +81,26 @@ std::string Model_SelectionNaming::getShapeName(
             }
           }
         }
+        // if a shape is under another context, use this name, not theContext
+        std::shared_ptr<Model_Data> aContextData =
+          std::dynamic_pointer_cast<Model_Data>(theContext->data());
+        // for constructions the naming is in arguments and has no evolution, so, apply this only
+        // for bodies
+        if (isNeedContextName && theContext->groupName() == ModelAPI_ResultBody::group() &&
+            !aNS->Label().IsDescendant(aContextData->label())) {
+          isNeedContextName = false;
+          TDF_Label aNSDataLab = aNS->Label();
+          while(aNSDataLab.Depth() != 7 && aNSDataLab.Depth() > 5)
+            aNSDataLab = aNSDataLab.Father();
+          ObjectPtr aNewContext = theDoc->objects()->object(aNSDataLab);
+          if (!aNewContext.get() && aNSDataLab.Depth() == 7) {
+            aNSDataLab = aNSDataLab.Father().Father();
+            aNewContext = theDoc->objects()->object(aNSDataLab);
+          }
+          if (aNewContext.get()) {
+            aName = aNewContext->data()->name() + "/" + aName;
+          }
+        }
       }
     }
   }
index 1127806c7f87aa6b3fd8c65d7dd8b8f4713bc0ae..d0890d8199f0502eea9691b7b32e5e43cff6dc61 100644 (file)
@@ -133,4 +133,6 @@ ADD_UNIT_TESTS(TestConstants.py
                TestResults.py
                TestIntArray.py
                Test1512.py
-               TestDoubleArray.py)
+               TestDoubleArray.py
+               Test1757.py
+)
diff --git a/src/ModelAPI/Test/Test1757.py b/src/ModelAPI/Test/Test1757.py
new file mode 100644 (file)
index 0000000..236eac9
--- /dev/null
@@ -0,0 +1,110 @@
+"""
+      Test1757.py
+      Unit test for testing the modification of base object after movement of the history line:
+      the referenced (that is disabled, after the current position of the history line) attribute
+      must be updated.
+      The test is created by modification of the dumped script.
+
+"""
+
+import model
+
+#=========================================================================
+# Initialize a part
+#=========================================================================
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+#=========================================================================
+# Create a base box: rectangular sketch and extrusion
+#=========================================================================
+Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))
+SketchLine_1 = Sketch_1.addLine(199.69219283509, 125.016366179415, -144.040270241704, 125.016366179415)
+SketchLine_2 = Sketch_1.addLine(-144.040270241704, 125.016366179415, -144.040270241704, -111.365692746051)
+SketchLine_3 = Sketch_1.addLine(-144.040270241704, -111.365692746051, 199.69219283509, -111.365692746051)
+SketchLine_4 = Sketch_1.addLine(199.69219283509, -111.365692746051, 199.69219283509, 125.016366179415)
+SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_1.startPoint())
+SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
+SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint())
+SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
+SketchConstraintHorizontal_1 = Sketch_1.setHorizontal(SketchLine_1.result()[0])
+SketchConstraintVertical_1 = Sketch_1.setVertical(SketchLine_2.result()[0])
+SketchConstraintHorizontal_2 = Sketch_1.setHorizontal(SketchLine_3.result()[0])
+SketchConstraintVertical_2 = Sketch_1.setVertical(SketchLine_4.result()[0])
+model.do()
+Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_1f-SketchLine_2f-SketchLine_3f-SketchLine_4f")], model.selection(), 300, 0)
+
+#=========================================================================
+# Cut another rectangle to make a groove
+#=========================================================================
+ExtrusionCut_1 = model.addExtrusionCut(Part_1_doc, [], model.selection(), model.selection(), 0, model.selection("FACE", "Extrusion_1_1/To_Face_1"), 0, [model.selection("SOLID", "Extrusion_1_1")])
+Sketch_2 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/From_Face_1"))
+SketchLine_5 = Sketch_2.addLine(-47.794137712106, -188.943752610533, 90.842718875892, -188.943752610533)
+SketchLine_6 = Sketch_2.addLine(90.842718875892, -188.943752610533, 90.842718875892, -51.567231082425)
+SketchLine_7 = Sketch_2.addLine(90.842718875892, -51.567231082425, -47.794137712106, -51.567231082425)
+SketchLine_8 = Sketch_2.addLine(-47.794137712106, -51.567231082425, -47.794137712106, -188.943752610533)
+SketchConstraintCoincidence_5 = Sketch_2.setCoincident(SketchLine_8.endPoint(), SketchLine_5.startPoint())
+SketchConstraintCoincidence_6 = Sketch_2.setCoincident(SketchLine_5.endPoint(), SketchLine_6.startPoint())
+SketchConstraintCoincidence_7 = Sketch_2.setCoincident(SketchLine_6.endPoint(), SketchLine_7.startPoint())
+SketchConstraintCoincidence_8 = Sketch_2.setCoincident(SketchLine_7.endPoint(), SketchLine_8.startPoint())
+SketchConstraintHorizontal_3 = Sketch_2.setHorizontal(SketchLine_5.result()[0])
+SketchConstraintVertical_3 = Sketch_2.setVertical(SketchLine_6.result()[0])
+SketchConstraintHorizontal_4 = Sketch_2.setHorizontal(SketchLine_7.result()[0])
+SketchConstraintVertical_4 = Sketch_2.setVertical(SketchLine_8.result()[0])
+ExtrusionCut_1.setNestedSketch(Sketch_2)
+model.do()
+
+#=========================================================================
+# Make a cylindrical hole using one of the produced faces
+#=========================================================================
+ExtrusionCut_2 = model.addExtrusionCut(Part_1_doc, [], model.selection(), model.selection(), 0, model.selection("FACE", "Extrusion_1_1/Generated_Face_2"), 0, [model.selection("SOLID", "ExtrusionCut_1_1")])
+Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "ExtrusionCut_1_1/Modfied_4"))
+SketchCircle_1 = Sketch_3.addCircle(143.412751420315, -228.52745656314, 32.158435160764)
+ExtrusionCut_2.setNestedSketch(Sketch_3)
+
+#=========================================================================
+# Move a history line before this hole creation to modify groove
+#=========================================================================
+Part_1.document().setCurrentFeature(ExtrusionCut_1.feature(), True)
+
+#=========================================================================
+# Modify the cylindrical hole base face by another groove in the history before the hole is created
+#=========================================================================
+ExtrusionCut_3 = model.addExtrusionCut(Part_1_doc, [], model.selection(), model.selection(), 0, model.selection("FACE", "Extrusion_1_1/Generated_Face_3"), -50, [model.selection("SOLID", "ExtrusionCut_1_1")])
+Sketch_4 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/Generated_Face_1"))
+SketchLine_9 = Sketch_4.addLine(-176.701443076057, -151.212050129331, -91.83965287802501, -151.212050129331)
+SketchLine_10 = Sketch_4.addLine(-91.83965287802501, -151.212050129331, -91.83965287802501, -84.473709256573)
+SketchLine_11 = Sketch_4.addLine(-91.83965287802501, -84.473709256573, -176.701443076057, -84.473709256573)
+SketchLine_12 = Sketch_4.addLine(-176.701443076057, -84.473709256573, -176.701443076057, -151.212050129331)
+SketchConstraintCoincidence_9 = Sketch_4.setCoincident(SketchLine_12.endPoint(), SketchLine_9.startPoint())
+SketchConstraintCoincidence_10 = Sketch_4.setCoincident(SketchLine_9.endPoint(), SketchLine_10.startPoint())
+SketchConstraintCoincidence_11 = Sketch_4.setCoincident(SketchLine_10.endPoint(), SketchLine_11.startPoint())
+SketchConstraintCoincidence_12 = Sketch_4.setCoincident(SketchLine_11.endPoint(), SketchLine_12.startPoint())
+SketchConstraintHorizontal_5 = Sketch_4.setHorizontal(SketchLine_9.result()[0])
+SketchConstraintVertical_5 = Sketch_4.setVertical(SketchLine_10.result()[0])
+SketchConstraintHorizontal_6 = Sketch_4.setHorizontal(SketchLine_11.result()[0])
+SketchConstraintVertical_6 = Sketch_4.setVertical(SketchLine_12.result()[0])
+model.do()
+ExtrusionCut_3.setNestedSketch(Sketch_4)
+
+model.do()
+
+#=========================================================================
+# Move a history line just to the end to recreate the cylindrical hole
+#=========================================================================
+Part_1.document().setCurrentFeature(ExtrusionCut_2.feature(), True)
+
+model.end()
+
+#=========================================================================
+# Check that the circle-sketch and the cylindrical-hole are correctly updated
+#=========================================================================
+import ModelAPI
+
+assert(ModelAPI.ModelAPI_Session.get().validators().validate(Sketch_4.feature()))
+assert(ModelAPI.ModelAPI_Session.get().validators().validate(ExtrusionCut_2.feature()))
+assert(Sketch_3.feature().selection("External").namingName() == "ExtrusionCut_3_1/Modfied_6")
+
+assert(model.checkPythonDump())