diff options
author | Maksim Andrianov <maksimandrianov1@gmail.com> | 2018-12-03 16:28:11 +0300 |
---|---|---|
committer | mpimenov <mpimenov@users.noreply.github.com> | 2018-12-21 13:32:21 +0300 |
commit | 2ca845ffd5d9bfdd2c28bb61f9d43805f0f4571b (patch) | |
tree | faf96225ad2188025cc5fb1299880d27a24b9fc1 /generator/boost_helpers.hpp | |
parent | 6ca50d37b29fcdaeece5392c38add019321b4c4c (diff) |
[generator] Added generation popularity src.
Diffstat (limited to 'generator/boost_helpers.hpp')
-rw-r--r-- | generator/boost_helpers.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/generator/boost_helpers.hpp b/generator/boost_helpers.hpp new file mode 100644 index 0000000000..e116b8cb47 --- /dev/null +++ b/generator/boost_helpers.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include "generator/feature_builder.hpp" + +#include <iterator> + +#include <boost/geometry.hpp> + +namespace generator +{ +namespace boost_helpers +{ +template <typename BoostPoint, typename BoostGeometry, typename FbGeometry> +void FillBoostGeometry(BoostGeometry & geometry, FbGeometry const & fbGeometry) +{ + geometry.reserve(fbGeometry.size()); + for (auto const & p : fbGeometry) + boost::geometry::append(geometry, BoostPoint{p.x, p.y}); +} + +template <typename BoostPolygon> +void FillPolygon(BoostPolygon & polygon, FeatureBuilder1 const & fb) +{ + using BoostPoint = typename BoostPolygon::point_type; + auto const & fbGeometry = fb.GetGeometry(); + CHECK(!fbGeometry.empty(), ()); + auto it = std::begin(fbGeometry); + FillBoostGeometry<BoostPoint>(polygon.outer(), *it); + polygon.inners().resize(fbGeometry.size() - 1); + int i = 0; + ++it; + for (; it != std::end(fbGeometry); ++it) + FillBoostGeometry<BoostPoint>(polygon.inners()[i++], *it); + + boost::geometry::correct(polygon); +} +} // namespace boost_helpers +} // namespace generator |