+ impl converter_traits for 'transform_tag'
+ support proj_transform and CoordTransform as args
This commit is contained in:
parent
347fce4db2
commit
030650f949
1 changed files with 39 additions and 16 deletions
|
@ -54,10 +54,10 @@
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
struct transform {};
|
struct transform_tag {};
|
||||||
struct clip_line {};
|
struct clip_line_tag {};
|
||||||
struct clip_poly {};
|
struct clip_poly_tag {};
|
||||||
struct smooth {};
|
struct smooth_tag {};
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ struct converter_traits
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct converter_traits<T,mapnik::smooth>
|
struct converter_traits<T,mapnik::smooth_tag>
|
||||||
{
|
{
|
||||||
typedef T geometry_type;
|
typedef T geometry_type;
|
||||||
typedef typename agg::conv_smooth_poly1_curve<geometry_type> conv_type;
|
typedef typename agg::conv_smooth_poly1_curve<geometry_type> conv_type;
|
||||||
|
@ -86,9 +86,9 @@ struct converter_traits<T,mapnik::smooth>
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct converter_traits<T, mapnik::clip_line>
|
struct converter_traits<T, mapnik::clip_line_tag>
|
||||||
{
|
{
|
||||||
typedef T geometry_type;
|
typedef T geometry_type;
|
||||||
typedef typename agg::conv_clip_polyline<geometry_type> conv_type;
|
typedef typename agg::conv_clip_polyline<geometry_type> conv_type;
|
||||||
|
@ -100,10 +100,10 @@ struct converter_traits<T, mapnik::clip_line>
|
||||||
geom.clip_box(box.x0,box.y0,box.x1,box.y1);
|
geom.clip_box(box.x0,box.y0,box.x1,box.y1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
*/
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct converter_traits<T,mapnik::clip_poly>
|
struct converter_traits<T,mapnik::clip_poly_tag>
|
||||||
{
|
{
|
||||||
typedef T geometry_type;
|
typedef T geometry_type;
|
||||||
typedef typename agg::conv_clip_polygon<geometry_type> conv_type;
|
typedef typename agg::conv_clip_polygon<geometry_type> conv_type;
|
||||||
|
@ -112,7 +112,24 @@ struct converter_traits<T,mapnik::clip_poly>
|
||||||
static void setup(geometry_type & geom, Args & args)
|
static void setup(geometry_type & geom, Args & args)
|
||||||
{
|
{
|
||||||
typename boost::mpl::at<Args,boost::mpl::int_<0> >::type const& box = boost::fusion::at_c<0>(args);
|
typename boost::mpl::at<Args,boost::mpl::int_<0> >::type const& box = boost::fusion::at_c<0>(args);
|
||||||
geom.clip_box(box.x0,box.y0,box.x1,box.y1);
|
geom.clip_box(box.minx(),box.miny(),box.maxx(),box.maxy());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct converter_traits<T,mapnik::transform_tag>
|
||||||
|
{
|
||||||
|
typedef T geometry_type;
|
||||||
|
typedef coord_transform2<CoordTransform, geometry_type> conv_type;
|
||||||
|
|
||||||
|
template <typename Args>
|
||||||
|
static void setup(geometry_type & geom, Args & args)
|
||||||
|
{
|
||||||
|
typename boost::mpl::at<Args,boost::mpl::int_<3> >::type const& tr = boost::fusion::at_c<3>(args);
|
||||||
|
typename boost::mpl::at<Args,boost::mpl::int_<4> >::type const& prj_trans = boost::fusion::at_c<4>(args);
|
||||||
|
geom.set_proj_trans(prj_trans);
|
||||||
|
geom.set_trans(tr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -196,23 +213,29 @@ struct dispatcher
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename B, typename R, typename S, typename C>
|
template <typename B, typename R, typename S, typename P, typename T, typename C >
|
||||||
struct vertex_converter : private boost::noncopyable
|
struct vertex_converter : private boost::noncopyable
|
||||||
{
|
{
|
||||||
typedef C conv_types;
|
typedef C conv_types;
|
||||||
typedef B bbox_type;
|
typedef B bbox_type;
|
||||||
typedef R rasterizer_type;
|
typedef R rasterizer_type;
|
||||||
typedef S symbolizer_type;
|
typedef S symbolizer_type;
|
||||||
|
typedef P proj_trans_type;
|
||||||
typedef typename boost::fusion::vector3
|
typedef T trans_type;
|
||||||
|
typedef typename boost::fusion::vector
|
||||||
<
|
<
|
||||||
bbox_type const&,
|
bbox_type const&,
|
||||||
rasterizer_type&,
|
rasterizer_type&,
|
||||||
symbolizer_type const&
|
symbolizer_type const&,
|
||||||
|
trans_type const&,
|
||||||
|
proj_trans_type const&
|
||||||
> args_type;
|
> args_type;
|
||||||
|
|
||||||
vertex_converter(bbox_type const& b, rasterizer_type & ras, symbolizer_type const& sym)
|
vertex_converter(bbox_type const& b, rasterizer_type & ras,
|
||||||
: disp_(args_type(boost::cref(b),boost::ref(ras),boost::cref(sym))) {}
|
symbolizer_type const& sym, trans_type & tr, proj_trans_type const& prj_trans)
|
||||||
|
: disp_(args_type(boost::cref(b),boost::ref(ras),
|
||||||
|
boost::cref(sym),boost::cref(tr),
|
||||||
|
boost::cref(prj_trans))) {}
|
||||||
|
|
||||||
template <typename Geometry>
|
template <typename Geometry>
|
||||||
void apply(Geometry & geom)
|
void apply(Geometry & geom)
|
||||||
|
|
Loading…
Reference in a new issue