// Created on: 1997-01-17 // Created by: Didier PIFFAULT // Copyright (c) 1997-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 _BRepAlgo_HeaderFile #define _BRepAlgo_HeaderFile #include #include #include #include #include #include #include class TopoDS_Wire; class TopoDS_Edge; class TopoDS_Face; class TopoDS_Shape; class BRepAlgo_BooleanOperation; class BRepAlgo_Fuse; class BRepAlgo_Cut; class BRepAlgo_Common; class BRepAlgo_Section; class BRepAlgo_Loop; class BRepAlgo_Tool; class BRepAlgo_Image; class BRepAlgo_AsDes; class BRepAlgo_FaceRestrictor; class BRepAlgo_NormalProjection; //! The BRepAlgo package provides a full range of //! services to perform Old Boolean Operations in Open CASCADE. //! Attention: //! The New Boolean Operation has replaced the Old //! Boolean Operations algorithm in the BrepAlgoAPI //! package in Open CASCADE. class BRepAlgo { public: DEFINE_STANDARD_ALLOC //! this method makes a wire whose edges are C1 from //! a Wire whose edges could be G1. It removes a vertex //! between G1 edges. //! Option can be G1 or C1. Standard_EXPORT static TopoDS_Wire ConcatenateWire (const TopoDS_Wire& Wire, const GeomAbs_Shape Option, const Standard_Real AngularTolerance = 1.0e-4); //! this method makes an edge from a wire. //! Junction points between edges of wire may be sharp, //! resulting curve of the resulting edge may be C0. Standard_EXPORT static TopoDS_Edge ConcatenateWireC0 (const TopoDS_Wire& Wire); //! Method of wire conversion, calls BRepAlgo_Approx internally. //! @param theWire //! Input Wire object. //! @param theAngleTolerance //! Angle (in radians) defining the continuity of the wire: if two vectors //! differ by less than this angle, the result will be smooth (zero angle of //! tangent lines between curve elements). //! @return //! The new TopoDS_Wire object consisting of edges each representing an arc //! of circle or a linear segment. The accuracy of conversion is defined //! as the maximal tolerance of edges in theWire. static Standard_EXPORT TopoDS_Wire ConvertWire (const TopoDS_Wire& theWire, const Standard_Real theAngleTolerance, const TopoDS_Face& theFace); //! Method of face conversion. The API corresponds to the method ConvertWire. //! This is a shortcut for calling ConvertWire() for each wire in theFace. static Standard_EXPORT TopoDS_Face ConvertFace (const TopoDS_Face& theFace, const Standard_Real theAngleTolerance); //! Checks if the shape is "correct". If not, returns //! , else returns . Standard_EXPORT static Standard_Boolean IsValid (const TopoDS_Shape& S); //! Checks if the Generated and Modified Faces from //! the shapes in the shape are //! "correct". The args may be empty, then all faces //! will be checked. //! If is True, only closed shape are valid. //! If is False the geometry of new //! vertices and edges are not verified and the //! auto-intersection of new wires are not searched. Standard_EXPORT static Standard_Boolean IsValid (const TopTools_ListOfShape& theArgs, const TopoDS_Shape& theResult, const Standard_Boolean closedSolid = Standard_False, const Standard_Boolean GeomCtrl = Standard_True); //! Checks if the shape is "correct". If not, returns //! , else returns . //! This method differs from the previous one in the //! fact that no geometric contols (intersection of //! wires, pcurve validity) are performed. Standard_EXPORT static Standard_Boolean IsTopologicallyValid (const TopoDS_Shape& S); protected: private: friend class BRepAlgo_BooleanOperation; friend class BRepAlgo_Fuse; friend class BRepAlgo_Cut; friend class BRepAlgo_Common; friend class BRepAlgo_Section; friend class BRepAlgo_Loop; friend class BRepAlgo_Tool; friend class BRepAlgo_Image; friend class BRepAlgo_AsDes; friend class BRepAlgo_FaceRestrictor; friend class BRepAlgo_NormalProjection; }; #endif // _BRepAlgo_HeaderFile