0024023: Revamp the OCCT Handle -- ambiguity
[occt.git] / src / TNaming / TNaming_ShapesSet.cxx
CommitLineData
b311480e 1// Created on: 1997-01-24
2// Created by: Yves FRICAUD
3// Copyright (c) 1997-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 <TNaming_ShapesSet.ixx>
18#include <TNaming_IteratorOnShapesSet.hxx>
19#include <TNaming_Iterator.hxx>
20
21#include <TopoDS_Shape.hxx>
22#include <TopoDS_Iterator.hxx>
23#include <TopExp_Explorer.hxx>
24
7fd59977 25//#define MDTV_DEB_INT
26//=======================================================================
27//function : TNaming_ShapesSet
28//purpose :
29//=======================================================================
30
31TNaming_ShapesSet::TNaming_ShapesSet (const TopoDS_Shape& CS,
32 const TopAbs_ShapeEnum Type)
33{
34 if (CS.IsNull()) return;
0797d9d3 35#ifdef OCCT_DEBUG_INT
7fd59977 36 cout << "ShapeSet: CS TShape = " <<CS.TShape() << " Type = " << Type <<endl;
37#endif
38 if (Type == TopAbs_SHAPE) {
39 if (CS.ShapeType() == TopAbs_SOLID ||
40 CS.ShapeType() == TopAbs_FACE ||
41 CS.ShapeType() == TopAbs_EDGE ||
42 CS.ShapeType() == TopAbs_VERTEX ) {
43 Add(CS);
44 }
45 else {
46 for (TopoDS_Iterator it(CS) ; it.More(); it.Next()) {
47 Add(it.Value());
48 }
49 }
50 }
51 else {
52
7fd59977 53// corrected by vro 13.09.00:
54 if (Type > CS.ShapeType()) {
55 for (TopExp_Explorer exp(CS,Type) ; exp.More(); exp.Next()) {
56 Add(exp.Current());
0797d9d3 57#ifdef OCCT_DEBUG_INT
7fd59977 58 cout << "ShapeSet: sub-shape TShape = " <<exp.Current().TShape() <<endl;
59#endif
60 }
61 } else {
62// for (TopoDS_Iterator it(CS) ; it.More(); it.Next()) {
63// Add(it.Value());
64// }
65 Add(CS);
66 }
67// end of correction by vro.
7fd59977 68 }
69}
70
71
72//=======================================================================
73//function : Add
74//purpose :
75//=======================================================================
76
77void TNaming_ShapesSet::Add(const TNaming_ShapesSet& Shapes)
78{
79 TNaming_IteratorOnShapesSet it(Shapes);
80 for (; it.More(); it.Next()) {
81 myMap.Add(it.Value());
82 }
83}
84
85
86//=======================================================================
87//function : Filter
88//purpose :
89//=======================================================================
90
91void TNaming_ShapesSet::Filter(const TNaming_ShapesSet& Shapes)
92{
93
94 TNaming_ShapesSet ToRemove;
95 TNaming_IteratorOnShapesSet it(*this);
96 for (; it.More(); it.Next()) {
97 const TopoDS_Shape& S = it.Value();
98 if (!Shapes.Contains(S)) {
99 ToRemove.Add(S);
100 }
101 }
102 Remove(ToRemove);
103}
104
105//=======================================================================
106//function : Remove
107//purpose :
108//=======================================================================
109
110void TNaming_ShapesSet::Remove(const TNaming_ShapesSet& Shapes)
111{
112 TNaming_IteratorOnShapesSet it(Shapes);
113 for (; it.More(); it.Next()) {
114 myMap.Remove(it.Value());
115 }
116}
117
118