30#include "rotbox_funcs.h"
32#include "quaternion.h"
38template<> RotBox<3>& RotBox<3>::rotatePoint(
const Quaternion& q,
const Point<3>& p)
40 m_orient = m_orient.rotate(q); m_corner0.rotate(q, p);
return *
this;
43template<> RotBox<3>& RotBox<3>::rotateCorner(
const Quaternion& q,
size_t corner)
45 rotatePoint(q, getCorner(corner));
return *
this;
48template<> RotBox<3>& RotBox<3>::rotateCenter(
const Quaternion& q)
50 rotatePoint(q, getCenter());
return *
this;
53template<> RotBox<3> RotBox<3>::toParentCoords(
const Point<3>& origin,
54 const Quaternion& rotation)
const
56 RotMatrix<3> orient = m_orient;
57 return RotBox<3>(m_corner0.toParentCoords(origin, rotation), m_size, orient.rotate(rotation));
60template<> RotBox<3> RotBox<3>::toLocalCoords(
const Point<3>& origin,
61 const Quaternion& rotation)
const
63 RotMatrix<3> orient = m_orient;
64 return RotBox<3>(m_corner0.toLocalCoords(origin, rotation), m_size, orient.rotate(rotation.inverse()));
67template class RotBox<2>;
68template class RotBox<3>;
70static_assert(std::is_standard_layout<RotBox<2>>::value,
"RotBox should be standard layout.");
71static_assert(std::is_trivially_copyable<RotBox<2>>::value,
"RotBox should be trivially copyable.");
73static_assert(std::is_standard_layout<RotBox<3>>::value,
"RotBox should be standard layout.");
74static_assert(std::is_trivially_copyable<RotBox<3>>::value,
"RotBox should be trivially copyable.");
78template Point<2> Point<2>::toLocalCoords(RotBox<2>
const&)
const;
79template Point<3> Point<3>::toLocalCoords(RotBox<3>
const&)
const;
80template Point<2> Point<2>::toParentCoords(RotBox<2>
const&)
const;
81template Point<3> Point<3>::toParentCoords(RotBox<3>
const&)
const;
Generic library namespace.