1 // Created on: 1996-02-13 2 // Created by: Yves FRICAUD 3 // Copyright (c) 1996-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 _BRepOffsetAPI_MakeThickSolid_HeaderFile 18 #define _BRepOffsetAPI_MakeThickSolid_HeaderFile 19 20 #include <Standard.hxx> 21 #include <Standard_DefineAlloc.hxx> 22 #include <Standard_Handle.hxx> 23 24 #include <BRepOffsetAPI_MakeOffsetShape.hxx> 25 #include <TopTools_ListOfShape.hxx> 26 #include <Standard_Real.hxx> 27 #include <BRepOffset_Mode.hxx> 28 #include <Standard_Boolean.hxx> 29 #include <GeomAbs_JoinType.hxx> 30 class TopoDS_Shape; 31 32 33 //! Describes functions to build hollowed solids. 34 //! A hollowed solid is built from an initial solid and a set of 35 //! faces on this solid, which are to be removed. The 36 //! remaining faces of the solid become the walls of the 37 //! hollowed solid, their thickness defined at the time of construction. 38 //! the solid is built from an initial 39 //! solid <S> and a set of faces {Fi} from <S>, 40 //! builds a solid composed by two shells closed by 41 //! the {Fi}. First shell <SS> is composed by all 42 //! the faces of <S> expected {Fi}. Second shell is 43 //! the offset shell of <SS>. 44 //! A MakeThickSolid object provides a framework for: 45 //! - defining the cross-section of a hollowed solid, 46 //! - implementing the construction algorithm, and 47 //! - consulting the result. 48 class BRepOffsetAPI_MakeThickSolid : public BRepOffsetAPI_MakeOffsetShape 49 { 50 public: 51 52 DEFINE_STANDARD_ALLOC 53 54 //! Constructor does nothing. 55 Standard_EXPORT BRepOffsetAPI_MakeThickSolid(); 56 57 //! Deprecated constructor. Please avoid usage of this constructor. 58 Standard_DEPRECATED("Deprecated constructor. Please use constructor without parameters and one of make methods.") 59 Standard_EXPORT BRepOffsetAPI_MakeThickSolid(const TopoDS_Shape& S, 60 const TopTools_ListOfShape& ClosingFaces, 61 const Standard_Real Offset, 62 const Standard_Real Tol, 63 const BRepOffset_Mode Mode = BRepOffset_Skin, 64 const Standard_Boolean Intersection = Standard_False, 65 const Standard_Boolean SelfInter = Standard_False, 66 const GeomAbs_JoinType Join = GeomAbs_Arc, 67 const Standard_Boolean RemoveIntEdges = Standard_False); 68 69 //! Constructs solid using simple algorithm. 70 //! According to its nature it is not possible to set list of the closing faces. 71 //! This algorithm does not support faces removing. It is caused by fact that 72 //! intersections are not computed during offset creation. 73 //! Non-closed shell or face is expected as input. 74 Standard_EXPORT void MakeThickSolidBySimple(const TopoDS_Shape& theS, 75 const Standard_Real theOffsetValue); 76 77 //! Constructs a hollowed solid from 78 //! the solid S by removing the set of faces ClosingFaces from S, where: 79 //! Offset defines the thickness of the walls. Its sign indicates 80 //! which side of the surface of the solid the hollowed shape is built on; 81 //! - Tol defines the tolerance criterion for coincidence in generated shapes; 82 //! - Mode defines the construction type of parallels applied to free 83 //! edges of shape S. Currently, only one construction type is 84 //! implemented, namely the one where the free edges do not generate 85 //! parallels; this corresponds to the default value BRepOffset_Skin; 86 //! Intersection specifies how the algorithm must work in order to 87 //! limit the parallels to two adjacent shapes: 88 //! - if Intersection is false (default value), the intersection 89 //! is calculated with the parallels to the two adjacent shapes, 90 //! - if Intersection is true, the intersection is calculated by 91 //! taking account of all parallels generated; this computation 92 //! method is more general as it avoids self-intersections 93 //! generated in the offset shape from features of small dimensions 94 //! on shape S, however this method has not been completely 95 //! implemented and therefore is not recommended for use; 96 //! - SelfInter tells the algorithm whether a computation to 97 //! eliminate self-intersections needs to be applied to the 98 //! resulting shape. However, as this functionality is not yet 99 //! implemented, you should use the default value (false); 100 //! - Join defines how to fill the holes that may appear between 101 //! parallels to the two adjacent faces. It may take values 102 //! GeomAbs_Arc or GeomAbs_Intersection: 103 //! - if Join is equal to GeomAbs_Arc, then pipes are generated 104 //! between two free edges of two adjacent parallels, 105 //! and spheres are generated on "images" of vertices; 106 //! it is the default value, 107 //! - if Join is equal to GeomAbs_Intersection, 108 //! then the parallels to the two adjacent faces are 109 //! enlarged and intersected, so that there are no free 110 //! edges on parallels to faces. 111 //! RemoveIntEdges flag defines whether to remove the INTERNAL edges 112 //! from the result or not. 113 //! Warnings 114 //! Since the algorithm of MakeThickSolid is based on 115 //! MakeOffsetShape algorithm, the warnings are the same as for 116 //! MakeOffsetShape. 117 Standard_EXPORT void MakeThickSolidByJoin(const TopoDS_Shape& S, 118 const TopTools_ListOfShape& ClosingFaces, 119 const Standard_Real Offset, 120 const Standard_Real Tol, 121 const BRepOffset_Mode Mode = BRepOffset_Skin, 122 const Standard_Boolean Intersection = Standard_False, 123 const Standard_Boolean SelfInter = Standard_False, 124 const GeomAbs_JoinType Join = GeomAbs_Arc, 125 const Standard_Boolean RemoveIntEdges = Standard_False); 126 127 // Does nothing. 128 Standard_EXPORT virtual void Build() Standard_OVERRIDE; 129 130 //! Returns the list of shapes modified from the shape 131 //! <S>. 132 Standard_EXPORT virtual const TopTools_ListOfShape& Modified (const TopoDS_Shape& S) Standard_OVERRIDE; 133 }; 134 135 #endif // _BRepOffsetAPI_MakeThickSolid_HeaderFile 136