1#ifndef SimTK_SimTKCOMMON_COORDINATE_AXIS_H_
2#define SimTK_SimTKCOMMON_COORDINATE_AXIS_H_
61 operator int()
const {
return m_myAxisId;}
91 bool isXAxis()
const {
return m_myAxisId == 0;}
93 bool isYAxis()
const {
return m_myAxisId == 1;}
95 bool isZAxis()
const {
return m_myAxisId == 2;}
107 {
return m_myAxisId == int(axis2); }
115 {
return m_myAxisId != int(axis2); }
176 class XCoordinateAxis;
class YCoordinateAxis;
class ZCoordinateAxis;
256 : m_axis(axis), m_direction(1) {}
261 : m_axis(axis), m_direction(-1) {}
271 : m_axis(axis), m_direction(direction)
272 { assert(direction==1 || direction==-1); }
297 {
if (m_axis != dir2.
getAxis())
return 0;
306 {
if (m_axis == dir2.
getAxis())
return 0;
332 class NegXDirection;
class NegYDirection;
class NegZDirection;
Mandatory first inclusion for any Simbody source or header file.
Definition CoordinateAxis.h:194
constexpr XCoordinateAxis()
Definition CoordinateAxis.h:196
Definition CoordinateAxis.h:198
constexpr YCoordinateAxis()
Definition CoordinateAxis.h:200
Definition CoordinateAxis.h:202
constexpr ZCoordinateAxis()
Definition CoordinateAxis.h:204
This class, along with its sister class CoordinateDirection, provides convenient manipulation of the ...
Definition CoordinateAxis.h:53
int dotProduct(const CoordinateAxis &axis2) const
Perform a specialized dot product between this axis and axis2; returning one if they are the same axi...
Definition CoordinateAxis.h:137
bool isXAxis() const
Return true if this is the X axis.
Definition CoordinateAxis.h:91
CoordinateDirection operator-(const CoordinateAxis &axis)
Create the negative direction along the given axis.
Definition CoordinateAxis.h:385
int crossProductSign(const CoordinateAxis &axis2) const
Return the sign that would result from a cross product between this axis and axis2: zero if axis2 is ...
Definition CoordinateAxis.h:144
bool areAllSameAxes(const CoordinateAxis &axis2, const CoordinateAxis &axis3) const
Return true if both axis2 and axis3 are the same as this one.
Definition CoordinateAxis.h:109
CoordinateAxis getPreviousAxis() const
Return the "previous" coordinate axis before this one:
Definition CoordinateAxis.h:74
CoordinateAxis getNextAxis() const
Return the "next" coordinate axis after this one:
Definition CoordinateAxis.h:67
CoordinateAxis crossProduct(const CoordinateAxis &axis2, int &sign) const
Return the axis and sign along that axis that would result from a cross product between this axis and...
Definition CoordinateAxis.h:163
CoordinateAxis crossProductAxis(const CoordinateAxis &axis2) const
Return the coordinate axis along which the cross product of this axis and axis2 would lie: same as th...
Definition CoordinateAxis.h:153
bool isZAxis() const
Return true if this is the Z axis.
Definition CoordinateAxis.h:95
CoordinateAxis getThirdAxis(const CoordinateAxis &axis2) const
Given this coordinate axis and one other, return the missing one:
Definition CoordinateAxis.h:84
bool isYAxis() const
Return true if this is the Y axis.
Definition CoordinateAxis.h:93
bool isPreviousAxis(const CoordinateAxis &axis2) const
Return true if the given axis2 is the one preceding this one as would be reported by getPreviousAxis(...
Definition CoordinateAxis.h:102
static const CoordinateAxis & getCoordinateAxis(int i)
Return a reference to the CoordinateAxis constant XAxis, YAxis, or ZAxis corresponding to the given i...
Definition CoordinateAxis.h:217
bool operator==(const CoordinateAxis &a1, const CoordinateAxis &a2)
Compare two CoordinateAxis objects.
Definition CoordinateAxis.h:225
CoordinateDirection operator+(const CoordinateAxis &axis)
Create the positive direction along the given axis.
Definition CoordinateAxis.h:391
const CoordinateDirection::NegXDirection & operator-(const CoordinateAxis::XCoordinateAxis &)
Create the NegXAxis direction by negating XAxis.
Definition CoordinateAxis.h:372
bool isForwardCyclical(const CoordinateAxis &axis2) const
Return true if the given axis2 is the one following this one in a forward cyclical direction,...
Definition CoordinateAxis.h:126
bool areAllDifferentAxes(const CoordinateAxis &axis2, const CoordinateAxis &axis3) const
Return true if neither axis2 nor axis3 is the same as this axis nor each other; that is,...
Definition CoordinateAxis.h:119
static bool isIndexInRange(int i)
Return true if the given integer is suitable as a coordinate axis, meaning it is one of 0,...
Definition CoordinateAxis.h:173
bool isNextAxis(const CoordinateAxis &axis2) const
Return true if the given axis2 is the one following this one as would be reported by getNextAxis().
Definition CoordinateAxis.h:98
bool isSameAxis(const CoordinateAxis &axis2) const
Return true if the given axis2 is the same as this one. You can use operator==() to perform the same ...
Definition CoordinateAxis.h:106
bool isReverseCyclical(const CoordinateAxis &axis2) const
Return true if the given axis2 is the one following this one in a reverse cyclical direction,...
Definition CoordinateAxis.h:131
CoordinateAxis(int i)
Explicit construction of a CoordinateAxis from a calculated integer that must be 0,...
Definition CoordinateAxis.h:57
const CoordinateDirection::NegZDirection & operator-(const CoordinateAxis::ZCoordinateAxis &)
Create the NegZAxis direction by negating ZAxis.
Definition CoordinateAxis.h:380
bool operator!=(const CoordinateAxis &a1, const CoordinateAxis &a2)
Compare two CoordinateAxis objects.
Definition CoordinateAxis.h:229
const CoordinateDirection::NegYDirection & operator-(const CoordinateAxis::YCoordinateAxis &)
Create the NegYAxis direction by negating YAxis.
Definition CoordinateAxis.h:376
bool isDifferentAxis(const CoordinateAxis &axis2) const
Return true if the given axis2 is not the same one as this one. You can use operator!...
Definition CoordinateAxis.h:114
Definition CoordinateAxis.h:341
constexpr NegXDirection()
Definition CoordinateAxis.h:343
Definition CoordinateAxis.h:345
constexpr NegYDirection()
Definition CoordinateAxis.h:347
Definition CoordinateAxis.h:349
constexpr NegZDirection()
Definition CoordinateAxis.h:351
Use for compile-time construction of a negative CoordinateDirection along one of the coordinate axes.
Definition CoordinateAxis.h:251
A CoordinateDirection is a CoordinateAxis plus a direction indicating the positive or negative direct...
Definition CoordinateAxis.h:247
bool hasSameAxis(const CoordinateDirection &dir2) const
Return true if this direction and dir2 are along the same axis, even if the direction along that axis...
Definition CoordinateAxis.h:284
CoordinateDirection operator-(const CoordinateDirection &dir)
Create the opposite direction from the given direction.
Definition CoordinateAxis.h:410
CoordinateAxis crossProductAxis(const CoordinateDirection &dir2) const
Return the coordinate axis along which the cross product of this coordinate direction and dir2 would ...
Definition CoordinateAxis.h:317
int getDirection() const
Returns 1 or -1 to indicate the direction along the coordinate axis returned by getAxis().
Definition CoordinateAxis.h:280
bool operator!=(const CoordinateDirection &d1, const CoordinateDirection &d2)
Compare two CoordinateDirection objects.
Definition CoordinateAxis.h:365
const CoordinateAxis::XCoordinateAxis & operator-(const CoordinateDirection::NegXDirection &)
Create the XAxis direction by negating NegXAxis.
Definition CoordinateAxis.h:397
const CoordinateAxis::ZCoordinateAxis & operator-(const CoordinateDirection::NegZDirection &)
Create the ZAxis direction by negating NegZAxis.
Definition CoordinateAxis.h:405
constexpr CoordinateDirection(const CoordinateAxis &axis, Negative)
Explicit creation of a negative CoordinateDirection from a CoordinateAxis.
Definition CoordinateAxis.h:260
int crossProductSign(const CoordinateDirection &dir2) const
Return the sign that would result from a cross product between this coordinate direction and dir2: 0 ...
Definition CoordinateAxis.h:305
CoordinateAxis crossProduct(const CoordinateDirection &dir2, int &sign) const
Return the axis and sign along that axis that would result from a cross product between this coordina...
Definition CoordinateAxis.h:327
constexpr CoordinateDirection(const CoordinateAxis &axis)
Implicit conversion of a CoordinateAxis to a positive CoordinateDirection along that axis.
Definition CoordinateAxis.h:255
const CoordinateAxis::YCoordinateAxis & operator-(const CoordinateDirection::NegYDirection &)
Create the YAxis direction by negating NegYAxis.
Definition CoordinateAxis.h:401
CoordinateDirection(const CoordinateAxis &axis, int direction)
Explicit creation of a CoordinateDirection from a CoordinateAxis and a direction calculated at run ti...
Definition CoordinateAxis.h:270
int dotProduct(const CoordinateDirection &dir2) const
Perform a specialized dot product between this coordinate direction and dir2; returning 1 or -1 if th...
Definition CoordinateAxis.h:296
bool operator==(const CoordinateDirection &d1, const CoordinateDirection &d2)
Compare two CoordinateDirection objects.
Definition CoordinateAxis.h:360
CoordinateAxis getAxis() const
This is the coordinate axis XAxis, YAxis, or ZAxis contained in this CoordinateDirection....
Definition CoordinateAxis.h:277
bool isSameAxisAndDirection(const CoordinateDirection &dir2) const
Return true if this direction and dir2 are along the same axis, and in the same direction along that ...
Definition CoordinateAxis.h:290
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition Assembler.h:37
constexpr CoordinateAxis::XCoordinateAxis XAxis
Constant representing the X coordinate axis; will implicitly convert to the integer 0 when used in a ...
Definition CoordinateAxis.h:209
constexpr CoordinateDirection::NegYDirection NegYAxis
Global constant indicating -Y coordinate direction.
Definition CoordinateAxis.h:356
unsigned int sign(unsigned char u)
Definition Scalar.h:301
constexpr CoordinateDirection::NegXDirection NegXAxis
Global constant indicating -X coordinate direction.
Definition CoordinateAxis.h:355
constexpr CoordinateDirection::NegZDirection NegZAxis
Global constant indicating -Z coordinate direction.
Definition CoordinateAxis.h:357
constexpr CoordinateAxis::YCoordinateAxis YAxis
Constant representing the Y coordinate axis; will implicitly convert to the integer 1 when used in a ...
Definition CoordinateAxis.h:212
constexpr CoordinateAxis::ZCoordinateAxis ZAxis
Constant representing the Z coordinate axis; will implicitly convert to the integer 2 when used in a ...
Definition CoordinateAxis.h:215