From 2ecf2d393af173b997f4b60d7ffd27f0e9b18746 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Mon, 1 Jun 2015 13:10:45 +0300 Subject: [PATCH] [policies][rescale policy] initialize the rescale policy only if the input geometries are non-empty; this fixes unit test failures (union, intersection, difference) when BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING is enabled; --- .../robustness/get_rescale_policy.hpp | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp b/include/boost/geometry/policies/robustness/get_rescale_policy.hpp index 52570995f..0a1d7e355 100644 --- a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp +++ b/include/boost/geometry/policies/robustness/get_rescale_policy.hpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -86,6 +87,11 @@ static inline void init_rescale_policy(Geometry const& geometry, RobustPoint& min_robust_point, Factor& factor) { + if (geometry::num_points(geometry) == 0) + { + return; + } + // Get bounding boxes model::box env = geometry::return_envelope >(geometry); @@ -99,10 +105,30 @@ static inline void init_rescale_policy(Geometry1 const& geometry1, RobustPoint& min_robust_point, Factor& factor) { - // Get bounding boxes - model::box env = geometry::return_envelope >(geometry1); - model::box env2 = geometry::return_envelope >(geometry2); - geometry::expand(env, env2); + // Get bounding boxes (when at least one of the geometries is not empty) + model::box env; + if (geometry::num_points(geometry1) == 0 + && geometry::num_points(geometry2) == 0) + { + return; + } + else if (geometry::num_points(geometry1) == 0) + { + geometry::envelope(geometry2, env); + } + else if (geometry::num_points(geometry2) == 0) + { + geometry::envelope(geometry1, env); + } + else + { + geometry::envelope(geometry1, env); + model::box env2 = geometry::return_envelope + < + model::box + >(geometry2); + geometry::expand(env, env2); + } scale_box_to_integer_range(env, min_point, min_robust_point, factor); }