Show
Ignore:
Timestamp:
06/29/08 06:40:08 (6 months ago)
Author:
artem
Message:

applied font fallbacj patch from Beau Gunderson

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/demo/c++/rundemo.cpp

    r620 r701  
    2929#include <mapnik/font_engine_freetype.hpp> 
    3030#include <mapnik/agg_renderer.hpp> 
     31#include <mapnik/cairo_renderer.hpp> 
    3132#include <mapnik/filter_factory.hpp> 
    3233#include <mapnik/color_factory.hpp> 
     
    5354         
    5455        Map m(800,600); 
    55         m.set_background(color_factory::from_string("white")); 
    5656         
    57         // create styles 
     57        mapnik::load_map(m,"/Users/artem/projects/openstreetmap/mapnik/openstreetmap_kleptog.xml"); 
     58         
     59        m.zoomToBox(Envelope<double>(-762470.6985688356,4004842.088052442,-761928.349698612,4005328.834769584)); 
     60         
     61        //Image32 buf(m.getWidth(),m.getHeight()); 
     62        //agg_renderer<Image32> ren(m,buf); 
     63        //ren.apply(); 
     64         
     65        //save_to_file<ImageData32>(buf.data(),"demo.jpg","jpeg"); 
     66        //save_to_file<ImageData32>(buf.data(),"demo.png","png"); 
     67        //save_to_file<ImageData32>(buf.data(),"demo256.png","png256"); 
     68        //std::cout << "Three maps have been rendered in the current directory:\n" 
     69        //  "- demo.jpg\n" 
     70        //  "- demo.png\n" 
     71        //  "- demo256.png\n" 
     72        //  "Have a look!\n"; 
    5873 
    59         // Provinces (polygon) 
    60         feature_type_style provpoly_style; 
    61         
    62         rule_type provpoly_rule_on; 
    63         provpoly_rule_on.set_filter(create_filter("[NAME_EN] = 'Ontario'")); 
    64         provpoly_rule_on.append(polygon_symbolizer(Color(250, 190, 183))); 
    65         provpoly_style.add_rule(provpoly_rule_on); 
     74        // Cairo renderer 
     75 
     76        // Pdf 
     77        Cairo::RefPtr<Cairo::PdfSurface> pdf = Cairo::PdfSurface::create("mapnik.pdf",m.getWidth(),m.getHeight()); 
     78        mapnik::cairo_renderer<Cairo::Surface> cairo1(m, pdf); 
     79        cairo1.apply(); 
     80        // Svg 
     81        //Cairo::RefPtr<Cairo::SvgSurface> svg = Cairo::SvgSurface::create("demo.svg",m.getWidth(),m.getHeight()); 
     82        //mapnik::cairo_renderer<Cairo::Surface> cairo2(m, svg);   
     83        //cairo2.apply(); 
     84        // Png 
     85        //Cairo::RefPtr<Cairo::ImageSurface> image = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32,m.getWidth(),m.getHeight()); 
     86        //mapnik::cairo_renderer<Cairo::Surface> cairo3(m, image);   
     87        //cairo3.apply(); 
    6688         
    67         rule_type provpoly_rule_qc; 
    68         provpoly_rule_qc.set_filter(create_filter("[NAME_EN] = 'Quebec'")); 
    69         provpoly_rule_qc.append(polygon_symbolizer(Color(217, 235, 203))); 
    70         provpoly_style.add_rule(provpoly_rule_qc); 
     89        //std::string filename = "demo_cairo.png"; 
     90        //image->write_to_png(filename); 
    7191         
    72         m.insert_style("provinces",provpoly_style); 
    73  
    74         // Provinces (polyline) 
    75         feature_type_style provlines_style; 
     92        // Ps 
     93        //Cairo::RefPtr<Cairo::PsSurface> ps = Cairo::PsSurface::create("demo.ps",m.getWidth(),m.getHeight()); 
     94        //mapnik::cairo_renderer<Cairo::Surface> cairo4(m, ps); 
     95        //cairo4.apply(); 
    7696         
    77         stroke provlines_stk (Color(0,0,0),1.0); 
    78         provlines_stk.add_dash(8, 4); 
    79         provlines_stk.add_dash(2, 2); 
    80         provlines_stk.add_dash(2, 2); 
    81          
    82         rule_type provlines_rule; 
    83         provlines_rule.append(line_symbolizer(provlines_stk)); 
    84         provlines_style.add_rule(provlines_rule); 
    85          
    86         m.insert_style("provlines",provlines_style); 
    87          
    88         // Drainage  
    89         feature_type_style qcdrain_style; 
    90          
    91         rule_type qcdrain_rule; 
    92         qcdrain_rule.set_filter(create_filter("[HYC] = 8")); 
    93         qcdrain_rule.append(polygon_symbolizer(Color(153, 204, 255))); 
    94         qcdrain_style.add_rule(qcdrain_rule); 
    95          
    96         m.insert_style("drainage",qcdrain_style); 
    97          
    98         // Roads 3 and 4 (The "grey" roads) 
    99         feature_type_style roads34_style;     
    100         rule_type roads34_rule; 
    101         roads34_rule.set_filter(create_filter("[CLASS] = 3 or [CLASS] = 4")); 
    102         stroke roads34_rule_stk(Color(171,158,137),2.0); 
    103         roads34_rule_stk.set_line_cap(ROUND_CAP); 
    104         roads34_rule_stk.set_line_join(ROUND_JOIN); 
    105         roads34_rule.append(line_symbolizer(roads34_rule_stk)); 
    106         roads34_style.add_rule(roads34_rule); 
    107          
    108         m.insert_style("smallroads",roads34_style); 
    109          
    110  
    111         // Roads 2 (The thin yellow ones) 
    112         feature_type_style roads2_style_1; 
    113         rule_type roads2_rule_1; 
    114         roads2_rule_1.set_filter(create_filter("[CLASS] = 2")); 
    115         stroke roads2_rule_stk_1(Color(171,158,137),4.0); 
    116         roads2_rule_stk_1.set_line_cap(ROUND_CAP); 
    117         roads2_rule_stk_1.set_line_join(ROUND_JOIN); 
    118         roads2_rule_1.append(line_symbolizer(roads2_rule_stk_1)); 
    119         roads2_style_1.add_rule(roads2_rule_1); 
    120          
    121         m.insert_style("road-border", roads2_style_1); 
    122          
    123         feature_type_style roads2_style_2; 
    124         rule_type roads2_rule_2; 
    125         roads2_rule_2.set_filter(create_filter("[CLASS] = 2")); 
    126         stroke roads2_rule_stk_2(Color(255,250,115),2.0); 
    127         roads2_rule_stk_2.set_line_cap(ROUND_CAP); 
    128         roads2_rule_stk_2.set_line_join(ROUND_JOIN); 
    129         roads2_rule_2.append(line_symbolizer(roads2_rule_stk_2)); 
    130         roads2_style_2.add_rule(roads2_rule_2); 
    131          
    132         m.insert_style("road-fill", roads2_style_2); 
    133          
    134         // Roads 1 (The big orange ones, the highways) 
    135         feature_type_style roads1_style_1; 
    136         rule_type roads1_rule_1; 
    137         roads1_rule_1.set_filter(create_filter("[CLASS] = 1")); 
    138         stroke roads1_rule_stk_1(Color(188,149,28),7.0); 
    139         roads1_rule_stk_1.set_line_cap(ROUND_CAP); 
    140         roads1_rule_stk_1.set_line_join(ROUND_JOIN); 
    141         roads1_rule_1.append(line_symbolizer(roads1_rule_stk_1)); 
    142         roads1_style_1.add_rule(roads1_rule_1); 
    143         m.insert_style("highway-border", roads1_style_1); 
    144          
    145         feature_type_style roads1_style_2; 
    146         rule_type roads1_rule_2; 
    147         roads1_rule_2.set_filter(create_filter("[CLASS] = 1")); 
    148         stroke roads1_rule_stk_2(Color(242,191,36),5.0); 
    149         roads1_rule_stk_2.set_line_cap(ROUND_CAP); 
    150         roads1_rule_stk_2.set_line_join(ROUND_JOIN); 
    151         roads1_rule_2.append(line_symbolizer(roads1_rule_stk_2)); 
    152         roads1_style_2.add_rule(roads1_rule_2); 
    153         m.insert_style("highway-fill", roads1_style_2); 
    154          
    155         // Populated Places 
    156          
    157         feature_type_style popplaces_style; 
    158         rule_type popplaces_rule; 
    159         text_symbolizer popplaces_text_symbolizer("GEONAME","DejaVu Sans Book",10,Color(0,0,0)); 
    160         popplaces_text_symbolizer.set_halo_fill(Color(255,255,200)); 
    161         popplaces_text_symbolizer.set_halo_radius(1); 
    162         popplaces_rule.append(popplaces_text_symbolizer); 
    163         popplaces_style.add_rule(popplaces_rule); 
    164          
    165         m.insert_style("popplaces",popplaces_style ); 
    166          
    167         // Layers 
    168         // Provincial  polygons 
    169         { 
    170             parameters p; 
    171             p["type"]="shape"; 
    172             p["file"]="../data/boundaries"; 
    173              
    174             Layer lyr("Provinces");  
    175             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    176             lyr.add_style("provinces");     
    177             m.addLayer(lyr); 
    178         } 
    179          
    180         // Drainage 
    181         { 
    182             parameters p; 
    183             p["type"]="shape"; 
    184             p["file"]="../data/qcdrainage"; 
    185             Layer lyr("Quebec Hydrography"); 
    186             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    187             lyr.add_style("drainage");     
    188             m.addLayer(lyr); 
    189         } 
    190          
    191         { 
    192             parameters p; 
    193             p["type"]="shape"; 
    194             p["file"]="../data/ontdrainage"; 
    195              
    196             Layer lyr("Ontario Hydrography");  
    197             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    198             lyr.add_style("drainage");     
    199             m.addLayer(lyr); 
    200         } 
    201          
    202         // Provincial boundaries 
    203         { 
    204             parameters p; 
    205             p["type"]="shape"; 
    206             p["file"]="../data/boundaries_l"; 
    207             Layer lyr("Provincial borders");  
    208             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    209             lyr.add_style("provlines");     
    210             m.addLayer(lyr); 
    211         } 
    212          
    213         // Roads 
    214         { 
    215             parameters p; 
    216             p["type"]="shape"; 
    217             p["file"]="../data/roads";         
    218             Layer lyr("Roads");  
    219             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    220             lyr.add_style("smallroads"); 
    221             lyr.add_style("road-border"); 
    222             lyr.add_style("road-fill"); 
    223             lyr.add_style("highway-border"); 
    224             lyr.add_style("highway-fill"); 
    225  
    226             m.addLayer(lyr);         
    227         } 
    228         // popplaces 
    229         { 
    230             parameters p; 
    231             p["type"]="shape"; 
    232             p["file"]="../data/popplaces"; 
    233             p["encoding"] = "latin1"; 
    234             Layer lyr("Populated Places"); 
    235             lyr.set_datasource(datasource_cache::instance()->create(p)); 
    236             lyr.add_style("popplaces");     
    237             m.addLayer(lyr); 
    238         } 
    239          
    240         m.zoomToBox(Envelope<double>(1405120.04127408,-247003.813399447, 
    241                                      1706357.31328276,-25098.593149577)); 
    242          
    243         Image32 buf(m.getWidth(),m.getHeight()); 
    244         agg_renderer<Image32> ren(m,buf); 
    245         ren.apply(); 
    246          
    247         save_to_file<ImageData32>(buf.data(),"demo.jpg","jpeg"); 
    248         save_to_file<ImageData32>(buf.data(),"demo.png","png"); 
    249         save_to_file<ImageData32>(buf.data(),"demo256.png","png256"); 
    250         std::cout << "Three maps have been rendered in the current directory:\n" 
    251            "- demo.jpg\n" 
    252            "- demo.png\n" 
    253            "- demo256.png\n" 
    254            "Have a look!\n"; 
    25597    } 
    25698    catch ( const mapnik::config_error & ex )