// 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. #include #include #include #include inline gp_Circ::gp_Circ () : radius(RealLast()) { } inline gp_Circ::gp_Circ (const gp_Ax2& A2, const Standard_Real R) : pos(A2), radius(R) { Standard_ConstructionError_Raise_if (R < 0.0, ""); } inline void gp_Circ::SetAxis (const gp_Ax1& A1) { pos.SetAxis (A1); } inline void gp_Circ::SetLocation (const gp_Pnt& P) { pos.SetLocation (P); } inline void gp_Circ::SetPosition (const gp_Ax2& A2) { pos = A2; } inline void gp_Circ::SetRadius (const Standard_Real R) { Standard_ConstructionError_Raise_if (R < 0.0, ""); radius = R; } inline Standard_Real gp_Circ::Area() const { return M_PI * radius * radius; } inline const gp_Ax1& gp_Circ::Axis () const { return pos.Axis(); } inline Standard_Real gp_Circ::Length() const { return 2. * M_PI * radius; } inline const gp_Pnt& gp_Circ::Location () const { return pos.Location(); } inline const gp_Ax2& gp_Circ::Position() const { return pos; } inline Standard_Real gp_Circ::Radius() const { return radius; } inline gp_Ax1 gp_Circ::XAxis () const {return gp_Ax1(pos.Location(), pos.XDirection());} inline gp_Ax1 gp_Circ::YAxis () const {return gp_Ax1(pos.Location(), pos.YDirection());} inline Standard_Real gp_Circ::Distance (const gp_Pnt& P) const { return sqrt(SquareDistance(P)); } inline Standard_Real gp_Circ::SquareDistance (const gp_Pnt& P) const { gp_Vec V(Location(),P); Standard_Real x = V.Dot(pos.XDirection()); Standard_Real y = V.Dot(pos.YDirection()); Standard_Real z = V.Dot(pos.Direction ()); Standard_Real t = sqrt( x*x + y*y) - radius; return (t*t + z*z); } inline Standard_Boolean gp_Circ::Contains (const gp_Pnt& P, const Standard_Real LinearTolerance) const { return Distance(P) <= LinearTolerance; } inline void gp_Circ::Rotate (const gp_Ax1& A1, const Standard_Real Ang) { pos.Rotate(A1, Ang); } inline gp_Circ gp_Circ::Rotated (const gp_Ax1& A1, const Standard_Real Ang) const { gp_Circ C = *this; C.pos.Rotate(A1, Ang); return C; } inline void gp_Circ::Scale (const gp_Pnt& P, const Standard_Real S) { radius *= S; if (radius < 0) radius = - radius; pos.Scale(P, S); } inline gp_Circ gp_Circ::Scaled (const gp_Pnt& P, const Standard_Real S) const { gp_Circ C = *this; C.radius *= S; if (C.radius < 0) C.radius = - C.radius; C.pos.Scale(P, S); return C; } inline void gp_Circ::Transform (const gp_Trsf& T) { radius *= T.ScaleFactor(); if (radius < 0) radius = - radius; pos.Transform(T); } inline gp_Circ gp_Circ::Transformed (const gp_Trsf& T) const { gp_Circ C = *this; C.radius *= T.ScaleFactor(); if (C.radius < 0) C.radius = - C.radius; C.pos.Transform(T); return C; } inline void gp_Circ::Translate (const gp_Vec& V) { pos.Translate(V); } inline gp_Circ gp_Circ::Translated (const gp_Vec& V) const { gp_Circ C = *this; C.pos.Translate(V); return C; } inline void gp_Circ::Translate (const gp_Pnt& P1, const gp_Pnt& P2) {pos.Translate(P1,P2);} inline gp_Circ gp_Circ::Translated (const gp_Pnt& P1, const gp_Pnt& P2) const { gp_Circ C = *this; C.pos.Translate(P1, P2); return C; }