From: mpv Date: Thu, 25 Apr 2019 07:27:18 +0000 (+0300) Subject: Fix for the issue #2917 : Adding a Point based on an object in python makes it create... X-Git-Tag: VEDF2019Lot4~101^2~96 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=8a16c1d2676f3af52cc3246b0e61c788fff6efc2;p=modules%2Fshaper.git Fix for the issue #2917 : Adding a Point based on an object in python makes it created by coords --- diff --git a/src/ConstructionAPI/ConstructionAPI_Point.cpp b/src/ConstructionAPI/ConstructionAPI_Point.cpp index 5fa78bf67..0029708af 100644 --- a/src/ConstructionAPI/ConstructionAPI_Point.cpp +++ b/src/ConstructionAPI/ConstructionAPI_Point.cpp @@ -109,14 +109,15 @@ ConstructionAPI_Point::ConstructionAPI_Point(const std::shared_ptr& 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 & thePart, std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Point::ID()); return PointPtr(new ConstructionAPI_Point(aFeature, theObject, theIsCircularEdge)); } + +//================================================================================================== +PointPtr addPointXYZ(const std::shared_ptr & thePart, + const ModelHighAPI_Selection& theObject) +{ + std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Point::ID()); + return PointPtr(new ConstructionAPI_Point(aFeature, theObject, false, true)); +} diff --git a/src/ConstructionAPI/ConstructionAPI_Point.h b/src/ConstructionAPI/ConstructionAPI_Point.h index 96376b481..ce20c5399 100644 --- a/src/ConstructionAPI/ConstructionAPI_Point.h +++ b/src/ConstructionAPI/ConstructionAPI_Point.h @@ -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& 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 & 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 & thePart, + const ModelHighAPI_Selection& theObject); + #endif /* SRC_CONSTRUCTIONAPI_CONSTRUCTIONAPI_POINT_H_ */ diff --git a/src/ConstructionPlugin/Test/TestPoint_VertexSelection.py b/src/ConstructionPlugin/Test/TestPoint_VertexSelection.py index d3cad72ef..269630bd0 100644 --- a/src/ConstructionPlugin/Test/TestPoint_VertexSelection.py +++ b/src/ConstructionPlugin/Test/TestPoint_VertexSelection.py @@ -17,15 +17,35 @@ # 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 diff --git a/src/PythonAPI/model/construction/__init__.py b/src/PythonAPI/model/construction/__init__.py index 18f4616ca..6ecb09e7e 100644 --- a/src/PythonAPI/model/construction/__init__.py +++ b/src/PythonAPI/model/construction/__init__.py @@ -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