mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
159 lines
4.1 KiB
Plaintext
Executable File
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;
|
|
}
|
|
|