]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
refs #80 - Sketch base GUI: create/draw point, circle and arc
authornds <natalia.donis@opencascade.com>
Tue, 10 Jun 2014 12:12:19 +0000 (16:12 +0400)
committernds <natalia.donis@opencascade.com>
Tue, 10 Jun 2014 12:12:19 +0000 (16:12 +0400)
Edit feature: move specific feature functionality to the feature presentation.

src/PartSet/PartSet_FeatureCirclePrs.cpp
src/PartSet/PartSet_FeatureCirclePrs.h
src/PartSet/PartSet_FeatureLinePrs.cpp
src/PartSet/PartSet_FeatureLinePrs.h
src/PartSet/PartSet_FeaturePointPrs.cpp
src/PartSet/PartSet_FeaturePointPrs.h
src/PartSet/PartSet_OperationSketch.cpp
src/PartSet/PartSet_Tools.cpp
src/PartSet/PartSet_Tools.h

index d825fdd583a5d4d5baf6e07ff9ab5fda031f1fe9..976d96408fb4bfcc6b85c30a9b9b0c2690f6882b 100644 (file)
@@ -26,6 +26,11 @@ PartSet_FeatureCirclePrs::PartSet_FeatureCirclePrs(FeaturePtr theSketch)
 {
 }
 
+std::string PartSet_FeatureCirclePrs::getKind()
+{
+  return SKETCH_CIRCLE_KIND;
+}
+
 PartSet_SelectionMode PartSet_FeatureCirclePrs::setPoint(double theX, double theY,
                                                          const PartSet_SelectionMode& theMode)
 {
@@ -82,6 +87,37 @@ PartSet_SelectionMode PartSet_FeatureCirclePrs::getNextMode(const std::string& t
   return aMode;
 }
 
+double PartSet_FeatureCirclePrs::distanceToPoint(FeaturePtr theFeature,
+                                                 double theX, double theY)
+{
+  double aDelta = 0;
+  if (!theFeature || theFeature->getKind() != getKind())
+    return aDelta;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(CIRCLE_ATTR_CENTER));
+
+  boost::shared_ptr<GeomAPI_Pnt2d> aPoint2d(new GeomAPI_Pnt2d(theX, theY));
+  return aPoint->pnt()->distance(aPoint2d);
+}
+
+boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureCirclePrs::findPoint(FeaturePtr theFeature,
+                                                                           double theX, double theY)
+{
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint2D;
+  if (!theFeature || theFeature->getKind() != getKind())
+    return aPoint2D;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(CIRCLE_ATTR_CENTER));
+  if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
+    aPoint2D = aPoint;
+
+  return aPoint2D;
+}
+
 boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureCirclePrs::featurePoint
                                                      (const PartSet_SelectionMode& theMode)
 {
index 6a75b05b87e0adf726e335acd1b6031276013e33..d75584d33bd65057a513d966ae648957415cfd87 100644 (file)
@@ -21,6 +21,10 @@ class GeomDataAPI_Point2D;
 class PARTSET_EXPORT PartSet_FeatureCirclePrs : public PartSet_FeaturePrs
 {
 public:
+  /// Returns the feature type processed by this presentation
+  /// \return the feature kind
+  static std::string getKind();
+
   /// Constructor
   /// \param theSketch the sketch feature
   PartSet_FeatureCirclePrs(FeaturePtr theSketch);
@@ -44,6 +48,18 @@ public:
   /// \return next attribute selection mode
   virtual PartSet_SelectionMode getNextMode(const std::string& theAttribute) const;
 
+  /// Return the distance between the feature and the point
+  /// \param theFeature feature object
+  /// \param theX the horizontal coordinate of the point
+  /// \param theX the vertical coordinate of the point
+  static double distanceToPoint(FeaturePtr theFeature, double theX, double theY);
+
+  /// Find a point in the line with given coordinates
+  /// \param theFeature the line feature
+  /// \param theX the horizontal point coordinate
+  /// \param theY the vertical point coordinate
+  static boost::shared_ptr<GeomDataAPI_Point2D> findPoint(FeaturePtr theFeature, double theX,
+                                                          double theY);
 protected:
   /// Returns the feature point in the selection mode position.
   /// \param theMode the current operation selection mode. The feature attribute depends on the mode
index d6200d5766a4b0fd54ab4d9a8e9bca0706ca62f1..53aa6befb1d4f36d48572ed5a140214a3607ae4a 100644 (file)
@@ -28,6 +28,11 @@ PartSet_FeatureLinePrs::PartSet_FeatureLinePrs(FeaturePtr theSketch)
 {
 }
 
+std::string PartSet_FeatureLinePrs::getKind()
+{
+  return SKETCH_LINE_KIND;
+}
+
 void PartSet_FeatureLinePrs::initFeature(FeaturePtr theFeature)
 {
   if (feature() && theFeature)
@@ -105,8 +110,8 @@ void PartSet_FeatureLinePrs::projectPointOnLine(FeaturePtr theFeature,
   if (theFeature) {
     double X0, X1, X2, X3;
     double Y0, Y1, Y2, Y3;
-    PartSet_Tools::getLinePoint(theFeature, LINE_ATTR_START, X2, Y2);
-    PartSet_Tools::getLinePoint(theFeature, LINE_ATTR_END, X3, Y3);
+    getLinePoint(theFeature, LINE_ATTR_START, X2, Y2);
+    getLinePoint(theFeature, LINE_ATTR_END, X3, Y3);
     PartSet_Tools::convertTo2D(thePoint, sketch(), theView, X1, Y1);
 
     switch (theMode) {
@@ -114,7 +119,7 @@ void PartSet_FeatureLinePrs::projectPointOnLine(FeaturePtr theFeature,
         PartSet_Tools::projectPointOnLine(X2, Y2, X3, Y3, X1, Y1, theX, theY);
       break;
       case SM_SecondPoint: {
-        PartSet_Tools::getLinePoint(feature(), LINE_ATTR_START, X0, Y0);
+        getLinePoint(feature(), LINE_ATTR_START, X0, Y0);
         PartSet_Tools::intersectLines(X0, Y0, X1, Y1, X2, Y2, X3, Y3, theX, theY);
       }
       break;
@@ -124,6 +129,50 @@ void PartSet_FeatureLinePrs::projectPointOnLine(FeaturePtr theFeature,
   }
 }
 
+double PartSet_FeatureLinePrs::distanceToPoint(FeaturePtr theFeature,
+                                      double theX, double theY)
+{
+  double aDelta = 0;
+  if (!theFeature || theFeature->getKind() != SKETCH_LINE_KIND)
+    return aDelta;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint1 =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint2 =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
+
+  double aX, anY;
+  PartSet_Tools::projectPointOnLine(aPoint1->x(), aPoint1->y(), aPoint2->x(), aPoint2->y(), theX, theY, aX, anY);
+  aDelta = gp_Pnt(theX, theY, 0).Distance(gp_Pnt(aX, anY, 0));
+
+  return aDelta;
+}
+
+boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureLinePrs::findPoint(FeaturePtr theFeature,
+                                                                         double theX, double theY)
+{
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint2D;
+  if (!theFeature || theFeature->getKind() != SKETCH_LINE_KIND)
+    return aPoint2D;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  aPoint2D = PartSet_FeatureLinePrs::findPoint(theFeature, theX, theY);
+
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
+  if (fabs(aPoint->x() - theX) < Precision::Confusion() &&
+      fabs(aPoint->y() - theY) < Precision::Confusion())
+    aPoint2D = aPoint;
+  else {
+    aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
+    if (fabs(aPoint->x() - theX) < Precision::Confusion() &&
+        fabs(aPoint->y() - theY) < Precision::Confusion())
+      aPoint2D = aPoint;
+  }
+  return aPoint2D;
+}
+
 boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureLinePrs::featurePoint
                                                      (const PartSet_SelectionMode& theMode)
 {
@@ -144,3 +193,15 @@ boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeatureLinePrs::featurePoint
                                                               (aData->attribute(aPointArg));
   return aPoint;
 }
+
+void PartSet_FeatureLinePrs::getLinePoint(FeaturePtr theFeature, const std::string& theAttribute,
+                                          double& theX, double& theY)
+{
+  if (!theFeature || theFeature->getKind() != PartSet_FeatureLinePrs::getKind())
+    return;
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(theAttribute));
+  theX = aPoint->x();
+  theY = aPoint->y();
+}
index eefced5e5c910166e6fa124781e1174c75da6722..b34e66c01de10222edbb0df267880b46ff4f3da3 100644 (file)
@@ -24,6 +24,10 @@ class Handle_V3d_View;
 class PARTSET_EXPORT PartSet_FeatureLinePrs : public PartSet_FeaturePrs
 {
 public:
+  /// Returns the feature type processed by this presentation
+  /// \return the feature kind
+  static std::string getKind();
+
   /// Constructor
   /// \param theSketch the sketch feature
   PartSet_FeatureLinePrs(FeaturePtr theSketch);
@@ -59,6 +63,19 @@ public:
                           const gp_Pnt& thePoint, Handle_V3d_View theView,
                           double& theX, double& theY);
 
+  /// Return the distance between the feature and the point
+  /// \param theFeature feature object
+  /// \param theX the horizontal coordinate of the point
+  /// \param theX the vertical coordinate of the point
+  static double distanceToPoint(FeaturePtr theFeature, double theX, double theY);
+
+  /// Find a point in the line with given coordinates
+  /// \param theFeature the line feature
+  /// \param theX the horizontal point coordinate
+  /// \param theY the vertical point coordinate
+  static boost::shared_ptr<GeomDataAPI_Point2D> findPoint(FeaturePtr theFeature, double theX,
+                                                          double theY);
+
 protected:
   /// Initializes current feature by the given
   /// \param theSourceFeature the feature, which attributes are used to initialize the current feature
@@ -67,6 +84,14 @@ protected:
   /// Returns the feature point in the selection mode position.
   /// \param theMode the current operation selection mode. The feature attribute depends on the mode
   virtual boost::shared_ptr<GeomDataAPI_Point2D> featurePoint(const PartSet_SelectionMode& theMode);
+
+  /// \brief Get the line point 2d coordinates.
+  /// \param theFeature the line feature
+  /// \param theAttribute the start or end attribute of the line
+  /// \param theX the horizontal coordinate
+  /// \param theY the vertical coordinate
+  static void getLinePoint(FeaturePtr theFeature, const std::string& theAttribute,
+                           double& theX, double& theY);
 };
 
 #endif
index ee6bc8140a9c072ffc62fae196636ca8c58ed5a5..569c771e03475e638cbd9fa5f2aead9ae5022da7 100644 (file)
@@ -9,6 +9,7 @@
 #include <SketchPlugin_Sketch.h>
 #include <SketchPlugin_Point.h>
 
+#include <GeomAPI_Pnt2d.h>
 #include <GeomDataAPI_Point2D.h>
 
 #include <ModelAPI_Data.h>
@@ -25,6 +26,11 @@ PartSet_FeaturePointPrs::PartSet_FeaturePointPrs(FeaturePtr theSketch)
 {
 }
 
+std::string PartSet_FeaturePointPrs::getKind()
+{
+  return SKETCH_POINT_KIND;
+}
+
 PartSet_SelectionMode PartSet_FeaturePointPrs::setPoint(double theX, double theY,
                                                        const PartSet_SelectionMode& theMode)
 {
@@ -65,6 +71,37 @@ PartSet_SelectionMode PartSet_FeaturePointPrs::getNextMode(const std::string& th
   return aMode;
 }
 
+double PartSet_FeaturePointPrs::distanceToPoint(FeaturePtr theFeature,
+                                                double theX, double theY)
+{
+  double aDelta = 0;
+  if (!theFeature || theFeature->getKind() != getKind())
+    return aDelta;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(POINT_ATTR_COORD));
+
+  boost::shared_ptr<GeomAPI_Pnt2d> aPoint2d(new GeomAPI_Pnt2d(theX, theY));
+  return aPoint->pnt()->distance(aPoint2d);
+}
+
+boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeaturePointPrs::findPoint(FeaturePtr theFeature,
+                                                                          double theX, double theY)
+{
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint2D;
+  if (!theFeature || theFeature->getKind() != getKind())
+    return aPoint2D;
+
+  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
+  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
+        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(POINT_ATTR_COORD));
+  if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
+    aPoint2D = aPoint;
+
+  return aPoint2D;
+}
+
 boost::shared_ptr<GeomDataAPI_Point2D> PartSet_FeaturePointPrs::featurePoint
                                                      (const PartSet_SelectionMode& theMode)
 {
index bd63137f227991d5a9da3d1a3487b6c8cf48d66b..b07bc1c380cf0f4a82e4e32c97bdab9a5cc8410a 100644 (file)
@@ -21,6 +21,10 @@ class GeomDataAPI_Point2D;
 class PARTSET_EXPORT PartSet_FeaturePointPrs : public PartSet_FeaturePrs
 {
 public:
+  /// Returns the feature type processed by this presentation
+  /// \return the feature kind
+  static std::string getKind();
+
   /// Constructor
   /// \param theSketch the sketch feature
   PartSet_FeaturePointPrs(FeaturePtr theSketch);
@@ -44,6 +48,19 @@ public:
   /// \return next attribute selection mode
   virtual PartSet_SelectionMode getNextMode(const std::string& theAttribute) const;
 
+  /// Return the distance between the feature and the point
+  /// \param theFeature feature object
+  /// \param theX the horizontal coordinate of the point
+  /// \param theX the vertical coordinate of the point
+  static double distanceToPoint(FeaturePtr theFeature, double theX, double theY);
+
+  /// Find a point in the line with given coordinates
+  /// \param theFeature the line feature
+  /// \param theX the horizontal point coordinate
+  /// \param theY the vertical point coordinate
+  static boost::shared_ptr<GeomDataAPI_Point2D> findPoint(FeaturePtr theFeature, double theX,
+                                                          double theY);
+
 protected:
   /// Returns the feature point in the selection mode position.
   /// \param theMode the current operation selection mode. The feature attribute depends on the mode
index 33a0a22bdd52918f51b3f50214592ef8b322371f..7966e9ed1f2d814a1d96fb96e41ca91190f6c9da 100644 (file)
@@ -136,8 +136,8 @@ void PartSet_OperationSketch::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View)
     return;
 
   if (myFeatures.size() != 1) {
-    FeaturePtr aFeature = PartSet_Tools::nearestFeature(theEvent->pos(),
-                                                                theView, feature(), myFeatures);
+    FeaturePtr aFeature = PartSet_Tools::nearestFeature(theEvent->pos(), theView, feature(),
+                                                        myFeatures);
     if (aFeature)
       restartOperation(PartSet_OperationEditFeature::Type(), aFeature);
   }
index 5563c9882ae6dc66235672510fb415d8cdbad6cf..4a483de029d6caa805796fc62ebeeed74332f24f 100644 (file)
 
 #include <SketchPlugin_Feature.h>
 #include <SketchPlugin_Sketch.h>
-#include <SketchPlugin_Point.h>
-#include <SketchPlugin_Line.h>
-#include <SketchPlugin_Circle.h>
 #include <SketchPlugin_ConstraintCoincidence.h>
 #include <SketchPlugin_Constraint.h>
 
+#include <PartSet_FeatureLinePrs.h>
+#include <PartSet_FeaturePointPrs.h>
+#include <PartSet_FeatureCirclePrs.h>
+
 #include <XGUI_ViewerPrs.h>
 
 #include <V3d_View.hxx>
@@ -173,10 +174,9 @@ void PartSet_Tools::projectPointOnLine(double theX1, double theY1, double theX2,
   }
 }
 
-FeaturePtr PartSet_Tools::nearestFeature(QPoint thePoint,
-                                                   Handle_V3d_View theView,
-                                                   FeaturePtr theSketch,
-                                                   const std::list<XGUI_ViewerPrs>& theFeatures)
+FeaturePtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView,
+                                         FeaturePtr theSketch,
+                                         const std::list<XGUI_ViewerPrs>& theFeatures)
 {
   double aX, anY;
   gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(thePoint, theView);
@@ -205,20 +205,16 @@ double PartSet_Tools::distanceToPoint(FeaturePtr theFeature,
                                       double theX, double theY)
 {
   double aDelta = 0;
-  if (theFeature->getKind() != SKETCH_LINE_KIND)
-    return aDelta;
-
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
-
-  boost::shared_ptr<GeomDataAPI_Point2D> aPoint1 =
-        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
-  boost::shared_ptr<GeomDataAPI_Point2D> aPoint2 =
-        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
-
-  double aX, anY;
-  PartSet_Tools::projectPointOnLine(aPoint1->x(), aPoint1->y(), aPoint2->x(), aPoint2->y(), theX, theY, aX, anY);
-
-  aDelta = gp_Pnt(theX, theY, 0).Distance(gp_Pnt(aX, anY, 0));
+  std::string aKind = theFeature->getKind();
+  if (aKind == PartSet_FeatureLinePrs::getKind()) {
+    aDelta = PartSet_FeatureLinePrs::distanceToPoint(theFeature, theX, theY);
+  }
+  else if (aKind == PartSet_FeaturePointPrs::getKind()) {
+    aDelta = PartSet_FeaturePointPrs::distanceToPoint(theFeature, theX, theY);
+  }
+  else if (aKind == PartSet_FeatureCirclePrs::getKind()) {
+    aDelta = PartSet_FeatureCirclePrs::distanceToPoint(theFeature, theX, theY);
+  }
 
   return aDelta;
 }
@@ -279,18 +275,6 @@ void PartSet_Tools::createConstraint(FeaturePtr theSketch,
     aFeature->execute();
 }
 
-void PartSet_Tools::getLinePoint(FeaturePtr theFeature, const std::string& theAttribute,
-                                 double& theX, double& theY)
-{
-  if (!theFeature || theFeature->getKind() != SKETCH_LINE_KIND)
-    return;
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
-  boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
-        boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(theAttribute));
-  theX = aPoint->x();
-  theY = aPoint->y();
-}
-
 boost::shared_ptr<GeomDataAPI_Point2D> PartSet_Tools::findPoint(FeaturePtr theFeature,
                                                                 double theX, double theY)
 {
@@ -298,32 +282,15 @@ boost::shared_ptr<GeomDataAPI_Point2D> PartSet_Tools::findPoint(FeaturePtr theFe
   if (!theFeature)
     return aPoint2D;
 
-  boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
-  if (theFeature->getKind() == SKETCH_LINE_KIND)
-  {
-    boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
-          boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_START));
-    if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
-      aPoint2D = aPoint;
-    else {
-      aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(LINE_ATTR_END));
-      if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
-        aPoint2D = aPoint;
-    }
+  std::string aKind = theFeature->getKind();
+  if (aKind == PartSet_FeatureLinePrs::getKind()) {
+    aPoint2D = PartSet_FeatureLinePrs::findPoint(theFeature, theX, theY);
   }
-  else if (theFeature->getKind() == SKETCH_POINT_KIND)
-  {
-    boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
-          boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(POINT_ATTR_COORD));
-    if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
-      aPoint2D = aPoint;
+  else if (aKind == PartSet_FeaturePointPrs::getKind()) {
+    aPoint2D = PartSet_FeaturePointPrs::findPoint(theFeature, theX, theY);
   }
-  else if (theFeature->getKind() == SKETCH_CIRCLE_KIND)
-  {
-    boost::shared_ptr<GeomDataAPI_Point2D> aPoint =
-          boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(CIRCLE_ATTR_CENTER));
-    if (fabs(aPoint->x() - theX) < Precision::Confusion() && fabs(aPoint->y() - theY) < Precision::Confusion() )
-      aPoint2D = aPoint;
+  else if (aKind == PartSet_FeatureCirclePrs::getKind()) {
+    aPoint2D = PartSet_FeatureCirclePrs::findPoint(theFeature, theX, theY);
   }
 
   return aPoint2D;
index 5cb8e9c7fc01df7292867079e5773b176e7ce518..30c8fa40167ac47816e8d0d17548874c7e3a0eb4 100644 (file)
@@ -107,13 +107,6 @@ public:
                                boost::shared_ptr<GeomDataAPI_Point2D> thePoint1,
                                boost::shared_ptr<GeomDataAPI_Point2D> thePoint2);
 
-  /// \brief Get the line point 2d coordinates.
-  /// \param theFeature the line feature
-  /// \param theAttribute the start or end attribute of the line
-  /// \param theX the horizontal coordinate
-  /// \param theY the vertical coordinate
-  static void getLinePoint(FeaturePtr theFeature, const std::string& theAttribute,
-                           double& theX, double& theY);
   /// Find a point in the line with given coordinates
   /// \param theFeature the line feature
   /// \param theX the horizontal point coordinate