b311480e |
1 | // Created on: 1995-06-22 |
2 | // Created by: Flore Lantheaume |
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 | // |
d5f74e42 |
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 |
973c2be1 |
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 <BRepFilletAPI_MakeChamfer.ixx> |
18 | #include <TopOpeBRepDS_HDataStructure.hxx> |
19 | #include <TopTools_ListIteratorOfListOfShape.hxx> |
20 | #include <ChFiDS_Spine.hxx> |
21 | #include <TopExp_Explorer.hxx> |
22 | |
23 | |
24 | |
25 | //======================================================================= |
26 | //function : BRepFilletAPI_MakeChamfer |
27 | //purpose : |
28 | //======================================================================= |
29 | BRepFilletAPI_MakeChamfer::BRepFilletAPI_MakeChamfer(const TopoDS_Shape &S):myBuilder(S) |
30 | { |
31 | } |
32 | |
33 | |
34 | |
35 | //======================================================================= |
36 | //function : Add |
37 | //purpose : |
38 | //======================================================================= |
39 | |
40 | void BRepFilletAPI_MakeChamfer::Add(const TopoDS_Edge &E ) |
41 | { |
42 | myBuilder.Add(E); |
43 | } |
44 | |
45 | |
46 | |
47 | //======================================================================= |
48 | //function : Add |
49 | //purpose : |
50 | //======================================================================= |
51 | |
52 | void BRepFilletAPI_MakeChamfer::Add(const Standard_Real Dis, |
53 | const TopoDS_Edge &E, |
54 | const TopoDS_Face &F) |
55 | { |
56 | myBuilder.Add(Dis, E, F); |
57 | } |
58 | |
59 | |
60 | //======================================================================= |
61 | //function : SetDist |
62 | //purpose : |
63 | //======================================================================= |
64 | |
65 | void BRepFilletAPI_MakeChamfer::SetDist(const Standard_Real Dis, |
66 | const Standard_Integer IC, |
67 | const TopoDS_Face &F) |
68 | { |
69 | myBuilder.SetDist(Dis, IC, F); |
70 | } |
71 | |
72 | //======================================================================= |
73 | //function : GetDist |
74 | //purpose : |
75 | //================================================================ |
76 | |
77 | void BRepFilletAPI_MakeChamfer::GetDist(const Standard_Integer IC, |
78 | Standard_Real& Dis) const |
79 | { |
80 | myBuilder.GetDist(IC, Dis); |
81 | |
82 | } |
83 | |
84 | //======================================================================= |
85 | //function : Add |
86 | //purpose : |
87 | //======================================================================= |
88 | |
89 | void BRepFilletAPI_MakeChamfer::Add(const Standard_Real Dis1, |
90 | const Standard_Real Dis2, |
91 | const TopoDS_Edge &E, |
92 | const TopoDS_Face &F) |
93 | { |
94 | myBuilder.Add(Dis1,Dis2,E,F); |
95 | } |
96 | |
97 | |
98 | //======================================================================= |
99 | //function : SetDists |
100 | //purpose : |
101 | //======================================================================= |
102 | |
103 | void BRepFilletAPI_MakeChamfer::SetDists(const Standard_Real Dis1, |
104 | const Standard_Real Dis2, |
105 | const Standard_Integer IC, |
106 | const TopoDS_Face &F) |
107 | { |
108 | myBuilder.SetDists(Dis1,Dis2,IC,F); |
109 | } |
110 | |
111 | //======================================================================= |
112 | //function : Dists |
113 | //purpose : |
114 | //================================================================ |
115 | |
116 | void BRepFilletAPI_MakeChamfer::Dists(const Standard_Integer IC, |
117 | Standard_Real& Dis1, |
118 | Standard_Real& Dis2) const |
119 | { |
120 | Standard_Real temp1, temp2; |
121 | myBuilder.Dists(IC,temp1,temp2); |
122 | Dis1 = temp1; |
123 | Dis2 = temp2; |
124 | |
125 | } |
126 | |
127 | |
128 | //======================================================================= |
129 | //function : Add |
130 | //purpose : |
131 | //======================================================================= |
132 | |
133 | void BRepFilletAPI_MakeChamfer::AddDA(const Standard_Real Dis, |
134 | const Standard_Real Angle, |
135 | const TopoDS_Edge &E, |
136 | const TopoDS_Face &F) |
137 | { |
138 | myBuilder.AddDA(Dis, Angle, E, F); |
139 | } |
140 | |
141 | //======================================================================= |
142 | //function : SetDist |
143 | //purpose : |
144 | //======================================================================= |
145 | |
146 | void BRepFilletAPI_MakeChamfer::SetDistAngle(const Standard_Real Dis, |
147 | const Standard_Real Angle, |
148 | const Standard_Integer IC, |
149 | const TopoDS_Face &F) |
150 | { |
151 | myBuilder.SetDistAngle(Dis, Angle, IC, F); |
152 | } |
153 | |
154 | //======================================================================= |
155 | //function : GetDistAngle |
156 | //purpose : |
157 | //================================================================ |
158 | |
159 | void BRepFilletAPI_MakeChamfer::GetDistAngle(const Standard_Integer IC, |
160 | Standard_Real& Dis, |
161 | Standard_Real& Angle, |
162 | Standard_Boolean& DisOnFace1) const |
163 | { |
164 | myBuilder.GetDistAngle(IC, Dis, Angle, DisOnFace1); |
165 | |
166 | } |
167 | |
168 | //======================================================================= |
169 | //function : IsSymetric |
170 | //purpose : |
171 | //=============================================================== |
172 | |
173 | Standard_Boolean BRepFilletAPI_MakeChamfer::IsSymetric(const Standard_Integer IC) const |
174 | { |
175 | ChFiDS_ChamfMethod ChamfMeth = myBuilder.IsChamfer(IC); |
176 | Standard_Boolean ret = Standard_False; |
177 | |
178 | if (ChamfMeth == ChFiDS_Sym) ret = Standard_True; |
179 | |
180 | return ret; |
181 | } |
182 | |
183 | |
184 | //======================================================================= |
185 | //function : IsTwoDistances |
186 | //purpose : |
187 | //=============================================================== |
188 | |
189 | Standard_Boolean BRepFilletAPI_MakeChamfer::IsTwoDistances(const Standard_Integer IC) const |
190 | { |
191 | ChFiDS_ChamfMethod ChamfMeth = myBuilder.IsChamfer(IC); |
192 | Standard_Boolean ret = Standard_False; |
193 | |
194 | if (ChamfMeth == ChFiDS_TwoDist) ret = Standard_True; |
195 | |
196 | return ret; |
197 | } |
198 | |
199 | |
200 | |
201 | //======================================================================= |
202 | //function : IsDistanceAngle |
203 | //purpose : |
204 | //=============================================================== |
205 | |
206 | Standard_Boolean BRepFilletAPI_MakeChamfer::IsDistanceAngle(const Standard_Integer IC) const |
207 | { |
208 | ChFiDS_ChamfMethod ChamfMeth = myBuilder.IsChamfer(IC); |
209 | Standard_Boolean ret = Standard_False; |
210 | |
211 | if (ChamfMeth == ChFiDS_DistAngle) ret = Standard_True; |
212 | |
213 | return ret; |
214 | } |
215 | |
216 | |
217 | |
218 | //======================================================================= |
219 | //function : ResetContour |
220 | //purpose : |
221 | //=============================================================== |
222 | |
223 | void BRepFilletAPI_MakeChamfer::ResetContour(const Standard_Integer IC) |
224 | { |
225 | myBuilder.ResetContour(IC); |
226 | } |
227 | |
228 | |
229 | //======================================================================= |
230 | //function : NbContours |
231 | //purpose : |
232 | //======================================================================= |
233 | |
234 | Standard_Integer BRepFilletAPI_MakeChamfer::NbContours()const |
235 | { |
236 | return myBuilder.NbElements(); |
237 | } |
238 | |
239 | |
240 | |
241 | //======================================================================= |
242 | //function : Contour |
243 | //purpose : |
244 | //======================================================================= |
245 | |
246 | Standard_Integer BRepFilletAPI_MakeChamfer::Contour(const TopoDS_Edge &E)const |
247 | { |
248 | return myBuilder.Contains(E); |
249 | } |
250 | |
251 | |
252 | |
253 | //======================================================================= |
254 | //function : NbEdges |
255 | //purpose : |
256 | //======================================================================= |
257 | |
258 | Standard_Integer BRepFilletAPI_MakeChamfer::NbEdges(const Standard_Integer I)const |
259 | |
260 | { |
261 | const Handle(ChFiDS_Spine)& Spine = myBuilder.Value(I); |
262 | return (Spine->NbEdges()); |
263 | } |
264 | |
265 | |
266 | //======================================================================= |
267 | //function : Edge |
268 | //purpose : |
269 | //======================================================================= |
270 | |
271 | const TopoDS_Edge& BRepFilletAPI_MakeChamfer::Edge(const Standard_Integer I, |
272 | const Standard_Integer J)const |
273 | { |
274 | const Handle(ChFiDS_Spine)& Spine = myBuilder.Value(I); |
275 | const TopoDS_Edge& E = Spine->Edges(J); |
276 | return E; |
277 | } |
278 | |
279 | //======================================================================= |
280 | //function : Remove |
281 | //purpose : |
282 | //======================================================================= |
283 | |
284 | void BRepFilletAPI_MakeChamfer::Remove(const TopoDS_Edge& E) |
285 | { |
286 | myBuilder.Remove(E); |
287 | } |
288 | |
289 | //======================================================================= |
290 | //function : Length |
291 | //purpose : |
292 | //======================================================================= |
293 | |
294 | Standard_Real BRepFilletAPI_MakeChamfer::Length(const Standard_Integer IC)const |
295 | { |
296 | return myBuilder.Length(IC); |
297 | } |
298 | |
299 | //======================================================================= |
300 | //function : FirstVertex |
301 | //purpose : |
302 | //======================================================================= |
303 | |
304 | TopoDS_Vertex BRepFilletAPI_MakeChamfer::FirstVertex(const Standard_Integer IC)const |
305 | { |
306 | return myBuilder.FirstVertex(IC); |
307 | } |
308 | |
309 | |
310 | //======================================================================= |
311 | //function : LastVertex |
312 | //purpose : |
313 | //======================================================================= |
314 | |
315 | TopoDS_Vertex BRepFilletAPI_MakeChamfer::LastVertex(const Standard_Integer IC)const |
316 | { |
317 | return myBuilder.LastVertex(IC); |
318 | } |
319 | |
320 | |
321 | //======================================================================= |
322 | //function : Abscissa |
323 | //purpose : |
324 | //======================================================================= |
325 | |
326 | Standard_Real BRepFilletAPI_MakeChamfer::Abscissa(const Standard_Integer IC, |
327 | const TopoDS_Vertex& V)const |
328 | { |
329 | return myBuilder.Abscissa(IC,V); |
330 | } |
331 | |
332 | |
333 | //======================================================================= |
334 | //function : RelativeAbscissa |
335 | //purpose : |
336 | //======================================================================= |
337 | |
338 | Standard_Real BRepFilletAPI_MakeChamfer::RelativeAbscissa(const Standard_Integer IC, |
339 | const TopoDS_Vertex& V)const |
340 | { |
341 | return myBuilder.RelativeAbscissa(IC,V); |
342 | } |
343 | |
344 | //======================================================================= |
345 | //function : ClosedAndTangent |
346 | //purpose : |
347 | //======================================================================= |
348 | |
349 | Standard_Boolean BRepFilletAPI_MakeChamfer::ClosedAndTangent |
350 | (const Standard_Integer IC)const |
351 | { |
352 | return myBuilder.ClosedAndTangent(IC); |
353 | } |
354 | |
355 | |
356 | //======================================================================= |
357 | //function : Closed |
358 | //purpose : |
359 | //======================================================================= |
360 | |
361 | Standard_Boolean BRepFilletAPI_MakeChamfer::Closed |
362 | (const Standard_Integer IC)const |
363 | { |
364 | return myBuilder.Closed(IC); |
365 | } |
366 | |
367 | //======================================================================= |
368 | //function : Builder |
369 | //purpose : |
370 | //======================================================================= |
371 | |
372 | Handle(TopOpeBRepBuild_HBuilder) BRepFilletAPI_MakeChamfer::Builder()const |
373 | { |
374 | return myBuilder.Builder(); |
375 | } |
376 | |
377 | //======================================================================= |
378 | //function : Build |
379 | //purpose : |
380 | //======================================================================= |
381 | |
382 | void BRepFilletAPI_MakeChamfer::Build() |
383 | { |
384 | myBuilder.Compute(); |
385 | if (myBuilder.IsDone()){ |
386 | Done(); |
387 | myShape = myBuilder.Shape(); |
388 | |
389 | //creation of the Map. |
390 | TopExp_Explorer ex; |
391 | for (ex.Init(myShape, TopAbs_FACE); ex.More(); ex.Next()) { |
392 | myMap.Add(ex.Current()); |
393 | } |
394 | } |
395 | } |
396 | |
397 | //======================================================================= |
398 | //function : Reset |
399 | //purpose : |
400 | //======================================================================= |
401 | |
402 | void BRepFilletAPI_MakeChamfer::Reset() |
403 | { |
404 | NotDone(); |
405 | myBuilder.Reset(); |
406 | myMap.Clear(); |
407 | } |
408 | |
409 | //======================================================================= |
410 | //function : Generated |
411 | //purpose : |
412 | //======================================================================= |
413 | |
414 | const TopTools_ListOfShape& BRepFilletAPI_MakeChamfer::Generated |
415 | (const TopoDS_Shape& EorV) |
416 | { |
417 | return myBuilder.Generated(EorV); |
418 | } |
419 | |
420 | //======================================================================= |
421 | //function : Modified |
422 | //purpose : |
423 | //======================================================================= |
424 | |
425 | const TopTools_ListOfShape& BRepFilletAPI_MakeChamfer::Modified |
426 | (const TopoDS_Shape& F) |
427 | { |
428 | myGenerated.Clear(); |
429 | |
430 | if (myBuilder.Builder()->IsSplit(F, TopAbs_OUT)) { |
431 | TopTools_ListIteratorOfListOfShape It(myBuilder.Builder()->Splits(F, TopAbs_OUT)); |
432 | for(;It.More();It.Next()) { |
433 | myGenerated.Append(It.Value()); |
434 | } |
435 | } |
436 | if (myBuilder.Builder()->IsSplit(F, TopAbs_IN)) { |
437 | TopTools_ListIteratorOfListOfShape It(myBuilder.Builder()->Splits(F, TopAbs_IN)); |
438 | for(;It.More();It.Next()) { |
439 | myGenerated.Append(It.Value()); |
440 | } |
441 | } |
442 | if (myBuilder.Builder()->IsSplit(F, TopAbs_ON)) { |
443 | TopTools_ListIteratorOfListOfShape It(myBuilder.Builder()->Splits(F, TopAbs_ON)); |
444 | for(;It.More();It.Next()) { |
445 | myGenerated.Append(It.Value()); |
446 | } |
447 | } |
448 | return myGenerated; |
449 | } |
450 | |
451 | //======================================================================= |
452 | //function : IsDeleted |
453 | //purpose : |
454 | //======================================================================= |
455 | |
456 | Standard_Boolean BRepFilletAPI_MakeChamfer::IsDeleted(const TopoDS_Shape& F) |
457 | { |
458 | if (myMap.Contains(F) || |
459 | myBuilder.Builder()->IsSplit (F, TopAbs_OUT) || |
460 | myBuilder.Builder()->IsSplit (F, TopAbs_IN) || |
461 | myBuilder.Builder()->IsSplit (F, TopAbs_ON)) |
462 | return Standard_False; |
463 | |
464 | return Standard_True; |
465 | } |
466 | |
467 | //======================================================================= |
468 | //function : Simulate |
469 | //purpose : |
470 | //======================================================================= |
471 | |
472 | void BRepFilletAPI_MakeChamfer::Simulate(const Standard_Integer IC) |
473 | { |
474 | myBuilder.Simulate(IC); |
475 | } |
476 | |
477 | |
478 | //======================================================================= |
479 | //function : NbSurf |
480 | //purpose : |
481 | //======================================================================= |
482 | |
483 | Standard_Integer BRepFilletAPI_MakeChamfer::NbSurf(const Standard_Integer IC)const |
484 | { |
485 | return myBuilder.NbSurf(IC); |
486 | } |
487 | |
488 | |
489 | //======================================================================= |
490 | //function : Sect |
491 | //purpose : |
492 | //======================================================================= |
493 | |
494 | Handle(ChFiDS_SecHArray1) BRepFilletAPI_MakeChamfer::Sect(const Standard_Integer IC, |
495 | const Standard_Integer IS)const |
496 | { |
497 | return myBuilder.Sect(IC, IS); |
498 | } |