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