diff --git a/src/ifcgeom/kernels/cgal/nef_to_halfspace_tree.h b/src/ifcgeom/kernels/cgal/nef_to_halfspace_tree.h index 0644ab75f4..81a42bced6 100644 --- a/src/ifcgeom/kernels/cgal/nef_to_halfspace_tree.h +++ b/src/ifcgeom/kernels/cgal/nef_to_halfspace_tree.h @@ -116,6 +116,18 @@ template using plane_map = std::map>; // using plane_map = std::unordered_map>; +// Lexicographic comparator for CGAL Point_d (operator< is deleted in CGAL 6.x) +struct Point_d_4d_Less { + using Point_d = CGAL::Epick_d>::Point_d; + bool operator()(const Point_d& a, const Point_d& b) const { + for (int i = 0; i < 4; ++i) { + if (a[i] < b[i]) return true; + if (b[i] < a[i]) return false; + } + return false; + } +}; + // Snap halfspace planes // search_radius: max cartesian distance in plane equation parameters as 4d points in space template @@ -131,8 +143,8 @@ plane_map snap_halfspaces(const std::list>& planes plane_map result; - std::map> neighbours; - std::map>> originals; + std::map, Point_d_4d_Less> neighbours; + std::map>, Point_d_4d_Less> originals; std::vector planes_as_point; for (auto& p : planes) { @@ -205,7 +217,7 @@ plane_map snap_halfspaces_2(const std::list>& plan plane_map result; std::vector planes_as_point; - std::map> normalized_to_original; + std::map, Point_d_4d_Less> normalized_to_original; for (auto& p : planes_fixed) { // @todo can we skip normalization (simply divide by largest component perhaps)