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
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <TopOpeBRepDS_Curve.ixx>
18 #include <TopOpeBRepDS_SurfaceCurveInterference.hxx>
19 #include <TopOpeBRepDS_Dumper.hxx>
20 #include <Precision.hxx>
23 //=======================================================================
24 //function : TopOpeBRepDS_Curve
26 //=======================================================================
28 TopOpeBRepDS_Curve::TopOpeBRepDS_Curve() :
29 myFirst(0.0), myLast(0.0),
30 myRangeDefined(Standard_False),
31 myTolerance(Precision::Confusion()),
32 myIsWalk(Standard_False),
33 myKeep(Standard_True),
39 //=======================================================================
40 //function : TopOpeBRepDS_Curve
42 //=======================================================================
44 TopOpeBRepDS_Curve::TopOpeBRepDS_Curve
45 (const Handle(Geom_Curve)& C,
46 const Standard_Real T,
47 const Standard_Boolean IsWalk) :
48 myFirst(0.0), myLast(0.0),
49 myRangeDefined(Standard_False),
50 myKeep(Standard_True),
54 DefineCurve(C,T,IsWalk);
57 //=======================================================================
58 //function : DefineCurve
60 //=======================================================================
62 void TopOpeBRepDS_Curve::DefineCurve
63 (const Handle(Geom_Curve)& C,
64 const Standard_Real T,
65 const Standard_Boolean IsWalk)
72 //=======================================================================
73 //function : Tolerance
75 //=======================================================================
77 void TopOpeBRepDS_Curve::Tolerance(const Standard_Real T)
82 //=======================================================================
85 //=======================================================================
87 void TopOpeBRepDS_Curve::SetSCI(const Handle(TopOpeBRepDS_Interference)& SCI1,
88 const Handle(TopOpeBRepDS_Interference)& SCI2)
94 //=======================================================================
97 //=======================================================================
99 void TopOpeBRepDS_Curve::GetSCI(Handle(TopOpeBRepDS_Interference)& SCI1,
100 Handle(TopOpeBRepDS_Interference)& SCI2) const
106 //=======================================================================
109 //=======================================================================
111 const Handle(TopOpeBRepDS_Interference)& TopOpeBRepDS_Curve::GetSCI1() const
116 //=======================================================================
119 //=======================================================================
121 const Handle(TopOpeBRepDS_Interference)& TopOpeBRepDS_Curve::GetSCI2() const
126 //=======================================================================
127 //function : SetShapes
129 //=======================================================================
131 void TopOpeBRepDS_Curve::SetShapes(const TopoDS_Shape& S1,
132 const TopoDS_Shape& S2)
138 //=======================================================================
139 //function : GetShapes
141 //=======================================================================
143 void TopOpeBRepDS_Curve::GetShapes(TopoDS_Shape& S1,
144 TopoDS_Shape& S2) const
150 //=======================================================================
153 //=======================================================================
155 const TopoDS_Shape& TopOpeBRepDS_Curve::Shape1() const
160 //=======================================================================
161 //function : ChangeShape1
163 //=======================================================================
165 TopoDS_Shape& TopOpeBRepDS_Curve::ChangeShape1()
170 //=======================================================================
173 //=======================================================================
175 const TopoDS_Shape& TopOpeBRepDS_Curve::Shape2() const
180 //=======================================================================
181 //function : ChangeShape2
183 //=======================================================================
185 TopoDS_Shape& TopOpeBRepDS_Curve::ChangeShape2()
190 //=======================================================================
191 //function : ChangeCurve
193 //=======================================================================
195 Handle(Geom_Curve)& TopOpeBRepDS_Curve::ChangeCurve()
200 //=======================================================================
203 //=======================================================================
205 const Handle(Geom_Curve)& TopOpeBRepDS_Curve::Curve()const
210 //=======================================================================
211 //function : SetRange
213 //=======================================================================
215 void TopOpeBRepDS_Curve::SetRange(const Standard_Real First,
216 const Standard_Real Last)
220 myRangeDefined = Standard_True;
224 //=======================================================================
227 //=======================================================================
229 Standard_Boolean TopOpeBRepDS_Curve::Range(Standard_Real& First,
230 Standard_Real& Last) const
232 if (myRangeDefined) {
236 return myRangeDefined;
240 //=======================================================================
241 //function : Tolerance
243 //=======================================================================
245 Standard_Real TopOpeBRepDS_Curve::Tolerance()const
250 //=======================================================================
253 //=======================================================================
255 void TopOpeBRepDS_Curve::Curve(const Handle(Geom_Curve)& C3D,
256 const Standard_Real Tol)
263 //=======================================================================
266 //=======================================================================
268 const Handle(Geom2d_Curve)& TopOpeBRepDS_Curve::Curve1()const
270 if ( ! mySCI1.IsNull() ) {
272 (*((Handle(TopOpeBRepDS_SurfaceCurveInterference)*)&mySCI1))->PCurve();
275 static Handle(Geom2d_Curve) STALOC_Geom2dCurveNull1;
276 return STALOC_Geom2dCurveNull1;
280 //=======================================================================
283 //=======================================================================
285 void TopOpeBRepDS_Curve::Curve1(const Handle(Geom2d_Curve)& PC1)
287 if ( ! mySCI1.IsNull() ) {
288 (*((Handle(TopOpeBRepDS_SurfaceCurveInterference)*)&mySCI1))->PCurve(PC1);
293 //=======================================================================
296 //=======================================================================
298 const Handle(Geom2d_Curve)& TopOpeBRepDS_Curve::Curve2()const
300 if ( ! mySCI2.IsNull() ) {
302 (*((Handle(TopOpeBRepDS_SurfaceCurveInterference)*)&mySCI2))->PCurve();
305 static Handle(Geom2d_Curve) STALOC_Geom2dCurveNull2;
306 return STALOC_Geom2dCurveNull2;
310 //=======================================================================
313 //=======================================================================
315 void TopOpeBRepDS_Curve::Curve2(const Handle(Geom2d_Curve)& PC2)
317 if ( ! mySCI2.IsNull() ) {
318 (*((Handle(TopOpeBRepDS_SurfaceCurveInterference)*)&mySCI2))->PCurve(PC2);
323 //=======================================================================
326 //=======================================================================
328 Standard_Boolean TopOpeBRepDS_Curve::IsWalk() const
333 //=======================================================================
334 //function : ChangeIsWalk
336 //=======================================================================
338 void TopOpeBRepDS_Curve::ChangeIsWalk(const Standard_Boolean B)
344 //=======================================================================
347 //=======================================================================
350 Standard_OStream& TopOpeBRepDS_Curve::Dump (Standard_OStream& OS,
351 const Standard_Integer index,
352 const Standard_Boolean compact)const
354 OS<<"Curve : "; if (index != 0) OS<<index<<" ";
355 if (!Curve().IsNull()) {
356 TopOpeBRepDS_Dumper::Print(Curve(),OS,compact);
358 if (Range(f,l)) OS<<"has range of "<<f<<","<<l<<endl;
359 else OS<<"has no range defined"<<endl;
364 #define DSCI(tut) (*((Handle(TopOpeBRepDS_SurfaceCurveInterference)*)&(tut)))
366 Handle(TopOpeBRepDS_Interference) I1,I2;
370 if (!I1.IsNull()) DSCI(I1)->DumpPCurve(OS,compact);
375 if (!I2.IsNull()) DSCI(I2)->DumpPCurve(OS,compact);
382 Standard_OStream& TopOpeBRepDS_Curve::Dump (Standard_OStream& OS,
383 const Standard_Integer,
384 const Standard_Boolean)const
391 //=======================================================================
394 //=======================================================================
396 Standard_Boolean TopOpeBRepDS_Curve::Keep() const
402 //=======================================================================
403 //function : ChangeKeep
405 //=======================================================================
407 void TopOpeBRepDS_Curve::ChangeKeep(const Standard_Boolean b)
413 //=======================================================================
416 //=======================================================================
418 Standard_Integer TopOpeBRepDS_Curve::Mother() const
424 //=======================================================================
425 //function : ChangeMother
427 //=======================================================================
429 void TopOpeBRepDS_Curve::ChangeMother(const Standard_Integer b)
434 //=======================================================================
437 //=======================================================================
439 Standard_Integer TopOpeBRepDS_Curve::DSIndex() const
445 //=======================================================================
446 //function : ChangeDSIndex
448 //=======================================================================
450 void TopOpeBRepDS_Curve::ChangeDSIndex(const Standard_Integer b)