#pragma once #include namespace internal { // local: plane x=0 // u: planar local x-axis // v: planar local y-axis struct plane_t final : subface { }; } // namespace internal namespace detail { template <> struct hasher { size_t operator()(const internal::plane_t &subface) const { const auto &mat = subface.world_to_local.matrix(); Eigen::Vector4d vec = mat.row(0); vec.head<3>().normalize(); if (vec.z() < 0) vec.head<3>() = -vec.head<3>(); return hash_funcs(vec); } }; } // namespace detail