1 // Created on: 1993-06-23
2 // Created by: Jean Yves LEBEY
3 // Copyright (c) 1993-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 
18 #include <Geom2d_Curve.hxx>
19 #include <Geom_Curve.hxx>
20 #include <Precision.hxx>
21 #include <TopoDS_Shape.hxx>
22 #include <TopOpeBRepDS_Curve.hxx>
23 #include <TopOpeBRepDS_Dumper.hxx>
24 #include <TopOpeBRepDS_Interference.hxx>
25 #include <TopOpeBRepDS_SurfaceCurveInterference.hxx>
26 
27 //=======================================================================
28 //function : TopOpeBRepDS_Curve
29 //purpose  :
30 //=======================================================================
TopOpeBRepDS_Curve()31 TopOpeBRepDS_Curve::TopOpeBRepDS_Curve() :
32 myFirst(0.0), myLast(0.0),
33 myRangeDefined(Standard_False),
34 myTolerance(Precision::Confusion()),
35 myIsWalk(Standard_False),
36 myKeep(Standard_True),
37 myMother(0),
38 myDSIndex(0)
39 {
40 }
41 
42 //=======================================================================
43 //function : TopOpeBRepDS_Curve
44 //purpose  :
45 //=======================================================================
46 
TopOpeBRepDS_Curve(const Handle (Geom_Curve)& C,const Standard_Real T,const Standard_Boolean IsWalk)47 TopOpeBRepDS_Curve::TopOpeBRepDS_Curve
48 (const Handle(Geom_Curve)& C,
49  const Standard_Real T,
50  const Standard_Boolean IsWalk) :
51  myFirst(0.0), myLast(0.0),
52  myRangeDefined(Standard_False),
53  myKeep(Standard_True),
54  myMother(0),
55  myDSIndex(0)
56 {
57   DefineCurve(C,T,IsWalk);
58 }
59 
60 //=======================================================================
61 //function : DefineCurve
62 //purpose  :
63 //=======================================================================
64 
DefineCurve(const Handle (Geom_Curve)& C,const Standard_Real T,const Standard_Boolean IsWalk)65 void TopOpeBRepDS_Curve::DefineCurve
66 (const Handle(Geom_Curve)& C,
67  const Standard_Real T,
68  const Standard_Boolean IsWalk)
69 {
70   myCurve = C;
71   myTolerance = T;
72   myIsWalk = IsWalk;
73 }
74 
75 //=======================================================================
76 //function : Tolerance
77 //purpose  :
78 //=======================================================================
79 
Tolerance(const Standard_Real T)80 void TopOpeBRepDS_Curve::Tolerance(const Standard_Real T)
81 {
82   myTolerance = T;
83 }
84 
85 //=======================================================================
86 //function : SetSCI
87 //purpose  :
88 //=======================================================================
89 
SetSCI(const Handle (TopOpeBRepDS_Interference)& SCI1,const Handle (TopOpeBRepDS_Interference)& SCI2)90 void TopOpeBRepDS_Curve::SetSCI(const Handle(TopOpeBRepDS_Interference)& SCI1,
91 				const Handle(TopOpeBRepDS_Interference)& SCI2)
92 {
93   mySCI1 = SCI1;
94   mySCI2 = SCI2;
95 }
96 
97 //=======================================================================
98 //function : GetSCI
99 //purpose  :
100 //=======================================================================
101 
GetSCI(Handle (TopOpeBRepDS_Interference)& SCI1,Handle (TopOpeBRepDS_Interference)& SCI2) const102 void TopOpeBRepDS_Curve::GetSCI(Handle(TopOpeBRepDS_Interference)& SCI1,
103 			        Handle(TopOpeBRepDS_Interference)& SCI2) const
104 {
105   SCI1 = mySCI1;
106   SCI2 = mySCI2;
107 }
108 
109 //=======================================================================
110 //function : GetSCI1
111 //purpose  :
112 //=======================================================================
113 
Handle(TopOpeBRepDS_Interference)114 const Handle(TopOpeBRepDS_Interference)& TopOpeBRepDS_Curve::GetSCI1() const
115 {
116   return mySCI1;
117 }
118 
119 //=======================================================================
120 //function : GetSCI2
121 //purpose  :
122 //=======================================================================
123 
Handle(TopOpeBRepDS_Interference)124 const Handle(TopOpeBRepDS_Interference)& TopOpeBRepDS_Curve::GetSCI2() const
125 {
126   return mySCI2;
127 }
128 
129 //=======================================================================
130 //function : SetShapes
131 //purpose  :
132 //=======================================================================
133 
SetShapes(const TopoDS_Shape & S1,const TopoDS_Shape & S2)134 void TopOpeBRepDS_Curve::SetShapes(const TopoDS_Shape& S1,
135 				   const TopoDS_Shape& S2)
136 {
137   myS1 = S1;
138   myS2 = S2;
139 }
140 
141 //=======================================================================
142 //function : GetShapes
143 //purpose  :
144 //=======================================================================
145 
GetShapes(TopoDS_Shape & S1,TopoDS_Shape & S2) const146 void TopOpeBRepDS_Curve::GetShapes(TopoDS_Shape& S1,
147 				   TopoDS_Shape& S2) const
148 {
149   S1 = myS1;
150   S2 = myS2;
151 }
152 
153 //=======================================================================
154 //function : Shape1
155 //purpose  :
156 //=======================================================================
157 
Shape1() const158 const TopoDS_Shape& TopOpeBRepDS_Curve::Shape1() const
159 {
160   return myS1;
161 }
162 
163 //=======================================================================
164 //function : ChangeShape1
165 //purpose  :
166 //=======================================================================
167 
ChangeShape1()168 TopoDS_Shape& TopOpeBRepDS_Curve::ChangeShape1()
169 {
170   return myS1;
171 }
172 
173 //=======================================================================
174 //function : Shape2
175 //purpose  :
176 //=======================================================================
177 
Shape2() const178 const TopoDS_Shape& TopOpeBRepDS_Curve::Shape2() const
179 {
180   return myS2;
181 }
182 
183 //=======================================================================
184 //function : ChangeShape2
185 //purpose  :
186 //=======================================================================
187 
ChangeShape2()188 TopoDS_Shape& TopOpeBRepDS_Curve::ChangeShape2()
189 {
190   return myS2;
191 }
192 
193 //=======================================================================
194 //function : ChangeCurve
195 //purpose  :
196 //=======================================================================
197 
Handle(Geom_Curve)198 Handle(Geom_Curve)& TopOpeBRepDS_Curve::ChangeCurve()
199 {
200   return myCurve;
201 }
202 
203 //=======================================================================
204 //function : Curve
205 //purpose  :
206 //=======================================================================
207 
Handle(Geom_Curve)208 const Handle(Geom_Curve)&  TopOpeBRepDS_Curve::Curve()const
209 {
210   return myCurve;
211 }
212 
213 //=======================================================================
214 //function : SetRange
215 //purpose  :
216 //=======================================================================
217 
SetRange(const Standard_Real First,const Standard_Real Last)218 void TopOpeBRepDS_Curve::SetRange(const Standard_Real First,
219 				  const Standard_Real Last)
220 {
221   myFirst = First;
222   myLast = Last;
223   myRangeDefined = Standard_True;
224 }
225 
226 
227 //=======================================================================
228 //function : Range
229 //purpose  :
230 //=======================================================================
231 
Range(Standard_Real & First,Standard_Real & Last) const232 Standard_Boolean TopOpeBRepDS_Curve::Range(Standard_Real& First,
233 					   Standard_Real& Last) const
234 {
235   if (myRangeDefined) {
236     First = myFirst;
237     Last = myLast;
238   }
239   return myRangeDefined;
240 }
241 
242 
243 //=======================================================================
244 //function : Tolerance
245 //purpose  :
246 //=======================================================================
247 
Tolerance() const248 Standard_Real  TopOpeBRepDS_Curve::Tolerance()const
249 {
250   return myTolerance;
251 }
252 
253 //=======================================================================
254 //function : Curve
255 //purpose  :
256 //=======================================================================
257 
Curve(const Handle (Geom_Curve)& C3D,const Standard_Real Tol)258 void TopOpeBRepDS_Curve::Curve(const Handle(Geom_Curve)& C3D,
259 			       const Standard_Real Tol)
260 {
261   myCurve = C3D;
262   myTolerance = Tol;
263 }
264 
265 
266 //=======================================================================
267 //function : Curve1
268 //purpose  :
269 //=======================================================================
270 
Handle(Geom2d_Curve)271 const Handle(Geom2d_Curve)&  TopOpeBRepDS_Curve::Curve1()const
272 {
273   if ( ! mySCI1.IsNull() ) {
274     return
275       Handle(TopOpeBRepDS_SurfaceCurveInterference)::DownCast (mySCI1)->PCurve();
276   }
277   else {
278     static Handle(Geom2d_Curve) STALOC_Geom2dCurveNull1;
279     return STALOC_Geom2dCurveNull1;
280   }
281 }
282 
283 //=======================================================================
284 //function : Curve1
285 //purpose  :
286 //=======================================================================
287 
Curve1(const Handle (Geom2d_Curve)& PC1)288 void TopOpeBRepDS_Curve::Curve1(const Handle(Geom2d_Curve)& PC1)
289 {
290   if ( ! mySCI1.IsNull() ) {
291     Handle(TopOpeBRepDS_SurfaceCurveInterference)::DownCast (mySCI1)->PCurve(PC1);
292   }
293 }
294 
295 
296 //=======================================================================
297 //function : Curve2
298 //purpose  :
299 //=======================================================================
300 
Handle(Geom2d_Curve)301 const Handle(Geom2d_Curve)&  TopOpeBRepDS_Curve::Curve2()const
302 {
303   if ( ! mySCI2.IsNull() ) {
304     return
305       Handle(TopOpeBRepDS_SurfaceCurveInterference)::DownCast (mySCI2)->PCurve();
306   }
307   else {
308     static Handle(Geom2d_Curve) STALOC_Geom2dCurveNull2;
309     return STALOC_Geom2dCurveNull2;
310   }
311 }
312 
313 //=======================================================================
314 //function : Curve2
315 //purpose  :
316 //=======================================================================
317 
Curve2(const Handle (Geom2d_Curve)& PC2)318 void TopOpeBRepDS_Curve::Curve2(const Handle(Geom2d_Curve)& PC2)
319 {
320   if ( ! mySCI2.IsNull() ) {
321     Handle(TopOpeBRepDS_SurfaceCurveInterference)::DownCast (mySCI2)->PCurve(PC2);
322   }
323 }
324 
325 
326 //=======================================================================
327 //function : IsWalk
328 //purpose  :
329 //=======================================================================
330 
IsWalk() const331 Standard_Boolean TopOpeBRepDS_Curve::IsWalk() const
332 {
333   return myIsWalk;
334 }
335 
336 //=======================================================================
337 //function : ChangeIsWalk
338 //purpose  :
339 //=======================================================================
340 
ChangeIsWalk(const Standard_Boolean B)341 void TopOpeBRepDS_Curve::ChangeIsWalk(const Standard_Boolean B)
342 {
343   myIsWalk = B;
344 }
345 
346 //=======================================================================
347 //function : Keep
348 //purpose  :
349 //=======================================================================
350 
Keep() const351 Standard_Boolean TopOpeBRepDS_Curve::Keep() const
352 {
353   return myKeep;
354 }
355 
356 
357 //=======================================================================
358 //function : ChangeKeep
359 //purpose  :
360 //=======================================================================
361 
ChangeKeep(const Standard_Boolean b)362 void TopOpeBRepDS_Curve::ChangeKeep(const Standard_Boolean b)
363 {
364   myKeep = b;
365 }
366 
367 
368 //=======================================================================
369 //function : Mother
370 //purpose  :
371 //=======================================================================
372 
Mother() const373 Standard_Integer TopOpeBRepDS_Curve::Mother() const
374 {
375   return myMother;
376 }
377 
378 
379 //=======================================================================
380 //function : ChangeMother
381 //purpose  :
382 //=======================================================================
383 
ChangeMother(const Standard_Integer b)384 void TopOpeBRepDS_Curve::ChangeMother(const Standard_Integer b)
385 {
386   myMother = b;
387 }
388 
389 //=======================================================================
390 //function : DSIndex
391 //purpose  :
392 //=======================================================================
393 
DSIndex() const394 Standard_Integer TopOpeBRepDS_Curve::DSIndex() const
395 {
396   return myDSIndex;
397 }
398 
399 
400 //=======================================================================
401 //function : ChangeDSIndex
402 //purpose  :
403 //=======================================================================
404 
ChangeDSIndex(const Standard_Integer b)405 void TopOpeBRepDS_Curve::ChangeDSIndex(const Standard_Integer b)
406 {
407   myDSIndex = b;
408 }
409