#ifndef __JAXIS2D__ #define __JAXIS2D__ #include #include #include "JGeometry2D/JPoint2D.hh" #include "JGeometry2D/JVersor2D.hh" #include "JGeometry2D/JRotation2D.hh" #include "JIO/JSerialisable.hh" namespace JGEOMETRY2D { namespace { using JIO::JReader; using JIO::JWriter; } /** * Axis object. * * An axis object consists of a position and a direction. */ class JAxis2D : public JPoint2D, public JVersor2D { public: /** * Default constructor. */ JAxis2D() : JPoint2D (), JVersor2D() {} /** * Constructor. * * \param pos position */ JAxis2D(const JVector2D& pos) : JPoint2D (pos), JVersor2D() {} /** * Constructor. * * \param pos position * \param dir direction */ JAxis2D(const JVector2D& pos, const JVersor2D& dir) : JPoint2D (pos), JVersor2D(dir) {} /** * Get axis. * * \return axis */ const JAxis2D& getAxis() const { return *this; } /** * Set axis. * * \param axis axis */ void setAxis(const JAxis2D& axis) { *this = axis; } /** * Rotate axis. * * \param R rotation matrix * \return this axis */ JAxis2D& rotate(const JRotation2D& R) { static_cast(*this).rotate(R); static_cast(*this).rotate(R); return *this; } /** * Rotate back axis. * * \param R rotation matrix * \return this axis */ JAxis2D& rotate_back(const JRotation2D& R) { static_cast(*this).rotate_back(R); static_cast(*this).rotate_back(R); return *this; } /** * Read JAxis from input. * * \param in input stream * \param axis axis * \return input stream */ friend inline std::istream& operator>>(std::istream& in, JAxis2D& axis) { in >> axis.__x >> axis.__y; in >> axis.__dx >> axis.__dy; return in; } /** * Write JAxis to output. * * \param out output stream * \param axis axis * \return output stream */ friend inline std::ostream& operator<<(std::ostream& out, const JAxis2D& axis) { out << axis.getX() << ' ' << axis.getY(); out << ' '; out << axis.getDX() << ' ' << axis.getDY(); return out; } /** * Read JAxis from input. * * \param in JReader * \param axis axis * \return JReader */ friend inline JReader& operator>>(JReader& in, JAxis2D& axis) { in >> static_cast (axis); in >> static_cast(axis); return in; } /** * Write JAxis to output. * * \param out JWriter * \param axis axis * \return JWriter */ friend inline JWriter& operator<<(JWriter& out, const JAxis2D& axis) { out << static_cast (axis); out << static_cast(axis); return out; } }; } #endif