Skip to content

Commit 92625eb

Browse files
committed
Template placement finder methods + reflect enums [WIP]
1 parent e25ea40 commit 92625eb

File tree

2 files changed

+99
-28
lines changed

2 files changed

+99
-28
lines changed

src/mapnik_placement_finder.cpp

Lines changed: 80 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <mapnik/symbolizer_keys.hpp>
2929
#include <mapnik/symbolizer_enumerations.hpp>
3030
#include <mapnik/text/placements/dummy.hpp>
31+
#include <mapnik/text/placements/simple.hpp>
3132
#include <mapnik/text/text_properties.hpp>
3233
#include <mapnik/text/formatting/text.hpp>
3334
#include "mapnik_symbolizer.hpp"
@@ -39,67 +40,79 @@ namespace py = pybind11;
3940
namespace
4041
{
4142

42-
void set_face_name(mapnik::text_placements_dummy & finder, std::string const& face_name)
43+
template <typename PlacementFinder>
44+
void set_face_name(PlacementFinder & finder, std::string const& face_name)
4345
{
4446
finder.defaults.format_defaults.face_name = face_name;
4547
}
4648

47-
std::string get_face_name(mapnik::text_placements_dummy & finder)
49+
template <typename PlacementFinder>
50+
std::string get_face_name(PlacementFinder const& finder)
4851
{
4952
return finder.defaults.format_defaults.face_name;
5053
}
5154

52-
void set_text_size(mapnik::text_placements_dummy & finder, double text_size)
55+
template <typename PlacementFinder>
56+
void set_text_size(PlacementFinder & finder, double text_size)
5357
{
5458
finder.defaults.format_defaults.text_size = text_size;
5559
}
5660

57-
py::object get_text_size(mapnik::text_placements_dummy const& finder)
61+
template <typename PlacementFinder>
62+
py::object get_text_size(PlacementFinder const& finder)
5863
{
5964
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
6065
finder.defaults.format_defaults.text_size);
6166
}
6267

63-
void set_fill(mapnik::text_placements_dummy & finder, mapnik::color const& fill)
68+
template <typename PlacementFinder>
69+
void set_fill(PlacementFinder & finder, mapnik::color const& fill)
6470
{
6571
finder.defaults.format_defaults.fill = fill;
6672
}
6773

68-
py::object get_fill(mapnik::text_placements_dummy & finder)
74+
template <typename PlacementFinder>
75+
py::object get_fill(PlacementFinder const& finder)
6976
{
7077
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
7178
finder.defaults.format_defaults.fill);
7279
}
73-
void set_halo_fill(mapnik::text_placements_dummy & finder, mapnik::color const& halo_fill )
80+
81+
template <typename PlacementFinder>
82+
void set_halo_fill(PlacementFinder & finder, mapnik::color const& halo_fill )
7483
{
7584
finder.defaults.format_defaults.halo_fill = halo_fill;
7685
}
7786

78-
py::object get_halo_fill(mapnik::text_placements_dummy & finder)
87+
template <typename PlacementFinder>
88+
py::object get_halo_fill(PlacementFinder const& finder)
7989
{
8090
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
8191
finder.defaults.format_defaults.halo_fill);
8292
}
8393

84-
85-
void set_halo_radius(mapnik::text_placements_dummy & finder, double halo_radius)
94+
template <typename PlacementFinder>
95+
void set_halo_radius(PlacementFinder & finder, double halo_radius)
8696
{
8797
finder.defaults.format_defaults.halo_radius = halo_radius;
8898
}
8999

90-
py::object get_halo_radius(mapnik::text_placements_dummy & finder)
100+
template <typename PlacementFinder>
101+
py::object get_halo_radius(PlacementFinder const& finder)
91102
{
92103
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
93104
finder.defaults.format_defaults.halo_radius);
94105
}
95106

96-
void set_format_expr(mapnik::text_placements_dummy & finder, std::string const& expr)
107+
template <typename PlacementFinder>
108+
void set_format_expr(PlacementFinder & finder, std::string const& expr)
97109
{
98110
finder.defaults.set_format_tree(
99111
std::make_shared<mapnik::formatting::text_node>(mapnik::parse_expression(expr)));
100112
}
101113

102-
std::string get_format_expr(mapnik::text_placements_dummy & finder)
114+
template <typename PlacementFinder>
115+
std::string get_format_expr(PlacementFinder const& finder)
103116
{
104117
mapnik::expression_set exprs;
105118
finder.defaults.add_expressions(exprs);
@@ -118,11 +131,59 @@ void export_placement_finder(py::module const& m)
118131
{
119132
py::class_<mapnik::text_placements_dummy, std::shared_ptr<mapnik::text_placements_dummy>>(m, "PlacementFinder")
120133
.def(py::init<>(), "Default ctor")
121-
.def_property("face_name", &get_face_name, &set_face_name, "Font face name")
122-
.def_property("text_size", &get_text_size, &set_text_size, "Size of text")
123-
.def_property("fill", &get_fill, &set_fill, "Fill")
124-
.def_property("halo_fill", &get_halo_fill, &set_halo_fill, "Halo fill")
125-
.def_property("halo_radius", &get_halo_radius, &set_halo_radius, "Halo radius")
126-
.def_property("format_expression", &get_format_expr, &set_format_expr, "Format expression")
134+
.def_property("face_name",
135+
&get_face_name<mapnik::text_placements_dummy>,
136+
&set_face_name<mapnik::text_placements_dummy>,
137+
"Font face name")
138+
.def_property("text_size",
139+
&get_text_size<mapnik::text_placements_dummy>,
140+
&set_text_size<mapnik::text_placements_dummy>,
141+
"Size of text")
142+
.def_property("fill",
143+
&get_fill<mapnik::text_placements_dummy>,
144+
&set_fill<mapnik::text_placements_dummy>,
145+
"Fill")
146+
.def_property("halo_fill",
147+
&get_halo_fill<mapnik::text_placements_dummy>,
148+
&set_halo_fill<mapnik::text_placements_dummy>,
149+
"Halo fill")
150+
.def_property("halo_radius",
151+
&get_halo_radius<mapnik::text_placements_dummy>,
152+
&set_halo_radius<mapnik::text_placements_dummy>,
153+
"Halo radius")
154+
.def_property("format_expression",
155+
&get_format_expr<mapnik::text_placements_dummy>,
156+
&set_format_expr<mapnik::text_placements_dummy>,
157+
"Format expression")
158+
;
159+
160+
/*
161+
py::class_<mapnik::text_placements_simple, std::shared_ptr<mapnik::text_placements_simple>>(m, "PlacementFinderSimple")
162+
.def(py::init<>(), "Default ctor")
163+
.def_property("face_name",
164+
&get_face_name<mapnik::text_placements_simple>,
165+
&set_face_name<mapnik::text_placements_simple>,
166+
"Font face name")
167+
.def_property("text_size",
168+
&get_text_size<mapnik::text_placements_simple>,
169+
&set_text_size<mapnik::text_placements_simple>,
170+
"Size of text")
171+
.def_property("fill",
172+
&get_fill<mapnik::text_placements_simple>,
173+
&set_fill<mapnik::text_placements_simple>,
174+
"Fill")
175+
.def_property("halo_fill",
176+
&get_halo_fill<mapnik::text_placements_simple>,
177+
&set_halo_fill<mapnik::text_placements_simple>,
178+
"Halo fill")
179+
.def_property("halo_radius",
180+
&get_halo_radius<mapnik::text_placements_simple>,
181+
&set_halo_radius<mapnik::text_placements_simple>,
182+
"Halo radius")
183+
.def_property("format_expression",
184+
&get_format_expr<mapnik::text_placements_simple>,
185+
&set_format_expr<mapnik::text_placements_simple>,
186+
"Format expression")
127187
;
188+
*/
128189
}

src/mapnik_text_symbolizer.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ void export_text_symbolizer(py::module const& m)
5959
using namespace python_mapnik;
6060
using mapnik::text_symbolizer;
6161

62-
// using namespace boost::python;
63-
// mapnik::enumeration_<mapnik::label_placement_e>("label_placement")
64-
// .value("LINE_PLACEMENT", mapnik::label_placement_enum::LINE_PLACEMENT)
65-
// .value("POINT_PLACEMENT", mapnik::label_placement_enum::POINT_PLACEMENT)
66-
// .value("VERTEX_PLACEMENT", mapnik::label_placement_enum::VERTEX_PLACEMENT)
67-
// .value("INTERIOR_PLACEMENT", mapnik::label_placement_enum::INTERIOR_PLACEMENT);
62+
py::enum_<mapnik::label_placement_enum>(m, "LabelPlacement")
63+
.value("LINE_PLACEMENT", mapnik::label_placement_enum::LINE_PLACEMENT)
64+
.value("POINT_PLACEMENT", mapnik::label_placement_enum::POINT_PLACEMENT)
65+
.value("VERTEX_PLACEMENT", mapnik::label_placement_enum::VERTEX_PLACEMENT)
66+
.value("INTERIOR_PLACEMENT", mapnik::label_placement_enum::INTERIOR_PLACEMENT)
67+
;
6868

6969
// mapnik::enumeration_<mapnik::vertical_alignment_e>("vertical_alignment")
7070
// .value("TOP", mapnik::vertical_alignment_enum::V_TOP)
@@ -90,14 +90,24 @@ void export_text_symbolizer(py::module const& m)
9090
// .value("LOWERCASE", mapnik::text_transform_enum::LOWERCASE)
9191
// .value("CAPITALIZE", mapnik::text_transform_enum::CAPITALIZE);
9292

93-
// mapnik::enumeration_<mapnik::halo_rasterizer_e>("halo_rasterizer")
94-
// .value("FULL", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FULL)
95-
// .value("FAST", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FAST);
93+
py::enum_<mapnik::halo_rasterizer_enum>(m, "halo_rasterizer")
94+
.value("FULL", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FULL)
95+
.value("FAST", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FAST);
96+
97+
98+
// set_symbolizer_property<symbolizer_base, composite_mode_e>(sym, keys::halo_comp_op, node);
99+
// set_symbolizer_property<symbolizer_base, halo_rasterizer_enum>(sym, keys::halo_rasterizer, node);
100+
// set_symbolizer_property<symbolizer_base, transform_type>(sym, keys::halo_transform, node);
101+
// set_symbolizer_property<symbolizer_base, value_double>(sym, keys::offset, node);
96102

97103
py::class_<text_symbolizer, symbolizer_base>(m, "TextSymbolizer")
98104
.def(py::init<>(), "Default ctor")
99105
.def("__hash__",hash_impl_2<text_symbolizer>)
100106
.def_property("placement_finder", &get_placement_finder, &set_placement_finder, "Placement finder")
107+
.def_property("halo_comp_op",
108+
&get<mapnik::composite_mode_e, mapnik::keys::halo_comp_op>,
109+
&set_enum_property<symbolizer_base, mapnik::composite_mode_e, mapnik::keys::halo_comp_op>,
110+
"Composite mode (comp-op)")
101111
;
102112

103113
}

0 commit comments

Comments
 (0)