| 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) |
| | 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) |
| 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); |
| | 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); |
| 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) |
| | 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()); |
| | 681 | |
| | 682 | placement_finder<label_collision_detector4> finder(detector_); |
| | 683 | |
| | 684 | string_info info(text); |
| | 685 | face->get_string_info(info); |
| | 686 | unsigned num_geom = feature.num_geometries(); |
| | 687 | for (unsigned i=0;i<num_geom;++i) |
| 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()); |
| 686 | | |
| 687 | | placement_finder<label_collision_detector4> finder(detector_); |
| 688 | | |
| 689 | | string_info info(text); |
| 690 | | face->get_string_info(info); |
| 691 | | unsigned num_geom = feature.num_geometries(); |
| 692 | | for (unsigned i=0;i<num_geom;++i) |
| | 689 | geometry2d const& geom = feature.get_geometry(i); |
| | 690 | if (geom.num_points() > 0) // don't bother with empty geometries |
| 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 | | } |
| | 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 | } |
| 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 | | } |
| | 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); |