30 #include "rotbox_funcs.h"
32 #include "quaternion.h"
38 template<> 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;
43 template<> RotBox<3>& RotBox<3>::rotateCorner(
const Quaternion& q,
size_t corner)
45 rotatePoint(q, getCorner(corner));
return *
this;
48 template<> RotBox<3>& RotBox<3>::rotateCenter(
const Quaternion& q)
50 rotatePoint(q, getCenter());
return *
this;
53 template<> 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));
60 template<> 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()));
67 template class RotBox<2>;
68 template class RotBox<3>;
70 static_assert(std::is_standard_layout<RotBox<2>>::value,
"RotBox should be standard layout.");
71 static_assert(std::is_trivially_copyable<RotBox<2>>::value,
"RotBox should be trivially copyable.");
73 static_assert(std::is_standard_layout<RotBox<3>>::value,
"RotBox should be standard layout.");
74 static_assert(std::is_trivially_copyable<RotBox<3>>::value,
"RotBox should be trivially copyable.");
78 template Point<2> Point<2>::toLocalCoords(RotBox<2>
const&)
const;
79 template Point<3> Point<3>::toLocalCoords(RotBox<3>
const&)
const;
80 template Point<2> Point<2>::toParentCoords(RotBox<2>
const&)
const;
81 template Point<3> Point<3>::toParentCoords(RotBox<3>
const&)
const;