// Copyright (c) 1995-1999 Matra Datavision // Copyright (c) 1999-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. 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.SquareDistance(pos.Location()); 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; }