// Created on: 1992-08-28 // Created by: Remi LEQUETTE // Copyright (c) 1992-1999 Matra Datavision // Copyright (c) 1999-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _BRepTools_HeaderFile #define _BRepTools_HeaderFile #include #include #include #include #include #include #include #include #include #include class TopoDS_Face; class TopoDS_Wire; class TopoDS_Edge; class Bnd_Box2d; class TopoDS_Vertex; class TopoDS_Shell; class TopoDS_Solid; class TopoDS_CompSolid; class TopoDS_Compound; class TopoDS_Shape; class Message_ProgressIndicator; class BRep_Builder; class BRepTools_WireExplorer; class BRepTools_Modification; class BRepTools_Modifier; class BRepTools_TrsfModification; class BRepTools_NurbsConvertModification; class BRepTools_GTrsfModification; class BRepTools_Substitution; class BRepTools_Quilt; class BRepTools_ShapeSet; class BRepTools_ReShape; class Geom_Curve; class Geom2d_Curve; class Geom_Surface; //! The BRepTools package provides utilities for BRep //! data structures. //! //! * WireExplorer : A tool to explore the topology of //! a wire in the order of the edges. //! //! * ShapeSet : Tools used for dumping, writing and //! reading. //! //! * UVBounds : Methods to compute the limits of the //! boundary of a face, a wire or an edge in the //! parametric space of a face. //! //! * Update : Methods to call when a topology has //! been created to compute all missing data. //! //! * UpdateFaceUVPoints: Method to update the UV points //! stored with the edges on a face. //! //! * Compare : Method to compare two vertices. //! //! * Compare : Method to compare two edges. //! //! * OuterWire : A method to find the outer wire of a //! face. //! //! * Map3DEdges : A method to map all the 3D Edges of //! a Shape. //! //! * Dump : A method to dump a BRep object. class BRepTools { public: DEFINE_STANDARD_ALLOC //! Returns in UMin, UMax, VMin, VMax the bounding //! values in the parametric space of F. Standard_EXPORT static void UVBounds (const TopoDS_Face& F, Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax); //! Returns in UMin, UMax, VMin, VMax the bounding //! values of the wire in the parametric space of F. 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); //! Returns in UMin, UMax, VMin, VMax the bounding //! values of the edge in the parametric space of F. 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); //! Adds to the box the bounding values in the //! parametric space of F. Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, Bnd_Box2d& B); //! Adds to the box the bounding values of the //! wire in the parametric space of F. Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, const TopoDS_Wire& W, Bnd_Box2d& B); //! Adds to the box the bounding values of the //! edge in the parametric space of F. Standard_EXPORT static void AddUVBounds (const TopoDS_Face& F, const TopoDS_Edge& E, Bnd_Box2d& B); //! Update a vertex (nothing is done) Standard_EXPORT static void Update (const TopoDS_Vertex& V); //! Update an edge, compute 2d bounding boxes. Standard_EXPORT static void Update (const TopoDS_Edge& E); //! Update a wire (nothing is done) Standard_EXPORT static void Update (const TopoDS_Wire& W); //! Update a Face, update UV points. Standard_EXPORT static void Update (const TopoDS_Face& F); //! Update a shell (nothing is done) Standard_EXPORT static void Update (const TopoDS_Shell& S); //! Update a solid (nothing is done) Standard_EXPORT static void Update (const TopoDS_Solid& S); //! Update a composite solid (nothing is done) Standard_EXPORT static void Update (const TopoDS_CompSolid& C); //! Update a compound (nothing is done) Standard_EXPORT static void Update (const TopoDS_Compound& C); //! Update a shape, call the corect update. Standard_EXPORT static void Update (const TopoDS_Shape& S); //! For each edge of the face reset the UV points //! to the bounding points of the parametric curve of the //! edge on the face. Standard_EXPORT static void UpdateFaceUVPoints (const TopoDS_Face& theF); //! Removes all cashed polygonal representation of the shape, //! i.e. the triangulations of the faces of and polygons on //! triangulations and polygons 3d of the edges. //! In case polygonal representation is the only available representation //! for the shape (shape does not have geometry) it is not removed. Standard_EXPORT static void Clean (const TopoDS_Shape& S); //! Removes geometry (curves and surfaces) from all edges and faces of the shape Standard_EXPORT static void CleanGeometry(const TopoDS_Shape& theShape); //! Removes all the pcurves of the edges of that //! refer to surfaces not belonging to any face of Standard_EXPORT static void RemoveUnusedPCurves (const TopoDS_Shape& S); //! Verifies that each Face from the shape has got a triangulation with a deflection smaller or equal to specified one //! and the Edges a discretization on this triangulation. //! @param theShape [in] shape to verify //! @param theLinDefl [in] maximum allowed linear deflection //! @param theToCheckFreeEdges [in] if TRUE, then free Edges are required to have 3D polygon //! @return FALSE if input Shape contains Faces without triangulation, //! or that triangulation has worse (greater) deflection than specified one, //! or Edges in Shape lack polygons on triangulation //! or free Edges in Shape lack 3D polygons Standard_EXPORT static Standard_Boolean Triangulation (const TopoDS_Shape& theShape, const Standard_Real theLinDefl, const Standard_Boolean theToCheckFreeEdges = Standard_False); //! Returns True if the distance between the two //! vertices is lower than their tolerance. Standard_EXPORT static Standard_Boolean Compare (const TopoDS_Vertex& V1, const TopoDS_Vertex& V2); //! Returns True if the distance between the two //! edges is lower than their tolerance. Standard_EXPORT static Standard_Boolean Compare (const TopoDS_Edge& E1, const TopoDS_Edge& E2); //! Returns the outer most wire of . Returns a Null //! wire if has no wires. Standard_EXPORT static TopoDS_Wire OuterWire (const TopoDS_Face& F); //! Stores in the map all the 3D topology edges //! of . Standard_EXPORT static void Map3DEdges (const TopoDS_Shape& S, TopTools_IndexedMapOfShape& M); //! Verifies that the edge is found two times on //! the face before calling BRep_Tool::IsClosed. Standard_EXPORT static Standard_Boolean IsReallyClosed (const TopoDS_Edge& E, const TopoDS_Face& F); //! Detect closedness of face in U and V directions Standard_EXPORT static void DetectClosedness (const TopoDS_Face& theFace, Standard_Boolean& theUclosed, Standard_Boolean& theVclosed); //! Dumps the topological structure and the geometry //! of on the stream . Standard_EXPORT static void Dump (const TopoDS_Shape& Sh, Standard_OStream& S); //! Writes on in an ASCII format. Standard_EXPORT static void Write (const TopoDS_Shape& Sh, Standard_OStream& S, const Handle(Message_ProgressIndicator)& PR = NULL); //! Reads a Shape from in returns it in . //! is used to build the shape. Standard_EXPORT static void Read (TopoDS_Shape& Sh, Standard_IStream& S, const BRep_Builder& B, const Handle(Message_ProgressIndicator)& PR = NULL); //! Writes in . Standard_EXPORT static Standard_Boolean Write (const TopoDS_Shape& Sh, const Standard_CString File, const Handle(Message_ProgressIndicator)& PR = NULL); //! Reads a Shape from , returns it in . //! is used to build the shape. Standard_EXPORT static Standard_Boolean Read (TopoDS_Shape& Sh, const Standard_CString File, const BRep_Builder& B, const Handle(Message_ProgressIndicator)& PR = NULL); //! Evals real tolerance of edge . //! , , , , are //! correspondently 3d curve of edge, 2d curve on surface and //! rang of edge //! If calculated tolerance is more then current edge tolerance, edge is updated. //! Method returns actual tolerance of edge Standard_EXPORT static Standard_Real EvalAndUpdateTol(const TopoDS_Edge& theE, const Handle(Geom_Curve)& theC3d, const Handle(Geom2d_Curve) theC2d, const Handle(Geom_Surface)& theS, const Standard_Real theF, const Standard_Real theL); //! returns the cumul of the orientation of //! and thc containing wire in Standard_EXPORT static TopAbs_Orientation OriEdgeInFace(const TopoDS_Edge& theEdge, const TopoDS_Face& theFace); protected: private: friend class BRepTools_WireExplorer; friend class BRepTools_Modification; friend class BRepTools_Modifier; friend class BRepTools_TrsfModification; friend class BRepTools_NurbsConvertModification; friend class BRepTools_GTrsfModification; friend class BRepTools_Substitution; friend class BRepTools_Quilt; friend class BRepTools_ShapeSet; friend class BRepTools_ReShape; }; #endif // _BRepTools_HeaderFile