Changeset 666 for trunk

Show
Ignore:
Timestamp:
03/11/08 19:37:53 (9 months ago)
Author:
tom
Message:

Add cairo support to the python bindings - needs Pycairo installed.

Location:
trunk
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/bindings/python/SConscript

    r650 r666  
    2525 
    2626Import('env') 
     27    
     28env.ParseConfig('pkg-config --cflags pycairo') 
    2729 
    2830prefix = env['PYTHON_PREFIX'] + '/' + env['LIBDIR_SCHEMA'] + '/python' + env['PYTHON_VERSION'] + '/site-packages/' 
  • trunk/bindings/python/mapnik_python.cpp

    r618 r666  
    2727#include <boost/python/exception_translator.hpp> 
    2828 
     29void register_cairo(); 
    2930void export_color(); 
    3031void export_coord(); 
     
    5859#include <mapnik/map.hpp> 
    5960#include <mapnik/agg_renderer.hpp> 
     61#include <mapnik/cairo_renderer.hpp> 
    6062#include <mapnik/graphics.hpp> 
    6163#include <mapnik/image_util.hpp> 
     
    6466#include <mapnik/save_map.hpp> 
    6567 
     68#include <pycairo.h> 
    6669 
    6770void render(const mapnik::Map& map,mapnik::Image32& image, unsigned offset_x = 0, unsigned offset_y = 0) 
     
    7477{ 
    7578    mapnik::agg_renderer<mapnik::Image32> ren(map,image); 
     79    ren.apply(); 
     80} 
     81 
     82void render3(const mapnik::Map& map,PycairoSurface* surface, unsigned offset_x = 0, unsigned offset_y = 0) 
     83{ 
     84    Cairo::RefPtr<Cairo::Surface> s(new Cairo::Surface(surface->surface)); 
     85    mapnik::cairo_renderer<Cairo::Surface> ren(map,s,offset_x, offset_y); 
     86    ren.apply(); 
     87} 
     88 
     89void render4(const mapnik::Map& map,PycairoSurface* surface) 
     90{ 
     91    Cairo::RefPtr<Cairo::Surface> s(new Cairo::Surface(surface->surface)); 
     92    mapnik::cairo_renderer<Cairo::Surface> ren(map,s); 
    7693    ren.apply(); 
    7794} 
     
    126143 
    127144    register_exception_translator<mapnik::config_error>(translator); 
     145    register_cairo(); 
    128146    export_query();     
    129147    export_feature(); 
     
    153171    export_coord(); 
    154172    export_map(); 
    155      
     173 
    156174    def("render_to_file",&render_to_file1); 
    157175    def("render_to_file",&render_to_file2); 
     
    159177    def("render",&render);  
    160178    def("render",&render2); 
     179    def("render",&render3); 
     180    def("render",&render4); 
    161181    def("scale_denominator", &scale_denominator); 
    162182     
  • trunk/demo/python/rundemo.py

    r618 r666  
    309309 
    310310# Save image to files 
     311images = [] 
    311312im.save('demo.png', 'png') # true-colour RGBA 
     313images.append('demo.png') 
    312314im.save('demo256.png', 'png256') # save to palette based (max 256 colours) png  
     315images.append('demo256.png') 
    313316im.save('demo.jpg', 'jpeg') 
    314  
    315 print """\n\nThree maps have been rendered in the current directory: 
    316 - demo.jpg 
    317 - demo.png 
    318 - demo256.png 
    319  
    320 Have a look!\n\n""" 
     317images.append('demo.jpg') 
     318 
     319# Render cairo examples 
     320try: 
     321    import cairo 
     322    surface = cairo.SVGSurface('demo.svg', m.width,m.height) 
     323    render(m, surface) 
     324    images.append('demo.svg') 
     325    surface = cairo.PDFSurface('demo.pdf', m.width,m.height) 
     326    render(m, surface) 
     327    images.append('demo.pdf') 
     328except: 
     329    print '\n\nSkipping cairo examples as Pycairo not available' 
     330 
     331print "\n\n", len(images), "maps have been rendered in the current directory:" 
     332for image in images: 
     333    print "-", image 
     334print "\n\nHave a look!\n\n"