1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00
Files
occt/src/gp/gp_Circ.lxx
bugmaster b311480ed5 0023024: Update headers of OCCT files
Added appropriate copyright and license information in source files
2012-03-21 19:43:04 +04:00

159 lines
4.1 KiB
Plaintext
Executable File

// Copyright (c) 1995-1999 Matra Datavision
// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <Standard_ConstructionError.hxx>
#include <gp_Pnt.hxx>
#include <gp_Ax1.hxx>
#include <gp_Ax2.hxx>
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;
}