// Created on: 1998-06-03 // Created by: data exchange team // Copyright (c) 1998-1999 Matra Datavision // Copyright (c) 1999-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _ShapeAnalysis_Curve_HeaderFile #define _ShapeAnalysis_Curve_HeaderFile #include #include #include #include #include #include #include #include #include class Geom_Curve; class gp_Pnt; class Adaptor3d_Curve; class Geom2d_Curve; class Bnd_Box2d; class gp_XYZ; //! Analyzing tool for 2d or 3d curve. //! Computes parameters of projected point onto a curve. class ShapeAnalysis_Curve { public: DEFINE_STANDARD_ALLOC //! Projects a Point on a Curve. //! Computes the projected point and its parameter on the curve. //! is used as 3d precision (hence, 0 will produce //! reject unless exact confusion). //! The number of iterations is limited. //! If AdjustToEnds is True, point will be adjusted to the end //! of the curve if distance is less than //! //! Returned value is the distance between the given point and //! computed one. Standard_EXPORT Standard_Real Project (const Handle(Geom_Curve)& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param, const Standard_Boolean AdjustToEnds = Standard_True) const; //! Projects a Point on a Curve. //! Computes the projected point and its parameter on the curve. //! is used as 3d precision (hence, 0 will produce //! reject unless exact confusion). //! The number of iterations is limited. //! //! Returned value is the distance between the given point and //! computed one. Standard_EXPORT Standard_Real Project (const Adaptor3d_Curve& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param, const Standard_Boolean AdjustToEnds = Standard_True) const; //! Projects a Point on a Curve, but parameters are limited //! between and . //! The range [cf, cl] is extended with help of Adaptor3d on the //! basis of 3d precision . //! If AdjustToEnds is True, point will be adjusted to the end //! of the curve if distance is less than Standard_EXPORT Standard_Real Project (const Handle(Geom_Curve)& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param, const Standard_Real cf, const Standard_Real cl, const Standard_Boolean AdjustToEnds = Standard_True) const; Standard_EXPORT Standard_Real ProjectAct (const Adaptor3d_Curve& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param) const; //! Projects a Point on a Curve using Newton method. //! is taken as the first approximation of solution. //! If Newton algorithm fails the method Project() is used. //! If AdjustToEnds is True, point will be adjusted to the end //! of the curve if distance is less than Standard_EXPORT Standard_Real NextProject (const Standard_Real paramPrev, const Handle(Geom_Curve)& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param, const Standard_Real cf, const Standard_Real cl, const Standard_Boolean AdjustToEnds = Standard_True) const; //! Projects a Point on a Curve using Newton method. //! is taken as the first approximation of solution. //! If Newton algorithm fails the method Project() is used. Standard_EXPORT Standard_Real NextProject (const Standard_Real paramPrev, const Adaptor3d_Curve& C3D, const gp_Pnt& P3D, const Standard_Real preci, gp_Pnt& proj, Standard_Real& param) const; //! Validate parameters First and Last for the given curve //! in order to make them valid for creation of edge. //! This includes: //! - limiting range [First,Last] by range of curve //! - adjusting range [First,Last] for periodic (or closed) //! curve if Last < First //! Returns True if parameters are OK or are successfully //! corrected, or False if parameters cannot be corrected. //! In the latter case, parameters are reset to range of curve. Standard_EXPORT Standard_Boolean ValidateRange (const Handle(Geom_Curve)& Crv, Standard_Real& First, Standard_Real& Last, const Standard_Real prec) const; //! Computes a boundary box on segment of curve C2d from First //! to Last. This is done by taking NPoints points from the //! curve and, if Exact is True, by searching for exact //! extrema. All these points are added to Box. Standard_EXPORT void FillBndBox (const Handle(Geom2d_Curve)& C2d, const Standard_Real First, const Standard_Real Last, const Standard_Integer NPoints, const Standard_Boolean Exact, Bnd_Box2d& Box) const; //! Defines which pcurve (C1 or C2) should be chosen for FORWARD //! seam edge. Standard_EXPORT Standard_Integer SelectForwardSeam (const Handle(Geom2d_Curve)& C1, const Handle(Geom2d_Curve)& C2) const; //! Checks if points are planar with given preci. If Normal has not zero //! modulus, checks with given normal Standard_EXPORT static Standard_Boolean IsPlanar (const TColgp_Array1OfPnt& pnts, gp_XYZ& Normal, const Standard_Real preci = 0); //! Checks if curve is planar with given preci. If Normal has not zero //! modulus, checks with given normal Standard_EXPORT static Standard_Boolean IsPlanar (const Handle(Geom_Curve)& curve, gp_XYZ& Normal, const Standard_Real preci = 0); //! Returns sample points which will serve as linearisation //! of the2d curve in range (first, last) //! The distribution of sample points is consystent with //! what is used by BRepTopAdaptor_FClass2d Standard_EXPORT static Standard_Boolean GetSamplePoints (const Handle(Geom2d_Curve)& curve, const Standard_Real first, const Standard_Real last, TColgp_SequenceOfPnt2d& seq); //! Returns sample points which will serve as linearisation //! of the curve in range (first, last) Standard_EXPORT static Standard_Boolean GetSamplePoints (const Handle(Geom_Curve)& curve, const Standard_Real first, const Standard_Real last, TColgp_SequenceOfPnt& seq); //! Tells if the Curve is closed with given precision. //! If < 0 then Precision::Confusion is used. Standard_EXPORT static Standard_Boolean IsClosed (const Handle(Geom_Curve)& curve, const Standard_Real preci = -1); //! This method was implemented as fix for changes in trimmed curve //! behaviour. For the moment trimmed curve returns false anyway. //! So it is necessary to adapt all Data exchange tools for this behaviour. //! Current implementation takes into account that curve may be offset. Standard_EXPORT static Standard_Boolean IsPeriodic (const Handle(Geom_Curve)& curve); //! The same as for Curve3d. Standard_EXPORT static Standard_Boolean IsPeriodic (const Handle(Geom2d_Curve)& curve); protected: private: }; #endif // _ShapeAnalysis_Curve_HeaderFile