Salome HOME
Issue #1834: Fix length of lines
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_PointBuilder.h
index cff50ee0561cdb35becd322c685e9b99f907e5f7..be219a503065c4ae09230352493c8d6c48cc7bc8 100644 (file)
 #include <GeomAlgoAPI.h>
 #include <memory>
 
-class GeomAPI_Shape;
+class GeomAPI_Edge;
+class GeomAPI_Face;
 class GeomAPI_Pnt;
+class GeomAPI_Shape;
+class GeomAPI_Vertex;
 
-/**\class GeomAlgoAPI_PointBuilder
- * \ingroup DataAlgo
- * \brief Allows to create face-shapes by different parameters
- */
-
+/// \class GeomAlgoAPI_PointBuilder
+/// \ingroup DataAlgo
+/// \brief Allows to create vertex-shapes by different parameters
 class GEOMALGOAPI_EXPORT GeomAlgoAPI_PointBuilder
 {
- public:
-  /// Creates a shape by point
-  static std::shared_ptr<GeomAPI_Shape> point(std::shared_ptr<GeomAPI_Pnt> thePoint);
+public:
+  /// Creates a vertex by point
+  static std::shared_ptr<GeomAPI_Vertex> vertex(const std::shared_ptr<GeomAPI_Pnt> thePoint);
+
+  /// Creates a vertex by point coordinates
+  static std::shared_ptr<GeomAPI_Vertex> vertex(const double theX,
+                                                const double theY,
+                                                const double theZ);
+
+  /// \brief Creates vertex by edge and distance on it.
+  /// \param[in] theEdge edge.
+  /// \param[in] theValue distance value.
+  /// \param[in] theIsPercent if true theValue will be treated 
+  ///                         as a percentage of theEdge total length.
+  /// \param[in] theIsReverse if true the distance will be measured from the edge end point.
+  /// \return created vertex.
+  static std::shared_ptr<GeomAPI_Vertex> vertexOnEdge(const std::shared_ptr<GeomAPI_Edge> theEdge,
+                                                      const double theValue,
+                                                      const bool theIsPercent = false,
+                                                      const bool theIsReverse = false);
+
+  /// \brief Creates vertex by projection another vertex on plane.
+  /// \param[in] theVertex vertex to project.
+  /// \param[in] thePlane face for projection. Should be planar.
+  /// \return created vertex.
+  static std::shared_ptr<GeomAPI_Vertex>
+    vertexByProjection(const std::shared_ptr<GeomAPI_Vertex> theVertex,
+                       const std::shared_ptr<GeomAPI_Face> thePlane);
+
+  /// \brief Creates vertex by intersection two coplanar lines.
+  /// \param[in] theEdge1 first linear edge.
+  /// \param[in] theEdge2 second linear edge.
+  /// \return created vertex.
+  static std::shared_ptr<GeomAPI_Vertex>
+    vertexByIntersection(const std::shared_ptr<GeomAPI_Edge> theEdge1,
+                         const std::shared_ptr<GeomAPI_Edge> theEdge2);
 
-  /// Creates a shape by point coordinates
-  static std::shared_ptr<GeomAPI_Shape> point(
-    const double theX, const double theY, const double theZ);
+  /// \brief Creates vertex by intersection line and plane.
+  /// \param[in] theEdge linear edge.
+  /// \param[in] theFace planar face.
+  /// \return created vertex.
+  static std::shared_ptr<GeomAPI_Vertex> 
+    vertexByIntersection(const std::shared_ptr<GeomAPI_Edge> theEdge,
+                         const std::shared_ptr<GeomAPI_Face> theFace);
 
   /// Return point by shape vertex
-  static std::shared_ptr<GeomAPI_Pnt> point(std::shared_ptr<GeomAPI_Shape> theVertex);
+  static std::shared_ptr<GeomAPI_Pnt> point(const std::shared_ptr<GeomAPI_Shape> theVertex);
 };
 
 #endif