0023948: Wrong intersection between a surface of revolution and a plane.
[occt.git] / src / Adaptor2d / Adaptor2d_Line2d.cxx
CommitLineData
973c2be1 1// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 2//
973c2be1 3// This file is part of Open CASCADE Technology software library.
b311480e 4//
d5f74e42 5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
b311480e 10//
973c2be1 11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
b311480e 13
7fd59977 14#include <Adaptor2d_Line2d.ixx>
15
16#include <Precision.hxx>
17#include <ElCLib.hxx>
18#include <Standard_OutOfRange.hxx>
19#include <Standard_NoSuchObject.hxx>
20#include <Adaptor2d_HLine2d.hxx>
21
22//=======================================================================
23//function : Adaptor2d_Line2d
24//purpose :
25//=======================================================================
26
b311480e 27Adaptor2d_Line2d::Adaptor2d_Line2d()
7fd59977 28{
29}
30
31//=======================================================================
32//function : Adaptor_Line2d
33//purpose :
34//=======================================================================
35
36 Adaptor2d_Line2d::Adaptor2d_Line2d(const gp_Pnt2d& P, const gp_Dir2d& D,
37 const Standard_Real UFirst,
38 const Standard_Real ULast):
39 myUfirst(UFirst),myUlast(ULast),myAx2d(P,D)
40{
41}
42
43//=======================================================================
44//function : Load
45//purpose :
46//=======================================================================
47
48void Adaptor2d_Line2d::Load(const gp_Lin2d& L)
49{
50 myAx2d = L.Position();
51 myUfirst = -Precision::Infinite();
52 myUlast = Precision::Infinite();
53}
54
55//=======================================================================
56//function : Load
57//purpose :
58//=======================================================================
59
60void Adaptor2d_Line2d::Load(const gp_Lin2d& L, const Standard_Real Fi, const Standard_Real La)
61{
62 myAx2d = L.Position();
63 myUfirst = Fi;
64 myUlast = La;
65}
66
67//=======================================================================
68//function : FirstParameter
69//purpose :
70//=======================================================================
71
72Standard_Real Adaptor2d_Line2d::FirstParameter() const
73{
74 return myUfirst;
75}
76
77//=======================================================================
78//function : LastParameter
79//purpose :
80//=======================================================================
81
82Standard_Real Adaptor2d_Line2d::LastParameter() const
83{
84 return myUlast;
85}
86
87//=======================================================================
88//function : Continuity
89//purpose :
90//=======================================================================
91
92GeomAbs_Shape Adaptor2d_Line2d::Continuity() const
93{
94 return GeomAbs_CN;
95}
96
97//=======================================================================
98//function : NbIntervals
99//purpose :
100//=======================================================================
101
102//Standard_Integer Adaptor2d_Line2d::NbIntervals(const GeomAbs_Shape S) const
103Standard_Integer Adaptor2d_Line2d::NbIntervals(const GeomAbs_Shape ) const
104{
105 return 1;
106}
107
108//=======================================================================
109//function : Interval
110//purpose :
111//=======================================================================
112
113void Adaptor2d_Line2d::Intervals(TColStd_Array1OfReal& T,
114// const GeomAbs_Shape S) const
115 const GeomAbs_Shape ) const
116{
117 T(T.Lower()) = myUfirst;
118 T(T.Lower()+1) = myUlast;
119}
120
121//=======================================================================
122//function : Trim
123//purpose :
124//=======================================================================
125
126Handle(Adaptor2d_HCurve2d) Adaptor2d_Line2d::Trim
127(const Standard_Real First,
128 const Standard_Real Last,
129 const Standard_Real) const
130{
131 Handle(Adaptor2d_HLine2d) HL = new Adaptor2d_HLine2d();
132 HL->ChangeCurve2d().Load(gp_Lin2d(myAx2d),First,Last);
133 return HL;
134}
135
136//=======================================================================
137//function : IsClosed
138//purpose :
139//=======================================================================
140
141Standard_Boolean Adaptor2d_Line2d::IsClosed() const
142{
143 return Standard_False;
144}
145
146//=======================================================================
147//function : IsPeriodic
148//purpose :
149//=======================================================================
150
151Standard_Boolean Adaptor2d_Line2d::IsPeriodic() const
152{
153 return Standard_False;
154}
155
156//=======================================================================
157//function : Period
158//purpose :
159//=======================================================================
160
161Standard_Real Adaptor2d_Line2d::Period() const
162{
163 Standard_NoSuchObject::Raise();
164 return 0;
165}
166
167//=======================================================================
168//function : Value
169//purpose :
170//=======================================================================
171
172gp_Pnt2d Adaptor2d_Line2d::Value(const Standard_Real X) const
173{
174 return ElCLib::LineValue(X,myAx2d);
175}
176
177//=======================================================================
178//function : D0
179//purpose :
180//=======================================================================
181
182void Adaptor2d_Line2d::D0(const Standard_Real X, gp_Pnt2d& P) const
183{
184 P = ElCLib::LineValue(X,myAx2d);
185}
186
187//=======================================================================
188//function : D1
189//purpose :
190//=======================================================================
191
192void Adaptor2d_Line2d::D1(const Standard_Real X, gp_Pnt2d& P, gp_Vec2d& V) const
193{
194 ElCLib::LineD1(X,myAx2d,P,V);
195}
196
197//=======================================================================
198//function : D2
199//purpose :
200//=======================================================================
201
202void Adaptor2d_Line2d::D2(const Standard_Real X, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) const
203{
204 ElCLib::LineD1(X,myAx2d,P,V1);
205 V2.SetCoord(0.,0.);
206}
207
208//=======================================================================
209//function : D3
210//purpose :
211//=======================================================================
212
213void Adaptor2d_Line2d::D3(const Standard_Real X, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const
214{
215 ElCLib::LineD1(X,myAx2d,P,V1);
216 V2.SetCoord(0.,0.);
217 V3.SetCoord(0.,0.);
218}
219
220//=======================================================================
221//function : DN
222//purpose :
223//=======================================================================
224
225//gp_Vec2d Adaptor2d_Line2d::DN(const Standard_Real U, const Standard_Integer N) const
226gp_Vec2d Adaptor2d_Line2d::DN(const Standard_Real , const Standard_Integer N) const
227{
228 if (N<=0) {Standard_OutOfRange::Raise();}
229 if (N==1) {
230 return myAx2d.Direction();
231 }
232 return gp_Vec2d(0.,0.);
233}
234
235//=======================================================================
236//function : Resolution
237//purpose :
238//=======================================================================
239
240Standard_Real Adaptor2d_Line2d::Resolution(const Standard_Real R3d) const
241{
242 return R3d; // nul !!!!
243}
244
245//=======================================================================
246//function : GetType
247//purpose :
248//=======================================================================
249
250GeomAbs_CurveType Adaptor2d_Line2d::GetType() const
251{
252 return GeomAbs_Line;
253}
254
255//=======================================================================
256//function : Line
257//purpose :
258//=======================================================================
259
260gp_Lin2d Adaptor2d_Line2d::Line() const
261{
262 return gp_Lin2d(myAx2d);
263}
264
265//=======================================================================
266//function : Circle
267//purpose :
268//=======================================================================
269
270gp_Circ2d Adaptor2d_Line2d::Circle() const
271{
272 Standard_NoSuchObject::Raise();
273 return gp_Circ2d();
274}
275
276//=======================================================================
277//function : Ellipse
278//purpose :
279//=======================================================================
280
281gp_Elips2d Adaptor2d_Line2d::Ellipse() const
282{
283 Standard_NoSuchObject::Raise();
284 return gp_Elips2d();
285}
286
287//=======================================================================
288//function : Hyperbola
289//purpose :
290//=======================================================================
291
292gp_Hypr2d Adaptor2d_Line2d::Hyperbola() const
293{
294 Standard_NoSuchObject::Raise();
295 return gp_Hypr2d();
296}
297
298//=======================================================================
299//function : Parabola
300//purpose :
301//=======================================================================
302
303gp_Parab2d Adaptor2d_Line2d::Parabola() const
304{
305 Standard_NoSuchObject::Raise();
306 return gp_Parab2d();
307}
308
309//=======================================================================
310//function : Degree
311//purpose :
312//=======================================================================
313
314Standard_Integer Adaptor2d_Line2d::Degree() const
315 {
316 Standard_NoSuchObject::Raise();
317 return 0 ;
318}
319//=======================================================================
320//function : IsRational
321//purpose :
322//=======================================================================
323
324Standard_Boolean Adaptor2d_Line2d::IsRational() const
325 {
326 Standard_NoSuchObject::Raise();
327 return 0 ;
328}
329//=======================================================================
330//function : NbPoles
331//purpose :
332//=======================================================================
333
334Standard_Integer Adaptor2d_Line2d::NbPoles() const
335 {
336 Standard_NoSuchObject::Raise();
337 return 0 ;
338}
339//=======================================================================
340//function : NbKnots
341//purpose :
342//=======================================================================
343
344Standard_Integer Adaptor2d_Line2d::NbKnots() const
345 {
346 Standard_NoSuchObject::Raise();
347 return 0 ;
348}
349//=======================================================================
350//function : Bezier
351//purpose :
352//=======================================================================
353
354Handle(Geom2d_BezierCurve) Adaptor2d_Line2d::Bezier() const
355{
356 Standard_NoSuchObject::Raise();
357 Handle(Geom2d_BezierCurve) nul;
358 return nul;
359}
360
361//=======================================================================
362//function : BSpline
363//purpose :
364//=======================================================================
365
366Handle(Geom2d_BSplineCurve) Adaptor2d_Line2d::BSpline() const
367{
368 Standard_NoSuchObject::Raise();
369 Handle(Geom2d_BSplineCurve) nul;
370 return nul;
371}
372