/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #include #include #include #include // boost #include #include #include namespace { bool add_marker_from_image(mapnik::marker_cache & cache, std::string const& uri, mapnik::image_32 const& im) { boost::optional imagep(boost::make_shared(im.data())); return cache.insert_marker(uri,boost::make_shared(imagep),true); } bool add_marker_from_svg(mapnik::marker_cache & cache, std::string const& uri, mapnik::svg_storage_type const& svg) { mapnik::svg_path_ptr marker_path(boost::make_shared(svg)); return cache.insert_marker(uri,boost::make_shared(marker_path),true); } boost::python::object get_marker(boost::shared_ptr const& cache, std::string const& uri) { mapnik::marker_cache::iterator_type itr = cache->search(uri); mapnik::marker_cache::iterator_type end = cache->end(); if (itr != end) { if (itr->second->is_bitmap()) { mapnik::image_data_32 const& im = *itr->second->get_bitmap_data()->get(); return boost::python::object(boost::make_shared(im)); } return boost::python::object(*(itr->second->get_vector_data())); } return boost::python::object(); } boost::python::list get_keys(boost::shared_ptr const& cache) { boost::python::list l; mapnik::marker_cache::iterator_type itr = cache->begin(); mapnik::marker_cache::iterator_type end = cache->end(); for (;itr != end; ++itr) { l.append(itr->first); } return l; } } void export_marker_cache() { using mapnik::marker_cache; using mapnik::singleton; using mapnik::CreateUsingNew; using namespace boost::python; class_,boost::noncopyable>("Singleton",no_init) .def("instance",&singleton::instance, return_value_policy()) .staticmethod("instance") ; class_ >, boost::noncopyable>("MarkerCache",no_init) .def("clear",&marker_cache::clear) .def("remove",&marker_cache::remove) .def("size",&marker_cache::size) .def("put",&add_marker_from_image) .def("put",&add_marker_from_svg) .def("get",&get_marker) .def("keys",&get_keys) ; }