0024428: Implementation of LGPL license
[occt.git] / src / BOPTools / BOPTools.cxx
1 // Created by: Peter KURNEV
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and / or modify it
7 // under the terms of the GNU Lesser General Public version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #include <BOPTools.ixx>
16 #include <TopExp_Explorer.hxx>
17 #include <BOPCol_ListOfShape.hxx>
18
19 //=======================================================================
20 //function : MapShapes
21 //purpose  : 
22 //=======================================================================
23   void BOPTools::MapShapes(const TopoDS_Shape& S,
24                            BOPCol_MapOfShape& M)
25 {
26   M.Add(S);
27   TopoDS_Iterator It(S);
28   while (It.More()) {
29     MapShapes(It.Value(),M);
30     It.Next();
31   }
32 }
33
34
35 //=======================================================================
36 //function : MapShapes
37 //purpose  : 
38 //=======================================================================
39   void BOPTools::MapShapes(const TopoDS_Shape& S,
40                            BOPCol_IndexedMapOfShape& M)
41 {
42   M.Add(S);
43   TopoDS_Iterator It(S);
44   while (It.More()) {
45     MapShapes(It.Value(),M);
46     It.Next();
47   }
48 }
49
50 //=======================================================================
51 //function : MapShapes
52 //purpose  : 
53 //=======================================================================
54   void BOPTools::MapShapes(const TopoDS_Shape& S,
55                            const TopAbs_ShapeEnum T,
56                            BOPCol_IndexedMapOfShape& M)
57 {
58   TopExp_Explorer Ex(S,T);
59   while (Ex.More()) {
60     M.Add(Ex.Current());
61     Ex.Next();
62   }
63 }
64
65
66
67 //=======================================================================
68 //function : MapShapesAndAncestors
69 //purpose  : 
70 //=======================================================================
71   void BOPTools::MapShapesAndAncestors(const TopoDS_Shape& S, 
72                                        const TopAbs_ShapeEnum TS, 
73                                        const TopAbs_ShapeEnum TA, 
74                                        BOPCol_IndexedDataMapOfShapeListOfShape& M)
75 {
76   BOPCol_ListOfShape empty;
77   
78   // visit ancestors
79   TopExp_Explorer exa(S,TA);
80   while (exa.More()) {
81     // visit shapes
82     const TopoDS_Shape& anc = exa.Current();
83     TopExp_Explorer exs(anc,TS);
84     while (exs.More()) {
85       Standard_Integer index = M.FindIndex(exs.Current());
86       if (index == 0) index = M.Add(exs.Current(),empty);
87       M(index).Append(anc);
88       exs.Next();
89     }
90     exa.Next();
91   }
92   
93   // visit shapes not under ancestors
94   TopExp_Explorer ex(S,TS,TA);
95   while (ex.More()) {
96     Standard_Integer index = M.FindIndex(ex.Current());
97     if (index == 0) index = M.Add(ex.Current(),empty);
98     ex.Next();
99   }
100 }