summaryrefslogtreecommitdiffstats
path: root/demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp')
-rw-r--r--demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp b/demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp
new file mode 100644
index 0000000..8603583
--- /dev/null
+++ b/demo3/vertical/tbtnavi_demo/include/mapbox/geometry/envelope.hpp
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <mapbox/geometry/box.hpp>
+#include <mapbox/geometry/for_each_point.hpp>
+
+#include <limits>
+
+namespace mapbox {
+namespace geometry {
+
+template <typename G, typename T = typename G::coordinate_type>
+box<T> envelope(G const& geometry)
+{
+ using limits = std::numeric_limits<T>;
+
+ T min_t = limits::has_infinity ? -limits::infinity() : limits::min();
+ T max_t = limits::has_infinity ? limits::infinity() : limits::max();
+
+ point<T> min(max_t, max_t);
+ point<T> max(min_t, min_t);
+
+ for_each_point(geometry, [&] (point<T> const& point) {
+ if (min.x > point.x) min.x = point.x;
+ if (min.y > point.y) min.y = point.y;
+ if (max.x < point.x) max.x = point.x;
+ if (max.y < point.y) max.y = point.y;
+ });
+
+ return box<T>(min, max);
+}
+
+} // namespace geometry
+} // namespace mapbox