2 * Hic Est Leo -- Main Program
4 * (c) 2014 Martin Mares <mj@ucw.cz>
23 uns debug_dump_source, debug_dump_after_proj, debug_dump_after_scaling;
24 uns debug_dump_multipolygons, debug_dump_css, debug_dump_styling, debug_dump_symbols;
26 static struct cf_section debug_cf = {
28 CF_UNS("DumpSource", &debug_dump_source),
29 CF_UNS("DumpAfterProj", &debug_dump_after_proj),
30 CF_UNS("DumpAfterScaling", &debug_dump_after_scaling),
31 CF_UNS("DumpMultipolygons", &debug_dump_multipolygons),
32 CF_UNS("DumpCSS", &debug_dump_css),
33 CF_UNS("DumpStyling", &debug_dump_styling),
34 CF_UNS("DumpSymbols", &debug_dump_symbols),
39 static const struct opt_section options = {
41 OPT_HELP("Hic Est Leo -- Experimental Map Renderer"),
50 // FIXME: Make generic
51 static void draw_scale(struct svg *svg)
54 double width = dist * map_scale;
55 double x = page_width - 10 - width;
58 svg_push_element(svg, "g");
59 svg_set_attr(svg, "id", "scale");
60 svg_set_attr_format(svg, "transform", "translate(%s,%s)", svg_format_dimen(svg, x), svg_format_dimen(svg, y));
62 for (int outline=1; outline>=0; outline--)
64 svg_push_element(svg, "g");
65 svg_set_attr(svg, "stroke-linecap", "square");
68 svg_set_attr_dimen(svg, "stroke-width", 1.5);
69 svg_set_attr_color(svg, "stroke", 0xffffff);
73 svg_set_attr_dimen(svg, "stroke-width", 0.5);
74 svg_set_attr_color(svg, "stroke", 0);
77 svg_push_element(svg, "line");
78 svg_set_attr_dimen(svg, "x1", 0);
79 svg_set_attr_dimen(svg, "y1", 0);
80 svg_set_attr_dimen(svg, "x2", width);
81 svg_set_attr_dimen(svg, "y2", 0);
84 for (int i=0; i<=10; i++)
99 svg_push_element(svg, "line");
100 svg_set_attr_dimen(svg, "x1", width * i/10);
101 svg_set_attr_dimen(svg, "y1", 0);
102 svg_set_attr_dimen(svg, "x2", width * i/10);
103 svg_set_attr_dimen(svg, "y1", -tick);
110 scale_text(svg, 0, 5, osm_val_encode("0"));
111 scale_text(svg, width, 5, osm_val_encode("1 km"));
115 int main(int argc UNUSED, char **argv)
117 cf_def_file = "map.cf";
119 cf_def_file = argv[1];
120 cf_declare_section("Debug", &debug_cf, 0);
121 opt_parse(&options, argv+2);
130 struct svg *svg = svg_open(map_svg_output);
133 svg_set_attr_dimen(svg, "width", page_width);
134 svg_set_attr_dimen(svg, "height", page_height);
138 svg_set_attr_dimen(svg, "width", page_height);
139 svg_set_attr_dimen(svg, "height", page_width);
145 map_apply_styles(svg);
149 svg_push_element(svg, "defs");
150 svg_push_element(svg, "clipPath");
151 svg_set_attr(svg, "id", "boundary");
153 svg_path_move_to(svg, page_offset_x, page_offset_y);
154 svg_path_line_to_rel(svg, page_map_width, 0);
155 svg_path_line_to_rel(svg, 0, page_map_height);
156 svg_path_line_to_rel(svg, -page_map_width, 0);
163 svg_push_element(svg, "g");
164 svg_set_attr_format(svg, "clip-path", "url(#boundary)");
166 svg_set_attr_format(svg, "transform", "translate(%.6g,0) rotate(90)", page_height * svg->scale);
169 // FIXME: Replace by generic logo drawing facility
171 struct svg_icon *logo = svg_icon_load(svg, "../logo/kocka-s-okrajem.svg");
179 double logo_width = 36.12;
180 double logo_height = 36.12 / logo->width * logo->height;
181 struct svg_icon_request sir = {
183 .x = page_width - 12 - logo_width / 2,
184 .y = 10 + logo_height / 2,
186 .height = logo_height,
188 svg_icon_put(svg, &sir);
198 svg_push_element(svg, "rect");
199 svg_set_attr_dimen(svg, "x", page_offset_x);
200 svg_set_attr_dimen(svg, "y", page_offset_y);
201 svg_set_attr_dimen(svg, "width", page_map_width);
202 svg_set_attr_dimen(svg, "height", page_map_height);
203 svg_set_attr(svg, "fill", "none");
204 svg_set_attr(svg, "stroke", "blue");
205 svg_set_attr_dimen(svg, "stroke-width", 0.2);
211 msg(L_INFO, "Finished");