From 9dff0b42218fcf89af06497aa0218478b1c1ce32 Mon Sep 17 00:00:00 2001 From: Christian Schmitt <chris@ilovelinux.de> Date: Wed, 27 Feb 2013 16:23:17 +0100 Subject: [PATCH] Canvas map: cleanup the runway routines. Simplify by using new functions and two runway ends --- Nasal/canvas/map/runways.draw | 165 ++++++++++++++-------------------- 1 file changed, 65 insertions(+), 100 deletions(-) diff --git a/Nasal/canvas/map/runways.draw b/Nasal/canvas/map/runways.draw index 51ce72f40..72264d963 100644 --- a/Nasal/canvas/map/runways.draw +++ b/Nasal/canvas/map/runways.draw @@ -1,113 +1,78 @@ #TODO: split: draw_single_runway(pos) var draw_runways = func(group, apt,lod) { - DEBUG and print("Drawing runways for:", apt.id); - # var group = group.createChild("group", "apt-"~apt.id); - # group = group.createChild("group", "runways"); - var rws_done = {}; - foreach(var rw; keys(apt.runways)) - { - var is_heli = substr(rw, 0, 1) == "H"; - var rw_dir = is_heli ? nil : int(substr(rw, 0, 2)); + DEBUG and print("Drawing runways for:", apt.id); +# var group = group.createChild("group", "apt-"~apt.id); +# group = group.createChild("group", "runways"); + foreach(var rw1; apt.runwaysWithoutReciprocals()) + { + rw2 = rw1.reciprocal; - var rw_rec = ""; - var thresh_rec = 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)]; - } + var clr = SURFACECOLORS[rw1.surface]; + if (clr == nil) { clr = SURFACECOLORS[0]}; - if( rws_done[rw_rec] != nil ) - continue; + var icon_rw = + 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]; - if( rw_rec != nil ) - thresh_rec = rw_rec.threshold; - } + var rwy1 = Runway.new(rw1); + var beg_thr = rwy1.pointOffCenterline(rw1.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]; - - var clr = SURFACECOLORS[rw.surface]; - if (clr == nil) { clr = SURFACECOLORS[0]}; - - var icon_rw = - group.createChild("path", "runway-" ~ rw.id) - .setStrokeLineWidth(0.5) - .setColor(1.0,1.0,1.0) - .setColorFill(clr.r, clr.g, clr.b); + icon_rw.setDataGeo + ( + [ canvas.Path.VG_MOVE_TO, + canvas.Path.VG_LINE_TO, + canvas.Path.VG_LINE_TO, + canvas.Path.VG_LINE_TO, + canvas.Path.VG_CLOSE_PATH ], + [ beg1[0], beg1[1], + beg2[0], beg2[1], + end1[0], end1[1], + end2[0], end2[1] ] + ); - var rwy = Runway.new(rw); - var beg_thr = rwy.pointOffCenterline(rw.threshold); - var beg_thr1 = rwy.pointOffCenterline(rw.threshold, 0.5 * rw.width); - var beg_thr2 = rwy.pointOffCenterline(rw.threshold, -0.5 * rw.width); - var beg1 = rwy.pointOffCenterline(0, 0.5 * rw.width); - var beg2 = rwy.pointOffCenterline(0, -0.5 * rw.width); + var icon_cl = + group.createChild("path", "centerline") + .setStrokeLineWidth(0.5) + .setColor(1,1,1) + .setStrokeDashArray([15, 10]); - var end_thr = rwy.pointOffCenterline(rw.length - thresh_rec); - 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); - var end1 = rwy.pointOffCenterline(rw.length, 0.5 * rw.width); - var end2 = rwy.pointOffCenterline(rw.length, -0.5 * rw.width); + 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] ] + ); - icon_rw.setDataGeo - ( - [ canvas.Path.VG_MOVE_TO, - canvas.Path.VG_LINE_TO, - 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] ] - ); + var icon_thr = + group.createChild("path", "threshold") + .setStrokeLineWidth(1.5) + .setColor(1,1,1); - if( rw.length / rw.width > 3 and !is_heli ) - { - # only runways which are much longer than wide are - # real runways, otherwise it's probably a heliport. - var icon_cl = - group.createChild("path", "centerline") - .setStrokeLineWidth(0.5) - .setColor(1,1,1) - .setStrokeDashArray([15, 10]); - - 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] ] - ); - } - } + 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] ] + ); + } } - -