// 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 inline gp_Circ2d::gp_Circ2d () : radius(RealLast()) { } inline gp_Circ2d::gp_Circ2d (const gp_Ax2d& XAxis, const Standard_Real Radius, const Standard_Boolean Sense) : radius(Radius) { Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d() - radius should be positive number"); pos = gp_Ax22d(XAxis,Sense); } inline gp_Circ2d::gp_Circ2d (const gp_Ax22d& Axis, const Standard_Real Radius) : pos(Axis), radius(Radius) { Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d() - radius should be positive number"); } inline void gp_Circ2d::SetLocation (const gp_Pnt2d& P) { pos.SetLocation (P); } inline void gp_Circ2d::SetXAxis (const gp_Ax2d& A) { pos.SetXAxis(A); } inline void gp_Circ2d::SetAxis (const gp_Ax22d& A) { pos.SetAxis(A);} inline void gp_Circ2d::SetYAxis (const gp_Ax2d& A) { pos.SetYAxis(A); } inline void gp_Circ2d::SetRadius (const Standard_Real Radius) { Standard_ConstructionError_Raise_if (Radius < 0.0, "gp_Circ2d::SetRadius() - radius should be positive number"); radius = Radius; } inline Standard_Real gp_Circ2d::Area() const { return M_PI * radius * radius; } inline void gp_Circ2d::Coefficients (Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& D, Standard_Real& E, Standard_Real& F) const { Standard_Real Xc = pos.Location().X(); Standard_Real Yc = pos.Location().Y(); A = 1.0; B = 1.0; C = 0.0; D = - Xc; E = - Yc; F = Xc * Xc + Yc * Yc - radius * radius; } inline Standard_Boolean gp_Circ2d::Contains (const gp_Pnt2d& P, const Standard_Real LinearTolerance) const { return Distance(P) <= LinearTolerance; } inline Standard_Real gp_Circ2d::Distance (const gp_Pnt2d& P) const { gp_XY Coord = P.XY(); Coord.Subtract (pos.Location().XY()); Standard_Real D = radius - Coord.Modulus(); if (D < 0) D = - D; return D; } inline Standard_Real gp_Circ2d::SquareDistance (const gp_Pnt2d& P) const { gp_XY Coord = P.XY(); Coord.Subtract (pos.Location().XY()); Standard_Real D = radius - Coord.Modulus(); return D * D; } inline Standard_Real gp_Circ2d::Length() const { return 2. * M_PI * radius; } inline const gp_Pnt2d& gp_Circ2d::Location () const {return pos.Location(); } inline Standard_Real gp_Circ2d::Radius() const { return radius; } inline const gp_Ax22d& gp_Circ2d::Axis () const { return pos; } inline const gp_Ax22d& gp_Circ2d::Position () const { return pos; } inline gp_Ax2d gp_Circ2d::XAxis () const { return gp_Ax2d (pos.XAxis()); } inline gp_Ax2d gp_Circ2d::YAxis () const { return gp_Ax2d (pos.YAxis()); } inline void gp_Circ2d::Reverse() { gp_Dir2d Temp = pos.YDirection (); Temp.Reverse (); pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp)); } inline gp_Circ2d gp_Circ2d::Reversed() const { gp_Circ2d C = *this; gp_Dir2d Temp = pos.YDirection (); Temp.Reverse (); C.pos.SetAxis(gp_Ax22d(pos.Location(),pos.XDirection(),Temp)); return C; } inline Standard_Boolean gp_Circ2d::IsDirect() const { return (pos.XDirection().Crossed(pos.YDirection())) >= 0.0; } inline void gp_Circ2d::Rotate (const gp_Pnt2d& P, const Standard_Real Ang) {pos.Rotate (P, Ang);} inline gp_Circ2d gp_Circ2d::Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const { gp_Circ2d C = *this; C.pos.Rotate (P, Ang); return C; } inline void gp_Circ2d::Scale (const gp_Pnt2d& P, const Standard_Real S) { radius *= S; if (radius < 0) radius = - radius; pos.Scale(P, S); } inline gp_Circ2d gp_Circ2d::Scaled (const gp_Pnt2d& P, const Standard_Real S) const { gp_Circ2d C = *this; C.radius *= S; if (C.radius < 0) C.radius = - C.radius; C.pos.Scale(P, S); return C; } inline void gp_Circ2d::Transform (const gp_Trsf2d& T) { radius *= T.ScaleFactor(); if (radius < 0) radius = - radius; pos.Transform(T); } inline gp_Circ2d gp_Circ2d::Transformed (const gp_Trsf2d& T) const { gp_Circ2d C = *this; C.radius *= T.ScaleFactor(); if (C.radius < 0) C.radius = - C.radius; C.pos.Transform(T); return C; } inline void gp_Circ2d::Translate (const gp_Vec2d& V) { pos.Translate(V); } inline gp_Circ2d gp_Circ2d::Translated (const gp_Vec2d& V) const { gp_Circ2d C = *this; C.pos.Translate(V); return C; } inline void gp_Circ2d::Translate (const gp_Pnt2d& P1, const gp_Pnt2d& P2) { pos.Translate(P1, P2); } inline gp_Circ2d gp_Circ2d::Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const { gp_Circ2d C = *this; C.pos.Translate(P1, P2); return C; }