1
0
Fork 0

Canvas map: cleanup the runway routines. Simplify by using new functions and two runway ends

This commit is contained in:
Christian Schmitt 2013-02-27 16:23:17 +01:00
parent f2ebbbbc70
commit 9dff0b4221

View file

@ -1,113 +1,78 @@
#TODO: split: draw_single_runway(pos) #TODO: split: draw_single_runway(pos)
var draw_runways = func(group, apt,lod) { var draw_runways = func(group, apt,lod) {
DEBUG and print("Drawing runways for:", apt.id); DEBUG and print("Drawing runways for:", apt.id);
# var group = group.createChild("group", "apt-"~apt.id); # var group = group.createChild("group", "apt-"~apt.id);
# group = group.createChild("group", "runways"); # group = group.createChild("group", "runways");
var rws_done = {}; foreach(var rw1; apt.runwaysWithoutReciprocals())
foreach(var rw; keys(apt.runways)) {
{ rw2 = rw1.reciprocal;
var is_heli = substr(rw, 0, 1) == "H";
var rw_dir = is_heli ? nil : int(substr(rw, 0, 2));
var rw_rec = ""; var clr = SURFACECOLORS[rw1.surface];
var thresh_rec = 0; if (clr == nil) { clr = SURFACECOLORS[0]};
if( rw_dir != nil )
{
rw_rec = sprintf("%02d", math.mod(rw_dir - 18, 36));
if( size(rw) == 3 )
{
var map_rec = {
"R": "L",
"L": "R",
"C": "C"
};
rw_rec ~= map_rec[substr(rw, 2)];
}
if( rws_done[rw_rec] != nil ) var icon_rw =
continue; group.createChild("path", "runway-" ~ rw1.id)
.setStrokeLineWidth(0.5)
.setColor(1.0,1.0,1.0)
.setColorFill(clr.r, clr.g, clr.b);
var rw_rec = apt.runways[rw_rec]; var rwy1 = Runway.new(rw1);
if( rw_rec != nil ) var beg_thr = rwy1.pointOffCenterline(rw1.threshold);
thresh_rec = rw_rec.threshold; var beg_thr1 = rwy1.pointOffCenterline(rw1.threshold, 0.5 * rw1.width);
} var beg_thr2 = rwy1.pointOffCenterline(rw1.threshold, -0.5 * rw1.width);
var beg1 = rwy1.pointOffCenterline(0, 0.5 * rw1.width);
var beg2 = rwy1.pointOffCenterline(0, -0.5 * rw1.width);
rws_done[rw] = 1; var rwy2 = Runway.new(rw2);
var end_thr = rwy2.pointOffCenterline(rw2.threshold);
var end_thr1 = rwy2.pointOffCenterline(rw2.threshold, 0.5 * rw2.width);
var end_thr2 = rwy2.pointOffCenterline(rw2.threshold, -0.5 * rw2.width);
var end1 = rwy2.pointOffCenterline(0, 0.5 * rw2.width);
var end2 = rwy2.pointOffCenterline(0, -0.5 * rw2.width);
rw = apt.runways[rw]; icon_rw.setDataGeo
(
var clr = SURFACECOLORS[rw.surface]; [ canvas.Path.VG_MOVE_TO,
if (clr == nil) { clr = SURFACECOLORS[0]}; canvas.Path.VG_LINE_TO,
canvas.Path.VG_LINE_TO,
var icon_rw = canvas.Path.VG_LINE_TO,
group.createChild("path", "runway-" ~ rw.id) canvas.Path.VG_CLOSE_PATH ],
.setStrokeLineWidth(0.5) [ beg1[0], beg1[1],
.setColor(1.0,1.0,1.0) beg2[0], beg2[1],
.setColorFill(clr.r, clr.g, clr.b); end1[0], end1[1],
end2[0], end2[1] ]
);
var rwy = Runway.new(rw); var icon_cl =
var beg_thr = rwy.pointOffCenterline(rw.threshold); group.createChild("path", "centerline")
var beg_thr1 = rwy.pointOffCenterline(rw.threshold, 0.5 * rw.width); .setStrokeLineWidth(0.5)
var beg_thr2 = rwy.pointOffCenterline(rw.threshold, -0.5 * rw.width); .setColor(1,1,1)
var beg1 = rwy.pointOffCenterline(0, 0.5 * rw.width); .setStrokeDashArray([15, 10]);
var beg2 = rwy.pointOffCenterline(0, -0.5 * rw.width);
var end_thr = rwy.pointOffCenterline(rw.length - thresh_rec); icon_cl.setDataGeo
var end_thr1 = rwy.pointOffCenterline(rw.length - thresh_rec, 0.5 * rw.width); (
var end_thr2 = rwy.pointOffCenterline(rw.length - thresh_rec, -0.5 * rw.width); [ canvas.Path.VG_MOVE_TO,
var end1 = rwy.pointOffCenterline(rw.length, 0.5 * rw.width); canvas.Path.VG_LINE_TO ],
var end2 = rwy.pointOffCenterline(rw.length, -0.5 * rw.width); [ beg_thr[0], beg_thr[1],
end_thr[0], end_thr[1] ]
);
icon_rw.setDataGeo var icon_thr =
( group.createChild("path", "threshold")
[ canvas.Path.VG_MOVE_TO, .setStrokeLineWidth(1.5)
canvas.Path.VG_LINE_TO, .setColor(1,1,1);
canvas.Path.VG_LINE_TO,
canvas.Path.VG_LINE_TO,
canvas.Path.VG_CLOSE_PATH ],
[ beg1[0], beg1[1],
beg2[0], beg2[1],
end2[0], end2[1],
end1[0], end1[1] ]
);
if( rw.length / rw.width > 3 and !is_heli ) icon_thr.setDataGeo
{ (
# only runways which are much longer than wide are [ canvas.Path.VG_MOVE_TO,
# real runways, otherwise it's probably a heliport. canvas.Path.VG_LINE_TO,
var icon_cl = canvas.Path.VG_MOVE_TO,
group.createChild("path", "centerline") canvas.Path.VG_LINE_TO ],
.setStrokeLineWidth(0.5) [ beg_thr1[0], beg_thr1[1],
.setColor(1,1,1) beg_thr2[0], beg_thr2[1],
.setStrokeDashArray([15, 10]); end_thr1[0], end_thr1[1],
end_thr2[0], end_thr2[1] ]
icon_cl.setDataGeo );
( }
[ canvas.Path.VG_MOVE_TO,
canvas.Path.VG_LINE_TO ],
[ beg_thr[0], beg_thr[1],
end_thr[0], end_thr[1] ]
);
var icon_thr =
group.createChild("path", "threshold")
.setStrokeLineWidth(1.5)
.setColor(1,1,1);
icon_thr.setDataGeo
(
[ canvas.Path.VG_MOVE_TO,
canvas.Path.VG_LINE_TO,
canvas.Path.VG_MOVE_TO,
canvas.Path.VG_LINE_TO ],
[ beg_thr1[0], beg_thr1[1],
beg_thr2[0], beg_thr2[1],
end_thr1[0], end_thr1[1],
end_thr2[0], end_thr2[1] ]
);
}
}
} }