]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/SketchAPI/SketchAPI_Sketch.cpp
Salome HOME
[bos #35151][EDF](2023-T1) Centered rectangle.
[modules/shaper.git] / src / SketchAPI / SketchAPI_Sketch.cpp
index 3c30c146a1f915867aaef34d71fab54c1c2c9262..09668c82bfb51b23284cce87541a39614d083f8f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2023  CEA, EDF
+// Copyright (C) 2014-2024  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -533,18 +533,9 @@ std::shared_ptr<SketchAPI_Line> SketchAPI_Sketch::addLine(const std::wstring & t
 std::shared_ptr<SketchAPI_Rectangle> SketchAPI_Sketch::addRectangle(double theX1, double theY1,
                                                                     double theX2, double theY2)
 {
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
+  std::shared_ptr<ModelAPI_Feature> aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
   return RectanglePtr(new SketchAPI_Rectangle(aFeature, theX1, theY1, theX2, theY2));
 }
-std::shared_ptr<SketchAPI_Rectangle> SketchAPI_Sketch::addRectangle(
-    const std::shared_ptr<GeomAPI_Pnt2d> & theStartPoint,
-    const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
-  return RectanglePtr(new SketchAPI_Rectangle(aFeature, theStartPoint, theEndPoint));
-}
 
 static std::shared_ptr<GeomAPI_Pnt2d> pointCoordinates(
     const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & thePoint)
@@ -559,61 +550,92 @@ static std::shared_ptr<GeomAPI_Pnt2d> pointCoordinates(
       anAttr = aFeature->attribute(SketchPlugin_Point::COORD_ID());
   }
 
-  std::shared_ptr<GeomDataAPI_Point2D> aPntAttr =
-      std::dynamic_pointer_cast<GeomDataAPI_Point2D>(anAttr);
+  std::shared_ptr<GeomDataAPI_Point2D> aPntAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(anAttr);
   if (aPntAttr)
     return aPntAttr->pnt();
   return std::shared_ptr<GeomAPI_Pnt2d>();
 }
 
-std::shared_ptr<SketchAPI_Rectangle> SketchAPI_Sketch::addRectangleCentered(
+std::shared_ptr<SketchAPI_Rectangle> SketchAPI_Sketch::addRectangle(
+      const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theStartPoint,
+      const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theEndPoint)
+{
+  std::shared_ptr<ModelAPI_Feature> aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
+  RectanglePtr aRect(new SketchAPI_Rectangle(aFeature));
+  fillAttribute("RectangleTypeByCorners", aRect->type());
+  fillAttribute(pointCoordinates(theStartPoint), aRect->startPoint());
+  fillAttribute(pointCoordinates(theEndPoint), aRect->endPoint());
+  aRect->execute();
+
+  if (!theStartPoint.second.isEmpty() && aRect->linesList()->size() >= 1) {
+    // Get end point of the first line of rectangle and apply coincidence constraint
+    FeaturePtr aLine = ModelAPI_Feature::feature(aRect->linesList()->object(0));
+    AttributePtr aLinePnt = aLine->attribute(SketchPlugin_Line::END_ID());
+    setCoincident(ModelHighAPI_RefAttr(aLinePnt), theStartPoint.second);
+  }
+
+  if (!theEndPoint.second.isEmpty() && aRect->linesList()->size() >= 4) {
+    // Get start point of the last line of rectangle and apply coincidence constraint
+    FeaturePtr aLine = ModelAPI_Feature::feature(aRect->linesList()->object(3));
+    AttributePtr aLinePnt = aLine->attribute(SketchPlugin_Line::START_ID());
+    setCoincident(ModelHighAPI_RefAttr(aLinePnt), theEndPoint.second);
+  }
+  return aRect;
+}
+
+std::pair<std::shared_ptr<SketchAPI_Rectangle>, std::shared_ptr<SketchAPI_Point>> SketchAPI_Sketch::addRectangleCentered(
     const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theCenter,
     const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theCorner)
 {
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
+  std::shared_ptr<ModelAPI_Feature> aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
   RectanglePtr aRect(new SketchAPI_Rectangle(aFeature));
   fillAttribute("RectangleTypeCentered", aRect->type());
+
   if (!theCenter.second.isEmpty())
     fillAttribute(theCenter.second, aRect->centerPointRef());
-  fillAttribute(pointCoordinates(theCenter), aRect->centerPoint());
+  else
+    fillAttribute(pointCoordinates(theCenter), aRect->centerPoint());
+
   fillAttribute(pointCoordinates(theCorner), aRect->cornerPoint());
   aRect->execute();
 
-  if (!theCorner.second.isEmpty() && aRect->linesList()->size() > 1) {
-    // get start point of the last line in rectangle and apply coindidence constraint
+  if (!theCorner.second.isEmpty() && aRect->linesList()->size() >= 4) {
+    // get start point of the last line in rectangle and apply coincidence constraint
     FeaturePtr aLine = ModelAPI_Feature::feature(aRect->linesList()->object(3));
     AttributePtr aEndPnt = aLine->attribute(SketchPlugin_Line::START_ID());
     setCoincident(ModelHighAPI_RefAttr(aEndPnt), theCorner.second);
   }
-  return aRect;
+  return std::pair<std::shared_ptr<SketchAPI_Rectangle>, std::shared_ptr<SketchAPI_Point>>(aRect, aRect->centerSketchPoint());
+}
+
+std::pair<std::shared_ptr<SketchAPI_Rectangle>, std::shared_ptr<SketchAPI_Point>> SketchAPI_Sketch::addRectangleCentered(
+      double theCenterX, double theCenterY,
+      double theCornerX, double theCornerY
+) {
+  std::shared_ptr<ModelAPI_Feature> aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID());
+  auto aRect = RectanglePtr(new SketchAPI_Rectangle(aFeature, theCenterX, theCenterY, theCornerX, theCornerY, true));
+  return std::pair<std::shared_ptr<SketchAPI_Rectangle>, std::shared_ptr<SketchAPI_Point>>(aRect, aRect->centerSketchPoint());
 }
 
-// Old way for create circle
 //--------------------------------------------------------------------------------------
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircle(double theCenterX,
                                                               double theCenterY,
                                                               double theRadius)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_Circle::VERSION_ID()));
-  return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius, 0));
+  return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircle(
                                     const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
                                     double theRadius)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_Circle::VERSION_ID()));
-  return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius, 0));
+  return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(double theCenterX,
                                                                    double theCenterY,
                                                                    double thePassedX,
@@ -621,37 +643,30 @@ std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(double theCen
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_MacroCircle::VERSION_ID()));
   return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterX, theCenterY,
-                                                            thePassedX, thePassedY, 0));
+                                                            thePassedX, thePassedY));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(
     const std::shared_ptr<GeomAPI_Pnt2d>& theCenterPoint,
     const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_MacroCircle::VERSION_ID()));
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint, 0));
+  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(double theX1, double theY1,
                                                                    double theX2, double theY2,
                                                                    double theX3, double theY3)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_MacroCircle::VERSION_ID()));
-
   return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theX1, theY1,
                                                             theX2, theY2,
-                                                            theX3, theY3, 0));
+                                                            theX3, theY3));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(
     const std::shared_ptr<GeomAPI_Pnt2d>& thePoint1,
     const std::shared_ptr<GeomAPI_Pnt2d>& thePoint2,
@@ -659,11 +674,9 @@ std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircle(
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
     compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  fillAttribute(SketchPlugin_Circle::THE_VERSION_0, aFeature->integer(SketchPlugin_Circle::VERSION_ID()));
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3, 0));
+  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_Circle>
   SketchAPI_Sketch::addCircle(const ModelHighAPI_Selection & theExternal)
 {
@@ -672,7 +685,6 @@ std::shared_ptr<SketchAPI_Circle>
   return CirclePtr(new SketchAPI_Circle(aFeature, theExternal));
 }
 
-[[deprecated("Use addCircleWithPoint method instead.")]]
 std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircle(const std::wstring & theExternalName)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature =
@@ -680,88 +692,6 @@ std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircle(const std::wstring
   return CirclePtr(new SketchAPI_Circle(aFeature, theExternalName));
 }
 
-// New way for create Circle
-//--------------------------------------------------------------------------------------
-std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircleWithPoint(double theCenterX,
-  double theCenterY,
-  double theRadius,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius, theAngle));
-}
-
-std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircleWithPoint(
-  const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
-  double theRadius,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius, theAngle));
-}
-
-std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircleWithPoint(double theCenterX,
-  double theCenterY,
-  double thePassedX,
-  double thePassedY,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterX, theCenterY,
-    thePassedX, thePassedY, theAngle));
-}
-
-std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircleWithPoint(
-  const std::shared_ptr<GeomAPI_Pnt2d>& theCenterPoint,
-  const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint, theAngle));
-}
-
-std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircleWithPoint(double theX1, double theY1,
-  double theX2, double theY2,
-  double theX3, double theY3,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theX1, theY1,
-    theX2, theY2,
-    theX3, theY3, theAngle));
-}
-
-std::shared_ptr<SketchAPI_MacroCircle> SketchAPI_Sketch::addCircleWithPoint(
-  const std::shared_ptr<GeomAPI_Pnt2d>& thePoint1,
-  const std::shared_ptr<GeomAPI_Pnt2d>& thePoint2,
-  const std::shared_ptr<GeomAPI_Pnt2d>& thePoint3,
-  double theAngle)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID());
-  return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3, theAngle));
-}
-
-std::shared_ptr<SketchAPI_Circle>
-SketchAPI_Sketch::addCircleWithPoint(const ModelHighAPI_Selection& theExternal)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  return CirclePtr(new SketchAPI_Circle(aFeature, theExternal));
-}
-
-std::shared_ptr<SketchAPI_Circle> SketchAPI_Sketch::addCircleWithPoint(const std::wstring& theExternalName)
-{
-  std::shared_ptr<ModelAPI_Feature> aFeature =
-    compositeFeature()->addFeature(SketchPlugin_Circle::ID());
-  return CirclePtr(new SketchAPI_Circle(aFeature, theExternalName));
-}
-
 //--------------------------------------------------------------------------------------
 std::shared_ptr<SketchAPI_Arc> SketchAPI_Sketch::addArc(double theCenterX, double theCenterY,
                                                         double theStartX, double theStartY,