Salome HOME
Fix for the issue #2917 : Adding a Point based on an object in python makes it create...
authormpv <mpv@opencascade.com>
Thu, 25 Apr 2019 07:27:18 +0000 (10:27 +0300)
committermpv <mpv@opencascade.com>
Thu, 25 Apr 2019 07:27:18 +0000 (10:27 +0300)
src/ConstructionAPI/ConstructionAPI_Point.cpp
src/ConstructionAPI/ConstructionAPI_Point.h
src/ConstructionPlugin/Test/TestPoint_VertexSelection.py
src/PythonAPI/model/construction/__init__.py

index 5fa78bf6727063e672a58ec4fd0be1e56181bebc..0029708af6f768cb9c1baf29195b91e87ce2ab18 100644 (file)
@@ -109,14 +109,15 @@ ConstructionAPI_Point::ConstructionAPI_Point(const std::shared_ptr<ModelAPI_Feat
 //==================================================================================================
 ConstructionAPI_Point::ConstructionAPI_Point(const std::shared_ptr<ModelAPI_Feature>& theFeature,
                                              const ModelHighAPI_Selection& theObject,
-                                             const bool theIsCircularEdge)
+                                             const bool theIsCircularEdge,
+                                             const bool theIsXYZSelection)
 : ModelHighAPI_Interface(theFeature)
 {
   if (initialize())
   {
     if (theIsCircularEdge) {
       setByCenterOfCircle(theObject);
-    } else if (theObject.shapeType() == "VERTEX") {
+    } else if (theObject.shapeType() == "VERTEX" && theIsXYZSelection) {
       // This is tricky way to get vertex shape.
       fillAttribute(theObject, mypointToProject);
       GeomShapePtr aShape = mypointToProject->value();
@@ -416,3 +417,11 @@ PointPtr addPoint(const std::shared_ptr<ModelAPI_Document> & thePart,
   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(ConstructionAPI_Point::ID());
   return PointPtr(new ConstructionAPI_Point(aFeature, theObject, theIsCircularEdge));
 }
+
+//==================================================================================================
+PointPtr addPointXYZ(const std::shared_ptr<ModelAPI_Document> & thePart,
+                     const ModelHighAPI_Selection& theObject)
+{
+  std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(ConstructionAPI_Point::ID());
+  return PointPtr(new ConstructionAPI_Point(aFeature, theObject, false, true));
+}
index 96376b481efe66626ffcda3b1ca5de5e8796f50b..ce20c53990f1018f27ba8f3d52680ecb673e5cee 100644 (file)
@@ -70,10 +70,12 @@ public:
                         const ModelHighAPI_Selection& theObject3);
 
   /// Constructor with values: object and circular edge flag.
+  /// May be used for creation of point by coordinates using selection-vertex.
   CONSTRUCTIONAPI_EXPORT
   ConstructionAPI_Point(const std::shared_ptr<ModelAPI_Feature>& theFeature,
                         const ModelHighAPI_Selection& theObject,
-                        const bool theIsCircularEdge = false);
+                        const bool theIsCircularEdge = false,
+                        const bool theIsXYZSelection = false);
 
   /// Destructor.
   CONSTRUCTIONAPI_EXPORT
@@ -235,4 +237,10 @@ PointPtr addPoint(const std::shared_ptr<ModelAPI_Document> & thePart,
                   const ModelHighAPI_Selection& theObject,
                   const bool theIsCircularEdge = false);
 
+/// \ingroup CPPHighAPI
+/// \brief Create Point feature by coordinates using the selected vertex.
+CONSTRUCTIONAPI_EXPORT
+PointPtr addPointXYZ(const std::shared_ptr<ModelAPI_Document> & thePart,
+                     const ModelHighAPI_Selection& theObject);
+
 #endif /* SRC_CONSTRUCTIONAPI_CONSTRUCTIONAPI_POINT_H_ */
index d3cad72ef4d2622a46cd26716dbbff4b925ec79a..269630bd014fff1758ef55d5ad7818da62677293 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+from SketchAPI import *
 from salome.shaper import model
 
 model.begin()
 partSet = model.moduleDocument()
 Part_1 = model.addPart(partSet)
 Part_1_doc = Part_1.document()
-Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
-Point_2 = model.addPoint(Part_1_doc, 10, 0, 10)
+
+Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("YOZ"))
+SketchLine_1 = Sketch_1.addLine(10, 10, 0, 10)
+SketchLine_2 = Sketch_1.addLine(0, 10, 0, 0)
+SketchLine_3 = Sketch_1.addLine(0, 0, 10, 0)
+SketchLine_4 = Sketch_1.addLine(10, 0, 10, 10)
+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())
+SketchConstraintVertical_1 = Sketch_1.setVertical(SketchLine_2.result())
+SketchConstraintHorizontal_2 = Sketch_1.setHorizontal(SketchLine_3.result())
+SketchConstraintVertical_2 = Sketch_1.setVertical(SketchLine_4.result())
+SketchConstraintLength_1 = Sketch_1.setLength(SketchLine_1.result(), 10)
+SketchConstraintLength_2 = Sketch_1.setLength(SketchLine_4.result(), 10)
+SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_1 = SketchProjection_1.createdFeature()
+SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchAPI_Point(SketchPoint_1).coordinates())
 model.do()
+Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2f-SketchLine_3f-SketchLine_4f")], model.selection(), 10, 0)
+Point_2 = model.addPointXYZ(Part_1_doc, model.selection("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/To_Face]"))
 model.end()
 
 from GeomAPI import GeomAPI_Vertex
index 18f4616ca38c15305e47cc4c810b6a256e4c7ddf..6ecb09e7ee40c62c57d108d291bd094938cf2ce4 100644 (file)
@@ -19,4 +19,4 @@
 """Package for Construction plugin for the Parametric Geometry API of the Modeler.
 """
 
-from ConstructionAPI import addAxis, addPlane, addPoint
+from ConstructionAPI import addAxis, addPlane, addPoint, addPointXYZ