| 459 | | UnicodeString text = feature[sym.get_name()].to_unicode(); |
| 460 | | boost::shared_ptr<ImageData32> const& data = sym.get_image(); |
| 461 | | if (text.length() > 0 && data) |
| 462 | | { |
| 463 | | face_ptr face = font_manager_.get_face(sym.get_face_name()); |
| 464 | | if (face) |
| 465 | | { |
| 466 | | text_renderer<mapnik::Image32> ren(pixmap_,face); |
| 467 | | ren.set_pixel_size(sym.get_text_size()); |
| 468 | | ren.set_fill(sym.get_fill()); |
| 469 | | |
| 470 | | string_info info(text); |
| 471 | | face->get_string_info(info); |
| 472 | | |
| 473 | | placement_finder<label_collision_detector4> finder(detector_); |
| 474 | | |
| 475 | | unsigned num_geom = feature.num_geometries(); |
| 476 | | for (unsigned i=0;i<num_geom;++i) |
| | 459 | if (feature.exists(sym.get_name())) |
| | 460 | { |
| | 461 | UnicodeString text = feature[sym.get_name()].to_unicode(); |
| | 462 | boost::shared_ptr<ImageData32> const& data = sym.get_image(); |
| | 463 | if (text.length() > 0 && data) |
| | 464 | { |
| | 465 | face_ptr face = font_manager_.get_face(sym.get_face_name()); |
| | 466 | if (face) |
| 478 | | geometry2d const& geom = feature.get_geometry(i); |
| 479 | | if (geom.num_points() > 0) // don't bother with empty geometries |
| 480 | | { |
| 481 | | path_type path(t_,geom,prj_trans); |
| 482 | | placement text_placement(info, sym); |
| 483 | | text_placement.avoid_edges = sym.get_avoid_edges(); |
| 484 | | finder.find_point_placements<path_type>(text_placement,path); |
| | 468 | text_renderer<mapnik::Image32> ren(pixmap_,face); |
| | 469 | ren.set_pixel_size(sym.get_text_size()); |
| | 470 | ren.set_fill(sym.get_fill()); |
| | 471 | |
| | 472 | string_info info(text); |
| | 473 | face->get_string_info(info); |
| | 474 | |
| | 475 | placement_finder<label_collision_detector4> finder(detector_); |
| | 476 | |
| | 477 | unsigned num_geom = feature.num_geometries(); |
| | 478 | for (unsigned i=0;i<num_geom;++i) |
| | 479 | { |
| | 480 | geometry2d const& geom = feature.get_geometry(i); |
| | 481 | if (geom.num_points() > 0) // don't bother with empty geometries |
| | 482 | { |
| | 483 | path_type path(t_,geom,prj_trans); |
| | 484 | placement text_placement(info, sym); |
| | 485 | text_placement.avoid_edges = sym.get_avoid_edges(); |
| | 486 | finder.find_point_placements<path_type>(text_placement,path); |
| 668 | | |
| 669 | | UnicodeString text = feature[sym.get_name()].to_unicode(); |
| 670 | | if ( text.length() > 0 ) |
| 671 | | { |
| 672 | | Color const& fill = sym.get_fill(); |
| 673 | | face_ptr face = font_manager_.get_face(sym.get_face_name()); |
| 674 | | if (face) |
| 675 | | { |
| 676 | | text_renderer<mapnik::Image32> ren(pixmap_,face); |
| 677 | | ren.set_pixel_size(sym.get_text_size()); |
| 678 | | ren.set_fill(fill); |
| 679 | | ren.set_halo_fill(sym.get_halo_fill()); |
| 680 | | ren.set_halo_radius(sym.get_halo_radius()); |
| | 671 | |
| | 672 | if (feature.exists(sym.get_name())) |
| | 673 | { |
| | 674 | UnicodeString text = feature[sym.get_name()].to_unicode(); |
| | 675 | if ( text.length() > 0 ) |
| | 676 | { |
| | 677 | Color const& fill = sym.get_fill(); |
| | 678 | face_ptr face = font_manager_.get_face(sym.get_face_name()); |
| | 679 | if (face) |
| | 680 | { |
| | 681 | text_renderer<mapnik::Image32> ren(pixmap_,face); |
| | 682 | ren.set_pixel_size(sym.get_text_size()); |
| | 683 | ren.set_fill(fill); |
| | 684 | ren.set_halo_fill(sym.get_halo_fill()); |
| | 685 | ren.set_halo_radius(sym.get_halo_radius()); |
| 696 | | double label_x, label_y, z=0.0; |
| 697 | | geom.label_position(&label_x, &label_y); |
| 698 | | prj_trans.backward(label_x,label_y, z); |
| 699 | | t_.forward(&label_x,&label_y); |
| 700 | | finder.find_point_placement(text_placement,label_x,label_y); |
| 701 | | } |
| 702 | | else //LINE_PLACEMENT |
| 703 | | { |
| 704 | | finder.find_line_placements<path_type>(text_placement,path); |
| 705 | | } |
| | 697 | path_type path(t_,geom,prj_trans); |
| | 698 | placement text_placement(info,sym); |
| | 699 | if (sym.get_label_placement() == POINT_PLACEMENT) |
| | 700 | { |
| | 701 | double label_x, label_y, z=0.0; |
| | 702 | geom.label_position(&label_x, &label_y); |
| | 703 | prj_trans.backward(label_x,label_y, z); |
| | 704 | t_.forward(&label_x,&label_y); |
| | 705 | finder.find_point_placement(text_placement,label_x,label_y); |
| | 706 | } |
| | 707 | else //LINE_PLACEMENT |
| | 708 | { |
| | 709 | finder.find_line_placements<path_type>(text_placement,path); |
| | 710 | } |
| 707 | | for (unsigned int ii = 0; ii < text_placement.placements.size(); ++ii) |
| 708 | | { |
| 709 | | double x = text_placement.placements[ii].starting_x; |
| 710 | | double y = text_placement.placements[ii].starting_y; |
| 711 | | Envelope<double> dim = ren.prepare_glyphs(&text_placement.placements[ii]); |
| 712 | | ren.render(x,y); |
| | 712 | for (unsigned int ii = 0; ii < text_placement.placements.size(); ++ii) |
| | 713 | { |
| | 714 | double x = text_placement.placements[ii].starting_x; |
| | 715 | double y = text_placement.placements[ii].starting_y; |
| | 716 | Envelope<double> dim = ren.prepare_glyphs(&text_placement.placements[ii]); |
| | 717 | ren.render(x,y); |
| | 718 | } |