Salome HOME
updated copyright message
[modules/shaper.git] / src / SketchAPI / SketchAPI_MacroEllipse.h
index 6f74bbc98437ac6ff86cd002151ffa40c612e1d3..e6736396949fd57e21368762cbc593dc5f08a738 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2019  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023  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
@@ -26,6 +26,8 @@
 #include <SketchPlugin_MacroEllipse.h>
 
 class ModelHighAPI_RefAttr;
+class SketchAPI_Point;
+class SketchAPI_Line;
 
 /// \class SketchAPI_MacroEllipse
 /// \ingroup CPPHighAPI
@@ -35,7 +37,8 @@ class SketchAPI_MacroEllipse: public SketchAPI_SketchEntity
 public:
   /// Constructor without values.
   SKETCHAPI_EXPORT
-  explicit SketchAPI_MacroEllipse(const std::shared_ptr<ModelAPI_Feature>& theFeature);
+  explicit SketchAPI_MacroEllipse(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+                                  bool callInitialize = true);
 
   /// Constructor with values.
   SKETCHAPI_EXPORT
@@ -68,49 +71,63 @@ public:
   SKETCHAPI_EXPORT
   virtual ~SketchAPI_MacroEllipse();
 
-  INTERFACE_9(SketchPlugin_MacroEllipse::ID(),
+  INTERFACE_1(SketchPlugin_MacroEllipse::ID(),
               ellipseType, SketchPlugin_MacroEllipse::ELLIPSE_TYPE(),
-              ModelAPI_AttributeString, /** Ellipse type */,
-              centerPoint, SketchPlugin_MacroEllipse::FIRST_POINT_ID(),
-              GeomDataAPI_Point2D, /** Center point */,
-              centerPointRef, SketchPlugin_MacroEllipse::FIRST_POINT_REF_ID(),
-              ModelAPI_AttributeRefAttr, /** Reference to a center point */,
-              majorAxisNegativePoint, SketchPlugin_MacroEllipse::FIRST_POINT_ID(),
-              GeomDataAPI_Point2D, /** Major axis negative point point */,
-              majorAxisNegativePointRef, SketchPlugin_MacroEllipse::FIRST_POINT_REF_ID(),
-              ModelAPI_AttributeRefAttr, /** Reference to the negative point on a major axis */,
-              majorAxisPositivePoint, SketchPlugin_MacroEllipse::SECOND_POINT_ID(),
-              GeomDataAPI_Point2D, /** Major axis positive point point */,
-              majorAxisPositivePointRef, SketchPlugin_MacroEllipse::SECOND_POINT_REF_ID(),
-              ModelAPI_AttributeRefAttr, /** Reference to the positive point on a major axis */,
-              passedPoint, SketchPlugin_MacroEllipse::PASSED_POINT_ID(),
-              GeomDataAPI_Point2D, /** Passed point */,
-              passedPointRef, SketchPlugin_MacroEllipse::PASSED_POINT_REF_ID(),
-              ModelAPI_AttributeRefAttr, /** Reference to a passed point */)
+              ModelAPI_AttributeString, /** Ellipse type */)
+
+  /// Return created auxiliary center point
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> center();
+  /// Return created auxiliary focus in the positive direction of major axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> focus1();
+  /// Return created auxiliary focus in the negative direction of major axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> focus2();
+  /// Return created auxiliary point - start of major axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> majorAxisStart();
+  /// Return created auxiliary point - end of major axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> majorAxisEnd();
+  /// Return created auxiliary point - start of minor axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> minorAxisStart();
+  /// Return created auxiliary point - end of minor axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Point> minorAxisEnd();
+  /// Return created auxiliary major axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Line> majorAxis();
+  /// Return created auxiliary minor axis
+  SKETCHAPI_EXPORT std::shared_ptr<SketchAPI_Line> minorAxis();
+
+protected:
+  // find a parent sketch
+  void storeSketch(const std::shared_ptr<ModelAPI_Feature>& theFeature);
 
 private:
   /// Set flag of creation by center, major semi-axis and passed point.
-  void setByCenterAndPassedPoints();
+  void setByCenterAndPassedPoints(const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
+                                  const ModelHighAPI_RefAttr&           theCenterRef,
+                                  const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisPoint,
+                                  const ModelHighAPI_RefAttr&           theMajorAxisPointRef,
+                                  const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint,
+                                  const ModelHighAPI_RefAttr&           thePassedPointRef);
   /// Set flag of creation by major axis and passed point.
-  void setByMajorAxisAndPassedPoint();
-
-  /// Set points of ellipse.
-  void initializePoints(double theMajorAxisX1, double theMajorAxisY1,
-                        double theMajorAxisX2, double theMajorAxisY2,
-                        double thePassedX, double thePassedY);
-
-  /// Set points of ellipse.
-  void initializePoints(const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisPoint1,
-                        const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisPoint2,
-                        const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint);
-
-  /// Set points of ellipse.
-  void initializePoints(const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisPoint1,
-                        const ModelHighAPI_RefAttr&           theMajorAxisPoint1Ref,
-                        const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisPoint2,
-                        const ModelHighAPI_RefAttr&           theMajorAxisPoint2Ref,
-                        const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint,
-                        const ModelHighAPI_RefAttr&           thePassedPointRef);
+  void setByMajorAxisAndPassedPoint(const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisStart,
+                                    const ModelHighAPI_RefAttr&           theMajorAxisStartRef,
+                                    const std::shared_ptr<GeomAPI_Pnt2d>& theMajorAxisEnd,
+                                    const ModelHighAPI_RefAttr&           theMajorAxisEndRef,
+                                    const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint,
+                                    const ModelHighAPI_RefAttr&           thePassedPointRef);
+
+  /// Collect auxiliary features
+  void collectAuxiliary();
+
+private:
+  CompositeFeaturePtr mySketch;
+  std::shared_ptr<SketchAPI_Point> myCenter;
+  std::shared_ptr<SketchAPI_Point> myFocus1;
+  std::shared_ptr<SketchAPI_Point> myFocus2;
+  std::shared_ptr<SketchAPI_Point> myMajorAxisStart;
+  std::shared_ptr<SketchAPI_Point> myMajorAxisEnd;
+  std::shared_ptr<SketchAPI_Point> myMinorAxisStart;
+  std::shared_ptr<SketchAPI_Point> myMinorAxisEnd;
+  std::shared_ptr<SketchAPI_Line>  myMajorAxis;
+  std::shared_ptr<SketchAPI_Line>  myMinorAxis;
 };
 
 /// Pointer on Circle object.