~ubuntu-branches/ubuntu/trusty/mapnik/trusty-proposed

« back to all changes in this revision

Viewing changes to bindings/python/mapnik_text_symbolizer.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Sauthier
  • Date: 2009-08-27 00:28:37 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090827002837-ztqzfg2rmclfh4i9
Tags: 0.6.1-0ubuntu1
* New upstream release.
* Change usr/lib to usr/lib* to enable build on 64 bits systems due to new
  configuration in SConstruct in :
  - debian/libmapnik-dev.install
  - debian/libmapnik0.6.install
  - debian/mapnik-plugin-base

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include <mapnik/text_symbolizer.hpp>
27
27
#include "mapnik_enumeration.hpp"
28
28
 
 
29
using namespace mapnik;
 
30
using mapnik::color;
 
31
using mapnik::text_symbolizer;
 
32
 
 
33
namespace {
 
34
  using namespace boost::python;
 
35
 
 
36
  list get_displacement_list(const text_symbolizer& t)
 
37
  {
 
38
    position pos = t.get_displacement();
 
39
    double dx = boost::get<0>(pos);
 
40
    double dy = boost::get<1>(pos);
 
41
    boost::python::list disp;
 
42
    disp.append(dx);
 
43
    disp.append(dy);
 
44
    return disp;
 
45
  }
 
46
  
 
47
  list get_anchor_list(const text_symbolizer& t)
 
48
  {
 
49
    position anch = t.get_anchor();
 
50
    double x = boost::get<0>(anch);
 
51
    double y = boost::get<1>(anch);
 
52
    boost::python::list anchor;
 
53
    anchor.append(x);
 
54
    anchor.append(y);
 
55
    return anchor;
 
56
  }
 
57
}
 
58
 
 
59
struct text_symbolizer_pickle_suite : boost::python::pickle_suite
 
60
{
 
61
   static boost::python::tuple
 
62
   getinitargs(const text_symbolizer& t)
 
63
   {
 
64
 
 
65
      return boost::python::make_tuple(t.get_name(),t.get_face_name(),t.get_text_size(),t.get_fill());
 
66
      
 
67
   }
 
68
 
 
69
   static  boost::python::tuple
 
70
   getstate(const text_symbolizer& t)
 
71
   {
 
72
        boost::python::list disp = get_displacement_list(t);
 
73
        boost::python::list anchor = get_anchor_list(t);
 
74
                
 
75
        return boost::python::make_tuple(disp,t.get_fontset().get_name(),t.get_label_placement(),
 
76
        t.get_vertical_alignment(),t.get_halo_radius(),t.get_halo_fill(),t.get_text_ratio(),
 
77
        t.get_wrap_width(),t.get_label_spacing(),t.get_minimum_distance(),t.get_allow_overlap(),
 
78
        anchor,t.get_force_odd_labels(),t.get_max_char_angle_delta());
 
79
   }
 
80
 
 
81
   static void
 
82
   setstate (text_symbolizer& t, boost::python::tuple state)
 
83
   {
 
84
        using namespace boost::python;
 
85
        
 
86
        if (len(state) != 14)
 
87
        {
 
88
            PyErr_SetObject(PyExc_ValueError,
 
89
                         ("expected 14-item tuple in call to __setstate__; got %s"
 
90
                          % state).ptr()
 
91
            );
 
92
            throw_error_already_set();
 
93
        }
 
94
        
 
95
        list disp = extract<list>(state[0]);
 
96
        double dx = extract<double>(disp[0]);
 
97
        double dy = extract<double>(disp[1]);
 
98
        t.set_displacement(dx,dy);
 
99
 
 
100
        if (state[1])
 
101
        {
 
102
            std::string fontset = extract<std::string>(state[1]);
 
103
            t.set_fontset(fontset);
 
104
        }
 
105
        
 
106
        t.set_label_placement(extract<label_placement_e>(state[2]));
 
107
 
 
108
        t.set_vertical_alignment(extract<vertical_alignment_e>(state[3]));
 
109
        
 
110
        t.set_halo_radius(extract<unsigned>(state[4]));
 
111
 
 
112
        t.set_halo_fill(extract<color>(state[5]));
 
113
 
 
114
        t.set_text_ratio(extract<unsigned>(state[6]));
 
115
 
 
116
        t.set_wrap_width(extract<unsigned>(state[7]));
 
117
 
 
118
        t.set_label_spacing(extract<unsigned>(state[8]));
 
119
 
 
120
        t.set_minimum_distance(extract<double>(state[9]));
 
121
 
 
122
        t.set_allow_overlap(extract<bool>(state[10]));
 
123
        
 
124
        list anch = extract<list>(state[11]);
 
125
        double x = extract<double>(anch[0]);
 
126
        double y = extract<double>(anch[1]);
 
127
        t.set_anchor(x,y);
 
128
        
 
129
        t.set_force_odd_labels(extract<bool>(state[12]));
 
130
        
 
131
        t.set_max_char_angle_delta(extract<double>(state[13]));
 
132
   }
 
133
 
 
134
};
 
135
 
 
136
 
29
137
void export_text_symbolizer()
30
138
{
31
139
   using namespace boost::python;
32
 
   using namespace mapnik;
33
 
 
34
 
   using mapnik::text_symbolizer;
35
 
   using mapnik::color;
36
140
 
37
141
   enumeration_<label_placement_e>("label_placement")
38
142
      .value("LINE_PLACEMENT",LINE_PLACEMENT)
46
150
   
47
151
   class_<text_symbolizer>("TextSymbolizer",
48
152
                           init<std::string const&,std::string const&, unsigned,color const&>())
 
153
      .def_pickle(text_symbolizer_pickle_suite())
49
154
      .add_property("halo_fill",make_function(
50
155
                       &text_symbolizer::get_halo_fill,
51
156
                       return_value_policy<copy_const_reference>()),
99
204
                    &text_symbolizer::set_minimum_distance)
100
205
      .def("displacement",&text_symbolizer::set_displacement)
101
206
      .def("anchor",&text_symbolizer::set_anchor)
 
207
      .def("get_displacement",get_displacement_list)
 
208
      .def("get_anchor",get_anchor_list)
102
209
      .add_property("label_placement",
103
210
                    &text_symbolizer::get_label_placement,
104
211
                    &text_symbolizer::set_label_placement,