From 75a0ba7655483040b152cbfc9ad7bb57676dcbb1 Mon Sep 17 00:00:00 2001 From: fly Date: Tue, 20 Oct 2020 02:59:33 +1100 Subject: [PATCH 01/11] ND align overlay by MiSKLaCH, see #182. Missing logic Signed-off-by: fly --- Models/Instruments/ND/canvas/res/airbusND.svg | 3798 ++++++++--------- 1 file changed, 1894 insertions(+), 1904 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index c328bec6..fc7e5289 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -1,6 +1,4 @@ - - image/svg+xmlGijs de RooyGijs de RooyABCD + style="fill:#000000;fill-opacity:1;stroke:none" + d="M -0.34375,-0.1875 V 1029.6562 H 1025.6562 V -0.1875 Z M 542,88.9375 c 225.78305,15.28555 404.21875,203.69918 404.21875,433.875 0,230.17781 -178.4357,418.58895 -404.21875,433.875 -20.00001,-0.0211 -40,-0.0415 -60,-0.0625 C 256.53394,941.0132 78.46875,752.76279 78.46875,522.8125 78.46875,292.8642 256.53394,104.58004 482,88.96875 c 20,-0.01041 39.99999,-0.02084 60,-0.03125 z" + id="compass_mask_ctr" + inkscape:label="#rect7903" + inkscape:connector-curvature="0" />ABCD 999.9 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="844.04407" + y="88.124893" + id="wpActiveDist" + inkscape:label="#text7243">999.9 0 + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="aplSymMap" + d="m 512,866.4 v -68 m 34.5,24 h -70 m 50,32 h -30" + style="fill:none;stroke:#f2f235;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#path7253" />0 33 + inkscape:label="#text7243" + id="text3080" + y="208.85693" + x="13.677773" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-30.000011)">33 30 + transform="rotate(-60.000017)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-476.08929" + y="100.35367" + id="text3084" + inkscape:label="#text7243">30 27 + inkscape:label="#text7243" + id="text3088" + y="-244.93858" + x="-845.96948" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-90)">27 24 + transform="rotate(-120.00001)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-996.42627" + y="-725.91412" + id="text3092" + inkscape:label="#text7243">24 21 + inkscape:label="#text7243" + id="text3096" + y="-1217.4061" + x="-882.57745" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-150.00002)">21 18 + transform="scale(-1)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-533.67151" + y="-1586.3594" + id="text3100" + inkscape:label="#text7243">18 15 + inkscape:label="#text7243" + id="text3104" + y="-1735.3862" + x="-55.0742" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(149.99999)">15 12 + transform="rotate(119.99998)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="435.53021" + y="-1619.6591" + id="text3108" + inkscape:label="#text7243">12 9 + inkscape:label="#text7243" + id="text3112" + y="-1277.9312" + x="812.80585" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(90)">9 6 + transform="rotate(59.999989)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="958.61719" + y="-798.08197" + id="text3116" + inkscape:label="#text7243">6 3 + inkscape:label="#text7243" + id="text3120" + y="-310.4165" + x="840.15833" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(29.999983)">3 + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccc" + id="path3181" + d="m 506.79074,113.88758 -0.0324,-47.425719 M 385.29746,129.63288 377.18964,78.83862 m 253.05616,50.9535 9.13806,-50.95457 M 268.31279,162.69358 250.97354,114.6993 m 517.15342,-6.78471 -19.35817,53.17859 m -592.55586,52.34579 -24.87585,-41.47658 m 755.15742,-5.15646 -26.03049,45.11663 M 56.304373,285.89095 24.797627,249.63565 m 973.750743,-11.0407 -35.93133,42.44737 M -31.194719,373.71054 -67.406083,344.72525 M 1091.5883,331.9981 c -22.7366,19.07137 -22.1222,18.62758 -41.5869,36.01143 m -1189.78713,85.48342 39.34258,21.065 m 1218.37775,-5.08277 50.5019,-28.23095 m -1362.66713,131.33575 43.60301,14.82023 m 1323.34702,-6.64767 54.4496,-21.37034 m -1457.14774,139.90349 47.22791,6.40119 m 1442.86453,-17.20568 -55.4851,8.78644 m 10.6902,122.76376 56.2981,0.0361 m -1462.46565,7.96423 -47.25107,0.0324 m 1498.21242,123.33728 -57.7243,-9.41248 m -1381.61201,8.6004 -45.69587,7.58449 m 1451.87638,122.46658 -53.9093,-21.2372 m -1320.24759,9.4195 -44.51888,16.9023 m 1363.01737,115.4692 -50.0037,-29.2083 m -1214.536267,7.507 -43.732403,25.4014 m 1233.65167,103.6518 -43.4214,-36.2558 m -1075.030153,5.2315 -39.744281,33.5338 39.811749,-33.4582 c -0.02153,0 -0.04303,-0.108 -0.06457,-0.108 z m 1024.548253,125.2638 -36.86245,-43.6809 m -900.186878,4.4169 -34.181692,40.9317 34.249266,-40.8993 c -0.02153,0 -0.05385,0 -0.06456,0 z m 798.648028,64.7132 -0.10761,0.108 29.93113,51.8828 -29.83428,-51.9584 z m -697.87744,4.6547 -27.17968,47.3037 27.24747,-47.2713 c -0.0215,0 -0.0431,0 -0.0646,0 z m 588.22899,47.2713 c -0.0323,0 -0.0646,0 -0.0968,0 l 20.30917,55.814 -20.20802,-55.8464 z m -477.172,3.402 -18.96736,52.4444 19.06851,-52.412 c -0.0323,0 -0.0646,0 -0.0968,0 z m 360.18171,28.6629 c -0.0322,0 -0.0646,0 -0.0968,0 l 10.22129,57.9201 -10.1223,-57.9525 z m -242.25419,1.8469 -9.81996,56.1056 9.92108,-56.1056 c -0.0322,0 -0.0646,0 -0.0967,0 z m 121.21156,9.4823 0.0646,58.1576 0.0646,-58.1576 c -0.0431,0 -0.0861,0 -0.13344,0 z" + style="fill:#ededed;fill-opacity:1;fill-rule:nonzero;stroke:#ededed;stroke-width:5.39007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> 1 + inkscape:label="#text7243" + id="text3553" + y="-41.774002" + x="630.51953" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(10)">1 2 + transform="rotate(20)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="749.66882" + y="-169.55167" + id="text3557" + inkscape:label="#text7243">2 4 + inkscape:label="#text7243" + id="text3561" + y="-467.84677" + x="906.01428" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(40.000001)">4 5 + transform="rotate(50.000001)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="946.68445" + y="-629.89954" + id="text3565" + inkscape:label="#text7243">5 7 + inkscape:label="#text7243" + id="text3569" + y="-965.50079" + x="935.96802" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(70.000001)">7 8 + transform="rotate(80.000001)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="885.99927" + y="-1130.7375" + id="text3573" + inkscape:label="#text7243">8 10 + inkscape:label="#text7243" + id="text3577" + y="-1413.2047" + x="694.41644" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(100)">10 11 + transform="rotate(110)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="574.31689" + y="-1532.7445" + id="text3581" + inkscape:label="#text7243">11 13 + inkscape:label="#text7243" + id="text3585" + y="-1686.1906" + x="275.10657" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(130)">13 14 + transform="rotate(140)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="107.89569" + y="-1721.7783" + id="text3589" + inkscape:label="#text7243">14 16 + inkscape:label="#text7243" + id="text3593" + y="-1712.662" + x="-225.14418" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(160)">16 17 + transform="rotate(170)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-388.07861" + y="-1663.1273" + id="text3597" + inkscape:label="#text7243">17 19 + inkscape:label="#text7243" + id="text3601" + y="-1485.8134" + x="-674.18842" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-170)">19 20 + transform="rotate(-160)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-788.46277" + y="-1361.9167" + id="text3605" + inkscape:label="#text7243">20 22 + inkscape:label="#text7243" + id="text3609" + y="-1057.6316" + x="-948.54529" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-140)">22 23 + transform="rotate(-130)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-986.69818" + y="-891.58624" + id="text3613" + inkscape:label="#text7243">23 25 + inkscape:label="#text7243" + id="text3617" + y="-554.00256" + x="-977.29974" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-110)">25 26 + transform="rotate(-99.999999)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-927.61865" + y="-391.20975" + id="text3621" + inkscape:label="#text7243">26 28 + inkscape:label="#text7243" + id="text3625" + y="-109.09068" + x="-748.75885" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-80)">28 29 + transform="rotate(-70)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-626.797" + y="1.9003587" + id="text3629" + inkscape:label="#text7243">29 31 + inkscape:label="#text7243" + id="text3633" + y="163.85368" + x="-329.55032" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-49.999999)">31 32 + transform="rotate(-39.999999)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-165.2688" + y="201.06667" + id="text3637" + inkscape:label="#text7243">32 34 + inkscape:label="#text7243" + id="text3641" + y="190.6203" + x="170.84694" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-19.999999)">34 35 + transform="rotate(-9.9999995)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="334.76819" + y="141.04767" + id="text3645" + inkscape:label="#text7243">35 999°/ 99 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="36.862175" + y="92.904839" + id="wind" + inkscape:label="#text7243">999°/ 99 999 + inkscape:label="#text7243" + id="gs" + y="53.306854" + x="101.87437" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">999 999 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="248.49673" + y="53.306854" + id="tas" + inkscape:label="#text7243">999 GS + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none" + x="38.276394" + y="53.306854" + id="gsLbl" + inkscape:label="#text7243">GS TAS + inkscape:label="#text7243" + id="tasLbl" + y="53.306854" + x="170.17084" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve">TAS 999 + id="hdgGroup" + inkscape:label="#g3141">999 HDG + inkscape:label="#text7243" + id="hdgTrk" + y="67.549522" + x="373.44498" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">HDG MAG + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="578.66278" + y="67.549522" + id="truMag" + inkscape:label="#text7243">MAG VOR 1 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="71.73262" + y="913.5495" + id="vorL" + inkscape:label="#text7243">VOR 1 NM + inkscape:label="#text7243" + id="dmeL" + y="993.85461" + x="151.73262" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + xml:space="preserve">NM 99.9 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="71.129601" + y="993.85461" + id="dmeLDist" + inkscape:label="#text7243">99.9 ABC + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + x="71.73262" + y="954.56171" + id="vorLId" + inkscape:label="#text7243">ABC VOR 2 + inkscape:label="#text7243" + id="vorR" + y="913.5495" + x="859.7326" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">VOR 2 NM + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + x="931.7326" + y="993.85461" + id="dmeR" + inkscape:label="#text7243">NM 99.9 + inkscape:label="#text7243" + id="dmeRDist" + y="993.85461" + x="859.12958" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">99.9 ABC + inkscape:label="#text7243" + id="vorRId" + y="954.56171" + x="859.7326" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">ABC 08 34.4z + inkscape:label="#text7243" + id="eta" + y="126.06245" + x="892.04407" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">08 34.4z 99 + inkscape:connector-curvature="0" + id="path3159" + d="m 434.872,733.378 44.548,53.034" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />99 + id="trkInd" + inkscape:label="#g3107" + inkscape:transform-center-y="-318.607" + inkscape:transform-center-x="-0.165">  + inkscape:transform-center-x="-0.198874" + inkscape:transform-center-y="4.4952743" + inkscape:label="#g4072" + id="staArrowL" + style="display:inline;stroke:#cecdce" + transform="matrix(1,0,0,1.1805235,0.174175,-281.5729)">  + inkscape:label="#text7243" + id="status.arpt" + y="734.12946" + x="41.732624" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0099d9;fill-opacity:0;stroke:none" + xml:space="preserve">  + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0099d9;fill-opacity:1;stroke:none" + x="41.732624" + y="697.12939" + id="status.wpt" + inkscape:label="#text7243">  + inkscape:label="#text7243" + id="status.sta" + y="661.12933" + x="41.732624" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0099d9;fill-opacity:1;stroke:none" + xml:space="preserve">  NM + id="hdgBug" + inkscape:label="#g3190" + inkscape:transform-center-y="-698.613" + transform="translate(0,-19.021655)">NM ILS + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none" + x="785.289" + y="53.929054" + id="ilsLbl" + inkscape:label="#text7243">ILS 999.99 + inkscape:label="#text7243" + id="ilsFreq" + y="53.929054" + x="888.28894" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#af0063;fill-opacity:1;stroke:none" + xml:space="preserve">999.99 360 + style="fill:none;stroke:#cecdce;stroke-width:2.4611;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 20.951614,914.85538 v 82.41763 m 4.201291,-92.8082 -4.04,-8.83104 -4.040001,8.50433 L 12,914.85538 h 8.951614 l 8.467743,0.21255 z" + id="vorLSym" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccc" + inkscape:label="#path3100" + inkscape:transform-center-y="-498.20098" + inkscape:transform-center-x="-0.080644898" />360 00' 00'' + id="chrono_box" + transform="matrix(0.8,0,0,0.8,4.598825,187.15349)" + inkscape:label="Chrono">00' 00'' 99 + inkscape:label="#text7243" + id="range_r" + y="648.10156" + x="863.21796" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke:none" + xml:space="preserve">99 .1L + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:Sans;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#0dc04b;fill-opacity:0.988235;stroke:none" + x="445.28204" + y="833.28204" + id="legDistL" + inkscape:label="#leg_dist_l">.1L .1L + id="legDistR" + y="833.28204" + x="555.28204" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#0dc04b;fill-opacity:0.988235;stroke:none" + xml:space="preserve" + inkscape:label="#leg_dist_r">.1L OFST + inkscape:label="#offset_lbl" + id="offsetLbl" + y="739.28204" + x="13.282043" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#0dc04b;fill-opacity:0.988235;stroke:none" + xml:space="preserve">OFST .1L + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:Sans;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke:none" + x="442.35898" + y="527.74359" + id="legDistCtrL" + inkscape:label="#text4463">.1L .1L + inkscape:label="#text4463" + id="legDistCtrR" + y="527.74359" + x="552.35901" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#0dc04b;fill-opacity:1;stroke:none" + xml:space="preserve">.1L N + inkscape:label="#locPtr" + sodipodi:nodetypes="ccccsc" />N 33 + transform="rotate(-30.000011)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-7.8740234" + y="204.77251" + id="text3924" + inkscape:label="#text7243">33 30 + inkscape:label="#text7243" + id="text3928" + y="90.638428" + x="-495.84357" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-60.000017)">30 W + transform="rotate(-90)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-855.73431" + y="-255.34297" + id="text3932" + inkscape:label="#text7243">W 24 + inkscape:label="#text7243" + id="text3936" + y="-732.65826" + x="-1009.933" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(-120.00001)">24 21 + transform="rotate(-150.00002)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-896.57874" + y="-1222.205" + id="text3940" + inkscape:label="#text7243">21 S + inkscape:label="#text7243" + id="text3944" + y="-1583.8081" + x="-531.64703" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="scale(-1)">S 15 + transform="rotate(149.99999)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="-66.888977" + y="-1735.4456" + id="text3948" + inkscape:label="#text7243">15 12 + inkscape:label="#text7243" + id="text3952" + y="-1623.8905" + x="422.39053" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(119.99998)">12 E + transform="rotate(90)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="801.43085" + y="-1265.2094" + id="text3956" + inkscape:label="#text7243">E 6 + inkscape:label="#text7243" + id="text3960" + y="-802.38336" + x="950.93414" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + xml:space="preserve" + transform="rotate(59.999989)">6 3 + transform="rotate(29.999983)" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ededed;fill-opacity:1;stroke:none" + x="835.90314" + y="-305.99823" + id="text3964" + inkscape:label="#text7243">3 CRS + inkscape:connector-curvature="0" + style="fill:#ededed;fill-opacity:1;fill-rule:nonzero;stroke:#ededed;stroke-width:10.8998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 512.67364,65.745319 -0.0325,47.605391 c 0.0217,0 0.0434,0 0.0651,0 z m -132.08525,11.581267 8.07143,45.916394 c 0.0217,0 0.0434,-0.0325 0.0651,-0.0325 l -8.13757,-45.882788 z m 264.17049,0 -8.47473,47.739814 c 0.0325,0 0.0651,0 0.0976,0 l 8.37391,-47.739814 z m -392.20212,34.301514 15.63331,43.11512 c 0.0325,-0.0108 0.0651,-0.0217 0.0976,-0.0325 z m 520.23484,0 -16.98416,46.55925 c 0.0217,0 0.0434,0.0217 0.0651,0.0325 l 16.91585,-46.59177 z m -640.40212,56.01246 22.69108,39.40104 c 0.0217,-0.0108 0.0434,-0.0217 0.0651,-0.0325 l -22.75937,-39.36635 z m 760.56398,0 -25.37974,44.12548 M 23.805421,243.67498 52.91028,278.45023 c 0.0217,-0.0217 0.0434,-0.0434 0.0651,-0.0651 l -29.172127,-34.7069 z m 977.732579,0 -33.6562,40.04065 m -1037.838534,53.71636 34.709353,29.17054 c 0.02157,-0.0217 0.04315,-0.0434 0.06483,-0.0651 L -69.958902,337.43199 Z M 1054.2218,371.87335 c 0,0.0217 0,0.0542 0,0.0651 l 41.0564,-34.50639 c -13.5626,11.43057 -27.3854,22.98257 -41.0564,34.44135 z m -1200.21482,74.14159 39.36815,22.75709 c 0.0108,-0.0217 0.0217,-0.0434 0.0325,-0.0651 l -39.40273,-22.68881 z m 1317.32372,0 -47.4853,27.38179 c 0,0.0217 0,0.0434 0,0.0651 l 47.4527,-27.4501 z m -1373.33801,120.16097 43.08267,15.73222 c 0.0108,-0.0325 0.0217,-0.0651 0.0325,-0.0976 l -43.11736,-15.6325 z m 1429.35561,0 -52.6351,19.11023 c 0,0.0325 0,0.0651 0,0.0976 l 52.6025,-19.20997 z m -1463.66001,128.02599 45.88627,8.13714 c 0,-0.0217 0.0325,-0.0434 0.0325,-0.0651 l -45.91989,-8.06992 z m 1497.96221,0 -56.3102,9.89227 c 0,0.0325 0,0.0651 0,0.0976 l 56.3102,-9.99417 z m -46.7807,132.01217 c 0,0.0434 0,0.0868 0,0.13335 l 58.3701,-0.0651 -58.3701,-0.0651 z m -1415.1555,0.0325 -47.60681,0.0325 47.60681,0.0325 c 0,-0.0217 0,-0.0434 0,-0.0651 z m 1403.772,121.80989 c 0,0.0325 0,0.0651 0,0.0976 l 58.1642,10.19798 -58.1642,-10.2988 z m -1392.05569,1.82451 -47.74232,8.47429 47.74232,-8.37238 c 0,-0.0325 0,-0.0651 0,-0.0976 z M 1171.3307,1065.9269 v 0.1085 l 56.0501,20.3483 -56.0176,-20.4567 z m -1326.77633,3.4799 -46.56168,16.9768 46.5942,-16.9118 c 0,0 -0.0217,0 -0.0325,-0.1084 z m 1274.68343,106.9774 -0.1085,0.1084 52.1688,30.0508 -52.0929,-30.1592 z m -1221.16921,4.6616 -44.06161,25.4976 44.09511,-25.4325 c -0.0108,0 -0.0217,0 -0.0325,-0.1085 z m 1150.91681,95.1392 c 0,0 0,0 -0.1084,0.1084 l 46.3904,38.8644 -46.3254,-38.9294 z m -1078.898623,5.2687 -40.043511,33.6607 40.111486,-33.5848 c -0.02168,0 -0.04337,-0.1085 -0.06505,-0.1085 z m 992.587903,81.0244 c 0,0 0,0 -0.1085,0.1085 l 38.93922,46.3121 -38.86322,-46.3879 z m -904.430192,5.3011 -34.439067,41.0869 34.507147,-41.0543 c -0.0217,0 -0.0542,0 -0.0651,0 z m 804.660922,64.9584 -0.10842,0.1085 30.15647,52.0794 -30.0589,-52.1552 z m -703.13161,4.6724 -27.38432,47.4829 27.45262,-47.4504 c -0.0217,0 -0.0434,0 -0.0651,0 z m 592.65763,47.4504 c -0.0325,0 -0.0651,0 -0.0976,0 l 20.46209,56.0254 -20.36018,-56.058 z m -480.76452,3.4148 -19.11015,52.6432 19.21206,-52.6106 c -0.0325,0 -0.0651,0 -0.0976,0 z m 362.89345,28.7717 c -0.0325,0 -0.0651,0 -0.0976,0 l 10.29826,58.1394 -10.19852,-58.172 z m -244.07809,1.8537 -9.89388,56.3181 9.99579,-56.3181 c -0.0325,0 -0.0651,0 -0.0976,0 z m 122.12415,9.5183 0.0651,58.3779 0.0651,-58.3779 c -0.0434,0 -0.0868,0 -0.13444,0 z" + id="path3968" + sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccscccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccc" />CRS + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none" + x="854.72168" + y="124.87983" + id="dmeLbl" + inkscape:label="#text7243">  999 + inkscape:label="#text7243" + id="crs" + y="90.062439" + x="913.95801" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + xml:space="preserve">999 99.9 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none" + x="913.95801" + y="126.12444" + id="dme" + inkscape:label="#text7243">99.9 ILS APP + id="gsGroup" + transform="rotate(-90,1200.426,445.834)" + inkscape:label="#g4160">ILS APP N + style="display:inline" + id="planArcs" + inkscape:label="#g3956" + transform="matrix(1.02827,0,0,1.0306342,-14.7256,-31.455079)">N W + sodipodi:nodetypes="ccccccccc" + inkscape:connector-curvature="0" + id="path3576" + d="M 499.2445,114.47708 512.24986,93.983218 525.2545,114.47708 Z" + style="display:inline;fill:#cecdce;stroke:none" + inkscape:label="#path4994" + inkscape:transform-center-y="711.514" />W E + id="text3209" + y="530.25165" + x="894.65656" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none" + xml:space="preserve">E S + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none" + x="501.9375" + y="922.25531" + id="text3213">S 99 + inkscape:label="#path4994" + style="display:inline;fill:#cecdce;stroke:none" + d="M 105.51917,531.817 85.025313,518.81164 105.51917,505.807 Z" + id="path3863" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccc" + inkscape:transform-center-x="-711.514" />99 99 + inkscape:label="#text7243" + id="rangePln1" + y="102.56212" + x="512.06421" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#ededed;fill-opacity:0;stroke:none" + xml:space="preserve">99 99 + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + x="374.21063" + y="666.73596" + id="rangePln3" + inkscape:label="#text7243">99 99 + inkscape:label="#text7243" + id="rangePln4" + y="818.55823" + x="231.77499" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + xml:space="preserve">99 99 + inkscape:label="#text7243" + id="rangePln5" + y="560.56152" + x="993.04187" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" + xml:space="preserve">99 \ No newline at end of file + transform="matrix(1.02827,0,0,1.02827,9.2744,-29.1838)" + inkscape:label="#g3956" + id="g3230" + style="display:inline" />GPS PRIMARY LOSTHDGMAP NOT AVAIL From 48d5a2526016bf40b9186b5d053e3ae8b9f2d5ef Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Mon, 2 Nov 2020 20:37:43 +0000 Subject: [PATCH 02/11] Map not aligned, somewhat working --- .../ND/canvas/framework/navdisplay.nas | 4 +- Models/Instruments/ND/canvas/style.nas | 81 ++++++++++++++++--- 2 files changed, 71 insertions(+), 14 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 3f90cf80..6115d8a4 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -433,7 +433,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec me.symbols.selHdgLine2.setRotation(hdgBugRot); } - var staPtrVis = !me.in_mode("toggle_display_mode", ["PLAN"]); + var staPtrVis = (!me.in_mode("toggle_display_mode", ["PLAN"]) and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT") or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD")) { @@ -459,7 +459,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg"); if(!me.get_switch("toggle_centered")) { - if(me.in_mode("toggle_display_mode", ["PLAN"])) + if(me.in_mode("toggle_display_mode", ["PLAN"]) or (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))) me.symbols.trkInd.hide(); else me.symbols.trkInd.show(); diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 26b2437a..66b21de3 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -7,6 +7,8 @@ var ALWAYS = func 1; var NOTHING = func nil; +var att_switch = props.globals.getNode("/controls/switching/ATTHDG", 1); + canvas.NDStyles["Airbus"] = { font_mapper: func(family, weight) { if( family == "Liberation Sans" and weight == "normal" ) @@ -517,7 +519,7 @@ canvas.NDStyles["Airbus"] = { missed_constraint_color: [1,0.57,0.14] }, predicate: func(nd, layer) { - var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"])); + var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); layer.group.setVisible( visible ); if (visible) { layer.toggle_cstr = nd.get_switch("toggle_cstr"); @@ -593,7 +595,7 @@ canvas.NDStyles["Airbus"] = { always_update: 1, update_on:["toggle_display_mode"], predicate: func(nd, layer) { - var visible = nd.get_switch("toggle_display_mode") == "PLAN"; + var visible = (nd.get_switch("toggle_display_mode") == "PLAN" and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -671,6 +673,24 @@ canvas.NDStyles["Airbus"] = { is_false: func(nd) nd.symbols.compass_mask_ctr.hide(), } }, + { + id: "nd_warn_memo", + impl: { + init: func(nd, symbol), + predicate: ALWAYS, + is_true: func(nd) nd.symbols.nd_warn_memo.hide(), + is_false: func(nd), + }, + }, + { + id: "nd_warn_msgbox", + impl: { + init: func(nd, symbol), + predicate: ALWAYS, + is_true: func(nd) nd.symbols.nd_warn_msgbox.hide(), + is_false: func(nd), + }, + }, { # TODO: taOnly doesn"t need to use getprop polling in update(), use a listener instead! id: "taOnly", # the SVG ID @@ -900,11 +920,42 @@ canvas.NDStyles["Airbus"] = { is_false: func(nd) {},#nd.symbols.gs.hide(), }, }, + { + id:"unavailARC", + impl: { + init: func(nd,symbol), + common: func(nd), + predicate: func(nd) (!nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" + and (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))), + is_true: func(nd) { + nd.symbols.unavailARC.show(); + }, + is_false: func(nd) { + nd.symbols.unavailARC.hide(); + }, + }, + }, + { + id:"unavailNAV", + impl: { + init: func(nd,symbol), + common: func(nd), + predicate: func(nd) (nd.get_switch("toggle_centered") + and (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))), + is_true: func(nd) { + nd.symbols.unavailNAV.show(); + }, + is_false: func(nd) { + nd.symbols.unavailNAV.hide(); + }, + }, + }, { id:"compass", impl: { init: func(nd,symbol), - predicate: func(nd) (!nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN"), + predicate: func(nd) (!nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.compass.setRotation(-nd.userHdgTrk*D2R); nd.symbols.compass.show() @@ -916,7 +967,8 @@ canvas.NDStyles["Airbus"] = { id:"compassApp", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN"), + predicate: func(nd) (nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.compassApp.setRotation(-nd.userHdgTrk*D2R); nd.symbols.compassApp.show() @@ -928,7 +980,7 @@ canvas.NDStyles["Airbus"] = { id:"northUp", impl: { init: func(nd,symbol), - predicate: func(nd) nd.get_switch("toggle_display_mode") == "PLAN", + predicate: func(nd) (nd.get_switch("toggle_display_mode") == "PLAN" and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) nd.symbols.northUp.show(), is_false: func(nd) nd.symbols.northUp.hide(), }, # of northUp.impl @@ -937,7 +989,8 @@ canvas.NDStyles["Airbus"] = { id:"planArcs", impl: { init: func(nd,symbol), - predicate: func(nd) ((nd.in_mode("toggle_display_mode", ["APP","VOR","PLAN"])) or ((nd.get_switch("toggle_display_mode") == "MAP") and (nd.get_switch("toggle_centered")))), + predicate: func(nd) (((nd.in_mode("toggle_display_mode", ["APP","VOR","PLAN"])) or ((nd.get_switch("toggle_display_mode") == "MAP") and (nd.get_switch("toggle_centered")))) + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) nd.symbols.planArcs.show(), is_false: func(nd) nd.symbols.planArcs.hide(), }, # of planArcs.impl @@ -946,7 +999,8 @@ canvas.NDStyles["Airbus"] = { id:"rangeArcs", impl: { init: func(nd,symbol), - predicate: func(nd) ((nd.get_switch("toggle_display_mode") == "MAP") and (!nd.get_switch("toggle_centered"))), + predicate: func(nd) ((nd.get_switch("toggle_display_mode") == "MAP") and (!nd.get_switch("toggle_centered")) + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) nd.symbols.rangeArcs.show(), is_false: func(nd) nd.symbols.rangeArcs.hide(), }, # of rangeArcs.impl @@ -1047,7 +1101,8 @@ canvas.NDStyles["Airbus"] = { id:"aplSymMap", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered")), + predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered") + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.aplSymMap.set("z-index", 10); nd.symbols.aplSymMap.show(); @@ -1060,7 +1115,8 @@ canvas.NDStyles["Airbus"] = { id:"aplSymMapCtr", impl: { init: func(nd,symbol), - predicate: func(nd) ((nd.get_switch("toggle_display_mode") == "MAP" and nd.get_switch("toggle_centered")) or nd.in_mode("toggle_display_mode", ["APP","VOR"])), + predicate: func(nd) (((nd.get_switch("toggle_display_mode") == "MAP" and nd.get_switch("toggle_centered")) or nd.in_mode("toggle_display_mode", ["APP","VOR"])) + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.aplSymMapCtr.set("z-index", 10); nd.symbols.aplSymMapCtr.show(); @@ -1157,8 +1213,8 @@ canvas.NDStyles["Airbus"] = { id:"trkInd2", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and - nd.get_switch("toggle_centered")), + predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and nd.get_switch("toggle_centered") + and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.trkInd2.show(); nd.symbols.trkInd2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R); @@ -1172,7 +1228,8 @@ canvas.NDStyles["Airbus"] = { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and nd.get_switch("toggle_centered") and - getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val), + getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val and + (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), is_true: func(nd) { nd.symbols.trkline2.show(); }, From 9a982768031e724f9a09d3fc459df1d37a38743e Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Thu, 5 Nov 2020 20:58:25 +0000 Subject: [PATCH 03/11] Now works --- Models/Instruments/ND/canvas/ND.nas | 6 ++ .../ND/canvas/framework/navdisplay.nas | 5 +- Models/Instruments/ND/canvas/style.nas | 55 ++++++++++++++----- Nasal/Systems/ADIRS/ADR.nas | 4 ++ 4 files changed, 55 insertions(+), 15 deletions(-) diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 170fd04b..809943de 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -63,6 +63,7 @@ var myCockpit_switches = { "toggle_chrono": {path: "/inputs/CHRONO", value: 0, type: "INT"}, "toggle_xtrk_error": {path: "/nd/xtrk-error", value: 0, type: "BOOL"}, "toggle_trk_line": {path: "/nd/trk-line", value: 0, type: "BOOL"}, + "ADIRS3": {path: "/nd/ir-3", value: 0, type: "BOOL"}, }; var canvas_nd_base = { @@ -186,6 +187,8 @@ var canvas_ND_1 = { # here we make the ND: me.NDCpt = ND.new("instrumentation/efis", myCockpit_switches, "Airbus"); + me.NDCpt.attitude_heading_setting = -1; + me.NDCpt.adirs_property = props.globals.getNode("/instrumentation/efis[0]/nd/ir-1",1); me.NDCpt.newMFD(canvas_group); me.NDCpt.update(); @@ -205,7 +208,10 @@ var canvas_ND_2 = { m.init(canvas_group); # here we make the ND: + myCockpit_switches["ADIRS"]= {path: "/nd/ir-2", value: 0, type: "BOOL"}; me.NDFo = ND.new("instrumentation/efis[1]", myCockpit_switches, "Airbus"); + me.NDFo.attitude_heading_setting = 1; + me.NDFo.adirs_property = props.globals.getNode("/instrumentation/efis[1]/nd/ir-2",1); me.NDFo.newMFD(canvas_group); me.NDFo.update(); diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index b0f46311..bb489686 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -11,6 +11,7 @@ var _MP_dbg_lvl = canvas._MP_dbg_lvl; var assert_m = canvas.assert_m; var wxr_live_tree = "/instrumentation/wxr"; +var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1); canvas.NavDisplay.set_switch = func(s, v) { var switch = me.efis_switches[s]; @@ -433,7 +434,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec me.symbols.selHdgLine2.setRotation(hdgBugRot); } - var staPtrVis = (!me.in_mode("toggle_display_mode", ["PLAN"]) and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); + var staPtrVis = (!me.in_mode("toggle_display_mode", ["PLAN"]) and (me.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == me.attitude_heading_setting))); if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT") or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD")) { @@ -459,7 +460,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg"); if(!me.get_switch("toggle_centered")) { - if(me.in_mode("toggle_display_mode", ["PLAN"]) or (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))) + if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != me.attitude_heading_setting))) me.symbols.trkInd.hide(); else me.symbols.trkInd.show(); diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 66b21de3..1eb6b840 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -8,6 +8,7 @@ var ALWAYS = func 1; var NOTHING = func nil; var att_switch = props.globals.getNode("/controls/switching/ATTHDG", 1); +var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1); canvas.NDStyles["Airbus"] = { font_mapper: func(family, weight) { @@ -519,7 +520,7 @@ canvas.NDStyles["Airbus"] = { missed_constraint_color: [1,0.57,0.14] }, predicate: func(nd, layer) { - var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); + var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))); layer.group.setVisible( visible ); if (visible) { layer.toggle_cstr = nd.get_switch("toggle_cstr"); @@ -595,7 +596,7 @@ canvas.NDStyles["Airbus"] = { always_update: 1, update_on:["toggle_display_mode"], predicate: func(nd, layer) { - var visible = (nd.get_switch("toggle_display_mode") == "PLAN" and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))); + var visible = (nd.get_switch("toggle_display_mode") == "PLAN" and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -920,13 +921,41 @@ canvas.NDStyles["Airbus"] = { is_false: func(nd) {},#nd.symbols.gs.hide(), }, }, + { + id:"nd_warn_hdg", + impl: { + init: func(nd,symbol), + common: func(nd), + predicate: func(nd) (nd.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != nd.attitude_heading_setting)), + is_true: func(nd) { + nd.symbols.nd_warn_hdg.show(); + }, + is_false: func(nd) { + nd.symbols.nd_warn_hdg.hide(); + }, + }, + }, + { + id:"nd_warn_map", + impl: { + init: func(nd,symbol), + common: func(nd), + predicate: func(nd) (nd.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != nd.attitude_heading_setting)), + is_true: func(nd) { + nd.symbols.nd_warn_map.show(); + }, + is_false: func(nd) { + nd.symbols.nd_warn_map.hide(); + }, + }, + }, { id:"unavailARC", impl: { init: func(nd,symbol), common: func(nd), predicate: func(nd) (!nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" - and (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))), + and (nd.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.unavailARC.show(); }, @@ -941,7 +970,7 @@ canvas.NDStyles["Airbus"] = { init: func(nd,symbol), common: func(nd), predicate: func(nd) (nd.get_switch("toggle_centered") - and (systems.ADIRS.ADIRunits[0].aligned != 1 and (systems.ADIRS.ADIRunits[2].aligned != 1 or att_switch.getValue() == 0))), + and (nd.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.unavailNAV.show(); }, @@ -955,7 +984,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (!nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.compass.setRotation(-nd.userHdgTrk*D2R); nd.symbols.compass.show() @@ -968,7 +997,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_centered") and nd.get_switch("toggle_display_mode") != "PLAN" - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.compassApp.setRotation(-nd.userHdgTrk*D2R); nd.symbols.compassApp.show() @@ -980,7 +1009,7 @@ canvas.NDStyles["Airbus"] = { id:"northUp", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.get_switch("toggle_display_mode") == "PLAN" and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + predicate: func(nd) (nd.get_switch("toggle_display_mode") == "PLAN" and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) nd.symbols.northUp.show(), is_false: func(nd) nd.symbols.northUp.hide(), }, # of northUp.impl @@ -990,7 +1019,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (((nd.in_mode("toggle_display_mode", ["APP","VOR","PLAN"])) or ((nd.get_switch("toggle_display_mode") == "MAP") and (nd.get_switch("toggle_centered")))) - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) nd.symbols.planArcs.show(), is_false: func(nd) nd.symbols.planArcs.hide(), }, # of planArcs.impl @@ -1000,7 +1029,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) ((nd.get_switch("toggle_display_mode") == "MAP") and (!nd.get_switch("toggle_centered")) - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) nd.symbols.rangeArcs.show(), is_false: func(nd) nd.symbols.rangeArcs.hide(), }, # of rangeArcs.impl @@ -1102,7 +1131,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered") - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.aplSymMap.set("z-index", 10); nd.symbols.aplSymMap.show(); @@ -1116,7 +1145,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (((nd.get_switch("toggle_display_mode") == "MAP" and nd.get_switch("toggle_centered")) or nd.in_mode("toggle_display_mode", ["APP","VOR"])) - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.aplSymMapCtr.set("z-index", 10); nd.symbols.aplSymMapCtr.show(); @@ -1214,7 +1243,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and nd.get_switch("toggle_centered") - and (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.trkInd2.show(); nd.symbols.trkInd2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R); @@ -1229,7 +1258,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and nd.get_switch("toggle_centered") and getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val and - (systems.ADIRS.ADIRunits[0].aligned == 1 or (systems.ADIRS.ADIRunits[2].aligned == 1 and att_switch.getValue() == -1))), + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.trkline2.show(); }, diff --git a/Nasal/Systems/ADIRS/ADR.nas b/Nasal/Systems/ADIRS/ADR.nas index b97f0bf8..623bb520 100644 --- a/Nasal/Systems/ADIRS/ADR.nas +++ b/Nasal/Systems/ADIRS/ADR.nas @@ -7,6 +7,8 @@ var _NUMADIRU = 3; var _selfTestTime = nil; +var ADIRSnodesND = [props.globals.getNode("/instrumentation/efis[0]/nd/ir-1", 1),props.globals.getNode("/instrumentation/efis[1]/nd/ir-2", 1),props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1)]; + var ADIRU = { # local vars _alignTime: 0, @@ -110,6 +112,7 @@ var ADIRU = { print("Stopping alignment or setting unaligned state"); me.inAlign = 0; me.aligned = 0; + ADIRSnodesND[me.num].setValue(0); ADIRS.Operating.aligned[me.num].setValue(0); if (me.alignTimer != nil) { me.alignTimer.stop(); @@ -118,6 +121,7 @@ var ADIRU = { stopAlignAligned: func() { me.inAlign = 0; me.aligned = 1; + ADIRSnodesND[me.num].setValue(1); ADIRS.Operating.aligned[me.num].setValue(1); if (me.alignTimer != nil) { me.alignTimer.stop(); From d7c297a0b7377dc917927d71fb5c64e7d64826de Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 7 Nov 2020 01:22:06 +0000 Subject: [PATCH 04/11] Emesary IESI --- Models/Instruments/IESI/IESI.nas | 461 ++++++++++--------- Models/Instruments/Upper-ECAM/Upper-ECAM.nas | 5 +- 2 files changed, 236 insertions(+), 230 deletions(-) diff --git a/Models/Instruments/IESI/IESI.nas b/Models/Instruments/IESI/IESI.nas index 47563c50..c3494ca7 100644 --- a/Models/Instruments/IESI/IESI.nas +++ b/Models/Instruments/IESI/IESI.nas @@ -2,147 +2,172 @@ # Copyright (c) 2020 Josh Davidson (Octal450) -var IESI = nil; -var IESI_display = nil; -var elapsedtime = 0; +var elapsed_seconds = 0; var ASI = 0; var alt = 0; -var altTens = 0; var airspeed_act = 0; var mach_act = 0; # props.nas nodes var iesi_init = props.globals.initNode("/instrumentation/iesi/iesi-init", 0, "BOOL"); var iesi_reset = props.globals.initNode("/instrumentation/iesi/att-reset", 0, "DOUBLE"); -var iesi_brt = props.globals.getNode("/controls/lighting/DU/iesi", 1); -var iesi_rate = props.globals.getNode("/systems/acconfig/options/iesi-rate", 1); -var et = props.globals.getNode("/sim/time/elapsed-sec", 1); -var aconfig = props.globals.getNode("/systems/acconfig/autoconfig-running", 1); - -var airspeed = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1); -var mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1); -var pitch = props.globals.getNode("/instrumentation/iesi/pitch-deg", 1); -var skid = props.globals.getNode("/instrumentation/iesi/slip-skid", 1); -var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1); -var altitude_ind = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft-pfd", 1); - -var altimeter_mode = props.globals.getNode("/instrumentation/altimeter[0]/std", 1); -var qnh_hpa = props.globals.getNode("/instrumentation/altimeter/setting-hpa", 1); -var qnh_inhg = props.globals.getNode("/instrumentation/altimeter/setting-inhg", 1); var _showIESI = 0; var _fast = 0; var _IESITime = 0; -var canvas_IESI_base = { - init: func(canvas_group, file) { - var font_mapper = func(family, weight) { +var canvas_IESI = { + new: func(svg, name) { + var obj = {parents: [canvas_IESI] }; + obj.canvas = canvas.new({ + "name": "IESI", + "size": [1024, 1024], + "view": [1024, 1024], + "mipmapping": 1, + }); + + obj.canvas.addPlacement({"node": "iesi.screen"}); + obj.group = obj.canvas.createGroup(); + + obj.font_mapper = func(family, weight) { return "LiberationFonts/LiberationSans-Regular.ttf"; }; - canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper}); - - var svg_keys = me.getKeys(); - foreach(var key; svg_keys) { - me[key] = canvas_group.getElementById(key); - var svg_keys = me.getKeys(); + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + + var clip_el = obj.group.getElementById(key ~ "_clip"); + if (clip_el != nil) { + clip_el.setVisible(0); + var tran_rect = clip_el.getTransformedBounds(); - foreach (var key; svg_keys) { - me[key] = canvas_group.getElementById(key); - - var clip_el = canvas_group.getElementById(key ~ "_clip"); - if (clip_el != nil) { - clip_el.setVisible(0); - var tran_rect = clip_el.getTransformedBounds(); - - var clip_rect = sprintf("rect(%d,%d, %d,%d)", - tran_rect[1], # 0 ys - tran_rect[2], # 1 xe - tran_rect[3], # 2 ye - tran_rect[0]); #3 xs - # coordinates are top,right,bottom,left (ys, xe, ye, xs) ref: l621 of simgear/canvas/CanvasElement.cxx - me[key].set("clip", clip_rect); - me[key].set("clip-frame", canvas.Element.PARENT); - } + var clip_rect = sprintf("rect(%d,%d, %d,%d)", + tran_rect[1], + tran_rect[2], + tran_rect[3], + tran_rect[0]); + obj[key].set("clip", clip_rect); + obj[key].set("clip-frame", canvas.Element.PARENT); } - } + }; + obj.AI_horizon_trans = obj["AI_horizon"].createTransform(); + obj.AI_horizon_rot = obj["AI_horizon"].createTransform(); - me.AI_horizon_trans = me["AI_horizon"].createTransform(); - me.AI_horizon_rot = me["AI_horizon"].createTransform(); + obj.middleAltOffset = nil; + + obj.update_items = [ + props.UpdateManager.FromHashValue("airspeed", 0.5, func(val) { + # Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 520 knots + if (val <= 30) { + ASI = 0; + } else if (val >= 520) { + ASI = 490; + } else { + ASI = val - 30; + } + obj["ASI_scale"].setTranslation(0, ASI * 8.295); + }), + props.UpdateManager.FromHashList(["altitude","altitude_ind"], nil, func(val) { + if (val.altitude > 50000) { + val.altitude = 50000; + } elsif (val.altitude < -2000) { + val.altitude = -2000; + } + + if (val.altitude < 0) { + obj["negText"].show(); + obj["negText2"].show(); + } else { + obj["negText"].hide(); + obj["negText2"].hide(); + } + + obj.altOffset = (val.altitude / 500) - int(val.altitude / 500); + obj.middleAltText = roundaboutAlt(val.altitude / 100); + if (obj.altOffset > 0.5) { + obj.middleAltOffset = -(obj.altOffset - 1) * 258.5528; + } else { + obj.middleAltOffset = -obj.altOffset * 258.5528; + } + + obj["ALT_scale"].setTranslation(0, -obj.middleAltOffset); + obj["ALT_scale"].update(); + obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText+10))); + obj["ALT_four"].setText(sprintf("%03d", abs(obj.middleAltText+5))); + obj["ALT_three"].setText(sprintf("%03d", abs(obj.middleAltText))); + obj["ALT_two"].setText(sprintf("%03d", abs(obj.middleAltText-5))); + obj["ALT_one"].setText(sprintf("%03d", abs(obj.middleAltText-10))); + + + if (val.altitude < 0 and val.altitude_ind > 20) { + val.altitude_ind = 20; + } elsif (val.altitude > 0 and val.altitude_ind > 500) { + val.altitude_ind = 500; + } + + obj["ALT_digits"].setText(sprintf("%s", val.altitude_ind)); + obj["ALT_meters"].setText(sprintf("%5.0f", math.round(val.altitude * 0.3048, 10))); + obj.altTens = num(right(sprintf("%02d", val.altitude), 2)); + obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16); + }), + props.UpdateManager.FromHashValue("mach", 0.5, func(val) { + if (val >= 0.5) { + obj._machWasAbove50 = 1; + obj["ASI_mach_decimal"].show(); + obj["ASI_mach"].show(); + } elsif (val >= 0.45 and obj._machWasAbove50) { + obj["ASI_mach_decimal"].show(); + obj["ASI_mach"].show(); + } else { + obj._machWasAbove50 = 0; + obj["ASI_mach_decimal"].hide(); + obj["ASI_mach"].hide(); + } + + if (val >= 0.999) { + obj["ASI_mach"].setText("99"); + } else { + obj["ASI_mach"].setText(sprintf("%2.0f", val * 100)); + } + }), + props.UpdateManager.FromHashValue("pitch", nil, func(val) { + obj.AI_horizon_trans.setTranslation(0, val * 16.74); + }), + props.UpdateManager.FromHashValue("roll", nil, func(val) { + obj.AI_horizon_rot.setRotation(-val * D2R, obj["AI_center"].getCenter()); + obj["AI_bank"].setRotation(-val * D2R); + }), + props.UpdateManager.FromHashValue("skid", nil, func(val) { + obj["AI_slipskid"].setTranslation(val, 0); + }), + props.UpdateManager.FromHashList(["altimeter_mode","qnh_hpa","qnh_inhg"], nil, func(val) { + obj.updateQNH(val); + }), + ]; _showIESI = 0; _fast = 0; _IESITime = 0.0; + obj._cachedInhg = nil; - me.page = canvas_group; - - return me; - }, - getKeys: func() { - return []; - }, - update: func() { - cur_time = et.getValue(); - # todo consider relay 7XB for power of DC HOT 1 - # todo transient max 0.2s - # todo 20W power consumption - if (iesi_reset.getValue() == 1) { - if (iesi_init.getBoolValue() and _IESITime + 90 >= et.getValue()) { - _fast = 1; - } else { - _fast = 0; - } - iesi_init.setBoolValue(0); - } - - if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1.getValue() >= 25 and airspeed.getValue() >= 50 and cur_time >= 5)) { - _showIESI = 1; - IESI.update(); - - if (aconfig.getValue() != 1 and iesi_init.getValue() != 1) { - iesi_init.setBoolValue(1); - if (_fast) { - _IESITime = cur_time - 80; - _fast = 0; - } else { - _IESITime = cur_time; - } - } else if (aconfig.getValue() == 1 and iesi_init.getValue() != 1) { - iesi_init.setBoolValue(1); - _IESITime = cur_time - 87; - } - } else { - _showIESI = 0; - iesi_init.setBoolValue(0); - } - - if (_showIESI and iesi_brt.getValue() > 0.01) { - IESI.page.show(); - } else { - IESI.page.hide(); - } - }, -}; - -var canvas_IESI = { - new: func(canvas_group, file) { - var m = {parents: [canvas_IESI, canvas_IESI_base]}; - m.init(canvas_group, file); - m._cachedInhg = -99; - m._machWasAbove50 = 0; - m._roll = 0; - return m; - }, + return obj; + }, getKeys: func() { return ["IESI","IESI_Init","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_horizon","AI_bank","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std","negText","negText2","AI_bank_scale"]; }, - update: func() { - if (qnh_inhg.getValue() != me._cachedInhg) { - me._cachedInhg = qnh_inhg.getValue(); - me.updateQNH(); + update: func(notification) { + if (notification.qnh_inhg != me._cachedInhg) { + me._cachedInhg = notification.qnh_inhg; + me.updateQNH(notification); } - if (_IESITime + 90 >= et.getValue()) { + me.updatePower(notification); + if (me.group.getVisible() == 0) { + return; + } + + if (_IESITime + 90 >= notification.elapsed_seconds) { me["IESI"].hide(); me["IESI_Init"].show(); return; @@ -151,137 +176,119 @@ var canvas_IESI = { me["IESI"].show(); } - # Airspeed - # Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 520 knots - airspeed_act = airspeed.getValue(); - mach_act = mach.getValue(); - if (airspeed_act <= 30) { - ASI = 0; - } else if (airspeed_act >= 520) { - ASI = 490; - } else { - ASI = airspeed_act - 30; - } - me["ASI_scale"].setTranslation(0, ASI * 8.295); - - if (mach_act >= 0.5) { - me._machWasAbove50 = 1; - me["ASI_mach_decimal"].show(); - me["ASI_mach"].show(); - } elsif (mach_act >= 0.45 and me._machWasAbove50) { - me["ASI_mach_decimal"].show(); - me["ASI_mach"].show(); - } else { - me._machWasAbove50 = 0; - me["ASI_mach_decimal"].hide(); - me["ASI_mach"].hide(); - } - - if (mach_act >= 0.999) { - me["ASI_mach"].setText("99"); - } else { - me["ASI_mach"].setText(sprintf("%2.0f", mach_act * 100)); - } - - # Attitude - me._roll = pts.Orientation.roll.getValue(); - me.AI_horizon_trans.setTranslation(0, pitch.getValue() * 16.74); - me.AI_horizon_rot.setRotation(-me._roll * D2R, me["AI_center"].getCenter()); - - me["AI_slipskid"].setTranslation(skid.getValue(), 0); - me["AI_bank"].setRotation(-me._roll * D2R); - - # Altitude - me.altitude = altitude.getValue(); - if (me.altitude > 50000) { - me.altitude = 50000; - } elsif (me.altitude < -2000) { - me.altitude = -2000; - } - - if (me.altitude < 0) { - me["negText"].show(); - me["negText2"].show(); - } else { - me["negText"].hide(); - me["negText2"].hide(); - } - - me.altOffset = me.altitude / 500 - int(me.altitude / 500); - me.middleAltText = roundaboutAlt(me.altitude / 100); - me.middleAltOffset = nil; - if (me.altOffset > 0.5) { - me.middleAltOffset = -(me.altOffset - 1) * 258.5528; - } else { - me.middleAltOffset = -me.altOffset * 258.5528; - } - me["ALT_scale"].setTranslation(0, -me.middleAltOffset); - me["ALT_scale"].update(); - me["ALT_five"].setText(sprintf("%03d", abs(me.middleAltText+10))); - me["ALT_four"].setText(sprintf("%03d", abs(me.middleAltText+5))); - me["ALT_three"].setText(sprintf("%03d", abs(me.middleAltText))); - me["ALT_two"].setText(sprintf("%03d", abs(me.middleAltText-5))); - me["ALT_one"].setText(sprintf("%03d", abs(me.middleAltText-10))); - - me.altitudeText = altitude_ind.getValue(); - if (me.altitude < 0 and me.altitudeText > 20) { - me.altitudeText = 20; - } elsif (me.altitude > 0 and me.altitudeText > 500) { - me.altitudeText = 500; - } - - me["ALT_digits"].setText(sprintf("%s", me.altitudeText)); - me["ALT_meters"].setText(sprintf("%5.0f", math.round(me.altitude * 0.3048, 10))); - altTens = num(right(sprintf("%02d", me.altitude), 2)); - me["ALT_tens"].setTranslation(0, altTens * 3.16); + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } }, - updateQNH: func() { - if (altimeter_mode.getBoolValue()) { + updateQNH: func(notification) { + if (notification.altimeter_mode) { me["QNH_setting"].hide(); me["QNH_std"].show(); } else { - me["QNH_setting"].setText(sprintf("%4.0f", qnh_hpa.getValue()) ~ "/" ~ sprintf("%2.2f", qnh_inhg.getValue())); + me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa) ~ "/" ~ sprintf("%2.2f", notification.qnh_inhg)); me["QNH_setting"].show(); me["QNH_std"].hide(); } - } + }, + updatePower: func(notification) { + # todo consider relay 7XB for power of DC HOT 1 + # todo transient max 0.2s + # todo 20W power consumption + if (notification.attReset == 1) { + if (notification.iesiInit and _IESITime + 90 >= notification.elapsed_seconds) { + _fast = 1; + } else { + _fast = 0; + } + iesi_init.setBoolValue(0); + } + + if (notification.dcEss >= 25 or (notification.dcHot1 >= 25 and notification.airspeed >= 50 and notification.elapsed_seconds >= 5)) { + _showIESI = 1; + if (notification.acconfig != 1 and notification.iesiInit != 1) { + iesi_init.setBoolValue(1); + if (_fast) { + _IESITime = notification.elapsed_seconds - 80; + _fast = 0; + } else { + _IESITime = notification.elapsed_seconds; + } + } else if (notification.acconfig == 1 and notification.iesiInit != 1) { + iesi_init.setBoolValue(1); + _IESITime = notification.elapsed_seconds - 87; + } + } else { + _showIESI = 0; + iesi_init.setBoolValue(0); + } + + if (_showIESI and notification.iesiBrt > 0.01) { + me.group.setVisible(1); + } else { + me.group.setVisible(0); + } + }, }; -setlistener("sim/signals/fdm-initialized", func { - IESI_display = canvas.new({ - "name": "IESI", - "size": [1024, 1024], - "view": [1024, 1024], - "mipmapping": 1 - }); - IESI_display.addPlacement({"node": "iesi.screen"}); - var group_IESI = IESI_display.createGroup(); - - IESI = canvas_IESI.new(group_IESI, "Aircraft/A320-family/Models/Instruments/IESI/res/iesi.svg"); - - IESI.updateQNH(); - - IESI_update.start(); - if (iesi_rate.getValue() > 1) { - rateApply(); - } -}); +var IESIRecipient = +{ + new: func(_ident) + { + var IESIRecipient = emesary.Recipient.new(_ident); + IESIRecipient.MainScreen = nil; + IESIRecipient.Receive = func(notification) + { + if (notification.NotificationType == "FrameNotification") + { + if (IESIRecipient.MainScreen == nil) { + IESIRecipient.MainScreen = canvas_IESI.new("Aircraft/A320-family/Models/Instruments/IESI/res/iesi.svg", "A320 IESI"); + } + + #if (!math.mod(notifications.frameNotification.FrameCount,2)){ + IESIRecipient.MainScreen.update(notification); + #} + return emesary.Transmitter.ReceiptStatus_OK; + } + return emesary.Transmitter.ReceiptStatus_NotProcessed; + }; + return IESIRecipient; + }, +}; -setlistener("/instrumentation/altimeter[0]/std", func() { if (IESI != nil) { IESI.updateQNH(); } }, 0, 0); +var A320IESI = IESIRecipient.new("A320 IESI"); +emesary.GlobalTransmitter.Register(A320IESI); -var rateApply = func { - IESI_update.restart(0.05 * iesi_rate.getValue()); +var input = { + "acconfig": "/systems/acconfig/autoconfig-running", + "airspeed": "/instrumentation/airspeed-indicator[0]/indicated-speed-kt", + "altitude": "/instrumentation/altimeter/indicated-altitude-ft", + "altitude_ind": "/instrumentation/altimeter/indicated-altitude-ft-pfd", + "altimeter_mode": "/instrumentation/altimeter[0]/std", + "attReset": "/instrumentation/iesi/att-reset", + "dcEss": "/systems/electrical/bus/dc-ess", + "dcHot1": "/systems/electrical/bus/dc-hot-1", + "iesiBrt": "/controls/lighting/DU/iesi", + "iesiInit": "/instrumentation/iesi/iesi-init", + "mach": "/instrumentation/airspeed-indicator/indicated-mach", + "pitch": "/instrumentation/iesi/pitch-deg", + "qnh_hpa": "/instrumentation/altimeter[0]/setting-hpa", + "qnh_inhg": "/instrumentation/altimeter[0]/setting-inhg", + "roll": "/orientation/roll-deg", + "skid": "/instrumentation/iesi/slip-skid", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 IESI", name, input[name])); } -var IESI_update = maketimer(0.05, func { - canvas_IESI_base.update(); -}); - var showIESI = func { - var dlg = canvas.Window.new([256, 256], "dialog").set("resize", 1); - dlg.setCanvas(IESI_display); + var dlg = canvas.Window.new([512, 512], "dialog").set("resize", 1); + dlg.setCanvas(A320IESI.MainScreen.canvas); } +setlistener("", func() { if (A320IESI.MainScreen != nil) { A320IESI.MainScreen.updateQNH(notification); } }, 0, 0); + var roundabout = func(x) { var y = x - int(x); return y < 0.5 ? int(x) : 1 + int(x); diff --git a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas index 00bdfe9c..505e5826 100644 --- a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas +++ b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas @@ -68,6 +68,7 @@ var canvas_upperECAM = { obj[key].set("clip-frame", canvas.Element.PARENT); } }; + canvas.parsesvg(obj.test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg", {"font-mapper": obj.font_mapper} ); foreach(var key; obj.getKeysTest()) { obj[key] = obj.test.getElementById(key); @@ -451,8 +452,6 @@ var canvas_upperECAM = { obj["ECAMR7"].setFont("LiberationMonoCustom.ttf"); obj["ECAMR8"].setFont("LiberationMonoCustom.ttf"); - obj.page = obj.group; - # cache obj._cachedN1 = [nil, nil]; obj._cachedN2 = [nil, nil]; @@ -1090,7 +1089,7 @@ var showUpperECAM = func { } setlistener("/systems/electrical/bus/ac-ess", func() { - A320EWD.MainScreen.powerTransient(); + if (A320EWD.MainScreen != nil) { A320EWD.MainScreen.powerTransient() } }, 0, 0); var slatLockTimer = maketimer(0.50, func { From 6baf63c35c4f55aeffab27ad45d1be65c8471854 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 7 Nov 2020 13:54:30 +0000 Subject: [PATCH 05/11] Emesary IESI: fix bugs --- Models/Instruments/IESI/IESI.nas | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Models/Instruments/IESI/IESI.nas b/Models/Instruments/IESI/IESI.nas index c3494ca7..85258f17 100644 --- a/Models/Instruments/IESI/IESI.nas +++ b/Models/Instruments/IESI/IESI.nas @@ -2,16 +2,11 @@ # Copyright (c) 2020 Josh Davidson (Octal450) -var elapsed_seconds = 0; -var ASI = 0; -var alt = 0; -var airspeed_act = 0; -var mach_act = 0; - # props.nas nodes var iesi_init = props.globals.initNode("/instrumentation/iesi/iesi-init", 0, "BOOL"); var iesi_reset = props.globals.initNode("/instrumentation/iesi/att-reset", 0, "DOUBLE"); +var ASI = 0; var _showIESI = 0; var _fast = 0; var _IESITime = 0; @@ -57,7 +52,7 @@ var canvas_IESI = { obj.middleAltOffset = nil; obj.update_items = [ - props.UpdateManager.FromHashValue("airspeed", 0.5, func(val) { + props.UpdateManager.FromHashValue("airspeed", nil, func(val) { # Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 520 knots if (val <= 30) { ASI = 0; @@ -111,7 +106,7 @@ var canvas_IESI = { obj.altTens = num(right(sprintf("%02d", val.altitude), 2)); obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16); }), - props.UpdateManager.FromHashValue("mach", 0.5, func(val) { + props.UpdateManager.FromHashValue("mach", nil, func(val) { if (val >= 0.5) { obj._machWasAbove50 = 1; obj["ASI_mach_decimal"].show(); From 7d77279fe66f9dcf81e28c59151f44a74d64ad74 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 7 Nov 2020 14:35:31 +0000 Subject: [PATCH 06/11] Bugfixes, enable ATT HDG switch --- Models/FlightDeck/a320.flightdeck.xml | 59 ++++++++++++++++++++++++++ Models/Instruments/ND/canvas/style.nas | 19 +++++---- Models/Instruments/PFD/PFD.nas | 4 +- Nasal/Libraries/buttons.nas | 4 +- Nasal/Panels/SwitchingPanel.nas | 4 ++ 5 files changed, 78 insertions(+), 12 deletions(-) diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index e8944999..915d3d1e 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -6975,6 +6975,65 @@ + + + rotate + ecam_att_hdg + ecam_att_hdg.mark + -30 + controls/navigation/switching/att-hdg + + -0.432428 + -0.067552 + -0.063695 + -0.432195 + -0.067552 + -0.062285 + + + + + pick + ecam_att_hdg + + + + true + + nasal + + + + nasal + + + + + + + true + + nasal + + + + nasal + + + + diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 1eb6b840..478ae2a0 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -7,7 +7,7 @@ var ALWAYS = func 1; var NOTHING = func nil; -var att_switch = props.globals.getNode("/controls/switching/ATTHDG", 1); +var att_switch = props.globals.getNode("/controls/navigation/switching/att-hdg", 1); var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1); canvas.NDStyles["Airbus"] = { @@ -455,7 +455,7 @@ canvas.NDStyles["Airbus"] = { update_on:["toggle_range","toggle_display_mode", "toggle_cstr", "toggle_wpt_idx"], predicate: func(nd, layer) { - var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"])); + var visible= (nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -763,7 +763,7 @@ canvas.NDStyles["Airbus"] = { init: func(nd,symbol), predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and getprop("/FMGC/flightplan[2]/active") and - nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]), + nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveId.setText(getprop("/FMGC/flightplan[2]/current-leg")); nd.symbols.wpActiveId.show(); @@ -777,7 +777,7 @@ canvas.NDStyles["Airbus"] = { init: func(nd,symbol), predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and getprop("/FMGC/flightplan[2]/active") and - nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]), + nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { #var cur_wp = getprop("/autopilot/route-manager/current-wp"); var deg = nil; @@ -800,9 +800,10 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDist", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and + predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and getprop("/FMGC/flightplan[2]/active") and - nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]), + nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { var dst = getprop("/FMGC/flightplan[2]/current-leg-dist"); nd.symbols.wpActiveDist.setText(sprintf("%3.01f",dst)); @@ -815,7 +816,8 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDistLbl", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]), + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveDistLbl.show(); if(getprop("/FMGC/flightplan[2]/current-leg-dist") > 1000) @@ -828,7 +830,8 @@ canvas.NDStyles["Airbus"] = { id: "eta", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]), + predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { var etaSec = getprop("/sim/time/utc/day-seconds")+ getprop("/autopilot/route-manager/wp/eta-seconds"); diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index a8a3f641..156f3976 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -109,8 +109,8 @@ var athr = props.globals.getNode("/it-autoflight/output/athr", 1); var gear_agl = props.globals.getNode("/position/gear-agl-ft", 1); var aileron_input = props.globals.getNode("/controls/flight/aileron-input-fast", 1); var elevator_input = props.globals.getNode("/controls/flight/elevator-input-fast", 1); -var att_switch = props.globals.getNode("/controls/switching/ATTHDG", 1); -var air_switch = props.globals.getNode("/controls/switching/AIRDATA", 1); +var att_switch = props.globals.getNode("/controls/navigation/switching/att-hdg", 1); +var air_switch = props.globals.getNode("/controls/navigation/switching/air-data", 1); var appr_enabled = props.globals.getNode("/it-autoflight/output/appr-armed/", 1); var loc_enabled = props.globals.getNode("/it-autoflight/output/loc-armed/", 1); var vert_gs = props.globals.getNode("/it-autoflight/output/vert/", 1); diff --git a/Nasal/Libraries/buttons.nas b/Nasal/Libraries/buttons.nas index edbc2a09..17682b2b 100644 --- a/Nasal/Libraries/buttons.nas +++ b/Nasal/Libraries/buttons.nas @@ -62,8 +62,8 @@ var variousReset = func { setprop("/controls/lighting/DU/mcdu1", 1); setprop("/controls/lighting/DU/mcdu2", 1); setprop("modes/fcu/hdg-time", -45); - setprop("/controls/switching/ATTHDG", 0); - setprop("/controls/switching/AIRDATA", 0); + setprop("/controls/navigation/switching/att-hdg", 0); + setprop("/controls/navigation/switching/air-data", 0); setprop("/controls/switches/no-smoking-sign", 1); setprop("/controls/switches/seatbelt-sign", 1); } diff --git a/Nasal/Panels/SwitchingPanel.nas b/Nasal/Panels/SwitchingPanel.nas index 96066a20..2e2fa280 100644 --- a/Nasal/Panels/SwitchingPanel.nas +++ b/Nasal/Panels/SwitchingPanel.nas @@ -25,6 +25,10 @@ var SwitchingPanel = { dmc.DMController.DMCs[1].changeActiveADIRS(1); } }, + doAttHdg: func(newAttHdg) { + if (newAttHdg < -1 or newAttHdg > 1) { return; } + me.Switches.attHdg.setValue(newAttHdg); + }, doEisDMC: func(newDMC) { if (newDMC < -1 or newDMC > 1) { return; } me.Switches.eisDMC.setValue(newDMC); From 682adfd7b0fe2dcfb4471d725dd32f87b1039616 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 7 Nov 2020 14:50:15 +0000 Subject: [PATCH 07/11] Hide layers when in failed mode --- Models/Instruments/ND/canvas/style.nas | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 478ae2a0..04bc5a7b 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -89,7 +89,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { var visible=nd.get_switch("toggle_weather") and nd.get_switch("toggle_weather_live") and - nd.get_switch("toggle_display_mode") != "PLAN"; + nd.get_switch("toggle_display_mode") != "PLAN" and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible(visible); if (visible) { layer.update(); @@ -108,7 +108,7 @@ canvas.NDStyles["Airbus"] = { #print("Running storms predicate"); var visible=nd.get_switch("toggle_weather") and !nd.get_switch("toggle_weather_live") and - nd.get_switch("toggle_display_mode") != "PLAN"; + nd.get_switch("toggle_display_mode") != "PLAN" and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible(visible); if (visible) { #print("storms update requested! (timer issue when closing the dialog?)"); @@ -125,7 +125,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { var visible = nd.get_switch("toggle_waypoints") and nd.in_mode("toggle_display_mode", ["MAP"]) and - (nd.rangeNm() <= 40); + (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) layer.update(); @@ -154,7 +154,7 @@ canvas.NDStyles["Airbus"] = { isMapStructure: 1, update_on: ["toggle_display_mode","toggle_range",{rate_hz: 2}], predicate: func(nd, layer) { - var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]);# and nd.get_switch("toggle_fplan"); + var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -240,7 +240,7 @@ canvas.NDStyles["Airbus"] = { "toggle_display_mode"], predicate: func(nd, layer) { var visible = nd.get_switch("toggle_airports") and - nd.in_mode("toggle_display_mode", ["MAP"]); + nd.in_mode("toggle_display_mode", ["MAP"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -263,7 +263,7 @@ canvas.NDStyles["Airbus"] = { # toggle visibility here var visible = nd.get_switch("toggle_vor") and nd.in_mode("toggle_display_mode", ["MAP"]) and - (nd.rangeNm() <= 40); + (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -292,7 +292,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { var visible = nd.get_switch("toggle_dme") and nd.in_mode("toggle_display_mode", ["MAP"]) and - (nd.rangeNm() <= 40); + (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); # toggle visibility here layer.group.setVisible( visible ); if (visible) { @@ -325,7 +325,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { var visible = nd.get_switch("toggle_ndb") and nd.in_mode("toggle_display_mode", ["MAP"]) and - (nd.rangeNm() <= 40); + (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); # print("Running vor layer predicate"); # toggle visibility here layer.group.setVisible( visible ); @@ -392,7 +392,6 @@ canvas.NDStyles["Airbus"] = { var visible = nd.get_switch("toggle_traffic"); layer.group.setVisible( visible ); if (visible) { - #print("Updating MapStructure ND layer: TFC"); layer.update(); } }, # end of layer update predicate @@ -403,7 +402,7 @@ canvas.NDStyles["Airbus"] = { update_on:["toggle_range","toggle_display_mode"], predicate: func(nd, layer) { var visible = (nd.rangeNm() <= 40) and - nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) ; + nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)) ; layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -423,7 +422,7 @@ canvas.NDStyles["Airbus"] = { always_update: 1, update_on:["toggle_range","toggle_display_mode","toggle_wpt_idx"], predicate: func(nd, layer) { - var visible= nd.in_mode("toggle_display_mode", ["MAP","PLAN"]); + var visible= nd.in_mode("toggle_display_mode", ["MAP","PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -545,7 +544,7 @@ canvas.NDStyles["Airbus"] = { isMapStructure: 1, update_on: ["toggle_display_mode","toggle_range",{rate_hz: 2}], predicate: func(nd, layer) { - var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]); + var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); @@ -566,7 +565,7 @@ canvas.NDStyles["Airbus"] = { isMapStructure: 1, update_on: ["toggle_display_mode","toggle_range"], predicate: func(nd, layer) { - var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]); + var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); layer.group.setVisible( visible ); if (visible) { layer.update(); From 9b45e4d67571f76bc47dd4e494a9c98e869f3b62 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 7 Nov 2020 19:07:55 +0000 Subject: [PATCH 08/11] It was necessary to manually call predicates to update RTE layers --- .../Instruments/ND/canvas/framework/navdisplay.nas | 2 ++ Nasal/Panels/SwitchingPanel.nas | 6 ++++++ Nasal/Systems/ADIRS/ADR.nas | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index bb489686..81d82153 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -161,6 +161,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update var make_event_handler = func(predicate, layer) func predicate(me, layer); me.layers={}; # storage container for all ND specific layers + me.predicates={}; # look up all required layers as specified per the NDStyle hash and do the initial setup for event handling var default_opts = me.options != nil and contains(me.options, "defaults") ? me.options.defaults : nil; foreach(var layer; me.nd_style.layers) { @@ -215,6 +216,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update # pass the ND instance and the layer handle to the predicate when it is called # so that it can directly access the ND instance and its own layer (without having to know the layer"s name) var event_handler = make_event_handler(layer.predicate, the_layer); + me.predicates[layer.name] = event_handler; foreach(var event; layer.update_on) { # this handles timers if (typeof(event)=="hash" and contains(event, "rate_hz")) { diff --git a/Nasal/Panels/SwitchingPanel.nas b/Nasal/Panels/SwitchingPanel.nas index 2e2fa280..abc9962b 100644 --- a/Nasal/Panels/SwitchingPanel.nas +++ b/Nasal/Panels/SwitchingPanel.nas @@ -28,6 +28,12 @@ var SwitchingPanel = { doAttHdg: func(newAttHdg) { if (newAttHdg < -1 or newAttHdg > 1) { return; } me.Switches.attHdg.setValue(newAttHdg); + foreach (var predicate; keys(canvas_nd.ND_1.NDCpt.predicates)) { + call(canvas_nd.ND_1.NDCpt.predicates[predicate]); + } + foreach (var predicate; keys(canvas_nd.ND_2.NDFo.predicates)) { + call(canvas_nd.ND_2.NDFo.predicates[predicate]); + } }, doEisDMC: func(newDMC) { if (newDMC < -1 or newDMC > 1) { return; } diff --git a/Nasal/Systems/ADIRS/ADR.nas b/Nasal/Systems/ADIRS/ADR.nas index 623bb520..f00c3b7a 100644 --- a/Nasal/Systems/ADIRS/ADR.nas +++ b/Nasal/Systems/ADIRS/ADR.nas @@ -117,6 +117,12 @@ var ADIRU = { if (me.alignTimer != nil) { me.alignTimer.stop(); } + foreach (var predicate; keys(canvas_nd.ND_1.NDCpt.predicates)) { + call(canvas_nd.ND_1.NDCpt.predicates[predicate]); + } + foreach (var predicate; keys(canvas_nd.ND_2.NDFo.predicates)) { + call(canvas_nd.ND_2.NDFo.predicates[predicate]); + } }, stopAlignAligned: func() { me.inAlign = 0; @@ -126,6 +132,12 @@ var ADIRU = { if (me.alignTimer != nil) { me.alignTimer.stop(); } + foreach (var predicate; keys(canvas_nd.ND_1.NDCpt.predicates)) { + call(canvas_nd.ND_1.NDCpt.predicates[predicate]); + } + foreach (var predicate; keys(canvas_nd.ND_2.NDFo.predicates)) { + call(canvas_nd.ND_2.NDFo.predicates[predicate]); + } }, alignLoop: func() { me._roll = pts.Orientation.roll.getValue(); From a59364f64feefc38d344f78eda1a54f8bcf0bf53 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sun, 8 Nov 2020 14:40:54 +0000 Subject: [PATCH 09/11] APU: fix bug where it would shutdown on some power transients --- Nasal/Systems/APU.nas | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Nasal/Systems/APU.nas b/Nasal/Systems/APU.nas index 6ab5dac0..07fe75c7 100644 --- a/Nasal/Systems/APU.nas +++ b/Nasal/Systems/APU.nas @@ -256,6 +256,7 @@ var APU = { APUNodes.Controls.bleed.setValue(0); me.bleedTime = pts.Sim.Time.elapsedSec.getValue(); }, + _powerLost: 0, update: func() { me._count += 1; if (me._count == 5) { @@ -263,14 +264,22 @@ var APU = { if (me.state == 5 and APUNodes.Oil.pressure.getValue() < 35 or APUNodes.Oil.temperature.getValue() > 135) { me.autoStop(); } - if (systems.ELEC.Bus.dcBat.getValue() < 25) { - if (me.GenericControls.starter.getValue()) { - me.GenericControls.starter.setValue(0); - } - if (me.state != 0) { - me.autoStop(); + if (!me._powerLost) { + me._powerLost = 1; + settimer(func() { + if (me._powerLost) { + if (me.GenericControls.starter.getValue()) { + me.GenericControls.starter.setValue(0); + } + if (me.state != 0) { + me.autoStop(); + } + } + }, 0.2); } + } else { + me._powerLost = 0; } } }, From 497364fbfdcc5f022ebf5c6ca5da7e657747294f Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sun, 8 Nov 2020 17:39:27 +0000 Subject: [PATCH 10/11] Bugfix APU that would fail to start due to not being synced with JSBSim perfectly --- Models/Instruments/OHpanel/OHpanel.xml | 2 +- Nasal/Systems/APU.nas | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Models/Instruments/OHpanel/OHpanel.xml b/Models/Instruments/OHpanel/OHpanel.xml index 25e3fafc..1bea790e 100644 --- a/Models/Instruments/OHpanel/OHpanel.xml +++ b/Models/Instruments/OHpanel/OHpanel.xml @@ -5773,7 +5773,7 @@ nasal diff --git a/Nasal/Systems/APU.nas b/Nasal/Systems/APU.nas index 07fe75c7..8f57a2df 100644 --- a/Nasal/Systems/APU.nas +++ b/Nasal/Systems/APU.nas @@ -87,19 +87,25 @@ var APU = { powerOn: func() { # just in case me.resetStuff(); - if (systems.ELEC.Bus.dcBat.getValue() < 25) { return; } + if (systems.ELEC.Bus.dcBat.getValue() < 25) { + settimer(func() { + if (systems.ELEC.Bus.dcBat.getValue() < 25) { + me.resetStuff(); + return; + } + }, 0.2); + } # apu able to receive emergency stop or start signals me.setState(1); me.fuelValveCmd.setValue(1); me.inletFlap.open(); - me.checkOil(); me.listenSignals = 1; settimer(func() { if (APUNodes.Controls.master.getValue() and !getprop("/systems/acconfig/autoconfig-running")) { me.setState(2); } }, 3); - settimer(func() { me.checkOil }, 8); + settimer(func() { me.checkOil() }, 8); }, startCommand: func(fast = 0) { if (me.listenSignals and (me.state == 1 or me.state == 2)) { From 3456e840f0bf8feed51db959fe8d7465c6923e72 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sun, 8 Nov 2020 20:10:17 +0000 Subject: [PATCH 11/11] Fix Refuel panel for KGS / LBS --- gui/dialogs/refuel.nas | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/gui/dialogs/refuel.nas b/gui/dialogs/refuel.nas index 63495a6e..df58abee 100644 --- a/gui/dialogs/refuel.nas +++ b/gui/dialogs/refuel.nas @@ -483,6 +483,7 @@ var refuelClass = { }); + systems.fuelSvc.Nodes.requestFuelLbs.setValue(pts.Consumables.Fuel.totalFuelLbs.getValue()); amount.setValue(math.round((systems.fuelSvc.Nodes.requestFuelLbs.getValue() + systems.fuelSvc.Nodes.requestLbs.getValue()) / 1000, 0.1)); me._timerf(); @@ -593,11 +594,11 @@ var refuelClass = { if (acconfig_weight_kgs.getValue() == 1) { amount.setValue(target - 0.1 * LBS2KGS); if ((target - 0.1) * LBS2KGS >= 10.0) { - me._FQI_pre.setText(sprintf("%2.1f", (target - 0.1) * LBS2KGS)); + me._FQI_pre.setText(sprintf("%2.1f", (target - (0.1 * LBS2KGS)) * LBS2KGS)); } else { - me._FQI_pre.setText(sprintf("%2.2f", (target - 0.1) * LBS2KGS)); + me._FQI_pre.setText(sprintf("%2.2f", (target - (0.1 * LBS2KGS)) * LBS2KGS)); } - systems.fuelSvc.Nodes.requestLbs.setValue((((target - 0.1) * LBS2KGS) - math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000, 0.1)) * 1000); + systems.fuelSvc.Nodes.requestLbs.setValue(((target - 0.1) - math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000, 0.1)) * 1000); } else { amount.setValue(target - 0.1); if (target - 0.1 >= 10.0) { @@ -615,11 +616,11 @@ var refuelClass = { if (acconfig_weight_kgs.getValue() == 1) { amount.setValue(target + 0.1); if ((target + 0.1) * LBS2KGS >= 10.0) { - me._FQI_pre.setText(sprintf("%2.1f", (target + 0.1) * LBS2KGS)); + me._FQI_pre.setText(sprintf("%2.1f", (target + (0.1 * LBS2KGS)) * LBS2KGS)); } else { - me._FQI_pre.setText(sprintf("%2.2f", (target + 0.1) * LBS2KGS)); + me._FQI_pre.setText(sprintf("%2.2f", (target + (0.1 * LBS2KGS)) * LBS2KGS)); } - systems.fuelSvc.Nodes.requestLbs.setValue((((target + 0.1) * LBS2KGS) - math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000, 0.1)) * 1000); + systems.fuelSvc.Nodes.requestLbs.setValue(((target + 0.1) - math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000, 0.1)) * 1000); } else { amount.setValue(target + 0.1); if (target + 0.1 >= 10.0) {