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