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) |
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 |
Node * | buildRepresentantOfMySelf () 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 double * | getCenter () 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) |
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) |
static double | normalizeAngle (double angle) |
Protected Member Functions | |
void | updateBounds () |
Edge * | buildEdgeLyingOnMe (Node *start, Node *end, bool direction=true) const |
Protected Attributes | |
double | _angle |
double | _angle0 |
double | _radius |
double | _center [2] |
EdgeArcCircle::EdgeArcCircle | ( | std::istream & | lineInXfig | ) |
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, INTERP_KERNEL::Node::decrRef(), getArcOfCirclePassingThru(), and updateBounds().
Referenced by buildEdgeLyingOnMe().
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, getArcOfCirclePassingThru(), and updateBounds().
EdgeArcCircle::EdgeArcCircle | ( | double | sX, | |
double | sY, | |||
double | mX, | |||
double | mY, | |||
double | eX, | |||
double | eY | |||
) |
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, getArcOfCirclePassingThru(), and updateBounds().
EdgeArcCircle::EdgeArcCircle | ( | Node * | start, | |
Node * | end, | |||
const double * | center, | |||
double | radius, | |||
double | angle0, | |||
double | deltaAngle, | |||
bool | direction = true | |||
) |
angle0 | in ]-Pi;Pi[ | |
deltaAngle | in ]-2.*Pi;2.*Pi[ |
References _center, and updateBounds().
void EdgeArcCircle::changeMiddle | ( | Node * | newMiddle | ) |
for tests
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, getArcOfCirclePassingThru(), and updateBounds().
void EdgeArcCircle::dumpInXfigFile | ( | std::ostream & | stream, | |
bool | direction, | |||
int | resolution, | |||
const Bounds & | box | |||
) | const [virtual] |
void EdgeArcCircle::update | ( | Node * | m | ) | [virtual] |
Implements INTERP_KERNEL::Edge.
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, getArcOfCirclePassingThru(), and updateBounds().
double EdgeArcCircle::getAreaOfZone | ( | ) | const [virtual] |
This methods computes :
Implements INTERP_KERNEL::Edge.
References _angle, _radius, and INTERP_KERNEL::Edge::_start.
double EdgeArcCircle::getCurveLength | ( | ) | const [virtual] |
return the length of arc. Value is always > 0. !
Implements INTERP_KERNEL::Edge.
void EdgeArcCircle::getBarycenter | ( | double * | bary | ) | const [virtual] |
Implements INTERP_KERNEL::Edge.
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.
Node * EdgeArcCircle::buildRepresentantOfMySelf | ( | ) | const [virtual] |
Retrieves a point that is owning to this, well placed for IN/OUT detection of this. Typically midlle of this is returned.
Implements INTERP_KERNEL::Edge.
References _angle, _angle0, _center, and _radius.
Referenced by dumpInXfigFile().
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.
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 _center, _radius, and getAbsoluteAngleOfNormalizedVect().
double EdgeArcCircle::getDistanceToPoint | ( | const double * | pt | ) | const [virtual] |
retrieves the distance to this : The min distance from pt and any point of this.
Implements INTERP_KERNEL::Edge.
References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, INTERP_KERNEL::Node::computeAngle(), INTERP_KERNEL::Node::distanceBtw2Pt(), and isIn2Pi().
bool EdgeArcCircle::isNodeLyingOn | ( | const double * | coordOfNode | ) | const [virtual] |
return if node with coords 'coordOfNode' is on this (with precision).
Implements INTERP_KERNEL::Edge.
References _angle, _angle0, _center, _radius, INTERP_KERNEL::Node::areDoubleEquals(), INTERP_KERNEL::Node::computeAngle(), INTERP_KERNEL::Node::distanceBtw2Pt(), and isIn2Pi().
TypeOfFunction INTERP_KERNEL::EdgeArcCircle::getTypeOfFunc | ( | ) | const [virtual] |
Implements INTERP_KERNEL::Edge.
References INTERP_KERNEL::ARC_CIRCLE.
void INTERP_KERNEL::EdgeArcCircle::dynCastFunction | ( | const EdgeLin *& | seg, | |
const EdgeArcCircle *& | arcSeg | |||
) | const [virtual] |
Implements INTERP_KERNEL::Edge.
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] |
apply a similiraty transformation on 'this'
See Node::applySimilarity to see signification of params.
Reimplemented from INTERP_KERNEL::Edge.
double INTERP_KERNEL::EdgeArcCircle::getAngle0 | ( | ) | const |
double INTERP_KERNEL::EdgeArcCircle::getRadius | ( | ) | const |
double INTERP_KERNEL::EdgeArcCircle::getAngle | ( | ) | const |
Referenced by INTERP_KERNEL::ArcCArcCIntersector::haveTheySameDirection().
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 getAbsoluteAngleOfNormalizedVect(), and INTERP_KERNEL::Node::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 safeAcos(), and safeAsin().
Referenced by buildEdgeLyingOnMe(), INTERP_KERNEL::Node::computeAngle(), getAbsoluteAngle(), getArcOfCirclePassingThru(), getCharactValue(), and INTERP_KERNEL::ArcCArcCIntersector::getIntersectionsCharacteristicVal().
void EdgeArcCircle::getArcOfCirclePassingThru | ( | const double * | start, | |
const double * | middle, | |||
const double * | end, | |||
double * | center, | |||
double & | radius, | |||
double & | angleInRad, | |||
double & | angleInRad0 | |||
) | [static] |
References getAbsoluteAngleOfNormalizedVect(), isAngleNotIn(), and safeSqrt().
Referenced by changeMiddle(), EdgeArcCircle(), and update().
static double INTERP_KERNEL::EdgeArcCircle::safeSqrt | ( | double | val | ) | [static] |
To avoid in aggressive optimizations nan.
Referenced by getArcOfCirclePassingThru(), INTERP_KERNEL::ArcCSegIntersector::getIntersectionsCharacteristicVal(), and INTERP_KERNEL::ArcCArcCIntersector::getIntersectionsCharacteristicVal().
static double INTERP_KERNEL::EdgeArcCircle::safeAcos | ( | double | cosAngle | ) | [static] |
Referenced by INTERP_KERNEL::Node::computeSlope(), and getAbsoluteAngleOfNormalizedVect().
static double INTERP_KERNEL::EdgeArcCircle::safeAsin | ( | double | sinAngle | ) | [static] |
Referenced by getAbsoluteAngleOfNormalizedVect().
bool EdgeArcCircle::isIn2Pi | ( | double | start, | |
double | delta, | |||
double | angleIn | |||
) | [static] |
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[.
angleIn | in ]-Pi;Pi[. |
Referenced by getDistanceToPoint(), INTERP_KERNEL::ArcCArcCIntersector::getPlacements(), isIn(), isNodeLyingOn(), and updateBounds().
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'.
Referenced by getArcOfCirclePassingThru().
static double INTERP_KERNEL::EdgeArcCircle::normalizeAngle | ( | double | angle | ) | [static] |
for an angle 'angle' in ]-3*Pi;3*Pi[ returns angle in ]-Pi;Pi[
Referenced by INTERP_KERNEL::ArcCArcCIntersector::getIntersectionsCharacteristicVal().
void EdgeArcCircle::updateBounds | ( | ) | [protected] |
References _angle, _angle0, INTERP_KERNEL::Edge::_bounds, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, and isIn2Pi().
Referenced by changeMiddle(), EdgeArcCircle(), and update().
Edge * EdgeArcCircle::buildEdgeLyingOnMe | ( | Node * | start, | |
Node * | end, | |||
bool | direction = true | |||
) | const [protected, virtual] |
Implements INTERP_KERNEL::Edge.
References _angle, _center, _radius, EdgeArcCircle(), and getAbsoluteAngleOfNormalizedVect().
double INTERP_KERNEL::EdgeArcCircle::_angle [protected] |
Value between -2Pi and 2Pi.
Referenced by buildEdgeLyingOnMe(), buildRepresentantOfMySelf(), changeMiddle(), dumpInXfigFile(), EdgeArcCircle(), getAreaOfZone(), getBarycenter(), getBarycenterOfZone(), getCurveLength(), getDistanceToPoint(), isIn(), isLower(), isNodeLyingOn(), update(), and updateBounds().
double INTERP_KERNEL::EdgeArcCircle::_angle0 [protected] |
Value between -Pi and Pi.
Referenced by buildRepresentantOfMySelf(), changeMiddle(), EdgeArcCircle(), getBarycenter(), getBarycenterOfZone(), getDistanceToPoint(), isIn(), isLower(), isNodeLyingOn(), update(), and updateBounds().
double INTERP_KERNEL::EdgeArcCircle::_radius [protected] |
double INTERP_KERNEL::EdgeArcCircle::_center[2] [protected] |