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 1/3] 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] ] + ); + } } - - From 0484849b67ca4683eb60e61d3ce0c25cebe4d40c Mon Sep 17 00:00:00 2001 From: Christian Schmitt <chris@ilovelinux.de> Date: Fri, 1 Mar 2013 13:45:29 +0100 Subject: [PATCH 2/3] Add helipads to the canvas map (grey rectangle for now). --- Nasal/canvas/map/runways.draw | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Nasal/canvas/map/runways.draw b/Nasal/canvas/map/runways.draw index 72264d963..dc8724e3d 100644 --- a/Nasal/canvas/map/runways.draw +++ b/Nasal/canvas/map/runways.draw @@ -75,4 +75,37 @@ var draw_runways = func(group, apt,lod) { end_thr2[0], end_thr2[1] ] ); } + + #draw helipads + foreach(var hp; keys(apt.helipads)) + { + var hp = apt.runway(hp); + var clr = SURFACECOLORS[hp.surface]; + if (clr == nil) { clr = SURFACECOLORS[0]}; + + var icon_hp = + group.createChild("path", "helipad-" ~ hp.id) + .setStrokeLineWidth(0.5) + .setColor(1.0,1.0,1.0) + .setColorFill(clr.r, clr.g, clr.b); + + var heli = Runway.new(hp); + var p1 = heli.pointOffCenterline(0.5 * hp.length, 0.5 * hp.width); + var p2 = heli.pointOffCenterline(0.5 * hp.length, -0.5 * hp.width); + var p3 = heli.pointOffCenterline(-0.5 * hp.length, -0.5 * hp.width); + var p4 = heli.pointOffCenterline(-0.5 * hp.length, 0.5 * hp.width); + + icon_hp.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 ], + [ p1[0], p1[1], + p2[0], p2[1], + p3[0], p3[1], + p4[0], p4[1] ] + ); + } } From 312862271de85c4fa2f697daaa2da18f01bda1fa Mon Sep 17 00:00:00 2001 From: Christian Schmitt <chris@ilovelinux.de> Date: Fri, 1 Mar 2013 17:16:01 +0100 Subject: [PATCH 3/3] Position tower on canvas map at the correct place, not at the airport center --- Nasal/canvas/map/runways.draw | 3 +-- Nasal/canvas/map/tower.draw | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Nasal/canvas/map/runways.draw b/Nasal/canvas/map/runways.draw index dc8724e3d..9c8f34d75 100644 --- a/Nasal/canvas/map/runways.draw +++ b/Nasal/canvas/map/runways.draw @@ -6,8 +6,6 @@ var draw_runways = func(group, apt,lod) { # group = group.createChild("group", "runways"); foreach(var rw1; apt.runwaysWithoutReciprocals()) { - rw2 = rw1.reciprocal; - var clr = SURFACECOLORS[rw1.surface]; if (clr == nil) { clr = SURFACECOLORS[0]}; @@ -24,6 +22,7 @@ var draw_runways = func(group, apt,lod) { var beg1 = rwy1.pointOffCenterline(0, 0.5 * rw1.width); var beg2 = rwy1.pointOffCenterline(0, -0.5 * rw1.width); + var rw2 = rw1.reciprocal; var rwy2 = Runway.new(rw2); var end_thr = rwy2.pointOffCenterline(rw2.threshold); var end_thr1 = rwy2.pointOffCenterline(rw2.threshold, 0.5 * rw2.width); diff --git a/Nasal/canvas/map/tower.draw b/Nasal/canvas/map/tower.draw index 29a01a04e..eb4995e99 100644 --- a/Nasal/canvas/map/tower.draw +++ b/Nasal/canvas/map/tower.draw @@ -14,6 +14,6 @@ var draw_tower = func (group, apt,lod) { .line(-3, 10) .vert(10); - icon_tower.setGeoPosition(apt.lat, apt.lon); + icon_tower.setGeoPosition(apt.tower().lat, apt.tower().lon); }