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
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #ifndef _BRep_Tool_HeaderFile
18 #define _BRep_Tool_HeaderFile
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
24 #include <GeomAbs_Shape.hxx>
25 #include <Geom_Surface.hxx>
26 #include <Geom_Curve.hxx>
27 #include <Geom2d_Curve.hxx>
28 #include <gp_Pnt2d.hxx>
30 #include <Poly_Triangulation.hxx>
31 #include <Poly_Polygon3D.hxx>
32 #include <Poly_Polygon2D.hxx>
33 #include <Poly_PolygonOnTriangulation.hxx>
34 #include <TopAbs_ShapeEnum.hxx>
38 class TopLoc_Location;
43 //! Provides class methods to access to the geometry
52 //! If S is Shell, returns True if it has no free boundaries (edges).
53 //! If S is Wire, returns True if it has no free ends (vertices).
54 //! (Internal and External sub-shepes are ignored in these checks)
55 //! If S is Edge, returns True if its vertices are the same.
56 //! For other shape types returns S.Closed().
57 Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Shape& S);
59 //! Returns the geometric surface of the face. Returns
60 //! in <L> the location for the surface.
61 Standard_EXPORT static const Handle(Geom_Surface)& Surface (const TopoDS_Face& F, TopLoc_Location& L);
63 //! Returns the geometric surface of the face. It can
64 //! be a copy if there is a Location.
65 Standard_EXPORT static Handle(Geom_Surface) Surface (const TopoDS_Face& F);
67 //! Returns the Triangulation of the face. It is a
68 //! null handle if there is no triangulation.
69 Standard_EXPORT static const Handle(Poly_Triangulation)& Triangulation (const TopoDS_Face& F, TopLoc_Location& L);
71 //! Returns the tolerance of the face.
72 Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Face& F);
74 //! Returns the NaturalRestriction flag of the face.
75 Standard_EXPORT static Standard_Boolean NaturalRestriction (const TopoDS_Face& F);
77 //! Returns True if <E> is a 3d curve or a curve on
79 Standard_EXPORT static Standard_Boolean IsGeometric (const TopoDS_Edge& E);
81 //! Returns the 3D curve of the edge. May be a Null
82 //! handle. Returns in <L> the location for the curve.
83 //! In <First> and <Last> the parameter range.
84 Standard_EXPORT static const Handle(Geom_Curve)& Curve (const TopoDS_Edge& E, TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
86 //! Returns the 3D curve of the edge. May be a Null handle.
87 //! In <First> and <Last> the parameter range.
88 //! It can be a copy if there is a Location.
89 Standard_EXPORT static Handle(Geom_Curve) Curve (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last);
91 //! Returns the 3D polygon of the edge. May be a Null
92 //! handle. Returns in <L> the location for the polygon.
93 Standard_EXPORT static const Handle(Poly_Polygon3D)& Polygon3D (const TopoDS_Edge& E, TopLoc_Location& L);
95 //! Returns the curve associated to the edge in the
96 //! parametric space of the face. Returns a NULL
97 //! handle if this curve does not exist. Returns in
98 //! <First> and <Last> the parameter range.
99 //! If the surface is a plane the curve can be not stored but created a new
100 //! each time. The flag pointed by <theIsStored> serves to indicate storage status.
101 //! It is valued if the pointer is non-null.
102 Standard_EXPORT static Handle(Geom2d_Curve) CurveOnSurface (const TopoDS_Edge& E,
103 const TopoDS_Face& F,
104 Standard_Real& First,
106 Standard_Boolean* theIsStored = NULL);
108 //! Returns the curve associated to the edge in the
109 //! parametric space of the surface. Returns a NULL
110 //! handle if this curve does not exist. Returns in
111 //! <First> and <Last> the parameter range.
112 //! If the surface is a plane the curve can be not stored but created a new
113 //! each time. The flag pointed by <theIsStored> serves to indicate storage status.
114 //! It is valued if the pointer is non-null.
115 Standard_EXPORT static Handle(Geom2d_Curve) CurveOnSurface(const TopoDS_Edge& E,
116 const Handle(Geom_Surface)& S,
117 const TopLoc_Location& L,
118 Standard_Real& First,
120 Standard_Boolean* theIsStored = NULL);
122 //! For the planar surface builds the 2d curve for the edge
123 //! by projection of the edge on plane.
124 //! Returns a NULL handle if the surface is not planar or
125 //! the projection failed.
126 Standard_EXPORT static Handle(Geom2d_Curve) CurveOnPlane (const TopoDS_Edge& E,
127 const Handle(Geom_Surface)& S,
128 const TopLoc_Location& L,
129 Standard_Real& First,
130 Standard_Real& Last);
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 curve on surface. Returns in
135 //! <First> and <Last> the parameter range.
136 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);
138 //! Returns in <C>, <S>, <L> the 2d curve, the surface
139 //! and the location for the edge <E> of rank <Index>.
140 //! <C> and <S> are null if the index is out of range.
141 //! Returns in <First> and <Last> the parameter range.
142 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);
144 //! Returns the polygon associated to the edge in the
145 //! parametric space of the face. Returns a NULL
146 //! handle if this polygon does not exist.
147 Standard_EXPORT static Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const TopoDS_Face& F);
149 //! Returns the polygon associated to the edge in the
150 //! parametric space of the surface. Returns a NULL
151 //! handle if this polygon does not exist.
152 Standard_EXPORT static Handle(Poly_Polygon2D) PolygonOnSurface (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
154 //! Returns in <C>, <S>, <L> a 2d curve, a surface and
155 //! a location for the edge <E>. <C> and <S> are null
156 //! if the edge has no polygon on surface.
157 Standard_EXPORT static void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L);
159 //! Returns in <C>, <S>, <L> the 2d curve, the surface
160 //! and the location for the edge <E> of rank <Index>.
161 //! <C> and <S> are null if the index is out of range.
162 Standard_EXPORT static void PolygonOnSurface (const TopoDS_Edge& E, Handle(Poly_Polygon2D)& C, Handle(Geom_Surface)& S, TopLoc_Location& L, const Standard_Integer Index);
164 //! Returns the polygon associated to the edge in the
165 //! parametric space of the face. Returns a NULL
166 //! handle if this polygon does not exist.
167 Standard_EXPORT static const Handle(Poly_PolygonOnTriangulation)& PolygonOnTriangulation (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T, const TopLoc_Location& L);
169 //! Returns in <P>, <T>, <L> a polygon on triangulation, a
170 //! triangulation and a location for the edge <E>.
171 //! <P> and <T> are null if the edge has no
172 //! polygon on triangulation.
173 Standard_EXPORT static void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L);
175 //! Returns in <P>, <T>, <L> a polygon on
176 //! triangulation, a triangulation and a location for
177 //! the edge <E> for the range index. <C> and <S> are
178 //! null if the edge has no polygon on triangulation.
179 Standard_EXPORT static void PolygonOnTriangulation (const TopoDS_Edge& E, Handle(Poly_PolygonOnTriangulation)& P, Handle(Poly_Triangulation)& T, TopLoc_Location& L, const Standard_Integer Index);
181 //! Returns True if <E> has two PCurves in the
182 //! parametric space of <F>. i.e. <F> is on a closed
183 //! surface and <E> is on the closing curve.
184 Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const TopoDS_Face& F);
186 //! Returns True if <E> has two PCurves in the
187 //! parametric space of <S>. i.e. <S> is a closed
188 //! surface and <E> is on the closing curve.
189 Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
191 //! Returns True if <E> has two arrays of indices in
192 //! the triangulation <T>.
193 Standard_EXPORT static Standard_Boolean IsClosed (const TopoDS_Edge& E, const Handle(Poly_Triangulation)& T, const TopLoc_Location& L);
195 //! Returns the tolerance for <E>.
196 Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Edge& E);
198 //! Returns the SameParameter flag for the edge.
199 Standard_EXPORT static Standard_Boolean SameParameter (const TopoDS_Edge& E);
201 //! Returns the SameRange flag for the edge.
202 Standard_EXPORT static Standard_Boolean SameRange (const TopoDS_Edge& E);
204 //! Returns True if the edge is degenerated.
205 Standard_EXPORT static Standard_Boolean Degenerated (const TopoDS_Edge& E);
207 //! Gets the range of the 3d curve.
208 Standard_EXPORT static void Range (const TopoDS_Edge& E, Standard_Real& First, Standard_Real& Last);
210 //! Gets the range of the edge on the pcurve on the
212 Standard_EXPORT static void Range (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, Standard_Real& First, Standard_Real& Last);
214 //! Gets the range of the edge on the pcurve on the face.
215 Standard_EXPORT static void Range (const TopoDS_Edge& E, const TopoDS_Face& F, Standard_Real& First, Standard_Real& Last);
217 //! Gets the UV locations of the extremities of the edge.
218 Standard_EXPORT static void UVPoints (const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L, gp_Pnt2d& PFirst, gp_Pnt2d& PLast);
220 //! Gets the UV locations of the extremities of the edge.
221 Standard_EXPORT static void UVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, gp_Pnt2d& PFirst, gp_Pnt2d& PLast);
223 //! Sets the UV locations of the extremities of the edge.
224 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);
226 //! Sets the UV locations of the extremities of the edge.
227 Standard_EXPORT static void SetUVPoints (const TopoDS_Edge& E, const TopoDS_Face& F, const gp_Pnt2d& PFirst, const gp_Pnt2d& PLast);
229 //! Returns True if the edge is on the surfaces of the
231 Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2);
233 //! Returns the continuity.
234 Standard_EXPORT static GeomAbs_Shape Continuity (const TopoDS_Edge& E, const TopoDS_Face& F1, const TopoDS_Face& F2);
236 //! Returns True if the edge is on the surfaces.
237 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);
239 //! Returns the continuity.
240 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);
242 //! Returns True if the edge has regularity on some
244 Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E);
246 //! Returns the max continuity of edge between some surfaces or GeomAbs_C0 if there no such surfaces.
247 Standard_EXPORT static GeomAbs_Shape MaxContinuity (const TopoDS_Edge& theEdge);
249 //! Returns the 3d point.
250 Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
252 //! Returns the tolerance.
253 Standard_EXPORT static Standard_Real Tolerance (const TopoDS_Vertex& V);
255 //! Returns the parameter of <V> on <E>.
256 Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E);
258 //! Returns the parameters of the vertex on the
259 //! pcurve of the edge on the face.
260 Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const TopoDS_Face& F);
262 //! Returns the parameters of the vertex on the
263 //! pcurve of the edge on the surface.
264 Standard_EXPORT static Standard_Real Parameter (const TopoDS_Vertex& V, const TopoDS_Edge& E, const Handle(Geom_Surface)& S, const TopLoc_Location& L);
266 //! Returns the parameters of the vertex on the face.
267 Standard_EXPORT static gp_Pnt2d Parameters (const TopoDS_Vertex& V, const TopoDS_Face& F);
269 //! Returns the maximum tolerance of input shape subshapes.
270 //@param theShape - Shape to search tolerance.
271 //@param theSubShape - Search subshape, only Face, Edge or Vertex are supported.
272 Standard_EXPORT static Standard_Real MaxTolerance (const TopoDS_Shape& theShape, const TopAbs_ShapeEnum theSubShape);
276 #endif // _BRep_Tool_HeaderFile