// This file is generated by WOK (CPPExt). // Please do not edit this file; modify original file instead. // The copyright and license terms as defined for the original file apply to // this header file considered to be the "object code" form of the original source. #ifndef _ShapeAnalysis_Surface_HeaderFile #define _ShapeAnalysis_Surface_HeaderFile #ifndef _Standard_HeaderFile #include #endif #ifndef _Standard_DefineHandle_HeaderFile #include #endif #ifndef _Handle_ShapeAnalysis_Surface_HeaderFile #include #endif #ifndef _Handle_Geom_Surface_HeaderFile #include #endif #ifndef _Handle_GeomAdaptor_HSurface_HeaderFile #include #endif #ifndef _Extrema_ExtPS_HeaderFile #include #endif #ifndef _GeomAdaptor_Surface_HeaderFile #include #endif #ifndef _Standard_Boolean_HeaderFile #include #endif #ifndef _Standard_Integer_HeaderFile #include #endif #ifndef _Standard_Real_HeaderFile #include #endif #ifndef _gp_Pnt_HeaderFile #include #endif #ifndef _gp_Pnt2d_HeaderFile #include #endif #ifndef _Handle_Geom_Curve_HeaderFile #include #endif #ifndef _Bnd_Box_HeaderFile #include #endif #ifndef _MMgt_TShared_HeaderFile #include #endif class Geom_Surface; class GeomAdaptor_HSurface; class Geom_Curve; class gp_Pnt2d; class gp_Pnt; class TColgp_Array1OfPnt; class TColgp_Array1OfPnt2d; class Bnd_Box; //! Complements standard tool Geom_Surface by providing additional
//! functionality for detection surface singularities, checking
//! spatial surface closure and computing projections of 3D points
//! onto a surface.
class ShapeAnalysis_Surface : public MMgt_TShared { public: //! Creates an analyzer object on the basis of existing surface
Standard_EXPORT ShapeAnalysis_Surface(const Handle(Geom_Surface)& S); //! Loads existing surface
Standard_EXPORT void Init(const Handle(Geom_Surface)& S) ; //! Reads all the data from another Surface, without recomputing
Standard_EXPORT void Init(const Handle(ShapeAnalysis_Surface)& other) ; Standard_EXPORT void SetDomain(const Standard_Real U1,const Standard_Real U2,const Standard_Real V1,const Standard_Real V2) ; //! Returns a surface being analyzed
const Handle_Geom_Surface& Surface() const; //! Returns the Adaptor.
//! Creates it if not yet done.
Standard_EXPORT const Handle_GeomAdaptor_HSurface& Adaptor3d() ; //! Returns the Adaptor (may be Null if method Adaptor() was not called)
const Handle_GeomAdaptor_HSurface& TrueAdaptor3d() const; //! Returns 3D distance found by one of the following methods.
//! IsDegenerated, DegeneratedValues, ProjectDegenerated
//! (distance between 3D point and found or last (if not found)
//! singularity),
//! IsUClosed, IsVClosed (minimum value of precision to consider
//! the surface to be closed),
//! ValueOfUV (distance between 3D point and found solution).
Standard_Real Gap() const; //! Returns a 3D point specified by parameters in surface
//! parametrical space
gp_Pnt Value(const Standard_Real u,const Standard_Real v) ; //! Returns a 3d point specified by a point in surface
//! parametrical space
gp_Pnt Value(const gp_Pnt2d& p2d) ; //! Returns True if the surface has singularities for the given
//! precision (i.e. if there are surface singularities with sizes
//! not greater than precision).
Standard_EXPORT Standard_Boolean HasSingularities(const Standard_Real preci) ; //! Returns the number of singularities for the given precision
//! (i.e. number of surface singularities with sizes not greater
//! than precision).
Standard_EXPORT Standard_Integer NbSingularities(const Standard_Real preci) ; //! Returns the characteristics of the singularity specified by
//! its rank number .
//! That means, that it is not neccessary for to be in the
//! range [1, NbSingularities] but must be not greater than
//! possible (see ComputeSingularities).
//! The returned characteristics are:
//! preci: the smallest precision with which the iso-line is
//! considered as degenerated,
//! P3d: 3D point of singularity (middle point of the surface
//! iso-line),
//! firstP2d and lastP2d: first and last 2D points of the
//! iso-line in parametrical surface,
//! firstpar and lastpar: first and last parameters of the
//! iso-line in parametrical surface,
//! uisodeg: if the degenerated iso-line is U-iso (True) or
//! V-iso (False).
//! Returns False if is out of range, else returns True.
Standard_EXPORT Standard_Boolean Singularity(const Standard_Integer num,Standard_Real& preci,gp_Pnt& P3d,gp_Pnt2d& firstP2d,gp_Pnt2d& lastP2d,Standard_Real& firstpar,Standard_Real& lastpar,Standard_Boolean& uisodeg) ; //! Returns True if there is at least one surface boundary which
//! is considered as degenerated with and distance
//! between P3d and corresponding singular point is less than
//!
Standard_EXPORT Standard_Boolean IsDegenerated(const gp_Pnt& P3d,const Standard_Real preci) ; //! Returns True if there is at least one surface iso-line which
//! is considered as degenerated with and distance
//! between P3d and corresponding singular point is less than
//! (like IsDegenerated).
//! Returns characteristics of the first found boundary matching
//! those criteria.
Standard_EXPORT Standard_Boolean DegeneratedValues(const gp_Pnt& P3d,const Standard_Real preci,gp_Pnt2d& firstP2d,gp_Pnt2d& lastP2d,Standard_Real& firstpar,Standard_Real& lastpar,const Standard_Boolean forward = Standard_True) ; //! Projects a point on a singularity by computing
//! one of the coordinates of preliminary computed .
Standard_EXPORT Standard_Boolean ProjectDegenerated(const gp_Pnt& P3d,const Standard_Real preci,const gp_Pnt2d& neighbour,gp_Pnt2d& result) ; //! Checks points at the beginning (direct is True) or end
//! (direct is False) of array to lie in singularity of
//! surface, and if yes, adjusts the indeterminate 2d coordinate
//! of these points by nearest point which is not in singularity.
//! Returns True if some points were adjusted.
Standard_EXPORT Standard_Boolean ProjectDegenerated(const Standard_Integer nbrPnt,const TColgp_Array1OfPnt& points,TColgp_Array1OfPnt2d& pnt2d,const Standard_Real preci,const Standard_Boolean direct) ; //! Returns True if straight pcurve going from point p2d1 to p2d2
//! is degenerate, i.e. lies in the singularity of the surface.
//! NOTE: it uses another method of detecting singularity than
//! used by ComputeSingularities() et al.!
//! For that, maximums of distances between points p2d1, p2d2
//! and 0.5*(p2d1+p2d2) and between corresponding 3d points are
//! computed.
//! The pcurve (p2d1, p2d2) is considered as degenerate if:
//! - max distance in 3d is less than
//! - max distance in 2d is at least times greather than
//! the Resolution computed from max distance in 3d
//! (max3d < tol && max2d > ratio * Resolution(max3d))
//! NOTE: should be >1 (e.g. 10)
Standard_EXPORT Standard_Boolean IsDegenerated(const gp_Pnt2d& p2d1,const gp_Pnt2d& p2d2,const Standard_Real tol,const Standard_Real ratio) ; //! Returns the bounds of the surface
//! (from Bounds from Surface, but buffered)
void Bounds(Standard_Real& ufirst,Standard_Real& ulast,Standard_Real& vfirst,Standard_Real& vlast) const; //! Computes bound isos (protected against exceptions)
Standard_EXPORT void ComputeBoundIsos() ; //! Returns a U-Iso. Null if not possible or failed
//! Remark : bound isos are buffered
Standard_EXPORT Handle_Geom_Curve UIso(const Standard_Real U) ; //! Returns a V-Iso. Null if not possible or failed
//! Remark : bound isos are buffered
Standard_EXPORT Handle_Geom_Curve VIso(const Standard_Real V) ; //! Tells if the Surface is spatially closed in U with given
//! precision. If < 0 then Precision::Confusion is used.
//! If Geom_Surface says that the surface is U-closed, this method
//! also says this. Otherwise additional analysis is performed,
//! comparing given precision with the following distances:
//! - periodic B-Splines are closed,
//! - polinomial B-Spline with boundary multiplicities degree+1
//! and Bezier - maximum distance between poles,
//! - rational B-Spline or one with boundary multiplicities not
//! degree+1 - maximum distance computed at knots and their
//! middles,
//! - surface of extrusion - distance between ends of basis
//! curve,
//! - other (RectangularTrimmed and Offset) - maximum distance
//! computed at 100 equi-distanted points.
Standard_EXPORT Standard_Boolean IsUClosed(const Standard_Real preci = -1) ; //! Tells if the Surface is spatially closed in V with given
//! precision. If < 0 then Precision::Confusion is used.
//! If Geom_Surface says that the surface is V-closed, this method
//! also says this. Otherwise additional analysis is performed,
//! comparing given precision with the following distances:
//! - periodic B-Splines are closed,
//! - polinomial B-Spline with boundary multiplicities degree+1
//! and Bezier - maximum distance between poles,
//! - rational B-Spline or one with boundary multiplicities not
//! degree+1 - maximum distance computed at knots and their
//! middles,
//! - surface of revolution - distance between ends of basis
//! curve,
//! - other (RectangularTrimmed and Offset) - maximum distance
//! computed at 100 equi-distanted points.
Standard_EXPORT Standard_Boolean IsVClosed(const Standard_Real preci = -1) ; //! Computes the parameters in the surface parametrical space of
//! 3D point.
//! The result is parameters of the point projected onto the
//! surface.
//! This method enhances functionality provided by the standard
//! tool GeomAPI_ProjectPointOnSurface by treatment of cases when
//! the projected point is near to the surface boundaries and
//! when this standard tool fails.
Standard_EXPORT gp_Pnt2d ValueOfUV(const gp_Pnt& P3D,const Standard_Real preci) ; //! Projects a point P3D on the surface.
//! Does the same thing as ValueOfUV but tries to optimize
//! computations by taking into account previous point :
//! makes a step by UV and tries Newton algorithm.
//! If >0. and distance between solution and
//! P3D is greater than , that solution is considered
//! as bad, and ValueOfUV() is used.
//! If not succeded, calls ValueOfUV()
Standard_EXPORT gp_Pnt2d NextValueOfUV(const gp_Pnt2d& p2dPrev,const gp_Pnt& P3D,const Standard_Real preci,const Standard_Real maxpreci = -1.0) ; //! Tries a refinement of an already computed couple (U,V) by
//! using projecting 3D point on iso-lines:
//! 1. boundaries of the surface,
//! 2. iso-lines passing through (U,V)
//! 3. iteratively received iso-lines passing through new U and
//! new V (number of iterations is limited by 5 in each
//! direction)
//! Returns the best resulting distance between P3D and Value(U,V)
//! in the case of success. Else, returns a very great value
Standard_EXPORT Standard_Real UVFromIso(const gp_Pnt& P3D,const Standard_Real preci,Standard_Real& U,Standard_Real& V) ; //! Returns minimum value to consider the surface as U-closed
Standard_Real UCloseVal() const; //! Returns minimum value to consider the surface as V-closed
Standard_Real VCloseVal() const; Standard_EXPORT const Bnd_Box& GetBoxUF() ; Standard_EXPORT const Bnd_Box& GetBoxUL() ; Standard_EXPORT const Bnd_Box& GetBoxVF() ; Standard_EXPORT const Bnd_Box& GetBoxVL() ; DEFINE_STANDARD_RTTI(ShapeAnalysis_Surface) protected: Handle_Geom_Surface mySurf; Handle_GeomAdaptor_HSurface myAdSur; Extrema_ExtPS myExtPS; GeomAdaptor_Surface myExtSrf; Standard_Boolean myExtOK; Standard_Integer myNbDeg; Standard_Real myPreci[4]; gp_Pnt myP3d[4]; gp_Pnt2d myFirstP2d[4]; gp_Pnt2d myLastP2d[4]; Standard_Real myFirstPar[4]; Standard_Real myLastPar[4]; Standard_Boolean myUIsoDeg[4]; Standard_Boolean myIsos; Standard_Real myUF; Standard_Real myUL; Standard_Real myVF; Standard_Real myVL; Handle_Geom_Curve myIsoUF; Handle_Geom_Curve myIsoUL; Handle_Geom_Curve myIsoVF; Handle_Geom_Curve myIsoVL; Standard_Boolean myIsoBoxes; Bnd_Box myBndUF; Bnd_Box myBndUL; Bnd_Box myBndVF; Bnd_Box myBndVL; Standard_Real myGap; Standard_Real myUDelt; Standard_Real myVDelt; Standard_Real myUCloseVal; Standard_Real myVCloseVal; private: //! Computes singularities on the surface.
//! Computes the sizes of boundaries or singular ares of the
//! surface. Then each boundary or area is considered as
//! degenerated with precision not less than its size.
Standard_EXPORT void ComputeSingularities() ; Standard_EXPORT void ComputeBoxes() ; Standard_EXPORT Standard_Boolean SurfaceNewton(const gp_Pnt2d& p2dPrev,const gp_Pnt& P3D,const Standard_Real preci,gp_Pnt2d& sol) ; Standard_EXPORT void SortSingularities() ; }; #include // other Inline functions and methods (like "C++: function call" methods) #endif