0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / BRepOffsetAPI / BRepOffsetAPI_MakeOffsetShape.cxx
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 //  Modified by skv - Tue Mar 15 16:20:43 2005
18 // Add methods for supporting history.
19
20 #include <BRepOffset_MakeOffset.hxx>
21 #include <BRepOffsetAPI_MakeOffsetShape.hxx>
22 #include <Standard_ConstructionError.hxx>
23 #include <TopoDS_Shape.hxx>
24 #include <TopTools_ListIteratorOfListOfShape.hxx>
25
26 //=======================================================================
27 //function : BRepOffsetAPI_MakeOffsetShape
28 //purpose  : 
29 //=======================================================================
30 BRepOffsetAPI_MakeOffsetShape::BRepOffsetAPI_MakeOffsetShape()
31 {
32 }
33
34 //=======================================================================
35 //function : BRepOffsetAPI_MakeOffsetShape
36 //purpose  : 
37 //=======================================================================
38
39 BRepOffsetAPI_MakeOffsetShape::BRepOffsetAPI_MakeOffsetShape
40 (const TopoDS_Shape&    S, 
41  const Standard_Real    Offset, 
42  const Standard_Real    Tol, 
43  const BRepOffset_Mode  Mode, 
44  const Standard_Boolean Intersection,
45  const Standard_Boolean SelfInter,
46  const GeomAbs_JoinType Join,
47  const Standard_Boolean RemoveIntEdges)
48 {
49   myOffsetShape.Initialize (S,Offset,Tol,Mode,Intersection,SelfInter,
50                             Join, Standard_False, RemoveIntEdges);
51   Build();
52 }
53
54
55 //=======================================================================
56 //function :MakeOffset
57 //purpose  : 
58 //=======================================================================
59
60 const BRepOffset_MakeOffset& BRepOffsetAPI_MakeOffsetShape::MakeOffset() const 
61 {
62   return myOffsetShape;
63 }
64
65 //=======================================================================
66 //function : Build
67 //purpose  : 
68 //=======================================================================
69
70 void BRepOffsetAPI_MakeOffsetShape::Build()
71 {
72   if (!IsDone()) {
73     myOffsetShape.MakeOffsetShape();
74     if (!myOffsetShape.IsDone()) return;
75     myShape  = myOffsetShape.Shape();
76     Done();
77   }
78 }
79
80
81 //=======================================================================
82 //function : Generated
83 //purpose  : 
84 //=======================================================================
85
86 const TopTools_ListOfShape& BRepOffsetAPI_MakeOffsetShape::Generated (const TopoDS_Shape& S) 
87
88 {  
89   myGenerated.Clear();
90   if (!myOffsetShape.ClosingFaces().Contains(S)) {
91     myOffsetShape.OffsetFacesFromShapes ().LastImage (S, myGenerated);
92    
93     if (!myOffsetShape.ClosingFaces().IsEmpty()) {
94       // Reverse generated shapes in case of small solids.
95       // Useful only for faces without influence on others.
96       TopTools_ListIteratorOfListOfShape it(myGenerated);
97       for (; it.More(); it.Next())
98         it.Value().Reverse();
99     }
100   }
101   return myGenerated;
102 }
103
104
105 //  Modified by skv - Tue Mar 15 16:20:43 2005 Begin
106
107 //=======================================================================
108 //function : GeneratedEdge
109 //purpose  : 
110 //=======================================================================
111
112 const TopTools_ListOfShape& BRepOffsetAPI_MakeOffsetShape::GeneratedEdge (const TopoDS_Shape& S) 
113
114 {  
115   myGenerated.Clear();
116   myOffsetShape.OffsetEdgesFromShapes ().LastImage (S, myGenerated);
117
118   if (!myGenerated.IsEmpty()) {
119     if (S.IsSame(myGenerated.First()))
120       myGenerated.RemoveFirst();
121   }
122
123   return myGenerated;
124 }
125
126
127 //=======================================================================
128 //function : GetJoinType
129 //purpose  : Query offset join type.
130 //=======================================================================
131
132 GeomAbs_JoinType BRepOffsetAPI_MakeOffsetShape::GetJoinType() const
133 {
134   return myOffsetShape.GetJoinType();
135 }
136
137 //  Modified by skv - Tue Mar 15 16:20:43 2005 End