1 // File gp_Vec2d.lxx , REG 27/10/90
2 // Modif JCV 08/01/91 modifs suite a la deuxieme revue de projet
3 // et introduction des classes XY, Mat2d + nouveau operateurs
5 #include <gp_Dir2d.hxx>
6 #include <gp_Trsf2d.hxx>
7 #include <gp_Pnt2d.hxx>
9 inline gp_Vec2d::gp_Vec2d()
12 inline gp_Vec2d::gp_Vec2d (const gp_Dir2d& V)
15 inline gp_Vec2d::gp_Vec2d (const gp_XY& Coord) : coord(Coord)
18 inline gp_Vec2d::gp_Vec2d (const Standard_Real Xv,
19 const Standard_Real Yv) : coord (Xv, Yv)
22 inline gp_Vec2d::gp_Vec2d (const gp_Pnt2d& P1,
24 { coord = P2.XY().Subtracted (P1.XY()); }
26 inline void gp_Vec2d::SetCoord (const Standard_Integer Index,
27 const Standard_Real Xi)
28 { coord.SetCoord (Index, Xi); }
30 inline void gp_Vec2d::SetCoord (const Standard_Real Xv,
31 const Standard_Real Yv)
32 { coord.SetCoord (Xv, Yv); }
34 inline void gp_Vec2d::SetX (const Standard_Real X)
37 inline void gp_Vec2d::SetY (const Standard_Real Y)
40 inline void gp_Vec2d::SetXY (const gp_XY& Coord)
43 inline Standard_Real gp_Vec2d::Coord (const Standard_Integer Index) const
44 { return coord.Coord(Index); }
46 inline void gp_Vec2d::Coord(Standard_Real& Xv,
47 Standard_Real& Yv) const
48 { coord.Coord(Xv, Yv); }
50 inline Standard_Real gp_Vec2d::X() const
53 inline Standard_Real gp_Vec2d::Y() const
56 inline const gp_XY& gp_Vec2d::XY () const
59 inline Standard_Boolean gp_Vec2d::IsNormal
60 (const gp_Vec2d& Other,
61 const Standard_Real AngularTolerance) const
63 Standard_Real Ang = Angle(Other);
64 if (Ang < 0) Ang = - Ang;
65 Ang = M_PI / 2.0 - Angle(Other);
66 if (Ang < 0) Ang = - Ang;
67 return Ang <= AngularTolerance;
70 inline Standard_Boolean gp_Vec2d::IsOpposite
71 (const gp_Vec2d& Other,
72 const Standard_Real AngularTolerance) const
74 Standard_Real Ang = Angle(Other);
75 if (Ang < 0) Ang = - Ang;
76 return M_PI - Ang <= AngularTolerance;
79 inline Standard_Boolean gp_Vec2d::IsParallel
80 (const gp_Vec2d& Other,
81 const Standard_Real AngularTolerance) const
83 Standard_Real Ang = Angle(Other);
84 if (Ang < 0) Ang = - Ang;
85 return Ang <= AngularTolerance || M_PI - Ang <= AngularTolerance;
88 inline Standard_Real gp_Vec2d::Magnitude() const
89 { return coord.Modulus(); }
91 inline Standard_Real gp_Vec2d::SquareMagnitude() const
92 { return coord.SquareModulus(); }
94 inline void gp_Vec2d::Add (const gp_Vec2d& Other)
95 { coord.Add (Other.coord); }
97 inline gp_Vec2d gp_Vec2d::Added (const gp_Vec2d& Other) const
100 V.coord.Add (Other.coord);
104 inline Standard_Real gp_Vec2d::Crossed (const gp_Vec2d& Right) const
105 { return coord.Crossed (Right.coord); }
107 inline Standard_Real gp_Vec2d::CrossMagnitude (const gp_Vec2d& Right) const
108 { return coord.CrossMagnitude (Right.coord); }
110 inline Standard_Real gp_Vec2d::CrossSquareMagnitude
111 (const gp_Vec2d& Right) const
112 { return coord.CrossSquareMagnitude (Right.coord); }
114 inline void gp_Vec2d::Divide (const Standard_Real Scalar)
115 { coord.Divide (Scalar); }
117 inline gp_Vec2d gp_Vec2d::Divided (const Standard_Real Scalar) const
120 V.coord.Divide(Scalar);
124 inline Standard_Real gp_Vec2d::Dot (const gp_Vec2d& Other) const
125 { return coord.Dot (Other.coord); }
127 inline void gp_Vec2d::Multiply (const Standard_Real Scalar)
128 { coord.Multiply (Scalar); }
130 inline gp_Vec2d gp_Vec2d::Multiplied (const Standard_Real Scalar) const
133 V.coord.Multiply(Scalar);
137 inline void gp_Vec2d::Normalize()
139 Standard_Real D = coord.Modulus();
140 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
144 inline gp_Vec2d gp_Vec2d::Normalized() const
146 Standard_Real D = coord.Modulus();
147 Standard_ConstructionError_Raise_if (D <= gp::Resolution(), "");
153 inline void gp_Vec2d::Reverse()
156 inline gp_Vec2d gp_Vec2d::Reversed() const
163 inline void gp_Vec2d::Subtract (const gp_Vec2d& Right)
164 { coord.Subtract (Right.coord); }
166 inline gp_Vec2d gp_Vec2d::Subtracted (const gp_Vec2d& Right) const
169 V.coord.Subtract (Right.coord);
173 inline void gp_Vec2d::SetLinearForm (const Standard_Real L,
174 const gp_Vec2d& Left,
175 const Standard_Real R,
176 const gp_Vec2d& Right)
177 { coord.SetLinearForm (L, Left.coord, R, Right.coord); }
179 inline void gp_Vec2d::SetLinearForm (const Standard_Real L,
180 const gp_Vec2d& Left,
181 const gp_Vec2d& Right)
182 { coord.SetLinearForm (L, Left.coord, Right.coord); }
184 inline void gp_Vec2d::SetLinearForm (const gp_Vec2d& Left,
185 const gp_Vec2d& Right)
186 { coord.SetLinearForm (Left.coord, Right.coord); }
188 inline void gp_Vec2d::SetLinearForm (const Standard_Real A1,
190 const Standard_Real A2,
193 { coord.SetLinearForm (A1, V1.coord, A2, V2.coord, V3.coord); }
195 inline void gp_Vec2d::Rotate (const Standard_Real Ang)
198 T.SetRotation (gp_Pnt2d (0.0, 0.0), Ang);
199 coord.Multiply (T.VectorialPart ());
202 inline gp_Vec2d gp_Vec2d::Rotated (const Standard_Real Ang) const
209 inline void gp_Vec2d::Scale (const Standard_Real S)
210 { coord.Multiply (S); }
212 inline gp_Vec2d gp_Vec2d::Scaled (const Standard_Real S) const
215 V.coord.Multiply (S);
219 inline gp_Vec2d gp_Vec2d::Transformed (const gp_Trsf2d& T) const
226 inline gp_Vec2d operator* (const Standard_Real Scalar,
228 { return V.Multiplied(Scalar); }