1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
15 // Modif JCV 08/01/91 introduction classe XY dans le package gp
17 #include <Standard_ConstructionError.hxx>
18 #include <Standard_OutOfRange.hxx>
20 #include <gp_Ax2d.hxx>
21 #include <gp_Trsf2d.hxx>
23 inline gp_Dir2d::gp_Dir2d() : coord (1.,0.)
27 inline gp_Dir2d::gp_Dir2d (const gp_Vec2d& V)
29 const gp_XY& XY = V.XY();
30 Standard_Real X = XY.X();
31 Standard_Real Y = XY.Y();
32 Standard_Real D = sqrt(X * X + Y * Y);
33 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
38 inline gp_Dir2d::gp_Dir2d (const gp_XY& XY)
40 Standard_Real X = XY.X();
41 Standard_Real Y = XY.Y();
42 Standard_Real D = sqrt(X * X + Y * Y);
43 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
48 inline gp_Dir2d::gp_Dir2d (const Standard_Real Xv,
49 const Standard_Real Yv)
51 Standard_Real D = sqrt (Xv * Xv + Yv * Yv);
52 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
57 inline void gp_Dir2d::SetCoord (const Standard_Integer Index,
58 const Standard_Real Xi)
60 Standard_Real X = coord.X();
61 Standard_Real Y = coord.Y();
62 Standard_OutOfRange_Raise_if (Index < 1 || Index > 2, " ");
63 if (Index == 1) X = Xi;
65 Standard_Real D = sqrt (X * X + Y * Y);
66 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
71 inline void gp_Dir2d::SetCoord (const Standard_Real Xv,
72 const Standard_Real Yv)
74 Standard_Real D = sqrt (Xv * Xv + Yv * Yv);
75 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
80 inline void gp_Dir2d::SetX (const Standard_Real X)
82 Standard_Real Y = coord.Y();
83 Standard_Real D = sqrt (X * X + Y * Y);
84 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
89 inline void gp_Dir2d::SetY (const Standard_Real Y)
91 Standard_Real X = coord.X();
92 Standard_Real D = sqrt (X * X + Y * Y);
93 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
98 inline void gp_Dir2d::SetXY (const gp_XY& XY)
100 Standard_Real X = XY.X();
101 Standard_Real Y = XY.Y();
102 Standard_Real D = sqrt(X * X + Y * Y);
103 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
108 inline Standard_Real gp_Dir2d::Coord (const Standard_Integer Index) const
109 { return coord.Coord(Index); }
111 inline void gp_Dir2d::Coord(Standard_Real& Xv, Standard_Real& Yv) const
112 { coord.Coord (Xv, Yv); }
114 inline Standard_Real gp_Dir2d::X() const
115 { return coord.X() ; }
117 inline Standard_Real gp_Dir2d::Y() const
118 { return coord.Y() ; }
120 inline const gp_XY& gp_Dir2d::XY () const
123 inline Standard_Boolean gp_Dir2d::IsEqual
124 (const gp_Dir2d& Other,
125 const Standard_Real AngularTolerance) const
127 Standard_Real Ang = Angle(Other);
128 if (Ang < 0) Ang = - Ang;
129 return Ang <= AngularTolerance;
132 inline Standard_Boolean gp_Dir2d::IsNormal
133 (const gp_Dir2d& Other,
134 const Standard_Real AngularTolerance) const
136 Standard_Real Ang = Angle(Other);
137 if (Ang < 0) Ang = - Ang;
138 Ang = M_PI / 2.0 - Ang;
139 if (Ang < 0) Ang = - Ang;
140 return Ang <= AngularTolerance;
143 inline Standard_Boolean gp_Dir2d::IsOpposite
144 (const gp_Dir2d& Other,
145 const Standard_Real AngularTolerance) const
147 Standard_Real Ang = Angle(Other);
148 if (Ang < 0) Ang = - Ang;
149 return M_PI - Ang <= AngularTolerance;
152 inline Standard_Boolean gp_Dir2d::IsParallel
153 (const gp_Dir2d& Other,
154 const Standard_Real AngularTolerance) const
156 Standard_Real Ang = Angle(Other);
157 if (Ang < 0) Ang = - Ang;
158 return Ang <= AngularTolerance || M_PI - Ang <= AngularTolerance;
161 inline Standard_Real gp_Dir2d::Crossed (const gp_Dir2d& Right) const
162 { return coord.Crossed (Right.coord); }
164 inline Standard_Real gp_Dir2d::Dot (const gp_Dir2d& Other) const
165 { return coord.Dot (Other.coord); }
167 inline void gp_Dir2d::Reverse()
170 inline gp_Dir2d gp_Dir2d::Reversed() const
177 inline void gp_Dir2d::Rotate (const Standard_Real Ang)
180 T.SetRotation (gp_Pnt2d (0.0, 0.0), Ang);
181 coord.Multiply (T.HVectorialPart());
184 inline gp_Dir2d gp_Dir2d::Rotated (const Standard_Real Ang) const
191 inline gp_Dir2d gp_Dir2d::Transformed (const gp_Trsf2d& T) const