#include <InterpKernelGeo2DEdgeArcCircle.hxx>

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 |
| 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) |
| 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 () |
| Edge * | buildEdgeLyingOnMe (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] |
| EdgeArcCircle::EdgeArcCircle | ( | std::istream & | lineInXfig | ) |
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.Node.decrRef(), INTERP_KERNEL.EdgeArcCircle.getArcOfCirclePassingThru(), and INTERP_KERNEL.EdgeArcCircle.updateBounds().
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.getArcOfCirclePassingThru(), and INTERP_KERNEL.EdgeArcCircle.updateBounds().
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.getArcOfCirclePassingThru(), and INTERP_KERNEL.EdgeArcCircle.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 INTERP_KERNEL.EdgeArcCircle._center, and INTERP_KERNEL.EdgeArcCircle.updateBounds().
| void EdgeArcCircle::changeMiddle | ( | Node * | newMiddle | ) |
for tests
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.getArcOfCirclePassingThru(), and INTERP_KERNEL.EdgeArcCircle.updateBounds().
| void EdgeArcCircle::dumpInXfigFile | ( | std::ostream & | stream, |
| bool | direction, | ||
| int | resolution, | ||
| const Bounds & | box | ||
| ) | const [virtual] |
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.buildRepresentantOfMySelf(), INTERP_KERNEL.Node.decrRef(), INTERP_KERNEL.Node.dumpInXfigFile(), INTERP_KERNEL.Edge.fillXfigStreamForLoc(), INTERP_KERNEL.Bounds.fitXForXFigD(), and INTERP_KERNEL.Bounds.fitYForXFigD().
| void EdgeArcCircle::update | ( | Node * | m | ) | [virtual] |
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.getArcOfCirclePassingThru(), and INTERP_KERNEL.EdgeArcCircle.updateBounds().
| double EdgeArcCircle::getAreaOfZone | ( | ) | const [virtual] |
This methods computes :
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._radius, and INTERP_KERNEL.Edge._start.
| double EdgeArcCircle::getCurveLength | ( | ) | const [virtual] |
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, and INTERP_KERNEL.EdgeArcCircle._radius.
| void EdgeArcCircle::getBarycenter | ( | double * | bary | ) | const [virtual] |
| void EdgeArcCircle::getBarycenterOfZone | ( | double * | bary | ) | const [virtual] |
To compute these 2 expressions in this class we have :
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, and INTERP_KERNEL.EdgeArcCircle._radius.
| 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] |
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.
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().
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.angle(), INTERP_KERNEL.Node.computeAngle(), INTERP_KERNEL.Node.distanceBtw2Pt(), and INTERP_KERNEL.EdgeArcCircle.isIn2Pi().
| bool EdgeArcCircle::isNodeLyingOn | ( | const double * | coordOfNode | ) | const [virtual] |
Implements INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.angle(), INTERP_KERNEL.Node.areDoubleEquals(), INTERP_KERNEL.Node.computeAngle(), INTERP_KERNEL.Node.distanceBtw2Pt(), and INTERP_KERNEL.EdgeArcCircle.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 |
Reimplemented from INTERP_KERNEL.Edge.
References INTERP_KERNEL.EdgeArcCircle._center, and INTERP_KERNEL.EdgeArcCircle._radius.
| double INTERP_KERNEL.EdgeArcCircle.getAngle0 | ( | ) | const |
| double INTERP_KERNEL.EdgeArcCircle.getRadius | ( | ) | const |
| double INTERP_KERNEL.EdgeArcCircle.getAngle | ( | ) | const |
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().
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().
To avoid in aggressive optimizations nan.
References testMEDMEM.ret.
References testMEDMEM.ret.
References testMEDMEM.ret.
| 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[. |
'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'.
for an angle 'angle' in ]-3*Pi;3*Pi[ returns angle in ]-Pi;Pi[
References INTERP_KERNEL.angle().
| void EdgeArcCircle::updateBounds | ( | ) | [protected] |
References INTERP_KERNEL.EdgeArcCircle._angle, INTERP_KERNEL.EdgeArcCircle._angle0, INTERP_KERNEL.Edge._bounds, INTERP_KERNEL.EdgeArcCircle._center, INTERP_KERNEL.Edge._end, INTERP_KERNEL.EdgeArcCircle._radius, INTERP_KERNEL.Edge._start, INTERP_KERNEL.EdgeArcCircle.isIn2Pi(), and INTERP_KERNEL.Bounds.setValues().
double INTERP_KERNEL.EdgeArcCircle._angle [protected] |
Value between -2Pi and 2Pi.
double INTERP_KERNEL.EdgeArcCircle._angle0 [protected] |
Value between -Pi and Pi.
double INTERP_KERNEL.EdgeArcCircle._radius [protected] |
double INTERP_KERNEL.EdgeArcCircle._center[2] [protected] |