mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-06 18:26:22 +03:00
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
167 lines
7.4 KiB
C++
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
|