// 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_Torus::gp_Torus () : majorRadius (RealLast()), minorRadius (RealSmall()) { } inline gp_Torus::gp_Torus (const gp_Ax3& A3, const Standard_Real MajorRadius, const Standard_Real MinorRadius) : pos(A3), majorRadius (MajorRadius), minorRadius (MinorRadius) { Standard_ConstructionError_Raise_if (MinorRadius < 0.0 || MajorRadius < 0.0,""); } inline void gp_Torus::SetAxis (const gp_Ax1& A1) { pos.SetAxis (A1); } inline void gp_Torus::SetLocation (const gp_Pnt& Loc) { pos.SetLocation (Loc); } inline void gp_Torus::SetMajorRadius (const Standard_Real MajorRadius) { Standard_ConstructionError_Raise_if (MajorRadius - minorRadius <= gp::Resolution(),""); majorRadius = MajorRadius; } inline void gp_Torus::SetMinorRadius (const Standard_Real MinorRadius) { Standard_ConstructionError_Raise_if (MinorRadius < 0.0 || majorRadius - MinorRadius <= gp::Resolution(),""); minorRadius = MinorRadius; } inline void gp_Torus::SetPosition (const gp_Ax3& A3) { pos = A3; } inline Standard_Real gp_Torus::Area () const { return 4.0 * M_PI * M_PI * minorRadius * majorRadius; } inline void gp_Torus::UReverse() { pos.YReverse(); } inline void gp_Torus::VReverse() { pos.ZReverse(); } inline Standard_Boolean gp_Torus::Direct() const { return pos.Direct(); } inline const gp_Ax1& gp_Torus::Axis () const { return pos.Axis(); } inline const gp_Pnt& gp_Torus::Location () const { return pos.Location(); } inline const gp_Ax3& gp_Torus::Position () const { return pos; } inline Standard_Real gp_Torus::MajorRadius () const { return majorRadius; } inline Standard_Real gp_Torus::MinorRadius () const { return minorRadius; } inline Standard_Real gp_Torus::Volume () const { return (M_PI * minorRadius * minorRadius) * (2.0 * M_PI * majorRadius); } inline gp_Ax1 gp_Torus::XAxis () const { return gp_Ax1(pos.Location(), pos.XDirection()); } inline gp_Ax1 gp_Torus::YAxis () const { return gp_Ax1(pos.Location(), pos.YDirection()); } inline void gp_Torus::Rotate (const gp_Ax1& A1, const Standard_Real Ang) { pos.Rotate (A1, Ang); } inline gp_Torus gp_Torus::Rotated (const gp_Ax1& A1, const Standard_Real Ang) const { gp_Torus C = *this; C.pos.Rotate (A1, Ang); return C; } inline void gp_Torus::Scale (const gp_Pnt& P, const Standard_Real S) { pos.Scale (P, S); Standard_Real s = S; if (s < 0) s = - s; majorRadius *= s; minorRadius *= s; } inline gp_Torus gp_Torus::Scaled (const gp_Pnt& P, const Standard_Real S) const { gp_Torus C = *this; C.pos.Scale (P, S); C.majorRadius *= S; if (C.majorRadius < 0) C.majorRadius = - C.majorRadius; C.minorRadius *= S; if (C.minorRadius < 0) C.minorRadius = - C.minorRadius; return C; } inline void gp_Torus::Transform (const gp_Trsf& T) { pos.Transform (T); Standard_Real t = T.ScaleFactor(); if(t < 0 ) t = - t; minorRadius *= t; majorRadius *= t; } inline gp_Torus gp_Torus::Transformed (const gp_Trsf& T) const { gp_Torus C = *this; C.pos.Transform (T); C.majorRadius *= T.ScaleFactor(); if (C.majorRadius < 0) C.majorRadius = - C.majorRadius; C.minorRadius *= T.ScaleFactor(); if (C.minorRadius < 0) C.minorRadius = - C.minorRadius; return C; } inline void gp_Torus::Translate (const gp_Vec& V) { pos.Translate (V); } inline gp_Torus gp_Torus::Translated (const gp_Vec& V) const { gp_Torus C = *this; C.pos.Translate (V); return C; } inline void gp_Torus::Translate (const gp_Pnt& P1, const gp_Pnt& P2) { pos.Translate (P1, P2); } inline gp_Torus gp_Torus::Translated (const gp_Pnt& P1, const gp_Pnt& P2) const { gp_Torus C = *this; C.pos.Translate (P1, P2); return C; }