1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-06 18:26:22 +03:00
occt/src/ShapeAnalysis/ShapeAnalysis_Curve.hxx
abv 42cf5bc1ca 0024002: Overall code and build procedure refactoring -- automatic
Automatic upgrade of OCCT code by command "occt_upgrade . -nocdl":
- WOK-generated header files from inc and sources from drv are moved to src
- CDL files removed
- All packages are converted to nocdlpack
2015-07-12 07:42:38 +03:00

167 lines
7.4 KiB
C++

// 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 <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <Standard_Real.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <TColgp_SequenceOfPnt2d.hxx>
#include <TColgp_SequenceOfPnt.hxx>
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.
//! <preci> 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 <preci>
//!
//! 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.
//! <preci> 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 <cf> and <cl>.
//! The range [cf, cl] is extended with help of Adaptor3d on the
//! basis of 3d precision <preci>.
//! If AdjustToEnds is True, point will be adjusted to the end
//! of the curve if distance is less than <preci>
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.
//! <paramPrev> 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 <preci>
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.
//! <paramPrev> 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 <preci> < 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