0024002: Overall code and build procedure refactoring -- automatic
[occt.git] / src / Adaptor3d / Adaptor3d_TopolTool.hxx
1 // Created on: 1994-03-24
2 // Created by: model
3 // Copyright (c) 1994-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _Adaptor3d_TopolTool_HeaderFile
18 #define _Adaptor3d_TopolTool_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Integer.hxx>
24 #include <Standard_Real.hxx>
25 #include <TColStd_HArray1OfReal.hxx>
26 #include <MMgt_TShared.hxx>
27 #include <Standard_Boolean.hxx>
28 #include <TopAbs_State.hxx>
29 #include <TopAbs_Orientation.hxx>
30 #include <TColStd_Array1OfReal.hxx>
31 #include <Standard_Address.hxx>
32 class Adaptor2d_HLine2d;
33 class Adaptor3d_HVertex;
34 class Adaptor3d_HSurface;
35 class Standard_DomainError;
36 class Adaptor2d_HCurve2d;
37 class gp_Pnt2d;
38 class gp_Pnt;
39
40
41 class Adaptor3d_TopolTool;
42 DEFINE_STANDARD_HANDLE(Adaptor3d_TopolTool, MMgt_TShared)
43
44 //! This class provides a default topological tool,
45 //! based on the Umin,Vmin,Umax,Vmax of an HSurface
46 //! from Adaptor3d.
47 //! All methods and fields may be redefined when
48 //! inheriting from this class.
49 //! This class is used to instantiate algorithmes
50 //! as Intersection, outlines,...
51 class Adaptor3d_TopolTool : public MMgt_TShared
52 {
53
54 public:
55
56   
57   Standard_EXPORT Adaptor3d_TopolTool();
58   
59   Standard_EXPORT Adaptor3d_TopolTool(const Handle(Adaptor3d_HSurface)& Surface);
60   
61   Standard_EXPORT virtual void Initialize();
62   
63   Standard_EXPORT virtual void Initialize (const Handle(Adaptor3d_HSurface)& S);
64   
65   Standard_EXPORT virtual void Initialize (const Handle(Adaptor2d_HCurve2d)& Curve);
66   
67   Standard_EXPORT virtual void Init();
68   
69   Standard_EXPORT virtual Standard_Boolean More();
70   
71   Standard_EXPORT virtual Handle(Adaptor2d_HCurve2d) Value();
72   
73   Standard_EXPORT virtual void Next();
74   
75   Standard_EXPORT virtual void InitVertexIterator();
76   
77   Standard_EXPORT virtual Standard_Boolean MoreVertex();
78   
79   Standard_EXPORT virtual Handle(Adaptor3d_HVertex) Vertex();
80   
81   Standard_EXPORT virtual void NextVertex();
82   
83   Standard_EXPORT virtual TopAbs_State Classify (const gp_Pnt2d& P, const Standard_Real Tol, const Standard_Boolean ReacdreOnPeriodic = Standard_True);
84   
85   Standard_EXPORT virtual Standard_Boolean IsThePointOn (const gp_Pnt2d& P, const Standard_Real Tol, const Standard_Boolean ReacdreOnPeriodic = Standard_True);
86   
87   //! If the function returns the orientation of the arc.
88   //! If the orientation is FORWARD or REVERSED, the arc is
89   //! a "real" limit of the surface.
90   //! If the orientation is INTERNAL or EXTERNAL, the arc is
91   //! considered as an arc on the surface.
92   Standard_EXPORT virtual TopAbs_Orientation Orientation (const Handle(Adaptor2d_HCurve2d)& C);
93   
94   //! Returns the orientation of the vertex V.
95   //! The vertex has been found with an exploration on
96   //! a given arc. The orientation is the orientation
97   //! of the vertex on this arc.
98   Standard_EXPORT virtual TopAbs_Orientation Orientation (const Handle(Adaptor3d_HVertex)& V);
99   
100   //! Returns True if the vertices V1 and V2 are identical.
101   //! This method does not take the orientation of the
102   //! vertices in account.
103   Standard_EXPORT virtual Standard_Boolean Identical (const Handle(Adaptor3d_HVertex)& V1, const Handle(Adaptor3d_HVertex)& V2);
104   
105   //! answers if arcs and vertices may have 3d representations,
106   //! so that we could use Tol3d and Pnt methods.
107   Standard_EXPORT virtual Standard_Boolean Has3d() const;
108   
109   //! returns 3d tolerance of the arc C
110   Standard_EXPORT virtual Standard_Real Tol3d (const Handle(Adaptor2d_HCurve2d)& C) const;
111   
112   //! returns 3d tolerance of the vertex V
113   Standard_EXPORT virtual Standard_Real Tol3d (const Handle(Adaptor3d_HVertex)& V) const;
114   
115   //! returns 3d point of the vertex V
116   Standard_EXPORT virtual gp_Pnt Pnt (const Handle(Adaptor3d_HVertex)& V) const;
117   
118   Standard_EXPORT virtual void ComputeSamplePoints();
119   
120   //! compute the sample-points for the intersections algorithms
121   Standard_EXPORT virtual Standard_Integer NbSamplesU();
122   
123   //! compute the sample-points for the intersections algorithms
124   Standard_EXPORT virtual Standard_Integer NbSamplesV();
125   
126   //! compute the sample-points for the intersections algorithms
127   Standard_EXPORT virtual Standard_Integer NbSamples();
128   
129   //! return the set of U parameters on the surface
130   //! obtained by the method SamplePnts
131   Standard_EXPORT void UParameters (TColStd_Array1OfReal& theArray) const;
132   
133   //! return the set of V parameters on the surface
134   //! obtained by the method SamplePnts
135   Standard_EXPORT void VParameters (TColStd_Array1OfReal& theArray) const;
136   
137   Standard_EXPORT virtual void SamplePoint (const Standard_Integer Index, gp_Pnt2d& P2d, gp_Pnt& P3d);
138   
139   Standard_EXPORT virtual Standard_Boolean DomainIsInfinite();
140   
141   Standard_EXPORT virtual Standard_Address Edge() const;
142   
143   //! compute the sample-points for the intersections algorithms
144   //! by adaptive algorithm for BSpline surfaces. For other surfaces algorithm
145   //! is the same as in method ComputeSamplePoints(), but only fill arrays of U
146   //! and V sample parameters;
147   //! theDefl is a requred deflection
148   //! theNUmin, theNVmin are minimal nb points for U and V.
149   Standard_EXPORT virtual void SamplePnts (const Standard_Real theDefl, const Standard_Integer theNUmin, const Standard_Integer theNVmin);
150   
151   //! compute the sample-points for the intersections algorithms
152   //! by adaptive algorithm for BSpline surfaces  -  is  used  in  SamplePnts
153   //! theDefl is a requred deflection
154   //! theNUmin, theNVmin are minimal nb points for U and V.
155   Standard_EXPORT virtual void BSplSamplePnts (const Standard_Real theDefl, const Standard_Integer theNUmin, const Standard_Integer theNVmin);
156   
157   //! Returns true if provide uniform sampling of points.
158   Standard_EXPORT virtual Standard_Boolean IsUniformSampling() const;
159
160
161
162
163   DEFINE_STANDARD_RTTI(Adaptor3d_TopolTool,MMgt_TShared)
164
165 protected:
166
167
168   Handle(Adaptor3d_HSurface) myS;
169   Standard_Integer myNbSamplesU;
170   Standard_Integer myNbSamplesV;
171   Handle(TColStd_HArray1OfReal) myUPars;
172   Handle(TColStd_HArray1OfReal) myVPars;
173
174
175 private:
176
177
178   Standard_Integer nbRestr;
179   Standard_Integer idRestr;
180   Standard_Real Uinf;
181   Standard_Real Usup;
182   Standard_Real Vinf;
183   Standard_Real Vsup;
184   Handle(Adaptor2d_HLine2d) myRestr[4];
185   Standard_Integer nbVtx;
186   Standard_Integer idVtx;
187   Handle(Adaptor3d_HVertex) myVtx[2];
188
189
190 };
191
192
193
194
195
196
197
198 #endif // _Adaptor3d_TopolTool_HeaderFile