// Copyright (c) 1995-1999 Matra Datavision // Copyright (c) 1999-2012 OPEN CASCADE SAS // // The content of this file is subject to the Open CASCADE Technology Public // License Version 6.5 (the "License"). You may not use the content of this file // except in compliance with the License. Please obtain a copy of the License // at http://www.opencascade.org and read it completely before using this file. // // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. // // The Original Code and all software distributed under the License is // distributed on an "AS IS" basis, without warranty of any kind, and the // Initial Developer hereby disclaims all such warranties, including without // limitation, any warranties of merchantability, fitness for a particular // purpose or non-infringement. Please see the License for the specific terms // and conditions governing the rights and limitations under the License. inline gp_Lin2d::gp_Lin2d () { } inline gp_Lin2d::gp_Lin2d (const gp_Ax2d& A) : pos(A) { } inline gp_Lin2d::gp_Lin2d (const gp_Pnt2d& P, const gp_Dir2d& V) : pos(P, V) { } inline void gp_Lin2d::Reverse() { pos.Reverse(); } inline gp_Lin2d gp_Lin2d::Reversed() const { gp_Lin2d L = *this; L.pos.Reverse (); return L; } inline void gp_Lin2d::SetDirection (const gp_Dir2d& V) { pos.SetDirection (V); } inline void gp_Lin2d::SetLocation (const gp_Pnt2d& P) { pos.SetLocation (P); } inline void gp_Lin2d::SetPosition (const gp_Ax2d& A) { pos = A; } inline void gp_Lin2d::Coefficients (Standard_Real& A, Standard_Real& B, Standard_Real& C) const { A = pos.Direction().Y(); B = - pos.Direction().X(); C = -(A * pos.Location().X() + B * pos.Location().Y()); } inline const gp_Dir2d& gp_Lin2d::Direction() const { return pos.Direction(); } inline const gp_Pnt2d& gp_Lin2d::Location() const { return pos.Location(); } inline const gp_Ax2d& gp_Lin2d::Position() const { return pos; } inline Standard_Real gp_Lin2d::Angle (const gp_Lin2d& Other) const { return pos.Direction().Angle (Other.pos.Direction()); } inline Standard_Boolean gp_Lin2d::Contains (const gp_Pnt2d& P, const Standard_Real LinearTolerance) const { return Distance(P) <= LinearTolerance; } inline Standard_Real gp_Lin2d::Distance (const gp_Pnt2d& P) const { gp_XY Coord = P.XY(); Coord.Subtract ((pos.Location()).XY()); Standard_Real val = Coord.Crossed (pos.Direction().XY()); if (val < 0) val = - val; return val; } inline Standard_Real gp_Lin2d::Distance (const gp_Lin2d& Other) const { Standard_Real D = 0.0; if (pos.IsParallel (Other.pos, gp::Resolution())) D = Other.Distance(pos.Location()); return D; } inline Standard_Real gp_Lin2d::SquareDistance (const gp_Pnt2d& P) const { gp_XY Coord = P.XY(); Coord.Subtract ((pos.Location()).XY()); Standard_Real D = Coord.Crossed (pos.Direction().XY()); return D * D; } inline Standard_Real gp_Lin2d::SquareDistance (const gp_Lin2d& Other) const { Standard_Real D = 0.0; if (pos.IsParallel (Other.pos, gp::Resolution())) { D = Other.Distance(pos.Location()); D *= D;return D * D; } return D; } inline gp_Lin2d gp_Lin2d::Normal (const gp_Pnt2d& P) const { return gp_Lin2d (gp_Ax2d (P,gp_Dir2d (-(pos.Direction().Y()), pos.Direction().X()))); } inline void gp_Lin2d::Rotate (const gp_Pnt2d& P, const Standard_Real Ang) { pos.Rotate (P, Ang); } inline gp_Lin2d gp_Lin2d::Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const { gp_Lin2d L = *this; L.pos.Rotate (P, Ang); return L; } inline void gp_Lin2d::Scale (const gp_Pnt2d& P, const Standard_Real S) { pos.Scale(P, S); } inline gp_Lin2d gp_Lin2d::Scaled (const gp_Pnt2d& P, const Standard_Real S) const { gp_Lin2d L = *this; L.pos.Scale(P, S); return L; } inline void gp_Lin2d::Transform (const gp_Trsf2d& T) { pos.Transform(T); } inline gp_Lin2d gp_Lin2d::Transformed (const gp_Trsf2d& T) const { gp_Lin2d L = *this; L.pos.Transform(T); return L; } inline void gp_Lin2d::Translate (const gp_Vec2d& V) { pos.Translate(V); } inline gp_Lin2d gp_Lin2d::Translated (const gp_Vec2d& V) const { gp_Lin2d L = *this; L.pos.Translate(V); return L; } inline void gp_Lin2d::Translate (const gp_Pnt2d& P1, const gp_Pnt2d& P2) { pos.Translate(P1, P2); } inline gp_Lin2d gp_Lin2d::Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const { gp_Lin2d L = *this; L.pos.Translate (gp_Vec2d(P1, P2)); return L; }