1 // File gp_Dir2d.lxx , REG 27/10/90
2 // Modif JCV 08/01/91 introduction classe XY dans le package gp
4 #include <Standard_ConstructionError.hxx>
5 #include <Standard_OutOfRange.hxx>
8 #include <gp_Trsf2d.hxx>
10 inline gp_Dir2d::gp_Dir2d() : coord (1.,0.)
14 inline gp_Dir2d::gp_Dir2d (const gp_Vec2d& V)
16 const gp_XY& XY = V.XY();
17 Standard_Real X = XY.X();
18 Standard_Real Y = XY.Y();
19 Standard_Real D = sqrt(X * X + Y * Y);
20 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
25 inline gp_Dir2d::gp_Dir2d (const gp_XY& XY)
27 Standard_Real X = XY.X();
28 Standard_Real Y = XY.Y();
29 Standard_Real D = sqrt(X * X + Y * Y);
30 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
35 inline gp_Dir2d::gp_Dir2d (const Standard_Real Xv,
36 const Standard_Real Yv)
38 Standard_Real D = sqrt (Xv * Xv + Yv * Yv);
39 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
44 inline void gp_Dir2d::SetCoord (const Standard_Integer Index,
45 const Standard_Real Xi)
47 Standard_Real X = coord.X();
48 Standard_Real Y = coord.Y();
49 Standard_OutOfRange_Raise_if (Index < 1 || Index > 2, " ");
50 if (Index == 1) X = Xi;
52 Standard_Real D = sqrt (X * X + Y * Y);
53 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
58 inline void gp_Dir2d::SetCoord (const Standard_Real Xv,
59 const Standard_Real Yv)
61 Standard_Real D = sqrt (Xv * Xv + Yv * Yv);
62 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
67 inline void gp_Dir2d::SetX (const Standard_Real X)
69 Standard_Real Y = coord.Y();
70 Standard_Real D = sqrt (X * X + Y * Y);
71 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
76 inline void gp_Dir2d::SetY (const Standard_Real Y)
78 Standard_Real X = coord.X();
79 Standard_Real D = sqrt (X * X + Y * Y);
80 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
85 inline void gp_Dir2d::SetXY (const gp_XY& XY)
87 Standard_Real X = XY.X();
88 Standard_Real Y = XY.Y();
89 Standard_Real D = sqrt(X * X + Y * Y);
90 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
95 inline Standard_Real gp_Dir2d::Coord (const Standard_Integer Index) const
96 { return coord.Coord(Index); }
98 inline void gp_Dir2d::Coord(Standard_Real& Xv, Standard_Real& Yv) const
99 { coord.Coord (Xv, Yv); }
101 inline Standard_Real gp_Dir2d::X() const
102 { return coord.X() ; }
104 inline Standard_Real gp_Dir2d::Y() const
105 { return coord.Y() ; }
107 inline const gp_XY& gp_Dir2d::XY () const
110 inline Standard_Boolean gp_Dir2d::IsEqual
111 (const gp_Dir2d& Other,
112 const Standard_Real AngularTolerance) const
114 Standard_Real Ang = Angle(Other);
115 if (Ang < 0) Ang = - Ang;
116 return Ang <= AngularTolerance;
119 inline Standard_Boolean gp_Dir2d::IsNormal
120 (const gp_Dir2d& Other,
121 const Standard_Real AngularTolerance) const
123 Standard_Real Ang = Angle(Other);
124 if (Ang < 0) Ang = - Ang;
125 Ang = M_PI / 2.0 - Ang;
126 if (Ang < 0) Ang = - Ang;
127 return Ang <= AngularTolerance;
130 inline Standard_Boolean gp_Dir2d::IsOpposite
131 (const gp_Dir2d& Other,
132 const Standard_Real AngularTolerance) const
134 Standard_Real Ang = Angle(Other);
135 if (Ang < 0) Ang = - Ang;
136 return M_PI - Ang <= AngularTolerance;
139 inline Standard_Boolean gp_Dir2d::IsParallel
140 (const gp_Dir2d& Other,
141 const Standard_Real AngularTolerance) const
143 Standard_Real Ang = Angle(Other);
144 if (Ang < 0) Ang = - Ang;
145 return Ang <= AngularTolerance || M_PI - Ang <= AngularTolerance;
148 inline Standard_Real gp_Dir2d::Crossed (const gp_Dir2d& Right) const
149 { return coord.Crossed (Right.coord); }
151 inline Standard_Real gp_Dir2d::Dot (const gp_Dir2d& Other) const
152 { return coord.Dot (Other.coord); }
154 inline void gp_Dir2d::Reverse()
157 inline gp_Dir2d gp_Dir2d::Reversed() const
164 inline void gp_Dir2d::Rotate (const Standard_Real Ang)
167 T.SetRotation (gp_Pnt2d (0.0, 0.0), Ang);
168 coord.Multiply (T.HVectorialPart());
171 inline gp_Dir2d gp_Dir2d::Rotated (const Standard_Real Ang) const
178 inline gp_Dir2d gp_Dir2d::Transformed (const gp_Trsf2d& T) const