Version: 5.1.6

INTERP_KERNEL.EdgeArcCircle Class Reference

#include <InterpKernelGeo2DEdgeArcCircle.hxx>

Inheritance diagram for INTERP_KERNEL.EdgeArcCircle:
Inheritance graph

Public Member Functions

 EdgeArcCircle (std::istream &lineInXfig)
 EdgeArcCircle (Node *start, Node *middle, Node *end, bool direction=true)
 EdgeArcCircle (double sX, double sY, double mX, double mY, double eX, double eY)
 EdgeArcCircle (Node *start, Node *end, const double *center, double radius, double angle0, double deltaAngle, bool direction=true)
void changeMiddle (Node *newMiddle)
 for tests
void dumpInXfigFile (std::ostream &stream, bool direction, int resolution, const Bounds &box) const
void update (Node *m)
double getAreaOfZone () const
double getCurveLength () const
void getBarycenter (double *bary) const
void getBarycenterOfZone (double *bary) const
bool isIn (double characterVal) const
NodebuildRepresentantOfMySelf () const
bool isLower (double val1, double val2) const
double getCharactValue (const Node &node) const
double getDistanceToPoint (const double *pt) const
bool isNodeLyingOn (const double *coordOfNode) const
TypeOfFunction getTypeOfFunc () const
void dynCastFunction (const EdgeLin *&seg, const EdgeArcCircle *&arcSeg) const
const doublegetCenter () const
void getCenter (double *center) const
bool doIHaveSameDirectionAs (const Edge &other) const
void applySimilarity (double xBary, double yBary, double dimChar)
double getAngle0 () const
double getRadius () const
double getAngle () const

Static Public Member Functions

static double getAbsoluteAngle (const double *vect, double &normVect)
static double getAbsoluteAngleOfNormalizedVect (double ux, double uy)
static void getArcOfCirclePassingThru (const double *start, const double *middle, const double *end, double *center, double &radius, double &angleInRad, double &angleInRad0)
static double safeSqrt (double val)
 To avoid in aggressive optimizations nan.
static double safeAcos (double cosAngle)
static double safeAsin (double sinAngle)
static bool isIn2Pi (double start, double delta, double angleIn)
static bool isAngleNotIn (double start, double delta, double angleIn)
 'delta' 'start' in ]-Pi;Pi[
static double normalizeAngle (double angle)
 for an angle 'angle' in ]-3*Pi;3*Pi[ returns angle in ]-Pi;Pi[

Protected Member Functions

void updateBounds ()
EdgebuildEdgeLyingOnMe (Node *start, Node *end, bool direction=true) const

Protected Attributes

double _angle
 Value between -2Pi and 2Pi.
double _angle0
 Value between -Pi and Pi.
double _radius
double _center [2]

Constructor & Destructor Documentation

EdgeArcCircle::EdgeArcCircle ( std::istream &  lineInXfig  ) 
EdgeArcCircle::EdgeArcCircle ( Node start,
Node middle,
Node end,
bool  direction = true 
)
EdgeArcCircle::EdgeArcCircle ( double  sX,
double  sY,
double  mX,
double  mY,
double  eX,
double  eY 
)
EdgeArcCircle::EdgeArcCircle ( Node start,
Node end,
const double center,
double  radius,
double  angle0,
double  deltaAngle,
bool  direction = true 
)
Parameters:
angle0 in ]-Pi;Pi[
deltaAngle in ]-2.*Pi;2.*Pi[

References INTERP_KERNEL.EdgeArcCircle._center, and INTERP_KERNEL.EdgeArcCircle.updateBounds().


Member Function Documentation

void EdgeArcCircle::changeMiddle ( Node newMiddle  ) 
void EdgeArcCircle::dumpInXfigFile ( std::ostream &  stream,
bool  direction,
int  resolution,
const Bounds box 
) const [virtual]
void EdgeArcCircle::update ( Node m  )  [virtual]
double EdgeArcCircle::getAreaOfZone (  )  const [virtual]
double EdgeArcCircle::getCurveLength (  )  const [virtual]
void EdgeArcCircle::getBarycenter ( double bary  )  const [virtual]
void EdgeArcCircle::getBarycenterOfZone ( double bary  )  const [virtual]
bool EdgeArcCircle::isIn ( double  characterVal  )  const [virtual]

Characteristic value used is angle in ]_Pi;Pi[ from axe 0x.

Implements INTERP_KERNEL.Edge.

References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, and INTERP_KERNEL.EdgeArcCircle.isIn2Pi().

Node * EdgeArcCircle::buildRepresentantOfMySelf (  )  const [virtual]
bool EdgeArcCircle::isLower ( double  val1,
double  val2 
) const [virtual]

Characteristic value used is angle in ]_Pi;Pi[ from axe 0x. 'val1' and 'val2' have been detected previously as owning to this.

Implements INTERP_KERNEL.Edge.

References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.QUADRATIC_PLANAR._precision, and INTERP_KERNEL.EdgeArcCircle._radius.

double EdgeArcCircle::getCharactValue ( const Node node  )  const [virtual]

For Arc circle the caract value is angle with Ox between -Pi and Pi.

Implements INTERP_KERNEL.Edge.

References INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.EdgeArcCircle._radius, and INTERP_KERNEL.EdgeArcCircle.getAbsoluteAngleOfNormalizedVect().

double EdgeArcCircle::getDistanceToPoint ( const double pt  )  const [virtual]
bool EdgeArcCircle::isNodeLyingOn ( const double coordOfNode  )  const [virtual]
TypeOfFunction INTERP_KERNEL.EdgeArcCircle.getTypeOfFunc (  )  const [virtual]
void INTERP_KERNEL.EdgeArcCircle.dynCastFunction ( const EdgeLin *&  seg,
const EdgeArcCircle *&  arcSeg 
) const
const double* INTERP_KERNEL.EdgeArcCircle.getCenter (  )  const
void INTERP_KERNEL.EdgeArcCircle.getCenter ( double center  )  const
bool INTERP_KERNEL.EdgeArcCircle.doIHaveSameDirectionAs ( const Edge other  )  const
void EdgeArcCircle::applySimilarity ( double  xBary,
double  yBary,
double  dimChar 
) [virtual]
double INTERP_KERNEL.EdgeArcCircle.getAngle0 (  )  const
double INTERP_KERNEL.EdgeArcCircle.getRadius (  )  const
double INTERP_KERNEL.EdgeArcCircle.getAngle (  )  const
double EdgeArcCircle::getAbsoluteAngle ( const double vect,
double normVect 
) [static]

Given an NON normalized vector 'vect', returns its norm 'normVect' and its angle in ]-Pi,Pi] relative to Ox axe.

References INTERP_KERNEL.EdgeArcCircle.getAbsoluteAngleOfNormalizedVect(), and INTERP_KERNEL.norm().

double EdgeArcCircle::getAbsoluteAngleOfNormalizedVect ( double  ux,
double  uy 
) [static]

Given a normalized vector defined by (ux,uy) returns its angle in ]-Pi;Pi]. So before using this method ux*ux+uy*uy should as much as possible close to 1. This methods is quite time consuming in order to keep as much as possible precision. It is NOT ALWAYS possible to do that only in one call of acos. Sometimes call to asin is necessary due to imperfection of acos near 0. and Pi (cos x ~ 1-x*x/2.)

References testMEDMEM.ret, INTERP_KERNEL.EdgeArcCircle.safeAcos(), and INTERP_KERNEL.EdgeArcCircle.safeAsin().

void EdgeArcCircle::getArcOfCirclePassingThru ( const double start,
const double middle,
const double end,
double center,
double radius,
double angleInRad,
double angleInRad0 
) [static]
static double INTERP_KERNEL.EdgeArcCircle.safeSqrt ( double  val  )  [static]

To avoid in aggressive optimizations nan.

References testMEDMEM.ret.

static double INTERP_KERNEL.EdgeArcCircle.safeAcos ( double  cosAngle  )  [static]

References testMEDMEM.ret.

static double INTERP_KERNEL.EdgeArcCircle.safeAsin ( double  sinAngle  )  [static]

References testMEDMEM.ret.

bool EdgeArcCircle::isIn2Pi ( double  start,
double  delta,
double  angleIn 
) [static]
Parameters:
start and
angleIn in ]-Pi;Pi] and
delta in ]-2*Pi,2*Pi[

Idem isAngleNotIn except that here 'start' in ]-Pi;Pi[ and delta in ]-2*Pi;2Pi[.

Parameters:
angleIn in ]-Pi;Pi[.
bool EdgeArcCircle::isAngleNotIn ( double  start,
double  delta,
double  angleIn 
) [static]

'delta' 'start' in ]-Pi;Pi[

Given the arc 'a' defined by 'start' angle and a 'delta' [-Pi;Pi] states for the angle 'angleIn' [-Pi;Pi] if it owns or not 'a'.

static double INTERP_KERNEL.EdgeArcCircle.normalizeAngle ( double  angle  )  [static]

for an angle 'angle' in ]-3*Pi;3*Pi[ returns angle in ]-Pi;Pi[

void EdgeArcCircle::updateBounds (  )  [protected]
Edge * EdgeArcCircle::buildEdgeLyingOnMe ( Node start,
Node end,
bool  direction = true 
) const [protected, virtual]

Field Documentation

Value between -2Pi and 2Pi.

Value between -Pi and Pi.