#include "CurveCreator_Macro.hxx"
-#include <gp_Pnt.hxx>
+#include <AIS_InteractiveContext.hxx>
#include <V3d_View.hxx>
+#include <gp_Pnt.hxx>
+#include <Geom_Curve.hxx>
+
+#include <list>
class CurveCreator_Utils
{
* \param theView View where the given point takes place.
* \retval gp_Pnt Returns the point clicked in 3D view
*/
- CURVECREATOR_EXPORT static gp_Pnt ConvertClickToPoint( int x, int y, Handle(V3d_View) theView );
+ CURVECREATOR_EXPORT static gp_Pnt ConvertClickToPoint( int x, int y,
+ Handle(V3d_View) theView );
+
+ /**
+ * Find selected points in the context
+ * \param theContext the viewer context
+ */
+ CURVECREATOR_EXPORT static std::list<float> getSelectedPoints(
+ Handle(AIS_InteractiveContext) theContext );
+
+ /*!
+ * \brief Sets the local point context for the 3D viewer.
+ * \param theOpen The flag to open or close the local context.
+ */
+ CURVECREATOR_EXPORT static void setLocalPointContext(
+ Handle(AIS_InteractiveContext) theContext,
+ const bool theOpen );
+
+ /**
+ * Find the neighbour points by the clicked coordinates
+ * \param theContext the viewer context.
+ * \param theContext the V3D view.
+ * \param theX the X coordinate in the view.
+ * \param theY the Y coordinate in the view.
+ * \param thePoint the output point to be append to the model curve
+ * \param thePoint1 the output point to bound the line where a new point should be inserted
+ * \param thePoint2 the output point to bound the line where a new point should be inserted
+ */
+ CURVECREATOR_EXPORT static bool getNeighbourPoints(
+ Handle(AIS_InteractiveContext) theContext,
+ Handle(V3d_View) theView,
+ const int theX, const int theY,
+ gp_Pnt& thePoint, gp_Pnt& thePoint1,
+ gp_Pnt& thePoint2 );
+
+protected:
+ /**
+ * Checks whether the point belongs to the OCC object
+ * \param theObject a line or shape with a bspline inside
+ * \param theX the X coordinate in the view.
+ * \param theY the Y coordinate in the view.
+ * \param thePoint the output point to be append to the model curve
+ * \param thePoint1 the output point to bound the line where a new point should be inserted
+ * \param thePoint2 the output point to bound the line where a new point should be inserted
+ */
+ CURVECREATOR_EXPORT static bool pointOnObject( Handle(V3d_View) theView,
+ Handle(AIS_InteractiveObject) theObject,
+ const int theX, const int theY,
+ gp_Pnt& thePoint, gp_Pnt& thePoint1,
+ gp_Pnt& thePoint2 );
+
+ /*
+ * Returns whether the clicked point belong to the curve or has a very near projection
+ * \param theX the X coordinate of a point clicked in the OCC viewer
+ * \param theY the Y coordinate of a point clicked in the OCC viewer
+ * \param theCurve a geometry curve
+ * \param theOutPoint a found projected point on the curve
+ */
+ CURVECREATOR_EXPORT static bool hasProjectPointOnCurve(
+ Handle(V3d_View) theView,
+ const int theX, const int theY,
+ const Handle(Geom_Curve)& theCurve,
+ Standard_Real& theParameter );
};