0022922: Clean up warnings on uninitialized / unused variables
[occt.git] / src / TopOpeBRepTool / TopOpeBRepTool_HBoxTool.cxx
CommitLineData
7fd59977 1// File: TopOpeBRepTool_HBoxTool.cxx
2// Created: Thu Jul 8 20:08:03 1993
3// Author: Jean Yves LEBEY
4// <jyl@zerox>
5
6#include <TopOpeBRepTool_HBoxTool.ixx>
7
8#include <TopAbs.hxx>
9#include <TopExp_Explorer.hxx>
10#include <BRep_Tool.hxx>
11#include <TopoDS.hxx>
12#include <gp_Pnt.hxx>
13#include <BRepBndLib.hxx>
14#include <Standard_ProgramError.hxx>
15#include <TopOpeBRepTool_box.hxx>
16#include <TopOpeBRepTool_define.hxx>
17#include <Precision.hxx>
18
19#ifdef DEB
20#define TBOX TopOpeBRepTool_GettraceBOX()
21#endif
22
23//=======================================================================
24//function : TopOpeBRepTool_HBoxTool
25//purpose :
26//=======================================================================
27
28TopOpeBRepTool_HBoxTool::TopOpeBRepTool_HBoxTool()
29{
30}
31
32//=======================================================================
33//function : Clear
34//purpose :
35//=======================================================================
36void TopOpeBRepTool_HBoxTool::Clear()
37{
38 myIMS.Clear();
39}
40
41//=======================================================================
42//function : ComputeBoxes
43//purpose :
44//=======================================================================
45void TopOpeBRepTool_HBoxTool::AddBoxes(const TopoDS_Shape& S,const TopAbs_ShapeEnum TS,const TopAbs_ShapeEnum TA)
46{
47 TopExp_Explorer ex;
48 for (ex.Init(S,TS,TA);ex.More();ex.Next()) {
49// for (TopExp_Explorer ex(S,TS,TA);ex.More();ex.Next()) {
50 const TopoDS_Shape& ss = ex.Current();
51 AddBox(ss);
52 }
53}
54
55//=======================================================================
56//function : AddBox
57//purpose :
58//=======================================================================
59void TopOpeBRepTool_HBoxTool::AddBox(const TopoDS_Shape& S)
60{
61#ifdef DEB
62 TopAbs_ShapeEnum t =
63#endif
64 S.ShapeType();
65 Standard_Boolean hasb = HasBox(S);
66 if (hasb) return;
67
68 Bnd_Box B;
69 ComputeBox(S,B);
70 myIMS.Add(S,B);
71#ifdef DEB
72 if (TBOX) {
73 DumpB(Box(S));cout<<"; # HBT::AddBox "<<Index(S)<<" : ";TopAbs::Print(t,cout);cout<<"\n";cout<<endl;
74 }
75#endif
76}
77
78//=======================================================================
79//function : ComputeBox
80//purpose :
81//=======================================================================
82void TopOpeBRepTool_HBoxTool::ComputeBox(const TopoDS_Shape& S,Bnd_Box& B)
83{
84 TopAbs_ShapeEnum t = S.ShapeType();
85 if ( t == TopAbs_FACE ) BRepBndLib::Add(S,B);
86 else if ( t == TopAbs_EDGE ) BRepBndLib::Add(S,B);
87 //modified by NIZHNY-MZV Tue Sep 21 14:04:33 1999
88 else if ( t == TopAbs_SOLID) BRepBndLib::Add(S,B);
89 else if ( t == TopAbs_COMPOUND) BRepBndLib::Add(S,B);
90 //modified by NIZHNY-MZV Wed Apr 5 10:05:53 2000
91 else if ( t == TopAbs_VERTEX) BRepBndLib::Add(S,B);
92 else {
93 Standard_ProgramError::Raise("HBT::ComputeBox : invalid type");
94 }
95}
96
97//=======================================================================
98//function : ComputeBoxOnVertices
99//purpose :
100//=======================================================================
101void TopOpeBRepTool_HBoxTool::ComputeBoxOnVertices(const TopoDS_Shape& S,Bnd_Box& B)
102{
103 TopExp_Explorer ex(S,TopAbs_VERTEX);
104 if (!ex.More()) {
105 B.Update(-1.e5,-1.e5,-1.e5,1.e5,1.e5,1.e5);
106 return;
107 }
108 Standard_Real tol = Precision::Confusion();
109 for (; ex.More(); ex.Next() ) {
110 Standard_Real x,y,z;
111 BRep_Tool::Pnt(TopoDS::Vertex(ex.Current())).Coord(x,y,z);
112 B.Update(x,y,z);
113 tol = Max(tol,BRep_Tool::Tolerance(TopoDS::Vertex(ex.Current())));
114 }
115 B.Enlarge(tol);
116}
117
118//=======================================================================
119//function : Box
120//purpose :
121//=======================================================================
122const Bnd_Box& TopOpeBRepTool_HBoxTool::Box(const TopoDS_Shape& S)
123{
124 Standard_Boolean hb = HasBox(S);
125 if (!hb) {
126 Standard_ProgramError::Raise("HBT::Box1");
127 }
128
7fd59977 129 const Bnd_Box& B = myIMS.FindFromKey(S);
130 return B;
131}
132
133//=======================================================================
134//function : Box
135//purpose :
136//=======================================================================
137const Bnd_Box& TopOpeBRepTool_HBoxTool::Box(const Standard_Integer I) const
138{
139 Standard_Integer iu = Extent();
140 Standard_Integer hb = (I >= 1 && I <= iu);
141 if (!hb) {
142 Standard_ProgramError::Raise("HBT::Box2");
143 }
144 const Bnd_Box& B = myIMS.FindFromIndex(I);
145 return B;
146}
147
148//=======================================================================
149//function : HasBox
150//purpose :
151//=======================================================================
152Standard_Boolean TopOpeBRepTool_HBoxTool::HasBox(const TopoDS_Shape& S) const
153{
154 Standard_Boolean hb = myIMS.Contains(S);
155 return hb;
156}
157
158//=======================================================================
159//function : Shape
160//purpose :
161//=======================================================================
162const TopoDS_Shape& TopOpeBRepTool_HBoxTool::Shape(const Standard_Integer I) const
163{
164 Standard_Integer iu = Extent();
165 Standard_Integer hs = (I >= 1 && I <= iu);
166 if (!hs) {
167 Standard_ProgramError::Raise("HBT::Box4");
168 }
169 const TopoDS_Shape& S = myIMS.FindKey(I);
170 return S;
171}
172
173//=======================================================================
174//function : Index
175//purpose :
176//=======================================================================
177Standard_Integer TopOpeBRepTool_HBoxTool::Index(const TopoDS_Shape& S) const
178{
179 Standard_Integer i = myIMS.FindIndex(S);
180 return i;
181}
182
183//=======================================================================
184//function : Extent
185//purpose :
186//=======================================================================
187Standard_Integer TopOpeBRepTool_HBoxTool::Extent() const
188{
189 Standard_Integer n = myIMS.Extent();
190 return n;
191}
192
193//=======================================================================
194//function : ChangeIMS
195//purpose :
196//=======================================================================
197TopOpeBRepTool_IndexedDataMapOfShapeBox& TopOpeBRepTool_HBoxTool::ChangeIMS()
198{
199 return myIMS;
200}
201
202//=======================================================================
203//function : IMS
204//purpose :
205//=======================================================================
206const TopOpeBRepTool_IndexedDataMapOfShapeBox& TopOpeBRepTool_HBoxTool::IMS() const
207{
208 return myIMS;
209}
210
211//=======================================================================
212//function : DumpB
213//purpose :
214//=======================================================================
215void TopOpeBRepTool_HBoxTool::DumpB (const Bnd_Box& B)
216{
217#ifdef DEB
218 if (B.IsVoid()) cout<<"# IsVoid";
219 else if (B.IsWhole()) cout<<"# IsWhole";
220 else {
221 Standard_Real x,y,z,X,Y,Z;
222 B.Get(x,y,z,X,Y,Z);
223 cout<<"bounding "<<x<<" "<<y<<" "<<z<<" "<<X<<" "<<Y<<" "<<Z;
224 cout.flush();
225 }
226#endif
227}