// File gp_Dir2d.lxx , REG 27/10/90 // Modif JCV 08/01/91 introduction classe XY dans le package gp #include #include #include #include #include inline gp_Dir2d::gp_Dir2d() : coord (1.,0.) { } inline gp_Dir2d::gp_Dir2d (const gp_Vec2d& V) { const gp_XY& XY = V.XY(); Standard_Real X = XY.X(); Standard_Real Y = XY.Y(); Standard_Real D = sqrt(X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline gp_Dir2d::gp_Dir2d (const gp_XY& XY) { Standard_Real X = XY.X(); Standard_Real Y = XY.Y(); Standard_Real D = sqrt(X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline gp_Dir2d::gp_Dir2d (const Standard_Real Xv, const Standard_Real Yv) { Standard_Real D = sqrt (Xv * Xv + Yv * Yv); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(Xv / D); coord.SetY(Yv / D); } inline void gp_Dir2d::SetCoord (const Standard_Integer Index, const Standard_Real Xi) { Standard_Real X = coord.X(); Standard_Real Y = coord.Y(); Standard_OutOfRange_Raise_if (Index < 1 || Index > 2, " "); if (Index == 1) X = Xi; else Y = Xi; Standard_Real D = sqrt (X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline void gp_Dir2d::SetCoord (const Standard_Real Xv, const Standard_Real Yv) { Standard_Real D = sqrt (Xv * Xv + Yv * Yv); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(Xv / D); coord.SetY(Yv / D); } inline void gp_Dir2d::SetX (const Standard_Real X) { Standard_Real Y = coord.Y(); Standard_Real D = sqrt (X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline void gp_Dir2d::SetY (const Standard_Real Y) { Standard_Real X = coord.X(); Standard_Real D = sqrt (X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline void gp_Dir2d::SetXY (const gp_XY& XY) { Standard_Real X = XY.X(); Standard_Real Y = XY.Y(); Standard_Real D = sqrt(X * X + Y * Y); Standard_ConstructionError_Raise_if (D <= gp::Resolution(), ""); coord.SetX(X / D); coord.SetY(Y / D); } inline Standard_Real gp_Dir2d::Coord (const Standard_Integer Index) const { return coord.Coord(Index); } inline void gp_Dir2d::Coord(Standard_Real& Xv, Standard_Real& Yv) const { coord.Coord (Xv, Yv); } inline Standard_Real gp_Dir2d::X() const { return coord.X() ; } inline Standard_Real gp_Dir2d::Y() const { return coord.Y() ; } inline const gp_XY& gp_Dir2d::XY () const { return coord; } inline Standard_Boolean gp_Dir2d::IsEqual (const gp_Dir2d& Other, const Standard_Real AngularTolerance) const { Standard_Real Ang = Angle(Other); if (Ang < 0) Ang = - Ang; return Ang <= AngularTolerance; } inline Standard_Boolean gp_Dir2d::IsNormal (const gp_Dir2d& Other, const Standard_Real AngularTolerance) const { Standard_Real Ang = Angle(Other); if (Ang < 0) Ang = - Ang; Ang = Standard_PI / 2.0 - Ang; if (Ang < 0) Ang = - Ang; return Ang <= AngularTolerance; } inline Standard_Boolean gp_Dir2d::IsOpposite (const gp_Dir2d& Other, const Standard_Real AngularTolerance) const { Standard_Real Ang = Angle(Other); if (Ang < 0) Ang = - Ang; return Standard_PI - Ang <= AngularTolerance; } inline Standard_Boolean gp_Dir2d::IsParallel (const gp_Dir2d& Other, const Standard_Real AngularTolerance) const { Standard_Real Ang = Angle(Other); if (Ang < 0) Ang = - Ang; return Ang <= AngularTolerance || Standard_PI - Ang <= AngularTolerance; } inline Standard_Real gp_Dir2d::Crossed (const gp_Dir2d& Right) const { return coord.Crossed (Right.coord); } inline Standard_Real gp_Dir2d::Dot (const gp_Dir2d& Other) const { return coord.Dot (Other.coord); } inline void gp_Dir2d::Reverse() { coord.Reverse(); } inline gp_Dir2d gp_Dir2d::Reversed() const { gp_Dir2d V = *this; V.coord.Reverse (); return V; } inline void gp_Dir2d::Rotate (const Standard_Real Ang) { gp_Trsf2d T; T.SetRotation (gp_Pnt2d (0.0, 0.0), Ang); coord.Multiply (T.HVectorialPart()); } inline gp_Dir2d gp_Dir2d::Rotated (const Standard_Real Ang) const { gp_Dir2d V = *this; V.Rotate (Ang); return V; } inline gp_Dir2d gp_Dir2d::Transformed (const gp_Trsf2d& T) const { gp_Dir2d V = *this; V.Transform (T); return V; }