b311480e |
1 | // Created on: 1995-01-04 |
2 | // Created by: Bruno DUMORTIER |
3 | // Copyright (c) 1995-1999 Matra Datavision |
973c2be1 |
4 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | // |
973c2be1 |
6 | // This file is part of Open CASCADE Technology software library. |
b311480e |
7 | // |
973c2be1 |
8 | // This library is free software; you can redistribute it and / or modify it |
9 | // under the terms of the GNU Lesser General Public 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. |
b311480e |
13 | // |
973c2be1 |
14 | // Alternatively, this file may be used under the terms of Open CASCADE |
15 | // commercial license or contractual agreement. |
7fd59977 |
16 | |
17 | #include <BRepLib_MakeSolid.ixx> |
18 | |
19 | #include <TopoDS.hxx> |
20 | #include <BRep_Builder.hxx> |
21 | #include <TopExp_Explorer.hxx> |
22 | #include <TopTools_MapOfShape.hxx> |
23 | #include <TopTools_MapIteratorOfMapOfShape.hxx> |
24 | #include <TopTools_ListIteratorOfListOfShape.hxx> |
25 | |
26 | //======================================================================= |
27 | //function : BRepLib_MakeSolid |
28 | //purpose : |
29 | //======================================================================= |
30 | |
31 | BRepLib_MakeSolid::BRepLib_MakeSolid() |
32 | { |
33 | BRep_Builder B; |
34 | B.MakeSolid(TopoDS::Solid(myShape)); |
35 | Done(); |
36 | } |
37 | |
38 | //======================================================================= |
39 | //function : BRepLib_MakeSolid |
40 | //purpose : |
41 | //======================================================================= |
42 | |
43 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_CompSolid& S) |
44 | { |
45 | BRep_Builder B; |
46 | B.MakeSolid(TopoDS::Solid(myShape)); |
47 | |
48 | TopExp_Explorer ex1, ex2; |
49 | TopTools_MapOfShape aMapOfFaces; |
50 | for (ex1.Init(S,TopAbs_SHELL); ex1.More(); ex1.Next()) { |
51 | for (ex2.Init(ex1.Current(),TopAbs_FACE); ex2.More(); ex2.Next()) { |
52 | if(!aMapOfFaces.Add(ex2.Current())) { |
53 | myDeletedFaces.Append(ex2.Current()); |
54 | aMapOfFaces.Remove(ex2.Current()); |
55 | } |
56 | } |
57 | } |
58 | |
59 | TopoDS_Shape aShell; |
60 | B.MakeShell(TopoDS::Shell(aShell)); |
61 | |
62 | TopTools_MapIteratorOfMapOfShape aFaceIter(aMapOfFaces); |
63 | for(; aFaceIter.More(); aFaceIter.Next()) { |
64 | B.Add(aShell, aFaceIter.Key()); |
65 | } |
66 | |
67 | B.Add(myShape,aShell); |
68 | |
69 | Done(); |
70 | } |
71 | |
72 | |
73 | //======================================================================= |
74 | //function : BRepLib_MakeSolid |
75 | //purpose : |
76 | //======================================================================= |
77 | |
78 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_Shell& S) |
79 | { |
80 | BRep_Builder B; |
81 | B.MakeSolid(TopoDS::Solid(myShape)); |
82 | B.Add(myShape,S); |
83 | Done(); |
84 | } |
85 | |
86 | |
87 | //======================================================================= |
88 | //function : BRepLib_MakeSolid |
89 | //purpose : |
90 | //======================================================================= |
91 | |
92 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_Shell& S1, const TopoDS_Shell& S2) |
93 | { |
94 | BRep_Builder B; |
95 | B.MakeSolid(TopoDS::Solid(myShape)); |
96 | B.Add(myShape,S1); |
97 | B.Add(myShape,S2); |
98 | Done(); |
99 | } |
100 | |
101 | |
102 | //======================================================================= |
103 | //function : BRepLib_MakeSolid |
104 | //purpose : |
105 | //======================================================================= |
106 | |
107 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_Shell& S1, const TopoDS_Shell& S2, const TopoDS_Shell& S3) |
108 | { |
109 | BRep_Builder B; |
110 | B.MakeSolid(TopoDS::Solid(myShape)); |
111 | B.Add(myShape,S1); |
112 | B.Add(myShape,S2); |
113 | B.Add(myShape,S3); |
114 | Done(); |
115 | } |
116 | |
117 | |
118 | //======================================================================= |
119 | //function : BRepLib_MakeSolid |
120 | //purpose : |
121 | //======================================================================= |
122 | |
123 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_Solid& So) |
124 | { |
125 | BRep_Builder B; |
126 | B.MakeSolid(TopoDS::Solid(myShape)); |
127 | TopExp_Explorer ex; |
128 | for (ex.Init(So,TopAbs_SHELL); ex.More(); ex.Next()) |
129 | B.Add(myShape,ex.Current()); |
130 | Done(); |
131 | } |
132 | |
133 | |
134 | //======================================================================= |
135 | //function : BRepLib_MakeSolid |
136 | //purpose : |
137 | //======================================================================= |
138 | |
139 | BRepLib_MakeSolid::BRepLib_MakeSolid(const TopoDS_Solid& So, const TopoDS_Shell& S) |
140 | { |
141 | BRep_Builder B; |
142 | B.MakeSolid(TopoDS::Solid(myShape)); |
143 | TopExp_Explorer ex; |
144 | for (ex.Init(So,TopAbs_SHELL); ex.More(); ex.Next()) |
145 | B.Add(myShape,ex.Current()); |
146 | B.Add(myShape,S); |
147 | Done(); |
148 | } |
149 | |
150 | |
151 | //======================================================================= |
152 | //function : Add |
153 | //purpose : |
154 | //======================================================================= |
155 | |
156 | void BRepLib_MakeSolid::Add(const TopoDS_Shell& S) |
157 | { |
158 | BRep_Builder B; |
159 | B.Add(myShape,S); |
160 | } |
161 | |
162 | |
163 | //======================================================================= |
164 | //function : Solid |
165 | //purpose : |
166 | //======================================================================= |
167 | |
168 | const TopoDS_Solid& BRepLib_MakeSolid::Solid()const |
169 | { |
170 | return TopoDS::Solid(Shape()); |
171 | } |
172 | |
173 | |
174 | |
175 | //======================================================================= |
176 | //function : operator |
177 | //purpose : |
178 | //======================================================================= |
179 | |
180 | BRepLib_MakeSolid::operator TopoDS_Solid() const |
181 | { |
182 | return TopoDS::Solid(Shape()); |
183 | } |
184 | |
185 | //======================================================================= |
186 | //function : FaceStatus |
187 | //purpose : |
188 | //======================================================================= |
189 | |
190 | BRepLib_ShapeModification BRepLib_MakeSolid::FaceStatus |
191 | (const TopoDS_Face& F) const |
192 | { |
193 | BRepLib_ShapeModification myStatus = BRepLib_Preserved; |
194 | TopTools_ListIteratorOfListOfShape anIter(myDeletedFaces); |
195 | |
196 | for(; anIter.More(); anIter.Next()) { |
197 | if(F.IsSame(anIter.Value())) { |
198 | myStatus = BRepLib_Deleted; |
199 | break; |
200 | } |
201 | } |
202 | |
203 | return myStatus; |
204 | } |
205 | |