1 // Created on: 1992-08-28 2 // Created by: Remi LEQUETTE 3 // Copyright (c) 1992-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 _BRepTools_HeaderFile 18 #define _BRepTools_HeaderFile 19 20 #include <Standard.hxx> 21 #include <Standard_DefineAlloc.hxx> 22 #include <Standard_Handle.hxx> 23 24 #include <Standard_Real.hxx> 25 #include <Standard_Boolean.hxx> 26 #include <TopTools_IndexedMapOfShape.hxx> 27 #include <Standard_OStream.hxx> 28 #include <Standard_IStream.hxx> 29 #include <Standard_CString.hxx> 30 31 #include <Message_ProgressIndicator.hxx> 32 33 class TopoDS_Face; 34 class TopoDS_Wire; 35 class TopoDS_Edge; 36 class Bnd_Box2d; 37 class TopoDS_Vertex; 38 class TopoDS_Shell; 39 class TopoDS_Solid; 40 class TopoDS_CompSolid; 41 class TopoDS_Compound; 42 class TopoDS_Shape; 43 class Message_ProgressIndicator; 44 class BRep_Builder; 45 class BRepTools_WireExplorer; 46 class BRepTools_Modification; 47 class BRepTools_Modifier; 48 class BRepTools_TrsfModification; 49 class BRepTools_NurbsConvertModification; 50 class BRepTools_GTrsfModification; 51 class BRepTools_Substitution; 52 class BRepTools_Quilt; 53 class BRepTools_ShapeSet; 54 class BRepTools_ReShape; 55 class Geom_Curve; 56 class Geom2d_Curve; 57 class Geom_Surface; 58 59 60 //! The BRepTools package provides utilities for BRep 61 //! data structures. 62 //! 63 //! * WireExplorer : A tool to explore the topology of 64 //! a wire in the order of the edges. 65 //! 66 //! * ShapeSet : Tools used for dumping, writing and 67 //! reading. 68 //! 69 //! * UVBounds : Methods to compute the limits of the 70 //! boundary of a face, a wire or an edge in the 71 //! parametric space of a face. 72 //! 73 //! * Update : Methods to call when a topology has 74 //! been created to compute all missing data. 75 //! 76 //! * UpdateFaceUVPoints: Method to update the UV points 77 //! stored with the edges on a face. 78 //! 79 //! * Compare : Method to compare two vertices. 80 //! 81 //! * Compare : Method to compare two edges. 82 //! 83 //! * OuterWire : A method to find the outer wire of a 84 //! face. 85 //! 86 //! * Map3DEdges : A method to map all the 3D Edges of 87 //! a Shape. 88 //! 89 //! * Dump : A method to dump a BRep object. 90 class BRepTools 91 { 92 public: 93 94 DEFINE_STANDARD_ALLOC 95 96 97 //! Returns in UMin, UMax, VMin, VMax the bounding 98 //! values in the parametric space of F. 99 Standard_EXPORT static void UVBounds (const TopoDS_Face& F, Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax); 100 101 //! Returns in UMin, UMax, VMin, VMax the bounding 102 //! values of the wire in the parametric space of F. 103 Standard_EXPORT static void UVBounds (const TopoDS_Face& F, const TopoDS_Wire& W, Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax); 104 105 //! Returns in UMin, UMax, VMin, VMax the bounding 106 //! values of the edge in the parametric space of F. 107 Standard_EXPORT static void UVBounds (const TopoDS_Face& F, const TopoDS_Edge& E, Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax); 108 109 //! Adds to the box <B> the bounding values in the 110 //! parametric space of F. 111 Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, Bnd_Box2d& B); 112 113 //! Adds to the box <B> the bounding values of the 114 //! wire in the parametric space of F. 115 Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, const TopoDS_Wire& W, Bnd_Box2d& B); 116 117 //! Adds to the box <B> the bounding values of the 118 //! edge in the parametric space of F. 119 Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, const TopoDS_Edge& E, Bnd_Box2d& B); 120 121 //! Update a vertex (nothing is done) 122 Standard_EXPORT static void Update (const TopoDS_Vertex& V); 123 124 //! Update an edge, compute 2d bounding boxes. 125 Standard_EXPORT static void Update (const TopoDS_Edge& E); 126 127 //! Update a wire (nothing is done) 128 Standard_EXPORT static void Update (const TopoDS_Wire& W); 129 130 //! Update a Face, update UV points. 131 Standard_EXPORT static void Update (const TopoDS_Face& F); 132 133 //! Update a shell (nothing is done) 134 Standard_EXPORT static void Update (const TopoDS_Shell& S); 135 136 //! Update a solid (nothing is done) 137 Standard_EXPORT static void Update (const TopoDS_Solid& S); 138 139 //! Update a composite solid (nothing is done) 140 Standard_EXPORT static void Update (const TopoDS_CompSolid& C); 141 142 //! Update a compound (nothing is done) 143 Standard_EXPORT static void Update (const TopoDS_Compound& C); 144 145 //! Update a shape, call the corect update. 146 Standard_EXPORT static void Update (const TopoDS_Shape& S); 147 148 //! For each edge of the face <F> reset the UV points 149 //! to the bounding points of the parametric curve of the 150 //! edge on the face. 151 Standard_EXPORT static void UpdateFaceUVPoints (const TopoDS_Face& theF); 152 153 //! Removes all the triangulations of the faces of <S> 154 //! and removes all polygons on triangulations of the 155 //! edges. 156 Standard_EXPORT static void Clean (const TopoDS_Shape& S); 157 158 //! Removes geometry (curves and surfaces) from all edges and faces of the shape 159 Standard_EXPORT static void CleanGeometry(const TopoDS_Shape& theShape); 160 161 //! Removes all the pcurves of the edges of <S> that 162 //! refer to surfaces not belonging to any face of <S> 163 Standard_EXPORT static void RemoveUnusedPCurves (const TopoDS_Shape& S); 164 165 //! verifies that each face from the shape <S> has got 166 //! a triangulation with a deflection <= deflec and 167 //! the edges a discretisation on this triangulation. 168 Standard_EXPORT static Standard_Boolean Triangulation (const TopoDS_Shape& S, const Standard_Real deflec); 169 170 //! Returns True if the distance between the two 171 //! vertices is lower than their tolerance. 172 Standard_EXPORT static Standard_Boolean Compare (const TopoDS_Vertex& V1, const TopoDS_Vertex& V2); 173 174 //! Returns True if the distance between the two 175 //! edges is lower than their tolerance. 176 Standard_EXPORT static Standard_Boolean Compare (const TopoDS_Edge& E1, const TopoDS_Edge& E2); 177 178 //! Returns the outer most wire of <F>. Returns a Null 179 //! wire if <F> has no wires. 180 Standard_EXPORT static TopoDS_Wire OuterWire (const TopoDS_Face& F); 181 182 //! Stores in the map <M> all the 3D topology edges 183 //! of <S>. 184 Standard_EXPORT static void Map3DEdges (const TopoDS_Shape& S, TopTools_IndexedMapOfShape& M); 185 186 //! Verifies that the edge <E> is found two times on 187 //! the face <F> before calling BRep_Tool::IsClosed. 188 Standard_EXPORT static Standard_Boolean IsReallyClosed (const TopoDS_Edge& E, const TopoDS_Face& F); 189 190 //! Detect closedness of face in U and V directions 191 Standard_EXPORT static void DetectClosedness (const TopoDS_Face& theFace, 192 Standard_Boolean& theUclosed, 193 Standard_Boolean& theVclosed); 194 195 //! Dumps the topological structure and the geometry 196 //! of <Sh> on the stream <S>. 197 Standard_EXPORT static void Dump (const TopoDS_Shape& Sh, Standard_OStream& S); 198 199 //! Writes <Sh> on <S> in an ASCII format. 200 Standard_EXPORT static void Write (const TopoDS_Shape& Sh, Standard_OStream& S, const Handle(Message_ProgressIndicator)& PR = NULL); 201 202 //! Reads a Shape from <S> in returns it in <Sh>. 203 //! <B> is used to build the shape. 204 Standard_EXPORT static void Read (TopoDS_Shape& Sh, Standard_IStream& S, const BRep_Builder& B, const Handle(Message_ProgressIndicator)& PR = NULL); 205 206 //! Writes <Sh> in <File>. 207 Standard_EXPORT static Standard_Boolean Write (const TopoDS_Shape& Sh, const Standard_CString File, const Handle(Message_ProgressIndicator)& PR = NULL); 208 209 //! Reads a Shape from <File>, returns it in <Sh>. 210 //! <B> is used to build the shape. 211 Standard_EXPORT static Standard_Boolean Read (TopoDS_Shape& Sh, const Standard_CString File, const BRep_Builder& B, const Handle(Message_ProgressIndicator)& PR = NULL); 212 213 //! Evals real tolerance of edge <theE>. 214 //! <theC3d>, <theC2d>, <theS>, <theF>, <theL> are 215 //! correspondently 3d curve of edge, 2d curve on surface <theS> and 216 //! rang of edge 217 //! If calculated tolerance is more then current edge tolerance, edge is updated. 218 //! Method returns actual tolerance of edge 219 Standard_EXPORT static Standard_Real EvalAndUpdateTol(const TopoDS_Edge& theE, 220 const Handle(Geom_Curve)& theC3d, 221 const Handle(Geom2d_Curve) theC2d, 222 const Handle(Geom_Surface)& theS, 223 const Standard_Real theF, 224 const Standard_Real theL); 225 226 227 228 protected: 229 230 231 232 233 234 private: 235 236 237 238 239 friend class BRepTools_WireExplorer; 240 friend class BRepTools_Modification; 241 friend class BRepTools_Modifier; 242 friend class BRepTools_TrsfModification; 243 friend class BRepTools_NurbsConvertModification; 244 friend class BRepTools_GTrsfModification; 245 friend class BRepTools_Substitution; 246 friend class BRepTools_Quilt; 247 friend class BRepTools_ShapeSet; 248 friend class BRepTools_ReShape; 249 250 }; 251 252 253 254 255 256 257 258 #endif // _BRepTools_HeaderFile 259