Merge branch 'master' of github.com:mapnik/mapnik into geometry-refactor2

This commit is contained in:
Dane Springmeyer 2016-08-25 10:45:54 -07:00
commit da120ba751
4 changed files with 31 additions and 44 deletions

View file

@ -52,18 +52,4 @@
#define PROJ_ENVELOPE_POINTS 20
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#ifndef BOOST_MPL_LIMIT_VECTOR_SIZE
#define BOOST_MPL_LIMIT_VECTOR_SIZE 30
#else
#warning "WARNING: BOOST_MPL_LIMIT_VECTOR_SIZE is already defined. Ensure config.hpp is included before any Boost headers"
#endif
#ifndef BOOST_MPL_LIMIT_LIST_SIZE
#define BOOST_MPL_LIMIT_LIST_SIZE 30
#else
#warning "WARNING: BOOST_MPL_LIMIT_LIST_SIZE is already defined. Ensure config.hpp is included before any Boost headers"
#endif
#endif // MAPNIK_CONFIG_HPP

View file

@ -38,9 +38,10 @@ namespace detail {
template <typename F1, typename F2, typename F3>
void make_building(geometry::polygon<double> const& poly, double height, F1 const& face_func, F2 const& frame_func, F3 const& roof_func)
{
const std::unique_ptr<path_type> frame(new path_type(path_type::types::LineString));
const std::unique_ptr<path_type> roof(new path_type(path_type::types::Polygon));
path_type frame(path_type::types::LineString);
path_type roof(path_type::types::Polygon);
std::deque<segment_t> face_segments;
double ring_begin_x, ring_begin_y;
double x0 = 0;
double y0 = 0;
double x,y;
@ -51,16 +52,22 @@ void make_building(geometry::polygon<double> const& poly, double height, F1 cons
{
if (cm == SEG_MOVETO)
{
frame->move_to(x,y);
frame.move_to(x,y);
ring_begin_x = x;
ring_begin_y = y;
}
else if (cm == SEG_LINETO)
{
frame->line_to(x,y);
face_segments.push_back(segment_t(x0,y0,x,y));
frame.line_to(x,y);
face_segments.emplace_back(x0,y0,x,y);
}
else if (cm == SEG_CLOSE)
{
frame->close_path();
frame.close_path();
if (!face_segments.empty())
{
face_segments.emplace_back(x0, y0, ring_begin_x, ring_begin_y);
}
}
x0 = x;
y0 = y;
@ -69,16 +76,16 @@ void make_building(geometry::polygon<double> const& poly, double height, F1 cons
std::sort(face_segments.begin(),face_segments.end(), y_order);
for (auto const& seg : face_segments)
{
const std::unique_ptr<path_type> faces(new path_type(path_type::types::Polygon));
faces->move_to(std::get<0>(seg),std::get<1>(seg));
faces->line_to(std::get<2>(seg),std::get<3>(seg));
faces->line_to(std::get<2>(seg),std::get<3>(seg) + height);
faces->line_to(std::get<0>(seg),std::get<1>(seg) + height);
path_type faces(path_type::types::Polygon);
faces.move_to(std::get<0>(seg),std::get<1>(seg));
faces.line_to(std::get<2>(seg),std::get<3>(seg));
faces.line_to(std::get<2>(seg),std::get<3>(seg) + height);
faces.line_to(std::get<0>(seg),std::get<1>(seg) + height);
face_func(*faces);
face_func(faces);
//
frame->move_to(std::get<0>(seg),std::get<1>(seg));
frame->line_to(std::get<0>(seg),std::get<1>(seg)+height);
frame.move_to(std::get<0>(seg),std::get<1>(seg));
frame.line_to(std::get<0>(seg),std::get<1>(seg)+height);
}
va.rewind(0);
@ -87,23 +94,23 @@ void make_building(geometry::polygon<double> const& poly, double height, F1 cons
{
if (cm == SEG_MOVETO)
{
frame->move_to(x,y+height);
roof->move_to(x,y+height);
frame.move_to(x,y+height);
roof.move_to(x,y+height);
}
else if (cm == SEG_LINETO)
{
frame->line_to(x,y+height);
roof->line_to(x,y+height);
frame.line_to(x,y+height);
roof.line_to(x,y+height);
}
else if (cm == SEG_CLOSE)
{
frame->close_path();
roof->close_path();
frame.close_path();
roof.close_path();
}
}
frame_func(*frame);
roof_func(*roof);
frame_func(frame);
roof_func(roof);
}
} // ns detail

View file

@ -26,24 +26,18 @@
#include <mapnik/config.hpp>
#include <mapbox/variant.hpp>
#pragma GCC diagnostic push
#include <mapnik/warning_ignore.hpp>
#include <boost/mpl/vector.hpp> // spirit support
#pragma GCC diagnostic pop
namespace mapnik { namespace util {
template <typename T>
using recursive_wrapper = typename mapbox::util::recursive_wrapper<T>;
template<typename... Types>
class variant : public mapbox::util::variant<Types...>
{
public:
// tell spirit that this is an adapted variant
struct adapted_variant_tag;
using types = boost::mpl::vector<Types...>;
using types = std::tuple<Types...>;
// inherit ctor's
using mapbox::util::variant<Types...>::variant;
};

@ -1 +1 @@
Subproject commit bb0a8927f4305df861d1b5c6366216bb4e530975
Subproject commit 91bc22de33fb6bf438d94d3c0db8475a7633588e