0024002: Overall code and build procedure refactoring -- automatic
[occt.git] / src / BRep / BRep_Tool.hxx
1 // Created on: 1993-07-07
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1993-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 _BRep_Tool_HeaderFile
18 #define _BRep_Tool_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Boolean.hxx>
25 #include <Standard_Real.hxx>
26 #include <Standard_Integer.hxx>
27 #include <GeomAbs_Shape.hxx>
28 class Standard_NullObject;
29 class Standard_NoSuchObject;
30 class TopoDS_Shape;
31 class Geom_Surface;
32 class TopoDS_Face;
33 class TopLoc_Location;
34 class Poly_Triangulation;
35 class TopoDS_Edge;
36 class Geom_Curve;
37 class Poly_Polygon3D;
38 class Geom2d_Curve;
39 class Poly_Polygon2D;
40 class Poly_PolygonOnTriangulation;
41 class gp_Pnt2d;
42 class gp_Pnt;
43 class TopoDS_Vertex;
44
45
46 //! Provides class methods  to  access to the geometry
47 //! of BRep shapes.
48 class BRep_Tool 
49 {
50 public:
51
52   DEFINE_STANDARD_ALLOC
53
54   
55   //! If S is Shell, returns True if it has no free boundaries (edges).
56   //! If S is Wire, returns True if it has no free ends (vertices).
57   //! (Internal and External sub-shepes are ignored in these checks)
58   //! If S is Edge, returns True if its vertices are the same.
59   //! For other shape types returns S.Closed().
60   Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Shape& S);
61   
62   //! Returns the geometric surface of the face. Returns
63   //! in <L> the location for the surface.
64   Standard_EXPORT static const Handle(Geom_Surface)& Surface (const TopoDS_Face& F, TopLoc_Location& L);
65   
66   //! Returns the geometric  surface of the face. It can
67   //! be a copy if there is a Location.
68   Standard_EXPORT static Handle(Geom_Surface) Surface (const TopoDS_Face& F);
69   
70   //! Returns  the Triangulation of  the  face. It  is a
71   //! null handle if there is no triangulation.
72   Standard_EXPORT static const Handle(Poly_Triangulation)& Triangulation (const TopoDS_Face& F, TopLoc_Location& L);
73   
74   //! Returns the tolerance of the face.
75   Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Face& F);
76   
77   //! Returns the  NaturalRestriction  flag of the  face.
78   Standard_EXPORT static Standard_Boolean NaturalRestriction (const TopoDS_Face& F);
79   
80   //! Returns True if <E> is a 3d curve or a curve on
81   //! surface.
82   Standard_EXPORT static Standard_Boolean IsGeometric (const TopoDS_Edge& E);
83   
84   //! Returns the 3D curve  of the edge.  May be  a Null
85   //! handle. Returns in <L> the location for the curve.
86   //! In <First> and <Last> the parameter range.
87   Standard_EXPORT static const Handle(Geom_Curve)& Curve (const TopoDS_Edge& E, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
88   
89   //! Returns the 3D curve  of the edge. May be a Null handle.
90   //! In <First> and <Last> the parameter range.
91   //! It can be a copy if there is a Location.
92   Standard_EXPORT static Handle(Geom_Curve) Curve (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last);
93   
94   //! Returns the 3D polygon of the edge. May be   a Null
95   //! handle. Returns in <L> the location for the polygon.
96   Standard_EXPORT static const Handle(Poly_Polygon3D)& Polygon3D (const TopoDS_Edge& E, TopLoc_Location& L);
97   
98   //! Returns the curve  associated to the  edge in  the
99   //! parametric  space of  the  face.  Returns   a NULL
100   //! handle  if this curve  does not exist.  Returns in
101   //! <First> and <Last> the parameter range.
102   Standard_EXPORT static Handle(Geom2d_Curve) CurveOnSurface (const TopoDS_Edge& E, const TopoDS_Face& F, Standard_Real& First, Standard_Real& Last);
103   
104   //! Returns the  curve associated to   the edge in the
105   //! parametric  space of the   surface. Returns a NULL
106   //! handle  if this curve does  not exist.  Returns in
107   //! <First> and <Last> the parameter range.
108   Standard_EXPORT static Handle(Geom2d_Curve) CurveOnSurface (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
109   
110   //! Returns in <C>, <S>, <L> a 2d curve, a surface and
111   //! a location for the edge <E>. <C> and <S>  are null
112   //! if the  edge has no curve on  surface.  Returns in
113   //! <First> and <Last> the parameter range.
114   Standard_EXPORT static void CurveOnSurface (const TopoDS_Edge& E, Handle(Geom2d_Curve)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
115   
116   //! Returns in <C>, <S>, <L> the 2d curve, the surface
117   //! and the location for the edge <E> of rank <Index>.
118   //! <C> and <S> are null if the index is out of range.
119   //! Returns in <First> and <Last> the parameter range.
120   Standard_EXPORT static void CurveOnSurface (const TopoDS_Edge& E, Handle(Geom2d_Curve)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last, const Standard_Integer Index);
121   
122   //! Returns the polygon associated to the  edge in  the
123   //! parametric  space of  the  face.  Returns   a NULL
124   //! handle  if this polygon  does not exist.
125   Standard_EXPORT static Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const TopoDS_Face& F);
126   
127   //! Returns the polygon associated to the  edge in  the
128   //! parametric  space of  the surface. Returns   a NULL
129   //! handle  if this polygon  does not exist.
130   Standard_EXPORT static Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
131   
132   //! Returns in <C>, <S>, <L> a 2d curve, a surface and
133   //! a location for the edge <E>. <C> and <S>  are null
134   //! if the  edge has no polygon on  surface.
135   Standard_EXPORT static void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L);
136   
137   //! Returns in <C>, <S>, <L> the 2d curve, the surface
138   //! and the location for the edge <E> of rank <Index>.
139   //! <C> and <S> are null if the index is out of range.
140   Standard_EXPORT static void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, const Standard_Integer Index);
141   
142   //! Returns the polygon associated to the  edge in  the
143   //! parametric  space of  the  face.  Returns   a NULL
144   //! handle  if this polygon  does not exist.
145   Standard_EXPORT static const Handle(Poly_PolygonOnTriangulation)& PolygonOnTriangulation (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T, const TopLoc_Location& L);
146   
147   //! Returns in <P>, <T>, <L> a polygon on triangulation, a
148   //! triangulation and a location for the edge <E>.
149   //! <P>  and  <T>  are null  if  the  edge has no
150   //! polygon on  triangulation.
151   Standard_EXPORT static void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L);
152   
153   //! Returns   in   <P>,  <T>,    <L> a     polygon  on
154   //! triangulation,   a triangulation  and a  location for
155   //! the edge <E> for the range index.  <C> and <S> are
156   //! null if the edge has no polygon on triangulation.
157   Standard_EXPORT static void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L, const Standard_Integer Index);
158   
159   //! Returns  True  if  <E>  has  two  PCurves  in  the
160   //! parametric space of <F>. i.e.  <F>  is on a closed
161   //! surface and <E> is on the closing curve.
162   Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const TopoDS_Face& F);
163   
164   //! Returns  True  if  <E>  has  two  PCurves  in  the
165   //! parametric space  of <S>.  i.e.   <S>  is a closed
166   //! surface and <E> is on the closing curve.
167   Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
168   
169   //! Returns  True  if <E> has two arrays of indices in
170   //! the triangulation <T>.
171   Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T, const TopLoc_Location& L);
172   
173   //! Returns the tolerance for <E>.
174   Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Edge& E);
175   
176   //! Returns the SameParameter flag for the edge.
177   Standard_EXPORT static Standard_Boolean SameParameter (const TopoDS_Edge& E);
178   
179   //! Returns the SameRange flag for the edge.
180   Standard_EXPORT static Standard_Boolean SameRange (const TopoDS_Edge& E);
181   
182   //! Returns True  if the edge is degenerated.
183   Standard_EXPORT static Standard_Boolean Degenerated (const TopoDS_Edge& E);
184   
185   //! Gets the range of the 3d curve.
186   Standard_EXPORT static void Range (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last);
187   
188   //! Gets the range  of the edge  on the pcurve on  the
189   //! surface.
190   Standard_EXPORT static void Range (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
191   
192   //! Gets the range of the edge on the pcurve on the face.
193   Standard_EXPORT static void Range (const TopoDS_Edge& E, const TopoDS_Face& F, Standard_Real& First, Standard_Real& Last);
194   
195   //! Gets the UV locations of the extremities of the edge.
196   Standard_EXPORT static void UVPoints (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, gp_Pnt2d& PFirst, gp_Pnt2d& PLast);
197   
198   //! Gets the UV locations of the extremities of the edge.
199   Standard_EXPORT static void UVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, gp_Pnt2d& PFirst, gp_Pnt2d& PLast);
200   
201   //! Sets the UV locations of the extremities of the edge.
202   Standard_EXPORT static void SetUVPoints (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, const gp_Pnt2d& PFirst, const gp_Pnt2d& PLast);
203   
204   //! Sets the UV locations of the extremities of the edge.
205   Standard_EXPORT static void SetUVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, const gp_Pnt2d& PFirst, const gp_Pnt2d& PLast);
206   
207   //! Returns True if the edge is on the surfaces of the
208   //! two faces.
209   Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2);
210   
211   //! Returns the continuity.
212   Standard_EXPORT static GeomAbs_Shape Continuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2);
213   
214   //! Returns True if the edge is on the surfaces.
215   Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E, const Handle(Geom_Surface)& S1, const Handle(Geom_Surface)& S2, const TopLoc_Location& L1, const TopLoc_Location& L2);
216   
217   //! Returns the continuity.
218   Standard_EXPORT static GeomAbs_Shape Continuity (const TopoDS_Edge& E, const Handle(Geom_Surface)& S1, const Handle(Geom_Surface)& S2, const TopLoc_Location& L1, const TopLoc_Location& L2);
219   
220   //! Returns True if the edge has regularity on some
221   //! two surfaces
222   Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E);
223   
224   //! Returns the 3d point.
225   Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
226   
227   //! Returns the tolerance.
228   Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Vertex& V);
229   
230   //! Returns the parameter of <V> on <E>.
231   Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E);
232   
233   //! Returns the  parameters  of   the  vertex   on the
234   //! pcurve of the edge on the face.
235   Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const TopoDS_Face& F);
236   
237   //! Returns the  parameters  of   the  vertex   on the
238   //! pcurve of the edge on the surface.
239   Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
240   
241   //! Returns the parameters of the vertex on the face.
242   Standard_EXPORT static gp_Pnt2d Parameters (const TopoDS_Vertex& V, const TopoDS_Face& F);
243
244
245
246
247 protected:
248
249
250
251
252
253 private:
254
255
256
257
258
259 };
260
261
262
263
264
265
266
267 #endif // _BRep_Tool_HeaderFile