0030686: Visualization, SelectMgr_ViewerSelector - sorting issues of transformation...
[occt.git] / src / StepToTopoDS / StepToTopoDS_Tool.cxx
1 // Created on: 1995-01-03
2 // Created by: Frederic MAUPAS
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 //  Complement : CKY, alimentation du TransientProcess
18 //    (Bind general;  BindVertex ?)
19
20 #include <Geom2d_Curve.hxx>
21 #include <Geom_Curve.hxx>
22 #include <Geom_Surface.hxx>
23 #include <StepGeom_CartesianPoint.hxx>
24 #include <StepShape_TopologicalRepresentationItem.hxx>
25 #include <StepToTopoDS_PointPair.hxx>
26 #include <StepToTopoDS_Tool.hxx>
27 #include <TopoDS_Edge.hxx>
28 #include <TopoDS_Shape.hxx>
29 #include <TopoDS_Vertex.hxx>
30 #include <Transfer_TransientProcess.hxx>
31 #include <TransferBRep.hxx>
32
33 // ============================================================================
34 // Method  : StepToTopoDS_Tool::StepToTopoDS_Tool
35 // Purpose : Empty Constructor
36 // ============================================================================
37 StepToTopoDS_Tool::StepToTopoDS_Tool() {}
38
39 // ============================================================================
40 // Method  : StepToTopoDS_Tool::StepToTopoDS_Tool
41 // Purpose : Constructor with a Map and a TransientProcess
42 // ============================================================================
43
44 StepToTopoDS_Tool::StepToTopoDS_Tool(const StepToTopoDS_DataMapOfTRI& Map, 
45                                    const Handle(Transfer_TransientProcess)& TP)
46 {
47   Init(Map, TP);
48 }
49
50 // ============================================================================
51 // Method  : Init
52 // Purpose : Init with a Map
53 // ============================================================================
54
55 void StepToTopoDS_Tool::Init(const StepToTopoDS_DataMapOfTRI& Map, 
56                             const Handle(Transfer_TransientProcess)& TP)
57
58   myComputePC = Standard_False;
59
60   StepToTopoDS_PointVertexMap aVertexMap;
61   StepToTopoDS_PointEdgeMap   aEdgeMap;
62   
63   myDataMap   = Map;
64   myVertexMap = aVertexMap;
65   myEdgeMap   = aEdgeMap;
66   myTransProc = TP;
67
68   myNbC0Surf = myNbC1Surf = myNbC2Surf = 0;
69   myNbC0Cur2 = myNbC1Cur2 = myNbC2Cur2 = 0;
70   myNbC0Cur3 = myNbC1Cur3 = myNbC2Cur3 = 0;
71
72
73 }
74
75 // ============================================================================
76 // Method  : StepToTopoDS_Tool::IsBound
77 // Purpose : Indicates weither a TRI is bound or not in the Map
78 // ============================================================================
79
80 Standard_Boolean StepToTopoDS_Tool::IsBound(const Handle(StepShape_TopologicalRepresentationItem)& TRI)
81 {
82   return myDataMap.IsBound(TRI);
83 }
84
85 // ============================================================================
86 // Method  : StepToTopoDS_Tool::Bind
87 // Purpose : Binds a TRI with a Shape in the Map
88 // ============================================================================
89
90 void StepToTopoDS_Tool::Bind(const Handle(StepShape_TopologicalRepresentationItem)& TRI, const TopoDS_Shape& S)
91 {
92   myDataMap.Bind(TRI, S);
93   TransferBRep::SetShapeResult (myTransProc,TRI,S);
94 }
95
96 // ============================================================================
97 // Method  : StepToTopoDS_Tool::Find
98 // Purpose : Returns the Shape corresponding to the bounded TRI
99 // ============================================================================
100
101 const TopoDS_Shape& StepToTopoDS_Tool::Find(const Handle(StepShape_TopologicalRepresentationItem)& TRI)
102 {
103   return myDataMap.Find(TRI);
104 }
105
106
107 // ============================================================================
108 // Method  : StepToTopoDS_Tool::ClearEdgeMap
109 // Purpose : 
110 // ============================================================================
111
112 void StepToTopoDS_Tool::ClearEdgeMap()
113 {
114   myEdgeMap.Clear();
115 }
116
117 // ============================================================================
118 // Method  : StepToTopoDS_Tool::IsEdgeBound
119 // Purpose : 
120 // ============================================================================
121
122 Standard_Boolean StepToTopoDS_Tool::IsEdgeBound(const StepToTopoDS_PointPair& PP)
123 {
124   return myEdgeMap.IsBound(PP);
125 }
126
127 // ============================================================================
128 // Method  : StepToTopoDS_Tool_BindEdge
129 // Purpose : 
130 // ============================================================================
131
132 void StepToTopoDS_Tool::BindEdge(const StepToTopoDS_PointPair& PP, const TopoDS_Edge& E)
133 {
134   myEdgeMap.Bind(PP, E);
135 }
136
137 // ============================================================================
138 // Method  : StepToTopoDS_Tool::FindEdge
139 // Purpose : 
140 // ============================================================================
141
142 const TopoDS_Edge& StepToTopoDS_Tool::FindEdge(const StepToTopoDS_PointPair& PP)
143 {
144   return myEdgeMap.Find(PP);
145 }
146
147 // ============================================================================
148 // Method  : StepToTopoDS_Tool::ClearVertexMap
149 // Purpose : 
150 // ============================================================================
151
152 void StepToTopoDS_Tool::ClearVertexMap()
153 {
154   myVertexMap.Clear();
155 }
156
157 // ============================================================================
158 // Method  : StepToTopoDS_Tool::IsVertexBound
159 // Purpose : 
160 // ============================================================================
161
162 Standard_Boolean StepToTopoDS_Tool::IsVertexBound(const Handle(StepGeom_CartesianPoint)& PG)
163 {
164   return myVertexMap.IsBound(PG);
165 }
166
167 // ============================================================================
168 // Method  : StepToTopoDS_Tool::BindVertex
169 // Purpose : 
170 // ============================================================================
171
172 void StepToTopoDS_Tool::BindVertex(const Handle(StepGeom_CartesianPoint)& P, const TopoDS_Vertex& V)
173 {
174   myVertexMap.Bind(P, V);
175 #ifdef OCCT_DEBUG
176   TransferBRep::SetShapeResult (myTransProc,P,V);
177 #endif
178 }
179
180 // ============================================================================
181 // Method  : StepToTopoDS_Tool::FindVertex
182 // Purpose : 
183 // ============================================================================
184
185 const TopoDS_Vertex& StepToTopoDS_Tool::FindVertex(const Handle(StepGeom_CartesianPoint)& P)
186 {
187   return myVertexMap.Find(P);
188 }
189
190 // ============================================================================
191 // Method  : ComputePCurve
192 // Purpose : 
193 // ============================================================================
194
195 void StepToTopoDS_Tool::ComputePCurve(const Standard_Boolean B)
196 {
197   myComputePC = B;
198 }
199
200 // ============================================================================
201 // Method  : ComputePCurve
202 // Purpose : 
203 // ============================================================================
204
205 Standard_Boolean StepToTopoDS_Tool::ComputePCurve() const
206 {
207   return myComputePC;
208 }
209
210 // ============================================================================
211 // Method  : StepToTopoDS_Tool::TransientProcess
212 // Purpose : Returns the TransientProcess
213 // ============================================================================
214
215 Handle(Transfer_TransientProcess) StepToTopoDS_Tool::TransientProcess() const
216 {
217   return myTransProc;
218 }
219
220
221 //===========
222 // AddStatistics
223 //===========
224
225 void  StepToTopoDS_Tool::AddContinuity (const Handle(Geom_Surface)& GeomSurf)
226 {
227   switch(GeomSurf->Continuity())
228     {
229     case GeomAbs_C0:    myNbC0Surf ++;  break;
230     case GeomAbs_C1:    myNbC1Surf ++;  break;
231     default:            myNbC2Surf ++;
232     }
233 }
234
235 void  StepToTopoDS_Tool::AddContinuity (const Handle(Geom_Curve)&   GeomCurve)
236 {
237   switch(GeomCurve->Continuity())
238     {
239     case GeomAbs_C0:    myNbC0Cur3 ++;  break;
240     case GeomAbs_C1:    myNbC1Cur3 ++;  break;
241     default:            myNbC2Cur3 ++;
242     }
243 }
244
245 void  StepToTopoDS_Tool::AddContinuity (const Handle(Geom2d_Curve)& GeomCur2d)
246 {
247   switch(GeomCur2d->Continuity())
248     {
249     case GeomAbs_C0:    myNbC0Cur2 ++;  break;
250     case GeomAbs_C1:    myNbC1Cur2 ++;  break;
251     default:            myNbC2Cur2 ++;
252     }
253 }
254
255 //===========
256 // Statistics
257 //===========
258
259 Standard_Integer StepToTopoDS_Tool::C0Surf() const
260 {
261   return myNbC0Surf;
262 }
263
264
265 Standard_Integer StepToTopoDS_Tool::C1Surf() const
266 {
267   return myNbC1Surf;
268 }
269
270
271 Standard_Integer StepToTopoDS_Tool::C2Surf() const
272 {
273   return myNbC2Surf;
274 }
275
276
277 //===========
278 // Statistics
279 //===========
280
281 Standard_Integer StepToTopoDS_Tool::C0Cur2() const
282 {
283   return myNbC0Cur2;
284 }
285
286
287 Standard_Integer StepToTopoDS_Tool::C1Cur2() const
288 {
289   return myNbC1Cur2;
290 }
291
292
293 Standard_Integer StepToTopoDS_Tool::C2Cur2() const
294 {
295   return myNbC2Cur2;
296 }
297
298
299 //===========
300 // Statistics
301 //===========
302
303 Standard_Integer StepToTopoDS_Tool::C0Cur3() const
304 {
305   return myNbC0Cur3;
306 }
307
308
309 Standard_Integer StepToTopoDS_Tool::C1Cur3() const
310 {
311   return myNbC1Cur3;
312 }
313
314
315 Standard_Integer StepToTopoDS_Tool::C2Cur3() const
316 {
317   return myNbC2Cur3;
318 }
319