0024023: Revamp the OCCT Handle -- general
[occt.git] / src / Geom2d / Geom2d_Parabola.cxx
CommitLineData
b311480e 1// Created on: 1993-03-24
2// Created by: JCV
3// Copyright (c) 1993-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
17#include <Geom2d_Parabola.ixx>
18
19#include <Precision.hxx>
20#include <gp_XY.hxx>
21#include <ElCLib.hxx>
22#include <gp_Dir2d.hxx>
23#include <Standard_ConstructionError.hxx>
24#include <Standard_RangeError.hxx>
25
26typedef Geom2d_Parabola Parabola;
7fd59977 27typedef gp_Ax2d Ax2d;
28typedef gp_Dir2d Dir2d;
29typedef gp_Pnt2d Pnt2d;
30typedef gp_Vec2d Vec2d;
31typedef gp_Trsf2d Trsf2d;
32typedef gp_XY XY;
33
7fd59977 34//=======================================================================
35//function : Copy
36//purpose :
37//=======================================================================
38
39Handle(Geom2d_Geometry) Geom2d_Parabola::Copy() const
40{
c04c30b3 41 Handle(Geom2d_Parabola) Prb;
7fd59977 42 Prb = new Parabola (pos, focalLength);
43 return Prb;
44}
45
46
47
48//=======================================================================
49//function : Geom2d_Parabola
50//purpose :
51//=======================================================================
52
53Geom2d_Parabola::Geom2d_Parabola (const gp_Parab2d& Prb)
54{
55 focalLength = Prb.Focal ();
56 pos = Prb.Axis();
57}
58
59
60//=======================================================================
61//function : Geom2d_Parabola
62//purpose :
63//=======================================================================
64
65Geom2d_Parabola::Geom2d_Parabola (const Ax2d& MirrorAxis,
66 const Standard_Real Focal,
67 const Standard_Boolean Sense)
68: focalLength (Focal)
69{
70 if (Focal < 0.0) { Standard_ConstructionError::Raise(); }
71 pos = gp_Ax22d(MirrorAxis, Sense);
72}
73
74
75//=======================================================================
76//function : Geom2d_Parabola
77//purpose :
78//=======================================================================
79
80Geom2d_Parabola::Geom2d_Parabola (const gp_Ax22d& Axis, const Standard_Real Focal)
81: focalLength (Focal)
82{
83 if (Focal < 0.0) { Standard_ConstructionError::Raise(); }
84 pos = Axis;
85}
86
87
88//=======================================================================
89//function : Geom2d_Parabola
90//purpose :
91//=======================================================================
92
93Geom2d_Parabola::Geom2d_Parabola (const Ax2d& D, const Pnt2d& F) {
94
95 gp_Parab2d Prb (D, F);
96 pos = Prb.Axis();
97 focalLength = Prb.Focal();
98}
99
100//=======================================================================
101//function : SetFocal
102//purpose :
103//=======================================================================
104
105void Geom2d_Parabola::SetFocal (const Standard_Real Focal)
106{
107 if (Focal < 0.0) Standard_ConstructionError::Raise();
108 focalLength = Focal;
109}
110
111
112//=======================================================================
113//function : SetParab2d
114//purpose :
115//=======================================================================
116
117void Geom2d_Parabola::SetParab2d (const gp_Parab2d& Prb)
118{
119 focalLength = Prb.Focal ();
120 pos = Prb.Axis();
121}
122
123//=======================================================================
124//function : Parab2d
125//purpose :
126//=======================================================================
127
128gp_Parab2d Geom2d_Parabola::Parab2d () const
129{
130 return gp_Parab2d (pos, focalLength);
131}
132
133//=======================================================================
134//function : ReversedParameter
135//purpose :
136//=======================================================================
137
138Standard_Real Geom2d_Parabola::ReversedParameter( const Standard_Real U) const
139{
140 return ( -U);
141}
142
143//=======================================================================
144//function : FirstParameter
145//purpose :
146//=======================================================================
147
148Standard_Real Geom2d_Parabola::FirstParameter () const
149{
150 return -Precision::Infinite();
151}
152
153//=======================================================================
154//function : LastParameter
155//purpose :
156//=======================================================================
157
158Standard_Real Geom2d_Parabola::LastParameter () const
159{
160 return Precision::Infinite();
161}
162
163//=======================================================================
164//function : IsClosed
165//purpose :
166//=======================================================================
167
168Standard_Boolean Geom2d_Parabola::IsClosed () const
169{
170 return Standard_False;
171}
172
173//=======================================================================
174//function : IsPeriodic
175//purpose :
176//=======================================================================
177
178Standard_Boolean Geom2d_Parabola::IsPeriodic () const
179{
180 return Standard_False;
181}
182
183//=======================================================================
184//function : Directrix
185//purpose :
186//=======================================================================
187
188Ax2d Geom2d_Parabola::Directrix () const
189{
190 gp_Parab2d Prb (pos, focalLength);
191 return Prb.Directrix();
192}
193
194//=======================================================================
195//function : Eccentricity
196//purpose :
197//=======================================================================
198
199Standard_Real Geom2d_Parabola::Eccentricity () const
200{
201 return 1.0;
202}
203
204//=======================================================================
205//function : Focus
206//purpose :
207//=======================================================================
208
209Pnt2d Geom2d_Parabola::Focus () const
210{
211 XY Pxy = pos.XDirection().XY();
212 Pxy.Multiply (focalLength);
213 Pxy.Add (pos.Location().XY());
214 return Pnt2d (Pxy);
215}
216
217//=======================================================================
218//function : Focal
219//purpose :
220//=======================================================================
221
222Standard_Real Geom2d_Parabola::Focal () const
223{
224 return focalLength;
225}
226
227//=======================================================================
228//function : Parameter
229//purpose :
230//=======================================================================
231
232Standard_Real Geom2d_Parabola::Parameter () const
233{
234 return 2.0 * focalLength;
235}
236
237//=======================================================================
238//function : D0
239//purpose :
240//=======================================================================
241
242void Geom2d_Parabola::D0 (const Standard_Real U,
243 Pnt2d& P) const
244{
245 P = ElCLib::ParabolaValue (U, pos, focalLength);
246}
247
248//=======================================================================
249//function : D1
250//purpose :
251//=======================================================================
252
253void Geom2d_Parabola::D1 (const Standard_Real U, Pnt2d& P, Vec2d& V1) const
254{
255 ElCLib::ParabolaD1 (U, pos, focalLength, P, V1);
256}
257
258//=======================================================================
259//function : D2
260//purpose :
261//=======================================================================
262
263void Geom2d_Parabola::D2 (const Standard_Real U,
264 Pnt2d& P,
265 Vec2d& V1, Vec2d& V2) const
266{
267 ElCLib::ParabolaD2 (U, pos, focalLength, P, V1, V2);
268}
269
270//=======================================================================
271//function : D3
272//purpose :
273//=======================================================================
274
275void Geom2d_Parabola::D3 (const Standard_Real U,
276 Pnt2d& P,
277 Vec2d& V1, Vec2d& V2, Vec2d& V3) const
278{
279 ElCLib::ParabolaD2 (U, pos, focalLength, P, V1, V2);
280 V3.SetCoord (0.0, 0.0);
281}
282
283//=======================================================================
284//function : DN
285//purpose :
286//=======================================================================
287
288Vec2d Geom2d_Parabola::DN (const Standard_Real U, const Standard_Integer N) const
289{
290 Standard_RangeError_Raise_if (N < 1, " ");
291 return ElCLib::ParabolaDN (U, pos, focalLength, N);
292}
293
294
295//=======================================================================
296//function : Transform
297//purpose :
298//=======================================================================
299
300void Geom2d_Parabola::Transform (const Trsf2d& T)
301{
302 focalLength *= Abs(T.ScaleFactor());
303 pos.Transform (T);
304}
305
306//=======================================================================
307//function : TransformedParameter
308//purpose :
309//=======================================================================
310
311Standard_Real Geom2d_Parabola::TransformedParameter(const Standard_Real U,
312 const gp_Trsf2d& T) const
313{
314 if (Precision::IsInfinite(U)) return U;
315 return U * Abs(T.ScaleFactor());
316}
317
318//=======================================================================
319//function : ParametricTransformation
320//purpose :
321//=======================================================================
322
323Standard_Real Geom2d_Parabola::ParametricTransformation(const gp_Trsf2d& T) const
324{
325 return Abs(T.ScaleFactor());
326}
327
328