// 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. // JCV 30/08/90 Modif passage version C++ 2.0 sur Sun #include inline gp_Pln::gp_Pln() { } inline gp_Pln::gp_Pln(const gp_Ax3& A3) : pos(A3) { } inline void gp_Pln::Coefficients (Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& D) const { const gp_Dir& dir = pos.Direction(); if (pos.Direct()) { A = dir.X(); B = dir.Y(); C = dir.Z(); } else { A = -dir.X(); B = -dir.Y(); C = -dir.Z(); } const gp_Pnt& P = pos.Location(); D = -(A * P.X() + B * P.Y() + C * P.Z()); } inline void gp_Pln::SetAxis (const gp_Ax1& A1) { pos.SetAxis (A1); } inline void gp_Pln::SetLocation (const gp_Pnt& Loc) { pos.SetLocation (Loc); } inline void gp_Pln::SetPosition (const gp_Ax3& A3) { pos = A3; } inline void gp_Pln::UReverse () { pos.XReverse(); } inline void gp_Pln::VReverse () { pos.YReverse(); } inline Standard_Boolean gp_Pln::Direct()const { return pos.Direct(); } inline const gp_Ax1& gp_Pln::Axis() const { return pos.Axis(); } inline const gp_Pnt& gp_Pln::Location() const { return pos.Location(); } inline const gp_Ax3& gp_Pln::Position() const { return pos; } inline Standard_Real gp_Pln::Distance(const gp_Pnt& P) const { const gp_Pnt& loc = pos.Location (); const gp_Dir& dir = pos.Direction(); Standard_Real D = (dir.X() * (P.X() - loc.X()) + dir.Y() * (P.Y() - loc.Y()) + dir.Z() * (P.Z() - loc.Z())); if (D < 0) D = - D; return D; } inline Standard_Real gp_Pln::Distance (const gp_Lin& L) const { Standard_Real D = 0.0; if ((pos.Direction()).IsNormal (L.Direction(), gp::Resolution())) { const gp_Pnt& P = L .Location (); const gp_Pnt& loc = pos.Location (); const gp_Dir& dir = pos.Direction(); D = (dir.X() * (P.X() - loc.X()) + dir.Y() * (P.Y() - loc.Y()) + dir.Z() * (P.Z() - loc.Z())); if (D < 0) D = - D; } return D; } inline Standard_Real gp_Pln::Distance(const gp_Pln& Other) const { Standard_Real D = 0.0; if ((pos.Direction()).IsParallel(Other.pos.Direction(), gp::Resolution())){ const gp_Pnt& P = Other.pos.Location(); const gp_Pnt& loc = pos.Location (); const gp_Dir& dir = pos.Direction(); D = (dir.X() * (P.X() - loc.X()) + dir.Y() * (P.Y() - loc.Y()) + dir.Z() * (P.Z() - loc.Z())); if (D < 0) D = - D; } return D; } inline Standard_Real gp_Pln::SquareDistance (const gp_Pnt& P) const { Standard_Real D = Distance(P); return D * D; } inline Standard_Real gp_Pln::SquareDistance (const gp_Lin& L) const { Standard_Real D = Distance(L); return D * D; } inline Standard_Real gp_Pln::SquareDistance (const gp_Pln& Other) const { Standard_Real D = Distance(Other); return D * D; } inline gp_Ax1 gp_Pln::XAxis () const { return gp_Ax1 (pos.Location(), pos.XDirection()); } inline gp_Ax1 gp_Pln::YAxis () const { return gp_Ax1 (pos.Location(), pos.YDirection()); } inline Standard_Boolean gp_Pln::Contains (const gp_Pnt& P, const Standard_Real LinearTolerance) const { return Distance(P) <= LinearTolerance; } inline Standard_Boolean gp_Pln::Contains (const gp_Lin& L, const Standard_Real LinearTolerance, const Standard_Real AngularTolerance) const { return Contains(L.Location(), LinearTolerance) && pos.Direction().IsNormal(L.Direction(), AngularTolerance); } inline void gp_Pln::Rotate (const gp_Ax1& A1, const Standard_Real Ang) { pos.Rotate(A1, Ang); } inline gp_Pln gp_Pln::Rotated (const gp_Ax1& A1, const Standard_Real Ang) const { gp_Pln Pl = *this; Pl.pos.Rotate(A1, Ang); return Pl; } inline void gp_Pln::Scale (const gp_Pnt& P, const Standard_Real S) { pos.Scale(P, S); } inline gp_Pln gp_Pln::Scaled (const gp_Pnt& P, const Standard_Real S) const { gp_Pln Pl = *this; Pl.pos.Scale(P, S); return Pl; } inline void gp_Pln::Transform (const gp_Trsf& T) { pos.Transform(T); } inline gp_Pln gp_Pln::Transformed (const gp_Trsf& T) const { gp_Pln Pl = *this; Pl.pos.Transform(T); return Pl; } inline void gp_Pln::Translate (const gp_Vec& V) { pos.Translate(V); } inline gp_Pln gp_Pln::Translated (const gp_Vec& V) const { gp_Pln Pl = *this; Pl.pos.Translate(V); return Pl; } inline void gp_Pln::Translate (const gp_Pnt& P1, const gp_Pnt& P2) { pos.Translate(P1,P2); } inline gp_Pln gp_Pln::Translated (const gp_Pnt& P1, const gp_Pnt& P2) const { gp_Pln Pl = *this; Pl.pos.Translate(P1, P2); return Pl; }