<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Warty</id>
	<title>FlightGear wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Warty"/>
	<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/Special:Contributions/Warty"/>
	<updated>2026-04-09T10:42:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=117249</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=117249"/>
		<updated>2019-02-04T16:07:45Z</updated>

		<summary type="html">&lt;p&gt;Warty: updating dead DropBox link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Canvas Navigation}}&lt;br /&gt;
&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/wljx1xkr6pwij2y/AABpF4w44IvLKrPxPNeRcilta?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in AC3d format.  For this SU-37 example,  the file &amp;lt;tt&amp;gt;''hudGlass.ac''&amp;lt;/tt&amp;gt; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|For this to work, the surface (known as &amp;lt;tt&amp;gt;''PFD-Screen''&amp;lt;/tt&amp;gt; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;lt;tt&amp;gt;''Aircraft/SU-37/Hud/screen-test.png''&amp;lt;/tt&amp;gt; as the texture file.  Obviously, this file must exist, must be a graphics file (JPEG, PNG, etc.) and must be where is says it is.  Here, it would need to be in the &amp;lt;tt&amp;gt;''Aircraft/SU-37/Hud''&amp;lt;/tt&amp;gt; folder.  See also [[AC files: Basic changes to textures and colors]].}}&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- New lines --&amp;gt;&lt;br /&gt;
&amp;lt;model&amp;gt;&lt;br /&gt;
  &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;/model&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file &amp;lt;tt&amp;gt;''canvas-ILS.xml''&amp;lt;/tt&amp;gt; contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines the piece of glass to be used (&amp;lt;tt&amp;gt;''Aircraft/SU-37/Hud/hudGlass.ac''&amp;lt;/tt&amp;gt;) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;needles&amp;quot; in a HUD are:&lt;br /&gt;
* &amp;lt;code&amp;gt;/instrumentation/nav/heading-needle-deflection&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/instrumentation/nav/gs-needle-deflection&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/instrumentation/nav/gs-in-range&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/instrumentation/nav/in-range&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e., as the correct types) it might be advisable to declare them in the [[aircraft-set.xml file]] between the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;instrumentation&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/instrumentation&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tags:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;instrumentation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nav&amp;gt;&lt;br /&gt;
    &amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
    &amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
    &amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
    &amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
  &amp;lt;/nav&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/instrumentation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS needles on the glass ==&lt;br /&gt;
This ILS example uses a derivative of the code at [[Canvas HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement) {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altitude (for below 1,000 ft AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func() {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000 ft AGL&lt;br /&gt;
    if(rad_alt and rad_alt &amp;lt; 1000){&lt;br /&gt;
        rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);&lt;br /&gt;
    } else {&lt;br /&gt;
        rad_alt = nil;&lt;br /&gt;
    }&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir == 0) gslr = 10.8;&lt;br /&gt;
    me.lbi.setTranslation(20 * gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir == 0) gsud =  7.2;&lt;br /&gt;
    me.gsi.setTranslation(0, -20 * gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func(){ me.update(); }, 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func(){&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;lt;tt&amp;gt;''hudCanvasILS.nas''&amp;lt;/tt&amp;gt; in the &amp;lt;tt&amp;gt;''Aircraft/SU-37/Hud''&amp;lt;/tt&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;lt;tt&amp;gt;''SU-37-set.xml''&amp;lt;/tt&amp;gt; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;canvas_test&amp;gt;&lt;br /&gt;
    &amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nasal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;''Tutorial written by {{usr|Warty}}''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
* [[Howto:Add a 2D canvas instrument to your aircraft]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* [http://forum.flightgear.org/viewtopic.php?f=14&amp;amp;t=19602 ILS and Properties]&lt;br /&gt;
* [http://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=25334 ILS in the property-tree]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105038</id>
		<title>MBB Bo 105</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105038"/>
		<updated>2016-10-18T19:07:34Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Realism */ minor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''MBB Bo 105''' is a turbine powered [[helicopter]] introduced into service in the 1970s by Messerschmitt-Bölkow-Blohm. Development started in 1961 and its maiden flight was in 1967. It was later produced by Eurocopter. The model in FGFS has three selectable liveries that can be changed with the Y key, including a military variant with armament that can be fired.&lt;br /&gt;
&lt;br /&gt;
The fdm is based on various very detailed reports, so the flight handling and all needed inputs match exactly the real values. It has also been tested sucessfully by at least two real life pilots, so it is possibly the most realistic helicopter in FlightGear regarding flight handling. Like the real version, it doesn't have any flight-control assistance.  In real life,  it is only the military PAH-Version that has a YAW-SAS.&lt;br /&gt;
&lt;br /&gt;
== Aircraft help ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;}} / {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| Shutdown / Start turbines&lt;br /&gt;
|- &lt;br /&gt;
| {{key press|D}} / {{key press|Shift|D}}&lt;br /&gt;
| Select next / previous door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|D}}&lt;br /&gt;
| Open / Close selected door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|I}}&lt;br /&gt;
| Toggle ignition switch&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|M}} / {{key press|Shift|M}}&lt;br /&gt;
| Shift engine balance to right / left engine&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|N}} / {{key press|Shift|N}}&lt;br /&gt;
| Engine power adjustment up / down&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|R}}&lt;br /&gt;
| Apply rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|R}}&lt;br /&gt;
| Toggle rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Y}} / {{key press|Shift|Y}}&lt;br /&gt;
| Switch to next / previous variant&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|Y}}&lt;br /&gt;
| Open material dialogs&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|,}}&lt;br /&gt;
| Fire machine guns / missiles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Tab}}&lt;br /&gt;
| Open / Close Bo105 config dialog&lt;br /&gt;
|-&lt;br /&gt;
| Middle mouse button&lt;br /&gt;
| Adjust power lever&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|]}} &lt;br /&gt;
| AutoTrim / ForceTrim&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Usage of AutoTrim/ ForceTrim on FGFS Bo105==&lt;br /&gt;
# Move the stick such that the aircraft is in an orientation that you want to trim for (forward flight, hover, ...).&lt;br /&gt;
# Press autotrim button {{key press|]}} and keep it pressed.&lt;br /&gt;
# Move stick/yoke to neutral position (center).&lt;br /&gt;
# Release autotrim button {{key press|]}}.&lt;br /&gt;
&lt;br /&gt;
==Realism==&lt;br /&gt;
The Bo105-model has one of the most accurate helicopter-fdm in FGAddon regarding flight handling, based on collected detailed data of the Bo105 from NASA-flight tests, flight manuals, pilots and published scientific data from various sources. Due to its unique flight character, and being a helicopter, there have been some false assumptions about the realism in the past by many users, including its current maintainer.&lt;br /&gt;
&lt;br /&gt;
Though the BO105 was the first helicopter with a rigid rotor head, the civilian version had never been equipped with any flight-control assistance like SAS or autopilot. The only flight-control assistance installed is a force trim system by spring loading.  Only the military versions BO105 M-P, especially the armed versions, have YAW-SAS to keep the helicopter better in place while aiming and shooting.&lt;br /&gt;
&lt;br /&gt;
What is confusing to many users, is that they have to pull the stick back quite a lot when lifting off and hovering the helicopter. This 45% back cyclic is completly realistic on the BO105 and these are real values, obtained from two independent sources. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.&lt;br /&gt;
&lt;br /&gt;
The problem behind this is that the rigging of the controls of real helicopters are mostly not symmetrical like the joysticks we use. So the problem is on the hadware side, since realistic and affordable helicopter sim controls are rare. The force trim system can't be simulated 100% realistically, and would also need corresponding hardware, which does not exist yet. &lt;br /&gt;
&lt;br /&gt;
To help with this, FGFS comes with a generic AutoTrim-function. It can be implemented in every aircraft (See Generic/Nasal/aircraft.nas). The Bo105 makes use of it by pressing | {{key press|]}} while moving the joystick. It has similar effect for joystick-users like a real AutoTrim/ForceTrim-System. Unfortunately it works on the pedals as well, which is unrealistic. &lt;br /&gt;
&lt;br /&gt;
The only thing which makes the BO105 not as realistic as it could be are the known YASim-issues and the unrealistic underpowered flightperfomance, because it should really have twice the climb rate.&lt;br /&gt;
&lt;br /&gt;
== Video Tutorials ==&lt;br /&gt;
{{#ev:youtube|T0NpG7u0Ezs}}&lt;br /&gt;
{{#ev:youtube|DaL99X4JtJY}}&lt;br /&gt;
{{#ev:youtube|IHcyb7gZIh4}}&lt;br /&gt;
{{#ev:youtube|Hj6q_xl7AFc}}&lt;br /&gt;
&lt;br /&gt;
== In developement 2015/ 2016==&lt;br /&gt;
&lt;br /&gt;
In April 2015 developlement started to replace the current 3d-model of the bo105 with a much more accurate model. The current 3d-model in FGAddon is very lowpoly and not very accurrate of shape and details.&lt;br /&gt;
After just 10h work (inluding recherche of additional reference images) work had to be paused due reallife, but will continue now. &lt;br /&gt;
&lt;br /&gt;
That means:&lt;br /&gt;
* there will be a detailed accurate BO105C (short version)&lt;br /&gt;
* there will be a detailed accurate BO105CBS (long version)&lt;br /&gt;
* when done, there will be a detailed BO105M (PAH = military version)&lt;br /&gt;
* they will have a realistic looking and accurate cockpit &lt;br /&gt;
* there will be paintkit&lt;br /&gt;
* bo105.xml and .ac will be kept for historic reasons.&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
{{Gallery&lt;br /&gt;
|BO105C.Progress.11292015.jpg|Progress after 10h work of the BO105C&lt;br /&gt;
|BO105CBS.Progress.11292015.jpg|Progress of the BO105 CBS after 10h work including to-do-list in german language&lt;br /&gt;
|BO105CBS.Progress.03122015.jpg|Update BO 105 CBS 12/03/2015: added lots of details like grips, doorstop, airvent, strobe and beacon, ....&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Nice textures for the interior ==&lt;br /&gt;
Horacio has made a very nice new texture for the interior of the Bo 105. Get them here: “[http://www.grafikavirtual.com/fgfs/?sec=aviones.php Versión de prueba del BO-105]”&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=0ASyBX1i4sM Here you can view a video] of the improved heli.&lt;br /&gt;
&lt;br /&gt;
== Aircraft Review  ==&lt;br /&gt;
&lt;br /&gt;
Flying a helicopter, at least in a flight sim, is a novel experience. It's mostly about torque, keeping the thing from spinning like a top around its vertical rotor axis. I would have thought that auto - rudder (patented somehwere I am sure) would have been invented to keep the aircraft pointing in the right direction unless something else was required.&lt;br /&gt;
&lt;br /&gt;
Starting is easy enough, after which the helicopter tries to rotate about its axis while on skids. Using the rudder pedals stops the rotation, but the amount of rudder input required changes with the power applied as well as the angle of the blades - known as collective pitch. Left, right and fore and aft motion is controlled with the stick, which is hypersensitive.&lt;br /&gt;
&lt;br /&gt;
Once the helicopter is kept pointing in the right direction, slowly increase the collective by tapping PgDn. As the aircraft lifts, carefully keep it upright for the climb, and it will climb slowly.  The trick is to remember that rolling and pitching more than a little will get you into trouble.&lt;br /&gt;
&lt;br /&gt;
Descending is easy enough, reduce the collective, but the forward speed unchecked, I arrived fast and impacted the ground in no uncertain manner.&lt;br /&gt;
&lt;br /&gt;
Looking forward to my next flight, but if there is an aircraft crying out for fly-by-wire or better still fly-by-button, the helicopter is it. &lt;br /&gt;
&lt;br /&gt;
Just an amateur's view though. &lt;br /&gt;
&lt;br /&gt;
(Openflight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{Gallery&lt;br /&gt;
|FlightGearNL-9.jpg|Bo105 at a heliplatform in the [[FlightGear NL]] scenery.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.fas.org/man/dod-101/sys/ac/row/bo105.htm FAS Bo 105 / PAH-1]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MBB_Bo_105 Wikipedia: Bo 105]&lt;br /&gt;
&lt;br /&gt;
{{Eurocopter}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105035</id>
		<title>MBB Bo 105</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105035"/>
		<updated>2016-10-18T18:54:41Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Realism */ grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''MBB Bo 105''' is a turbine powered [[helicopter]] introduced into service in the 1970s by Messerschmitt-Bölkow-Blohm. Development started in 1961 and its maiden flight was in 1967. It was later produced by Eurocopter. The model in FGFS has three selectable liveries that can be changed with the Y key, including a military variant with armament that can be fired.&lt;br /&gt;
&lt;br /&gt;
The fdm is based on various very detailed reports, so the flight handling and all needed inputs match exactly the real values. It has also been tested sucessfully by at least two real life pilots, so it is possibly the most realistic helicopter in FlightGear regarding flight handling. Like the real version, it doesn't have any flight-control assistance.  In real life,  it is only the military PAH-Version that has a YAW-SAS.&lt;br /&gt;
&lt;br /&gt;
== Aircraft help ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;}} / {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| Shutdown / Start turbines&lt;br /&gt;
|- &lt;br /&gt;
| {{key press|D}} / {{key press|Shift|D}}&lt;br /&gt;
| Select next / previous door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|D}}&lt;br /&gt;
| Open / Close selected door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|I}}&lt;br /&gt;
| Toggle ignition switch&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|M}} / {{key press|Shift|M}}&lt;br /&gt;
| Shift engine balance to right / left engine&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|N}} / {{key press|Shift|N}}&lt;br /&gt;
| Engine power adjustment up / down&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|R}}&lt;br /&gt;
| Apply rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|R}}&lt;br /&gt;
| Toggle rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Y}} / {{key press|Shift|Y}}&lt;br /&gt;
| Switch to next / previous variant&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|Y}}&lt;br /&gt;
| Open material dialogs&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|,}}&lt;br /&gt;
| Fire machine guns / missiles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Tab}}&lt;br /&gt;
| Open / Close Bo105 config dialog&lt;br /&gt;
|-&lt;br /&gt;
| Middle mouse button&lt;br /&gt;
| Adjust power lever&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|]}} &lt;br /&gt;
| AutoTrim / ForceTrim&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Usage of AutoTrim/ ForceTrim on FGFS Bo105==&lt;br /&gt;
# Move the stick such that the aircraft is in an orientation that you want to trim for (forward flight, hover, ...).&lt;br /&gt;
# Press autotrim button {{key press|]}} and keep it pressed.&lt;br /&gt;
# Move stick/yoke to neutral position (center).&lt;br /&gt;
# Release autotrim button {{key press|]}}.&lt;br /&gt;
&lt;br /&gt;
==Realism==&lt;br /&gt;
The Bo105-model has a very realistic fdm regarding flight handling, based on collected detailed data of the Bo105 from NASA-flight tests, flight manuals, pilots and published scientific data from various sources. Due to its unique flight character, and being a helicopter, there have been some false assumptions about the realism in the past by many users, including its current maintainer.&lt;br /&gt;
&lt;br /&gt;
Though the BO105 was the first helicopter with a rigid rotor head, the civilian version had never been equipped with any flight-control assistance like SAS or autopilot. The only flight-control assistance installed is a force trim system by spring-loading.  Only the military versions BO105 M-P, especially the armed versions, have YAW-SAS to keep the helicopter better in place while aiming and shooting.&lt;br /&gt;
&lt;br /&gt;
What is confusing to many users is, that they have to pull the stick quite back to hover the helicopter. This 45% back cyclic is completly realistic on the BO105 and these are real values, obtained from two independant sources. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.&lt;br /&gt;
&lt;br /&gt;
The problem behind this is that the rigging of the controls of real helicopters are mostly not symmetrical like the joysticks we use. So the problem is on the hadware side, since realistic and affordable helicopter sim controls are rare. The force trim system can't be simulated 100% realistically, and would also need corresponding hardware, which does not exist yet. &lt;br /&gt;
&lt;br /&gt;
To help with this, FGFS comes with a generic AutoTrim-function. It can be implemented in every aircraft (See Generic/Nasal/aircraft.nas). The Bo105 makes use of it by pressing | {{key press|]}} while moving the joystick. It has similar effect for joystick-users like a real AutoTrim/ForceTrim-System. Unfortunately it works on the pedals as well, which is unrealistic. &lt;br /&gt;
&lt;br /&gt;
The only thing which makes the BO105 not as realistic as it could be are the known YASim-issues and the unrealistic underpowered flightperfomance, because it should really have twice the climb rate.&lt;br /&gt;
&lt;br /&gt;
== Video Tutorials ==&lt;br /&gt;
{{#ev:youtube|T0NpG7u0Ezs}}&lt;br /&gt;
{{#ev:youtube|DaL99X4JtJY}}&lt;br /&gt;
{{#ev:youtube|IHcyb7gZIh4}}&lt;br /&gt;
{{#ev:youtube|Hj6q_xl7AFc}}&lt;br /&gt;
&lt;br /&gt;
== In developement 2015/ 2016==&lt;br /&gt;
&lt;br /&gt;
In April 2015 developlement started to replace the current 3d-model of the bo105 with a much more accurate model. The current 3d-model in FGAddon is very lowpoly and not very accurrate of shape and details.&lt;br /&gt;
After just 10h work (inluding recherche of additional reference images) work had to be paused due reallife, but will continue now. &lt;br /&gt;
&lt;br /&gt;
That means:&lt;br /&gt;
* there will be a detailed accurate BO105C (short version)&lt;br /&gt;
* there will be a detailed accurate BO105CBS (long version)&lt;br /&gt;
* when done, there will be a detailed BO105M (PAH = military version)&lt;br /&gt;
* they will have a realistic looking and accurate cockpit &lt;br /&gt;
* there will be paintkit&lt;br /&gt;
* bo105.xml and .ac will be kept for historic reasons.&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
{{Gallery&lt;br /&gt;
|BO105C.Progress.11292015.jpg|Progress after 10h work of the BO105C&lt;br /&gt;
|BO105CBS.Progress.11292015.jpg|Progress of the BO105 CBS after 10h work including to-do-list in german language&lt;br /&gt;
|BO105CBS.Progress.03122015.jpg|Update BO 105 CBS 12/03/2015: added lots of details like grips, doorstop, airvent, strobe and beacon, ....&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Nice textures for the interior ==&lt;br /&gt;
Horacio has made a very nice new texture for the interior of the Bo 105. Get them here: “[http://www.grafikavirtual.com/fgfs/?sec=aviones.php Versión de prueba del BO-105]”&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=0ASyBX1i4sM Here you can view a video] of the improved heli.&lt;br /&gt;
&lt;br /&gt;
== Aircraft Review  ==&lt;br /&gt;
&lt;br /&gt;
Flying a helicopter, at least in a flight sim, is a novel experience. It's mostly about torque, keeping the thing from spinning like a top around its vertical rotor axis. I would have thought that auto - rudder (patented somehwere I am sure) would have been invented to keep the aircraft pointing in the right direction unless something else was required.&lt;br /&gt;
&lt;br /&gt;
Starting is easy enough, after which the helicopter tries to rotate about its axis while on skids. Using the rudder pedals stops the rotation, but the amount of rudder input required changes with the power applied as well as the angle of the blades - known as collective pitch. Left, right and fore and aft motion is controlled with the stick, which is hypersensitive.&lt;br /&gt;
&lt;br /&gt;
Once the helicopter is kept pointing in the right direction, slowly increase the collective by tapping PgDn. As the aircraft lifts, carefully keep it upright for the climb, and it will climb slowly.  The trick is to remember that rolling and pitching more than a little will get you into trouble.&lt;br /&gt;
&lt;br /&gt;
Descending is easy enough, reduce the collective, but the forward speed unchecked, I arrived fast and impacted the ground in no uncertain manner.&lt;br /&gt;
&lt;br /&gt;
Looking forward to my next flight, but if there is an aircraft crying out for fly-by-wire or better still fly-by-button, the helicopter is it. &lt;br /&gt;
&lt;br /&gt;
Just an amateur's view though. &lt;br /&gt;
&lt;br /&gt;
(Openflight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{Gallery&lt;br /&gt;
|FlightGearNL-9.jpg|Bo105 at a heliplatform in the [[FlightGear NL]] scenery.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.fas.org/man/dod-101/sys/ac/row/bo105.htm FAS Bo 105 / PAH-1]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MBB_Bo_105 Wikipedia: Bo 105]&lt;br /&gt;
&lt;br /&gt;
{{Eurocopter}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105034</id>
		<title>MBB Bo 105</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105034"/>
		<updated>2016-10-18T18:51:07Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Realism */ grammar &amp;amp; tidying&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''MBB Bo 105''' is a turbine powered [[helicopter]] introduced into service in the 1970s by Messerschmitt-Bölkow-Blohm. Development started in 1961 and its maiden flight was in 1967. It was later produced by Eurocopter. The model in FGFS has three selectable liveries that can be changed with the Y key, including a military variant with armament that can be fired.&lt;br /&gt;
&lt;br /&gt;
The fdm is based on various very detailed reports, so the flight handling and all needed inputs match exactly the real values. It has also been tested sucessfully by at least two real life pilots, so it is possibly the most realistic helicopter in FlightGear regarding flight handling. Like the real version, it doesn't have any flight-control assistance.  In real life,  it is only the military PAH-Version that has a YAW-SAS.&lt;br /&gt;
&lt;br /&gt;
== Aircraft help ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;}} / {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| Shutdown / Start turbines&lt;br /&gt;
|- &lt;br /&gt;
| {{key press|D}} / {{key press|Shift|D}}&lt;br /&gt;
| Select next / previous door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|D}}&lt;br /&gt;
| Open / Close selected door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|I}}&lt;br /&gt;
| Toggle ignition switch&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|M}} / {{key press|Shift|M}}&lt;br /&gt;
| Shift engine balance to right / left engine&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|N}} / {{key press|Shift|N}}&lt;br /&gt;
| Engine power adjustment up / down&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|R}}&lt;br /&gt;
| Apply rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|R}}&lt;br /&gt;
| Toggle rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Y}} / {{key press|Shift|Y}}&lt;br /&gt;
| Switch to next / previous variant&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|Y}}&lt;br /&gt;
| Open material dialogs&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|,}}&lt;br /&gt;
| Fire machine guns / missiles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Tab}}&lt;br /&gt;
| Open / Close Bo105 config dialog&lt;br /&gt;
|-&lt;br /&gt;
| Middle mouse button&lt;br /&gt;
| Adjust power lever&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|]}} &lt;br /&gt;
| AutoTrim / ForceTrim&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Usage of AutoTrim/ ForceTrim on FGFS Bo105==&lt;br /&gt;
# Move the stick such that the aircraft is in an orientation that you want to trim for (forward flight, hover, ...).&lt;br /&gt;
# Press autotrim button {{key press|]}} and keep it pressed.&lt;br /&gt;
# Move stick/yoke to neutral position (center).&lt;br /&gt;
# Release autotrim button {{key press|]}}.&lt;br /&gt;
&lt;br /&gt;
==Realism==&lt;br /&gt;
The Bo105-model has a very realistic fdm regarding flight handling, based on collected detailed data of the Bo105 from NASA-flight tests, flight manuals, pilots and published scientific data from various sources. Due to its unique flight character, and being a helicopter, there have been some false assumptions about the realism in the past by many users, including its current maintainer.&lt;br /&gt;
&lt;br /&gt;
Though the BO105 was the first helicopter with a rigid rotor head, the civilian version had never been equipped with any flight-control assistance like SAS or autopilot. The only flight-control assistance installed is a force trim system by spring-loading.  Only the military versions BO105 M-P, especially the armed versions, have YAW-SAS to keep the helicopter better in place while aiming and shooting.&lt;br /&gt;
&lt;br /&gt;
What is confusing to many users is, that they have to pull the stick quite back to hover the helicopter. This 45% back cyclic is completly realistic on the BO105 and these are real values, obtained from two independant sources. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.&lt;br /&gt;
&lt;br /&gt;
The problem behind this is that the rigging of the controls of real helicopters are mostly not symmetrical like the joysticks we use. So the problem is on the hadware side, since realistic and affordable helicopter sim controls are rare. The force trim system can't be simulated 100% realistically, and would also need corresponding hardware, which does not exist yet. &lt;br /&gt;
&lt;br /&gt;
To help with this FGFS this comes with a generic AutoTrim-function. It can be implemented in every aircraft (See Generic/Nasal/aircraft.nas). The Bo105 makes use of it by pressing | {{key press|]}} while moving the joystick. It has similar effect for joystick-users like a real AutoTrim/ForceTrim-System. Unfortunately it works on the pedals as well, which is unrealistic. &lt;br /&gt;
&lt;br /&gt;
The only thing which makes the BO105 not 100% realistic as it could be are the known YASim-issues and the unrealistic underpowered flightperfomance, as it should have a climbrate twice the size.&lt;br /&gt;
&lt;br /&gt;
== Video Tutorials ==&lt;br /&gt;
{{#ev:youtube|T0NpG7u0Ezs}}&lt;br /&gt;
{{#ev:youtube|DaL99X4JtJY}}&lt;br /&gt;
{{#ev:youtube|IHcyb7gZIh4}}&lt;br /&gt;
{{#ev:youtube|Hj6q_xl7AFc}}&lt;br /&gt;
&lt;br /&gt;
== In developement 2015/ 2016==&lt;br /&gt;
&lt;br /&gt;
In April 2015 developlement started to replace the current 3d-model of the bo105 with a much more accurate model. The current 3d-model in FGAddon is very lowpoly and not very accurrate of shape and details.&lt;br /&gt;
After just 10h work (inluding recherche of additional reference images) work had to be paused due reallife, but will continue now. &lt;br /&gt;
&lt;br /&gt;
That means:&lt;br /&gt;
* there will be a detailed accurate BO105C (short version)&lt;br /&gt;
* there will be a detailed accurate BO105CBS (long version)&lt;br /&gt;
* when done, there will be a detailed BO105M (PAH = military version)&lt;br /&gt;
* they will have a realistic looking and accurate cockpit &lt;br /&gt;
* there will be paintkit&lt;br /&gt;
* bo105.xml and .ac will be kept for historic reasons.&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
{{Gallery&lt;br /&gt;
|BO105C.Progress.11292015.jpg|Progress after 10h work of the BO105C&lt;br /&gt;
|BO105CBS.Progress.11292015.jpg|Progress of the BO105 CBS after 10h work including to-do-list in german language&lt;br /&gt;
|BO105CBS.Progress.03122015.jpg|Update BO 105 CBS 12/03/2015: added lots of details like grips, doorstop, airvent, strobe and beacon, ....&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Nice textures for the interior ==&lt;br /&gt;
Horacio has made a very nice new texture for the interior of the Bo 105. Get them here: “[http://www.grafikavirtual.com/fgfs/?sec=aviones.php Versión de prueba del BO-105]”&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=0ASyBX1i4sM Here you can view a video] of the improved heli.&lt;br /&gt;
&lt;br /&gt;
== Aircraft Review  ==&lt;br /&gt;
&lt;br /&gt;
Flying a helicopter, at least in a flight sim, is a novel experience. It's mostly about torque, keeping the thing from spinning like a top around its vertical rotor axis. I would have thought that auto - rudder (patented somehwere I am sure) would have been invented to keep the aircraft pointing in the right direction unless something else was required.&lt;br /&gt;
&lt;br /&gt;
Starting is easy enough, after which the helicopter tries to rotate about its axis while on skids. Using the rudder pedals stops the rotation, but the amount of rudder input required changes with the power applied as well as the angle of the blades - known as collective pitch. Left, right and fore and aft motion is controlled with the stick, which is hypersensitive.&lt;br /&gt;
&lt;br /&gt;
Once the helicopter is kept pointing in the right direction, slowly increase the collective by tapping PgDn. As the aircraft lifts, carefully keep it upright for the climb, and it will climb slowly.  The trick is to remember that rolling and pitching more than a little will get you into trouble.&lt;br /&gt;
&lt;br /&gt;
Descending is easy enough, reduce the collective, but the forward speed unchecked, I arrived fast and impacted the ground in no uncertain manner.&lt;br /&gt;
&lt;br /&gt;
Looking forward to my next flight, but if there is an aircraft crying out for fly-by-wire or better still fly-by-button, the helicopter is it. &lt;br /&gt;
&lt;br /&gt;
Just an amateur's view though. &lt;br /&gt;
&lt;br /&gt;
(Openflight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{Gallery&lt;br /&gt;
|FlightGearNL-9.jpg|Bo105 at a heliplatform in the [[FlightGear NL]] scenery.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.fas.org/man/dod-101/sys/ac/row/bo105.htm FAS Bo 105 / PAH-1]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MBB_Bo_105 Wikipedia: Bo 105]&lt;br /&gt;
&lt;br /&gt;
{{Eurocopter}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105030</id>
		<title>MBB Bo 105</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105030"/>
		<updated>2016-10-18T18:41:25Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Realism */ grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''MBB Bo 105''' is a turbine powered [[helicopter]] introduced into service in the 1970s by Messerschmitt-Bölkow-Blohm. Development started in 1961 and its maiden flight was in 1967. It was later produced by Eurocopter. The model in FGFS has three selectable liveries that can be changed with the Y key, including a military variant with armament that can be fired.&lt;br /&gt;
&lt;br /&gt;
The fdm is based on various very detailed reports, so the flight handling and all needed inputs match exactly the real values. It has also been tested sucessfully by at least two real life pilots, so it is possibly the most realistic helicopter in FlightGear regarding flight handling. Like the real version, it doesn't have any flight-control assistance.  In real life,  it is only the military PAH-Version that has a YAW-SAS.&lt;br /&gt;
&lt;br /&gt;
== Aircraft help ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;}} / {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| Shutdown / Start turbines&lt;br /&gt;
|- &lt;br /&gt;
| {{key press|D}} / {{key press|Shift|D}}&lt;br /&gt;
| Select next / previous door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|D}}&lt;br /&gt;
| Open / Close selected door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|I}}&lt;br /&gt;
| Toggle ignition switch&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|M}} / {{key press|Shift|M}}&lt;br /&gt;
| Shift engine balance to right / left engine&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|N}} / {{key press|Shift|N}}&lt;br /&gt;
| Engine power adjustment up / down&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|R}}&lt;br /&gt;
| Apply rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|R}}&lt;br /&gt;
| Toggle rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Y}} / {{key press|Shift|Y}}&lt;br /&gt;
| Switch to next / previous variant&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|Y}}&lt;br /&gt;
| Open material dialogs&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|,}}&lt;br /&gt;
| Fire machine guns / missiles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Tab}}&lt;br /&gt;
| Open / Close Bo105 config dialog&lt;br /&gt;
|-&lt;br /&gt;
| Middle mouse button&lt;br /&gt;
| Adjust power lever&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|]}} &lt;br /&gt;
| AutoTrim / ForceTrim&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Usage of AutoTrim/ ForceTrim on FGFS Bo105==&lt;br /&gt;
# Move the stick such that the aircraft is in an orientation that you want to trim for (forward flight, hover, ...).&lt;br /&gt;
# Press autotrim button {{key press|]}} and keep it pressed.&lt;br /&gt;
# Move stick/yoke to neutral position (center).&lt;br /&gt;
# Release autotrim button {{key press|]}}.&lt;br /&gt;
&lt;br /&gt;
==Realism==&lt;br /&gt;
The Bo105-model has a very realistic fdm regarding flight handling, based on collected detailed data of the Bo105 from NASA-flight tests, flight manuals, pilots and published scientific data from various sources. Due to its unique flight character, and its nature of being a helicopter, there had been some false assumptions about the realism in the past by many users, including its current maintainer.&lt;br /&gt;
&lt;br /&gt;
Though the BO105 was the first helicopter with a rigid rotor head, the civilian version had never been eqipped with any flight-control assistence like SAS or autopilot. The only flight-control assistence installed is a ForceTrim System by Springloading.  Only the military versions BO105 M-P, especially the armed versions, have a YAW-SAS to keep the helicopter better in place while aiming and shooting.&lt;br /&gt;
&lt;br /&gt;
What is confusing to many users is, that they have to pull the stick quite back to hover the helicopter. This 45% back cyclic is completly realistic on the BO105 and these are real values, obtained from two independant sources. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.&lt;br /&gt;
&lt;br /&gt;
The problem behind is that the rigging of the controls of real helicopters are mostly not symmetrical like the joysticks we use. So the problem is on the hadware side, since realistic and affordable helicopter sim controls are rare. Especially the ForceTrimSystem can't be simulated 100% realistic, and would need corresponding hardware for, which does not exist yet. &lt;br /&gt;
&lt;br /&gt;
To counteract FGFS comes with a generic AutoTrim-function. It can be implemented to every aircraft (See Generic/Nasal/aircraft.nas). The Bo105 makes use of it by pressing | {{key press|]}} while moving the joystick. It has similar effect for joystick-users like a real AutoTrim/ForceTrim-System. Unfortunately it works on the pedals as well, which is unrealistic. &lt;br /&gt;
&lt;br /&gt;
The only thing which makes the BO105 not 100% realistic as it could be are the known YASim-issues and the unrealistic underpowered flightperfomance, as it should have a climbrate twice the size.&lt;br /&gt;
&lt;br /&gt;
== Video Tutorials ==&lt;br /&gt;
{{#ev:youtube|T0NpG7u0Ezs}}&lt;br /&gt;
{{#ev:youtube|DaL99X4JtJY}}&lt;br /&gt;
{{#ev:youtube|IHcyb7gZIh4}}&lt;br /&gt;
{{#ev:youtube|Hj6q_xl7AFc}}&lt;br /&gt;
&lt;br /&gt;
== In developement 2015/ 2016==&lt;br /&gt;
&lt;br /&gt;
In April 2015 developlement started to replace the current 3d-model of the bo105 with a much more accurate model. The current 3d-model in FGAddon is very lowpoly and not very accurrate of shape and details.&lt;br /&gt;
After just 10h work (inluding recherche of additional reference images) work had to be paused due reallife, but will continue now. &lt;br /&gt;
&lt;br /&gt;
That means:&lt;br /&gt;
* there will be a detailed accurate BO105C (short version)&lt;br /&gt;
* there will be a detailed accurate BO105CBS (long version)&lt;br /&gt;
* when done, there will be a detailed BO105M (PAH = military version)&lt;br /&gt;
* they will have a realistic looking and accurate cockpit &lt;br /&gt;
* there will be paintkit&lt;br /&gt;
* bo105.xml and .ac will be kept for historic reasons.&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
{{Gallery&lt;br /&gt;
|BO105C.Progress.11292015.jpg|Progress after 10h work of the BO105C&lt;br /&gt;
|BO105CBS.Progress.11292015.jpg|Progress of the BO105 CBS after 10h work including to-do-list in german language&lt;br /&gt;
|BO105CBS.Progress.03122015.jpg|Update BO 105 CBS 12/03/2015: added lots of details like grips, doorstop, airvent, strobe and beacon, ....&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Nice textures for the interior ==&lt;br /&gt;
Horacio has made a very nice new texture for the interior of the Bo 105. Get them here: “[http://www.grafikavirtual.com/fgfs/?sec=aviones.php Versión de prueba del BO-105]”&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=0ASyBX1i4sM Here you can view a video] of the improved heli.&lt;br /&gt;
&lt;br /&gt;
== Aircraft Review  ==&lt;br /&gt;
&lt;br /&gt;
Flying a helicopter, at least in a flight sim, is a novel experience. It's mostly about torque, keeping the thing from spinning like a top around its vertical rotor axis. I would have thought that auto - rudder (patented somehwere I am sure) would have been invented to keep the aircraft pointing in the right direction unless something else was required.&lt;br /&gt;
&lt;br /&gt;
Starting is easy enough, after which the helicopter tries to rotate about its axis while on skids. Using the rudder pedals stops the rotation, but the amount of rudder input required changes with the power applied as well as the angle of the blades - known as collective pitch. Left, right and fore and aft motion is controlled with the stick, which is hypersensitive.&lt;br /&gt;
&lt;br /&gt;
Once the helicopter is kept pointing in the right direction, slowly increase the collective by tapping PgDn. As the aircraft lifts, carefully keep it upright for the climb, and it will climb slowly.  The trick is to remember that rolling and pitching more than a little will get you into trouble.&lt;br /&gt;
&lt;br /&gt;
Descending is easy enough, reduce the collective, but the forward speed unchecked, I arrived fast and impacted the ground in no uncertain manner.&lt;br /&gt;
&lt;br /&gt;
Looking forward to my next flight, but if there is an aircraft crying out for fly-by-wire or better still fly-by-button, the helicopter is it. &lt;br /&gt;
&lt;br /&gt;
Just an amateur's view though. &lt;br /&gt;
&lt;br /&gt;
(Openflight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{Gallery&lt;br /&gt;
|FlightGearNL-9.jpg|Bo105 at a heliplatform in the [[FlightGear NL]] scenery.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.fas.org/man/dod-101/sys/ac/row/bo105.htm FAS Bo 105 / PAH-1]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MBB_Bo_105 Wikipedia: Bo 105]&lt;br /&gt;
&lt;br /&gt;
{{Eurocopter}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105029</id>
		<title>MBB Bo 105</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=MBB_Bo_105&amp;diff=105029"/>
		<updated>2016-10-18T18:36:31Z</updated>

		<summary type="html">&lt;p&gt;Warty: Grammar &amp;amp; minor mod's&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''MBB Bo 105''' is a turbine powered [[helicopter]] introduced into service in the 1970s by Messerschmitt-Bölkow-Blohm. Development started in 1961 and its maiden flight was in 1967. It was later produced by Eurocopter. The model in FGFS has three selectable liveries that can be changed with the Y key, including a military variant with armament that can be fired.&lt;br /&gt;
&lt;br /&gt;
The fdm is based on various very detailed reports, so the flight handling and all needed inputs match exactly the real values. It has also been tested sucessfully by at least two real life pilots, so it is possibly the most realistic helicopter in FlightGear regarding flight handling. Like the real version, it doesn't have any flight-control assistance.  In real life,  it is only the military PAH-Version that has a YAW-SAS.&lt;br /&gt;
&lt;br /&gt;
== Aircraft help ==&lt;br /&gt;
{| class=&amp;quot;keytable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Function&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;}} / {{key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| Shutdown / Start turbines&lt;br /&gt;
|- &lt;br /&gt;
| {{key press|D}} / {{key press|Shift|D}}&lt;br /&gt;
| Select next / previous door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|D}}&lt;br /&gt;
| Open / Close selected door&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|I}}&lt;br /&gt;
| Toggle ignition switch&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|M}} / {{key press|Shift|M}}&lt;br /&gt;
| Shift engine balance to right / left engine&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|N}} / {{key press|Shift|N}}&lt;br /&gt;
| Engine power adjustment up / down&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|R}}&lt;br /&gt;
| Apply rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Shift|R}}&lt;br /&gt;
| Toggle rotor brake&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Y}} / {{key press|Shift|Y}}&lt;br /&gt;
| Switch to next / previous variant&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Ctrl|Y}}&lt;br /&gt;
| Open material dialogs&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|,}}&lt;br /&gt;
| Fire machine guns / missiles&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|Tab}}&lt;br /&gt;
| Open / Close Bo105 config dialog&lt;br /&gt;
|-&lt;br /&gt;
| Middle mouse button&lt;br /&gt;
| Adjust power lever&lt;br /&gt;
|-&lt;br /&gt;
| {{key press|]}} &lt;br /&gt;
| AutoTrim / ForceTrim&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Usage of AutoTrim/ ForceTrim on FGFS Bo105==&lt;br /&gt;
# Move the stick such that the aircraft is in an orientation that you want to trim for (forward flight, hover, ...).&lt;br /&gt;
# Press autotrim button {{key press|]}} and keep it pressed.&lt;br /&gt;
# Move stick/yoke to neutral position (center).&lt;br /&gt;
# Release autotrim button {{key press|]}}.&lt;br /&gt;
&lt;br /&gt;
==Realism==&lt;br /&gt;
The Bo105-model has one of the most realistic fdm regarding flight handling, based on collected detailed datas of the Bo105 from NASA-flight tests, flightmanuals, pilots and published scientific datas from various sources.&lt;br /&gt;
Due to its unique flight character, and its nature of being a helicopter, there had been some false assumptions about the realism in the past by many users, including its current maintainer.&lt;br /&gt;
&lt;br /&gt;
Though the BO105 was the first helicopter with a rigid rotor head, the civilian version had never been eqipped with any helping assistence like SAS or even autopilot. The only helping assistence installed is a ForceTrim System by Springloading. &lt;br /&gt;
Only the militarian versions BO105 M-P, especially the armed versions, has a YAW-SAS to keep the helicopter better in place while aiming and shooting.&lt;br /&gt;
&lt;br /&gt;
What is confusing to many users is, that they have to pull the stick quite back to hover the helicopter. &lt;br /&gt;
This 45% back cyclic is completly true and realistic on the BO105 and are real values, retrieved from two independant sources. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.&lt;br /&gt;
The problem behind is that the rigging of the controls of real helicopters are mostly not symmetrical like the joysticks we use. So the problem is on the hadware side, since realistic and affordable helicopter sim controls are rare. Especially the ForceTrimSystem can't be simulated 100% realistic, and would need corresponding hardware for, which does not exist yet. &lt;br /&gt;
&lt;br /&gt;
To counteract FGFS comes with a generic AutoTrim-function. It can be implemented to every aircraft (See Generic/Nasal/aircraft.nas). The Bo105 makes use of it by pressing | {{key press|]}} while moving the joystick. It has similar effect for joystick-users like a real AutoTrim/ForceTrim-System. Unfortunately it works on the pedals as well, which is unrealistic. &lt;br /&gt;
&lt;br /&gt;
The only thing which makes the BO105 not 100% realistic as it could be are the known YASim-issues and the unrealistic underpowered flightperfomance, as it should have a climbrate twice the size.&lt;br /&gt;
&lt;br /&gt;
== Video Tutorials ==&lt;br /&gt;
{{#ev:youtube|T0NpG7u0Ezs}}&lt;br /&gt;
{{#ev:youtube|DaL99X4JtJY}}&lt;br /&gt;
{{#ev:youtube|IHcyb7gZIh4}}&lt;br /&gt;
{{#ev:youtube|Hj6q_xl7AFc}}&lt;br /&gt;
&lt;br /&gt;
== In developement 2015/ 2016==&lt;br /&gt;
&lt;br /&gt;
In April 2015 developlement started to replace the current 3d-model of the bo105 with a much more accurate model. The current 3d-model in FGAddon is very lowpoly and not very accurrate of shape and details.&lt;br /&gt;
After just 10h work (inluding recherche of additional reference images) work had to be paused due reallife, but will continue now. &lt;br /&gt;
&lt;br /&gt;
That means:&lt;br /&gt;
* there will be a detailed accurate BO105C (short version)&lt;br /&gt;
* there will be a detailed accurate BO105CBS (long version)&lt;br /&gt;
* when done, there will be a detailed BO105M (PAH = military version)&lt;br /&gt;
* they will have a realistic looking and accurate cockpit &lt;br /&gt;
* there will be paintkit&lt;br /&gt;
* bo105.xml and .ac will be kept for historic reasons.&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
{{Gallery&lt;br /&gt;
|BO105C.Progress.11292015.jpg|Progress after 10h work of the BO105C&lt;br /&gt;
|BO105CBS.Progress.11292015.jpg|Progress of the BO105 CBS after 10h work including to-do-list in german language&lt;br /&gt;
|BO105CBS.Progress.03122015.jpg|Update BO 105 CBS 12/03/2015: added lots of details like grips, doorstop, airvent, strobe and beacon, ....&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Nice textures for the interior ==&lt;br /&gt;
Horacio has made a very nice new texture for the interior of the Bo 105. Get them here: “[http://www.grafikavirtual.com/fgfs/?sec=aviones.php Versión de prueba del BO-105]”&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=0ASyBX1i4sM Here you can view a video] of the improved heli.&lt;br /&gt;
&lt;br /&gt;
== Aircraft Review  ==&lt;br /&gt;
&lt;br /&gt;
Flying a helicopter, at least in a flight sim, is a novel experience. It's mostly about torque, keeping the thing from spinning like a top around its vertical rotor axis. I would have thought that auto - rudder (patented somehwere I am sure) would have been invented to keep the aircraft pointing in the right direction unless something else was required.&lt;br /&gt;
&lt;br /&gt;
Starting is easy enough, after which the helicopter tries to rotate about its axis while on skids. Using the rudder pedals stops the rotation, but the amount of rudder input required changes with the power applied as well as the angle of the blades - known as collective pitch. Left, right and fore and aft motion is controlled with the stick, which is hypersensitive.&lt;br /&gt;
&lt;br /&gt;
Once the helicopter is kept pointing in the right direction, slowly increase the collective by tapping PgDn. As the aircraft lifts, carefully keep it upright for the climb, and it will climb slowly.  The trick is to remember that rolling and pitching more than a little will get you into trouble.&lt;br /&gt;
&lt;br /&gt;
Descending is easy enough, reduce the collective, but the forward speed unchecked, I arrived fast and impacted the ground in no uncertain manner.&lt;br /&gt;
&lt;br /&gt;
Looking forward to my next flight, but if there is an aircraft crying out for fly-by-wire or better still fly-by-button, the helicopter is it. &lt;br /&gt;
&lt;br /&gt;
Just an amateur's view though. &lt;br /&gt;
&lt;br /&gt;
(Openflight)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{Gallery&lt;br /&gt;
|FlightGearNL-9.jpg|Bo105 at a heliplatform in the [[FlightGear NL]] scenery.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.fas.org/man/dod-101/sys/ac/row/bo105.htm FAS Bo 105 / PAH-1]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MBB_Bo_105 Wikipedia: Bo 105]&lt;br /&gt;
&lt;br /&gt;
{{Eurocopter}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User_talk:HHS&amp;diff=105023</id>
		<title>User talk:HHS</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User_talk:HHS&amp;diff=105023"/>
		<updated>2016-10-18T17:19:55Z</updated>

		<summary type="html">&lt;p&gt;Warty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello again Heiko&lt;br /&gt;
&lt;br /&gt;
Iv started working on the md500e, heres a screenshot from blender of the progress so far, http://imagebin.org/58537, its going to take me quite some time! i definitely want it to be as detailed as possible, especially in the cockpit! I was hoping you and/or Maik might want to give me a hand with the fdm? would also like it to fly as realistic as possible! But like i said, its going to take me a while! just wanted to let you know what im up to, and maybe when the time comes we can get it to fly nicely to!&lt;br /&gt;
&lt;br /&gt;
Regards&lt;br /&gt;
Daniel&lt;br /&gt;
&lt;br /&gt;
== Moinsen! ==&lt;br /&gt;
&lt;br /&gt;
Ja ja... Die Pflegel unter sich, was?! Ich schaue mich hier gerade noch ein wenig um und entdecke die eine oder andere Baustelle...&lt;br /&gt;
&lt;br /&gt;
Aber ist noch nicht wichtig. Erstmal schauen und fliegen (lernen). Ich arbeite gerade an meiner PPL-V (virtual ;-) )und mache mir Gedanken über eine Verdrahtung des FluSi nach aussen, sprich ein Homecockpit... Das dauert aber noch. Wo kommst Du denn her? --[[User:LarsP|LarsP]] 16:43, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Rembrandt ==&lt;br /&gt;
&lt;br /&gt;
Hi HHS, been a long time no talked! Have you seen this thread: http://equipe-flightgear.forumactif.com/t911-ec-135 ?&lt;br /&gt;
Hope everything is fine with you. All the best. [[User:F-ojac|F-ojac]] 15:51, 8 December 2012 (EST)&lt;br /&gt;
&lt;br /&gt;
== Please let's at least try to keep the village pump page clean ...  ==&lt;br /&gt;
&lt;br /&gt;
:::::: Again: http://wiki.flightgear.org/FlightGear_wiki:Manual_of_Style#Specific_recommendations. &lt;br /&gt;
::::::Then: Please keep your thoughts about the AI system, my intention etc. out here. They do not belong into this discussion here!&lt;br /&gt;
::::::The quotations don't show the complete date - even if at the end you still have to verify every source. That is what I wanted to show you. The fact is, Detlef is wrong here (ground vehicles don't bank), but people reading those quotes in this official wiki thinks it is true. The same Emilian already told you. It seems not that you know much about academic research and writing? A lot of it applies here as well when providing information, especially for a wiki. &lt;br /&gt;
::::::--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 19:02, 19 August 2014 (UTC) &lt;br /&gt;
&lt;br /&gt;
:: look, I was really hoping that we could do without any personal attacks meanwhile  - like I said several times, I have nothing against you and I do appreciate your contributions.&lt;br /&gt;
&lt;br /&gt;
:: and as has been discussed behind the scenes already: I agree that it would be great if we were able to apply wp guidelines/best practices here (which are NOT based on academics BTW!), but unfortunately we're lacking the manpower to do so. &lt;br /&gt;
&lt;br /&gt;
:: Likewise, it would be awesome if we could apply scientific/research guidelines, but we cannot - and the wiki is not just an &amp;quot;encyclopedia&amp;quot;, it is just as much a collaborative platform - one helping to streamline collaboration, not just by creating/maintaining articles, but also by preserving and presenting discussions spread across months, and even years. The devel list, forum and issue tracker are fairly poor tools for this in comparison.&lt;br /&gt;
&lt;br /&gt;
:: Besides, you can expect that most contributors with a professional background in software development will usually hold at least one academic degree in CS or a related field like aerodynamics, maths or physics - so it would be kinda moot, and poor style, to suggest that you'd be the only one &amp;quot;qualified&amp;quot; to judge what qualifies as &amp;quot;academic&amp;quot; (if that's your requirements) and what doesn't.&lt;br /&gt;
&lt;br /&gt;
:: As I have confirmed a number of times already: those pages are not even remotely trying to be &amp;quot;scientific&amp;quot;, &amp;quot;research&amp;quot; or supposed to have any &amp;quot;academic value&amp;quot;. &lt;br /&gt;
:: And I also said that I don't consider them having encyclopedic value.&lt;br /&gt;
:: Primarily, those are summaries - i.e. collections of quotes to serve as stubs that are grown over time. And that can be community-edited/-maintained over time.&lt;br /&gt;
&lt;br /&gt;
:: While we should appreciate the fact that FlightGear is a joint effort that brings people together with hugely varying backgrounds, I wouldn't overestimate your own &amp;quot;academic background&amp;quot; here: &lt;br /&gt;
&lt;br /&gt;
:: Obviously, you are unlikely to see people with a Master's degree in computer science/maths or physics lecturing at a nursing school about doing CPR, putting in a central line or how to do fluid management in burn victims via inntraosseous access. &lt;br /&gt;
:: Thus, I would hope to keep your own background in mind, and in perspective, here - or at least back up statements that would otherwise seem unsubstantiated. &lt;br /&gt;
 &lt;br /&gt;
:: We have people involved in the project who hold multiple degrees, including even several PhDs - don't you think you are embarrassing yourself here by trying to establish academic standards for flight sim documentation just because you are hoping to '''become''' a teacher at a nursing school even though nobody said that we should be having scientific/academic standards in the first place ?&lt;br /&gt;
&lt;br /&gt;
:: As you may have noticed, people's contributions are generally not evaluated based on their academic track record, but based on their merits - and at some point, also on a track record of related contributions - which obviously makes you an authority when it comes to 3D modeling, Blender and helicopters - but doesn't automatically put you in a position to judge the merits of unrelated contributions, and comments made on the devel list or the forum in completely unrelated fields. If something is wrong, then it needs to be fixed - after all, this is a wiki: it would take you ~20 seconds to fix something (even if that just  means removing a whole paragraph), instead of starting, and continuing, a childish flame war that would not suggest any kind of academic background at alll. &lt;br /&gt;
 &lt;br /&gt;
:: In the scope of this particular discussion, this also inevitably means that we'll certainly honor all feedback provided, but as you can see in other areas (sg/fg and fgdata), those who '''do''', get to decide what to do, and how to do it (so far, Gijs &amp;amp; Johan_G are the only ones to actually address one of the issues here). Which ends up meaning that you can be the change you want to see, but you cannot ask others to do your work for you, let alone expect active contributors to be told by &amp;quot;lurkers&amp;quot; what to do. Unfortunately, things don't work that way.&lt;br /&gt;
&lt;br /&gt;
:: Having quality standards, applying/enforcing them and having article ratings is a good idea - but doesn't automatically address the concrete need served by those &amp;quot;collections of quotes&amp;quot;, i.e. targeted at people wanting to get involved looking for related pointers.&lt;br /&gt;
&lt;br /&gt;
:: Seriously, I would appreciate it if we could keep this constructive - if you're having a problem understanding what is said, I encourage you to check out google translate or post in your native language - maybe that will make it easier to bring your point across without getting argumentative.&lt;br /&gt;
&lt;br /&gt;
:: Just imagine for a second that a software developer would show up on a nursing/EMT forum and question all kinds of statements made by EMPs, and then try to substantiate his words by saying that he's teaching CS at a community college - just because some quotes may be outdated meanwhile - would you take that someone seriously ? &lt;br /&gt;
:: Honestly, it is beyond me why you prefer to have this discussion instead of either removing said quotes or  simply getting in touch with DFaber to see if there's a misunderstanding involved here or not. Your whole demeanor would suggest that you are not interested in solving the problem but winning a debate ? Personally, I could not care less: I don't mind seeing those quality standards enforced, I merely said explicitly that we cannot just remove those quotes without coming up with a workaround that works equally well for presenting and preserving frequently raised topics, to provide for a graceful entry point for newcomers interested in certain topics/areas of the project. And please keep in mind that many of those articles are about features/areas that I am  not the slightest bit involved in - so when I spend 20 minutes summarizing repeated discussions, it's mainly so that we can harness the little manpower we have.&lt;br /&gt;
&lt;br /&gt;
:: --[[User:Hooray|Hooray]] ([[User talk:Hooray|talk]]) 20:32, 19 August 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
==DO328==&lt;br /&gt;
Hi!&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich hoffe das hier ist die richtige Seite um auf dein Kommentar in meinem User Talk zu antworten (ich hab das mit dem Wiki noch nicht ganz so verstanden).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum 1. Punkt: Ich hab darum gebeten, dass die 727-Developer sich melden, weil ich nicht herausfinden konnte, wer diese sind, sodass ich sie nicht kontaktieren konnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nun beschreibst du im Rest noch wie viel Arbeit du in die DO328 gesteckt hast. Ich kann jedoch nicht verstehen warum du ein Flugzeug, dass schon so viel Zeit &amp;quot;verbraucht&amp;quot; hat, einfach löschen willst. So wie ich das verstehe, ist das Flugzeug noch nicht perfekt (ich bin mir ziemlich sicher, dass es sehr schwierig bis unmöglich ist, ein perfektes FDM in einem Flugsimulator zu erstellen), jedoch schon in einem sehr guten Zustand. Also wäre es doch sehr schade, dass dieses Projekt einfach gelöscht wird, obwohl schon so viel Zeit hineingesteckt wurde. Wenn du aus beruflichen oder sonstigen Gründen keine Zeit/Kraft hast, dieses Projekt zu koordinieren, dann gib doch bitte die bisher erstellten Daten an die Community weiter, damit deine Arbeit nicht einfach im Nichts verschwindet.&lt;br /&gt;
Viele Grüße&amp;lt;br /&amp;gt;&lt;br /&gt;
D-ECHO&amp;lt;br /&amp;gt;&lt;br /&gt;
:Hi,&lt;br /&gt;
:Es sind nicht viele Entwickler im Forum, ich selber z.B. lese nur ab und zu, bin nicht mehr regsitriert und werde es auch nicht mehr. Gerade wegen den dämlichen Diskussionen. Für Kontaktanfragen zu Modellen ist die Mailing-list der entsprechnde Ort, da fast jeder Dveloiper die Mailing-List verfolgt. &lt;br /&gt;
:Ich habe nur die Repository der Dornier 328 gelöscht, die Daten sind auf meinem Rechner. Was gestoppt ist, ist die Entwicklung selber. Klar ist ein perfektes FDM nicht möglich. Aber es sollte zumindest plausibel sein (flugfähig --&amp;gt; nutzbar --&amp;gt; plausibel --&amp;gt; realistisch--&amp;gt; entspricht in allem dem Original)&lt;br /&gt;
:Daten an die Community weitergeben habe ich anfangs erachtet. Musste aber bei anderen feststellen, das oft auch Unfug mit betrieben wurde. Ich habe eben viel Arbeit reingesteckt, und die möchte ich dann aber auch nicht mißbraucht sehen. Und dann ist da was, was in der ganzen Diskussion um FGMembers eben vergessen wird (wobei Detlef Faber dies sogar deutlich nannte): es geht um Austausch und Kommunikation und einen gewissen Respekt gegenüber den Autoren und deren Zielen. Was beabsichtigte der Originalautor, was für Ziele hatte er, und welche Informationen hat er gesammelt? Das fehlt mir in der Community. OpenSource heißt nicht einfach blind etwas übernehmen. &lt;br /&gt;
:Momentan warte ich mal ab, was sich tut. Ich sehe es so, Wenn jemand ernsthaft das Modell weiterentwicklen will, dann wird er sich melden. &lt;br /&gt;
:Grüße HHS&lt;br /&gt;
&lt;br /&gt;
::Hi,&lt;br /&gt;
::Darf man fragen, welcher &amp;quot;Unsinn&amp;quot; mit deinen Daten angestellt wurde? Und in welchem Zustand sich das Flugzeug im Moment nun eigentlich befindet?&lt;br /&gt;
::Viele Grüße&lt;br /&gt;
::D-ECHO&lt;br /&gt;
&lt;br /&gt;
:::Hi,&lt;br /&gt;
:::z.B. eine ältere Version der EC130 B4 habe ich unter GNU GPL an jemanden für ein Spiel weitergegeben. Kurz danach tauchte das Model unter völlig inkompatiblen Lizenzen und Autorennamen woanders auf. Ist zwar schön, wenn das Model so beliebt ist, aber trotzdem eben ein Plagiat. OpenSource-Produkte sind nie vor so etwas sicher, das ist mir klar. Aber profitieren sollte das eigene Projekt trotzdem vom Model, bevor damit Schindluder getrieben wird.&lt;br /&gt;
:::Grüße &lt;br /&gt;
:::HHS&lt;br /&gt;
&lt;br /&gt;
::::Hi,&lt;br /&gt;
::::wäre es vielleicht eine Lösung das Modell zunächst unter eine strikte Lizenz zu stellen, die jede Weitergabe oder Veränderung ausdrücklich verbietet, solange das FDM noch nicht gut genug ist? So würde deine tolle Arbeit zumindest nicht Sinnlos gewesen sein und nur so ist es für Andere überhaupt möglich, sich das FDM anzuschauen.&lt;br /&gt;
::::Viele Grüße,&lt;br /&gt;
::::xcvb&lt;br /&gt;
&lt;br /&gt;
:::::Hi,&lt;br /&gt;
:::::Leider nicht möglich, da ich etliche Code-Schnipsel von anderen unter GNU-GPL stehenden Flugzeugen drin habe. Ich war aber in der Zwischenzeit fähig das FDM so zu gestalten, dass sie nun den mir bekannten Daten entspricht. Zum aktuellen Status: FDM soweit komplett; prop-files brauchen an einer bestimmten Stelle noch etwas Arbeit; EICAS fehlt, Overheadpanel fehlt. In 3d-Sachen bin ich fix, aber zur Zeit bin ich mit der Cessna 182 S sowie beruflichen Dingen ganz gut ausgelastet, so dass es noch ein wenig dauern kann. Aber aufgeben will ich das Teil definitiv nicht, zuviel Zeit investiert und ich hänge daran. Und wenn der franz. User Patten es mir erlaubt, dann wird das FMC seiner Citation X verbaut. &lt;br /&gt;
:::::Viele Grüße&lt;br /&gt;
:::::Heiko--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 10:33, 7 April 2016 (EDT)&lt;br /&gt;
&lt;br /&gt;
::::::Hi,&lt;br /&gt;
::::::die Sache mit dem FDM ist ja schonmal erfreulich. Hoffentlich hast du ein gutes Backup deiner Daten gemacht. Was hältst du von der Idee einen Wettbewerb zu starten: Wenn es jemand schafft ein gutes Overheadpanel zu erschaffen, dann veröffentlichst du das Modell, ansonsten müssen wir warten? Ich bin zwar nicht sonderlich gut in solchen Sachen, aber vielleicht gibt es ja jemanden der talentiert ist, für den das ein Anreiz ist.&lt;br /&gt;
::::::Viele Grüße,&lt;br /&gt;
::::::xcvb&lt;br /&gt;
&lt;br /&gt;
== Your recent ASW20 screenshots ==&lt;br /&gt;
[[:File:ASW20_summerday1.jpg]], [[:File:ASW20 wingview.jpg]] and [[:File:ASW20 summerday.jpg]].&lt;br /&gt;
&lt;br /&gt;
They look exceptionally realistic!  Since I am on a rather weak laptop and can not run FlightGear with all settings maxed out, I enjoy amazing screenshots like that even more.  FlightGear sure has gotten better looking over the years. :-)&lt;br /&gt;
&lt;br /&gt;
—[[User:Johan G|Johan G]] ([[User_talk:Johan_G|Talk]] | [[Special:Contributions/Johan_G|contribs]]) 00:13, 7 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Thanks a lot! I must admit I edited the images in brightness and contrast.&lt;br /&gt;
:I'm using a rather weak laptop as well. Tree range set down to 3000, no random buildings and objects, cloud density 25%, with all shader sliders maxed out I only get 7-10fps. Unfortunately my desktop pc isn't much better any more and I'm always surprised to see people with 65fps everything maxed out. FlightGear looks indeed really nice, but that costs a lot of perfomance.&lt;br /&gt;
:Cheers&lt;br /&gt;
:--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 09:30, 7 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Just saw the last post with the great screenshots... perhaps it's an idea to uploading them to the main Wikipedia FlightGear page? Many of those screenshots are several years old and it's nice to present a up-to-date image of the software :) I'm not quite able to squeeze out enough of my setup to produce the same results.&lt;br /&gt;
&lt;br /&gt;
{{unsigned|17:03, 5 May 2015‎|Manfred}}&lt;br /&gt;
&lt;br /&gt;
== ASK21 ==&lt;br /&gt;
&lt;br /&gt;
Moin HHS mal wieder :D&lt;br /&gt;
ich würde gerne die ASK21, die du 2006 gemacht hast, verbessern und wollte dich daher fragen, ob das für dich ok ist und ob du noch an dem Model arbeitest (damit nichts doppelt gemacht wird ;))&lt;br /&gt;
LG&lt;br /&gt;
D-ECHO&lt;br /&gt;
&lt;br /&gt;
== MBB Bo 105 ==&lt;br /&gt;
If you want to run me down, then I'm sure you can find much better examples than this to work with.  Maybe I have offended you somewhere else? Whatever.  The quote (extract) does '''NOT''' state that the 45% back cyclic was not &amp;quot;''completly true and realistic''&amp;quot; but (basically for mechanical reasons of a self-centering computer joystick) that it made it a difficult choice for a beginner.  My comments are also an excerpt from a longer discussion, the context of which is not made obvious here. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;I believe the Bo105 also had AFCS&amp;quot;  is used as an example of one of the &amp;quot;false assumptions about the realism&amp;quot;.  How does a passing comment on a message board achieve such significance? A mistaken belief (of mine) that could have easily and diplomatically corrected?&lt;br /&gt;
&lt;br /&gt;
The force-trim instructions appear to have been added to the Wiki after my comment (Revision as of 13:52, 6 December 2015).  Strange, that.  Could have just said something like &lt;br /&gt;
&lt;br /&gt;
''Thanks to Warty for pointing out that the typical 45% back cyclic makes it a difficult choice for a beginner.  However, this can be made easier by using what creates a similar effect to the follow up trim system described in the MBB training manual. FGFS comes with a generic AutoTrim-function . . . .''&lt;br /&gt;
&lt;br /&gt;
And then there's the digs against FGUK (relating to a different aircraft). You seem to be using this Wiki as a platform for a personal vendetta.  Is that what it's meant to be for? Hopefully, you will edit the offending page yourself rather than me having to do it for you.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 05:55, 18 October 2016 (EDT)&lt;br /&gt;
&lt;br /&gt;
:Warty,&lt;br /&gt;
:&lt;br /&gt;
:Yes, I should have known that the way I cited your forum entry and my answer could you and others take the wrong way. I'm sorry for that.&lt;br /&gt;
:But who can know that your comment was an excerpt from a longer discussion? I couldn't see it. Maybe the same way you could not see that your regarding forum entry perfectly summed up the confusion and feedback about the characteristics of the BO105-fdm I often recieved. So it was for me a good reason to point to the realism of the fdm. Similar like Hooray usually does it. And your comment was good enough to prompt finally adding the force trim instructions. Nothing strange about.&lt;br /&gt;
:Again, I'm sorry, it wasn't meant to provoke you.&lt;br /&gt;
:&lt;br /&gt;
:BUT: I percieve your message here as very agressive and blackmailing. &lt;br /&gt;
:Seriously, Do you really think your tone is appropriate to this issue? Especially as we never met before.&lt;br /&gt;
:And this &amp;quot;the digs against FGUK (relating to a different aircraft).&amp;quot; dissapoints me a lot, as it is indefinite and vague. Which aircraft? When? Where? I can't take this serious. The same about the &amp;quot;vendetta&amp;quot;. &lt;br /&gt;
:But I really hope you that you didn't forget, that it was actually me who modelled and then handed over the Panavia Tornado to FGUK. And provided help to your first helicopters. That even some fdms of your first helicopters are based on my works.&lt;br /&gt;
:Is this the way you say Thank You at FGUK? Since you seems to represent FGUK here, it cast a bit damning light on your group for me now.&lt;br /&gt;
:&lt;br /&gt;
: I think I have a way how we can solve this issue. But I want answers to my questions above and a big sorry before I tone down the regarding part, so it doesn't provoke you any more.&lt;br /&gt;
&lt;br /&gt;
:--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 11:44, 18 October 2016 (EDT)&lt;br /&gt;
&lt;br /&gt;
::&amp;quot;''The 5% of the FGUK Version's EC145 is unrealistic btw. This helicopter (EC145 is just a maketing name. The real name is BK117 C2) has the same, but scaled, rotor head and rigging like the BO105. So it should have the same 45% back cyclic like the BO105. According to to Walter Bittners &amp;quot;Flugmechanik der Hubschrauber&amp;quot; this is the case. Depending on CoG, loads, and flight states the position of the cyclic will vary a lot anyway, so a 0% cyclic at lift-off would make problems on other flight states like fast cruise.''&amp;quot;&lt;br /&gt;
what has that got to do with the Bo105??&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''Since you seems to represent FGUK here''&amp;quot; - No, no, no, no! I absolutely do '''NOT''' represent FGUK here. I won't comment any more on your thoughts about FGUK.&lt;br /&gt;
&lt;br /&gt;
You used me as a source without first checking/confirming that my comments were a valid source for your argument.  It was just something to hang your argument on - cherry picking. I know this is not Wikipedia but it's still shoddy editing.  I don't need your approval to make changes so I'm hoping that you will do the decent thing and make the changes so that I don't need to.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:19, 18 October 2016 (EDT)&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User_talk:HHS&amp;diff=105007</id>
		<title>User talk:HHS</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User_talk:HHS&amp;diff=105007"/>
		<updated>2016-10-18T09:55:07Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* MBB_Bo_105 */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello again Heiko&lt;br /&gt;
&lt;br /&gt;
Iv started working on the md500e, heres a screenshot from blender of the progress so far, http://imagebin.org/58537, its going to take me quite some time! i definitely want it to be as detailed as possible, especially in the cockpit! I was hoping you and/or Maik might want to give me a hand with the fdm? would also like it to fly as realistic as possible! But like i said, its going to take me a while! just wanted to let you know what im up to, and maybe when the time comes we can get it to fly nicely to!&lt;br /&gt;
&lt;br /&gt;
Regards&lt;br /&gt;
Daniel&lt;br /&gt;
&lt;br /&gt;
== Moinsen! ==&lt;br /&gt;
&lt;br /&gt;
Ja ja... Die Pflegel unter sich, was?! Ich schaue mich hier gerade noch ein wenig um und entdecke die eine oder andere Baustelle...&lt;br /&gt;
&lt;br /&gt;
Aber ist noch nicht wichtig. Erstmal schauen und fliegen (lernen). Ich arbeite gerade an meiner PPL-V (virtual ;-) )und mache mir Gedanken über eine Verdrahtung des FluSi nach aussen, sprich ein Homecockpit... Das dauert aber noch. Wo kommst Du denn her? --[[User:LarsP|LarsP]] 16:43, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Rembrandt ==&lt;br /&gt;
&lt;br /&gt;
Hi HHS, been a long time no talked! Have you seen this thread: http://equipe-flightgear.forumactif.com/t911-ec-135 ?&lt;br /&gt;
Hope everything is fine with you. All the best. [[User:F-ojac|F-ojac]] 15:51, 8 December 2012 (EST)&lt;br /&gt;
&lt;br /&gt;
== Please let's at least try to keep the village pump page clean ...  ==&lt;br /&gt;
&lt;br /&gt;
:::::: Again: http://wiki.flightgear.org/FlightGear_wiki:Manual_of_Style#Specific_recommendations. &lt;br /&gt;
::::::Then: Please keep your thoughts about the AI system, my intention etc. out here. They do not belong into this discussion here!&lt;br /&gt;
::::::The quotations don't show the complete date - even if at the end you still have to verify every source. That is what I wanted to show you. The fact is, Detlef is wrong here (ground vehicles don't bank), but people reading those quotes in this official wiki thinks it is true. The same Emilian already told you. It seems not that you know much about academic research and writing? A lot of it applies here as well when providing information, especially for a wiki. &lt;br /&gt;
::::::--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 19:02, 19 August 2014 (UTC) &lt;br /&gt;
&lt;br /&gt;
:: look, I was really hoping that we could do without any personal attacks meanwhile  - like I said several times, I have nothing against you and I do appreciate your contributions.&lt;br /&gt;
&lt;br /&gt;
:: and as has been discussed behind the scenes already: I agree that it would be great if we were able to apply wp guidelines/best practices here (which are NOT based on academics BTW!), but unfortunately we're lacking the manpower to do so. &lt;br /&gt;
&lt;br /&gt;
:: Likewise, it would be awesome if we could apply scientific/research guidelines, but we cannot - and the wiki is not just an &amp;quot;encyclopedia&amp;quot;, it is just as much a collaborative platform - one helping to streamline collaboration, not just by creating/maintaining articles, but also by preserving and presenting discussions spread across months, and even years. The devel list, forum and issue tracker are fairly poor tools for this in comparison.&lt;br /&gt;
&lt;br /&gt;
:: Besides, you can expect that most contributors with a professional background in software development will usually hold at least one academic degree in CS or a related field like aerodynamics, maths or physics - so it would be kinda moot, and poor style, to suggest that you'd be the only one &amp;quot;qualified&amp;quot; to judge what qualifies as &amp;quot;academic&amp;quot; (if that's your requirements) and what doesn't.&lt;br /&gt;
&lt;br /&gt;
:: As I have confirmed a number of times already: those pages are not even remotely trying to be &amp;quot;scientific&amp;quot;, &amp;quot;research&amp;quot; or supposed to have any &amp;quot;academic value&amp;quot;. &lt;br /&gt;
:: And I also said that I don't consider them having encyclopedic value.&lt;br /&gt;
:: Primarily, those are summaries - i.e. collections of quotes to serve as stubs that are grown over time. And that can be community-edited/-maintained over time.&lt;br /&gt;
&lt;br /&gt;
:: While we should appreciate the fact that FlightGear is a joint effort that brings people together with hugely varying backgrounds, I wouldn't overestimate your own &amp;quot;academic background&amp;quot; here: &lt;br /&gt;
&lt;br /&gt;
:: Obviously, you are unlikely to see people with a Master's degree in computer science/maths or physics lecturing at a nursing school about doing CPR, putting in a central line or how to do fluid management in burn victims via inntraosseous access. &lt;br /&gt;
:: Thus, I would hope to keep your own background in mind, and in perspective, here - or at least back up statements that would otherwise seem unsubstantiated. &lt;br /&gt;
 &lt;br /&gt;
:: We have people involved in the project who hold multiple degrees, including even several PhDs - don't you think you are embarrassing yourself here by trying to establish academic standards for flight sim documentation just because you are hoping to '''become''' a teacher at a nursing school even though nobody said that we should be having scientific/academic standards in the first place ?&lt;br /&gt;
&lt;br /&gt;
:: As you may have noticed, people's contributions are generally not evaluated based on their academic track record, but based on their merits - and at some point, also on a track record of related contributions - which obviously makes you an authority when it comes to 3D modeling, Blender and helicopters - but doesn't automatically put you in a position to judge the merits of unrelated contributions, and comments made on the devel list or the forum in completely unrelated fields. If something is wrong, then it needs to be fixed - after all, this is a wiki: it would take you ~20 seconds to fix something (even if that just  means removing a whole paragraph), instead of starting, and continuing, a childish flame war that would not suggest any kind of academic background at alll. &lt;br /&gt;
 &lt;br /&gt;
:: In the scope of this particular discussion, this also inevitably means that we'll certainly honor all feedback provided, but as you can see in other areas (sg/fg and fgdata), those who '''do''', get to decide what to do, and how to do it (so far, Gijs &amp;amp; Johan_G are the only ones to actually address one of the issues here). Which ends up meaning that you can be the change you want to see, but you cannot ask others to do your work for you, let alone expect active contributors to be told by &amp;quot;lurkers&amp;quot; what to do. Unfortunately, things don't work that way.&lt;br /&gt;
&lt;br /&gt;
:: Having quality standards, applying/enforcing them and having article ratings is a good idea - but doesn't automatically address the concrete need served by those &amp;quot;collections of quotes&amp;quot;, i.e. targeted at people wanting to get involved looking for related pointers.&lt;br /&gt;
&lt;br /&gt;
:: Seriously, I would appreciate it if we could keep this constructive - if you're having a problem understanding what is said, I encourage you to check out google translate or post in your native language - maybe that will make it easier to bring your point across without getting argumentative.&lt;br /&gt;
&lt;br /&gt;
:: Just imagine for a second that a software developer would show up on a nursing/EMT forum and question all kinds of statements made by EMPs, and then try to substantiate his words by saying that he's teaching CS at a community college - just because some quotes may be outdated meanwhile - would you take that someone seriously ? &lt;br /&gt;
:: Honestly, it is beyond me why you prefer to have this discussion instead of either removing said quotes or  simply getting in touch with DFaber to see if there's a misunderstanding involved here or not. Your whole demeanor would suggest that you are not interested in solving the problem but winning a debate ? Personally, I could not care less: I don't mind seeing those quality standards enforced, I merely said explicitly that we cannot just remove those quotes without coming up with a workaround that works equally well for presenting and preserving frequently raised topics, to provide for a graceful entry point for newcomers interested in certain topics/areas of the project. And please keep in mind that many of those articles are about features/areas that I am  not the slightest bit involved in - so when I spend 20 minutes summarizing repeated discussions, it's mainly so that we can harness the little manpower we have.&lt;br /&gt;
&lt;br /&gt;
:: --[[User:Hooray|Hooray]] ([[User talk:Hooray|talk]]) 20:32, 19 August 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
==DO328==&lt;br /&gt;
Hi!&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich hoffe das hier ist die richtige Seite um auf dein Kommentar in meinem User Talk zu antworten (ich hab das mit dem Wiki noch nicht ganz so verstanden).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Zum 1. Punkt: Ich hab darum gebeten, dass die 727-Developer sich melden, weil ich nicht herausfinden konnte, wer diese sind, sodass ich sie nicht kontaktieren konnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
Nun beschreibst du im Rest noch wie viel Arbeit du in die DO328 gesteckt hast. Ich kann jedoch nicht verstehen warum du ein Flugzeug, dass schon so viel Zeit &amp;quot;verbraucht&amp;quot; hat, einfach löschen willst. So wie ich das verstehe, ist das Flugzeug noch nicht perfekt (ich bin mir ziemlich sicher, dass es sehr schwierig bis unmöglich ist, ein perfektes FDM in einem Flugsimulator zu erstellen), jedoch schon in einem sehr guten Zustand. Also wäre es doch sehr schade, dass dieses Projekt einfach gelöscht wird, obwohl schon so viel Zeit hineingesteckt wurde. Wenn du aus beruflichen oder sonstigen Gründen keine Zeit/Kraft hast, dieses Projekt zu koordinieren, dann gib doch bitte die bisher erstellten Daten an die Community weiter, damit deine Arbeit nicht einfach im Nichts verschwindet.&lt;br /&gt;
Viele Grüße&amp;lt;br /&amp;gt;&lt;br /&gt;
D-ECHO&amp;lt;br /&amp;gt;&lt;br /&gt;
:Hi,&lt;br /&gt;
:Es sind nicht viele Entwickler im Forum, ich selber z.B. lese nur ab und zu, bin nicht mehr regsitriert und werde es auch nicht mehr. Gerade wegen den dämlichen Diskussionen. Für Kontaktanfragen zu Modellen ist die Mailing-list der entsprechnde Ort, da fast jeder Dveloiper die Mailing-List verfolgt. &lt;br /&gt;
:Ich habe nur die Repository der Dornier 328 gelöscht, die Daten sind auf meinem Rechner. Was gestoppt ist, ist die Entwicklung selber. Klar ist ein perfektes FDM nicht möglich. Aber es sollte zumindest plausibel sein (flugfähig --&amp;gt; nutzbar --&amp;gt; plausibel --&amp;gt; realistisch--&amp;gt; entspricht in allem dem Original)&lt;br /&gt;
:Daten an die Community weitergeben habe ich anfangs erachtet. Musste aber bei anderen feststellen, das oft auch Unfug mit betrieben wurde. Ich habe eben viel Arbeit reingesteckt, und die möchte ich dann aber auch nicht mißbraucht sehen. Und dann ist da was, was in der ganzen Diskussion um FGMembers eben vergessen wird (wobei Detlef Faber dies sogar deutlich nannte): es geht um Austausch und Kommunikation und einen gewissen Respekt gegenüber den Autoren und deren Zielen. Was beabsichtigte der Originalautor, was für Ziele hatte er, und welche Informationen hat er gesammelt? Das fehlt mir in der Community. OpenSource heißt nicht einfach blind etwas übernehmen. &lt;br /&gt;
:Momentan warte ich mal ab, was sich tut. Ich sehe es so, Wenn jemand ernsthaft das Modell weiterentwicklen will, dann wird er sich melden. &lt;br /&gt;
:Grüße HHS&lt;br /&gt;
&lt;br /&gt;
::Hi,&lt;br /&gt;
::Darf man fragen, welcher &amp;quot;Unsinn&amp;quot; mit deinen Daten angestellt wurde? Und in welchem Zustand sich das Flugzeug im Moment nun eigentlich befindet?&lt;br /&gt;
::Viele Grüße&lt;br /&gt;
::D-ECHO&lt;br /&gt;
&lt;br /&gt;
:::Hi,&lt;br /&gt;
:::z.B. eine ältere Version der EC130 B4 habe ich unter GNU GPL an jemanden für ein Spiel weitergegeben. Kurz danach tauchte das Model unter völlig inkompatiblen Lizenzen und Autorennamen woanders auf. Ist zwar schön, wenn das Model so beliebt ist, aber trotzdem eben ein Plagiat. OpenSource-Produkte sind nie vor so etwas sicher, das ist mir klar. Aber profitieren sollte das eigene Projekt trotzdem vom Model, bevor damit Schindluder getrieben wird.&lt;br /&gt;
:::Grüße &lt;br /&gt;
:::HHS&lt;br /&gt;
&lt;br /&gt;
::::Hi,&lt;br /&gt;
::::wäre es vielleicht eine Lösung das Modell zunächst unter eine strikte Lizenz zu stellen, die jede Weitergabe oder Veränderung ausdrücklich verbietet, solange das FDM noch nicht gut genug ist? So würde deine tolle Arbeit zumindest nicht Sinnlos gewesen sein und nur so ist es für Andere überhaupt möglich, sich das FDM anzuschauen.&lt;br /&gt;
::::Viele Grüße,&lt;br /&gt;
::::xcvb&lt;br /&gt;
&lt;br /&gt;
:::::Hi,&lt;br /&gt;
:::::Leider nicht möglich, da ich etliche Code-Schnipsel von anderen unter GNU-GPL stehenden Flugzeugen drin habe. Ich war aber in der Zwischenzeit fähig das FDM so zu gestalten, dass sie nun den mir bekannten Daten entspricht. Zum aktuellen Status: FDM soweit komplett; prop-files brauchen an einer bestimmten Stelle noch etwas Arbeit; EICAS fehlt, Overheadpanel fehlt. In 3d-Sachen bin ich fix, aber zur Zeit bin ich mit der Cessna 182 S sowie beruflichen Dingen ganz gut ausgelastet, so dass es noch ein wenig dauern kann. Aber aufgeben will ich das Teil definitiv nicht, zuviel Zeit investiert und ich hänge daran. Und wenn der franz. User Patten es mir erlaubt, dann wird das FMC seiner Citation X verbaut. &lt;br /&gt;
:::::Viele Grüße&lt;br /&gt;
:::::Heiko--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 10:33, 7 April 2016 (EDT)&lt;br /&gt;
&lt;br /&gt;
::::::Hi,&lt;br /&gt;
::::::die Sache mit dem FDM ist ja schonmal erfreulich. Hoffentlich hast du ein gutes Backup deiner Daten gemacht. Was hältst du von der Idee einen Wettbewerb zu starten: Wenn es jemand schafft ein gutes Overheadpanel zu erschaffen, dann veröffentlichst du das Modell, ansonsten müssen wir warten? Ich bin zwar nicht sonderlich gut in solchen Sachen, aber vielleicht gibt es ja jemanden der talentiert ist, für den das ein Anreiz ist.&lt;br /&gt;
::::::Viele Grüße,&lt;br /&gt;
::::::xcvb&lt;br /&gt;
&lt;br /&gt;
== Your recent ASW20 screenshots ==&lt;br /&gt;
[[:File:ASW20_summerday1.jpg]], [[:File:ASW20 wingview.jpg]] and [[:File:ASW20 summerday.jpg]].&lt;br /&gt;
&lt;br /&gt;
They look exceptionally realistic!  Since I am on a rather weak laptop and can not run FlightGear with all settings maxed out, I enjoy amazing screenshots like that even more.  FlightGear sure has gotten better looking over the years. :-)&lt;br /&gt;
&lt;br /&gt;
—[[User:Johan G|Johan G]] ([[User_talk:Johan_G|Talk]] | [[Special:Contributions/Johan_G|contribs]]) 00:13, 7 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Thanks a lot! I must admit I edited the images in brightness and contrast.&lt;br /&gt;
:I'm using a rather weak laptop as well. Tree range set down to 3000, no random buildings and objects, cloud density 25%, with all shader sliders maxed out I only get 7-10fps. Unfortunately my desktop pc isn't much better any more and I'm always surprised to see people with 65fps everything maxed out. FlightGear looks indeed really nice, but that costs a lot of perfomance.&lt;br /&gt;
:Cheers&lt;br /&gt;
:--[[User:HHS|HHS]] ([[User talk:HHS|talk]]) 09:30, 7 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Just saw the last post with the great screenshots... perhaps it's an idea to uploading them to the main Wikipedia FlightGear page? Many of those screenshots are several years old and it's nice to present a up-to-date image of the software :) I'm not quite able to squeeze out enough of my setup to produce the same results.&lt;br /&gt;
&lt;br /&gt;
{{unsigned|17:03, 5 May 2015‎|Manfred}}&lt;br /&gt;
&lt;br /&gt;
== ASK21 ==&lt;br /&gt;
&lt;br /&gt;
Moin HHS mal wieder :D&lt;br /&gt;
ich würde gerne die ASK21, die du 2006 gemacht hast, verbessern und wollte dich daher fragen, ob das für dich ok ist und ob du noch an dem Model arbeitest (damit nichts doppelt gemacht wird ;))&lt;br /&gt;
LG&lt;br /&gt;
D-ECHO&lt;br /&gt;
&lt;br /&gt;
== MBB_Bo_105 ==&lt;br /&gt;
&lt;br /&gt;
If you want to run me down, then I'm sure you can find much better examples than this to work with.  Maybe I have offended you somewhere else? Whatever.  The quote (extract) does '''NOT''' state that the 45% back cyclic was not &amp;quot;''completly true and realistic''&amp;quot; but (basically for mechanical reasons of a self-centering computer joystick) that it made it a difficult choice for a beginner.  My comments are also an excerpt from a longer discussion, the context of which is not made obvious here. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;I believe the Bo105 also had AFCS&amp;quot;  is used as an example of one of the &amp;quot;false assumptions about the realism&amp;quot;.  How does a passing comment on a message board achieve such significance? A mistaken belief (of mine) that could have easily and diplomatically corrected?&lt;br /&gt;
&lt;br /&gt;
The force-trim instructions appear to have been added to the Wiki after my comment (Revision as of 13:52, 6 December 2015).  Strange, that.  Could have just said something like &lt;br /&gt;
&lt;br /&gt;
''Thanks to Warty for pointing out that the typical 45% back cyclic makes it a difficult choice for a beginner.  However, this can be made easier by using what creates a similar effect to the follow up trim system described in the MBB training manual. FGFS comes with a generic AutoTrim-function . . . .''&lt;br /&gt;
&lt;br /&gt;
And then there's the digs against FGUK (relating to a different aircraft). You seem to be using this Wiki as a platform for a personal vendetta.  Is that what it's meant to be for? Hopefully, you will edit the offending page yourself rather than me having to do it for you.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
&lt;br /&gt;
[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 05:55, 18 October 2016 (EDT)&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92179</id>
		<title>User:Warty/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92179"/>
		<updated>2016-02-01T15:05:26Z</updated>

		<summary type="html">&lt;p&gt;Warty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For testing and drafts&lt;br /&gt;
&lt;br /&gt;
SU-37 Variant&lt;br /&gt;
&lt;br /&gt;
modified from F-14.....&lt;br /&gt;
&lt;br /&gt;
== Keyboard controls ==&lt;br /&gt;
=== Flight controls ===&lt;br /&gt;
{| &lt;br /&gt;
|{{Key press|Home}}&lt;br /&gt;
|Take-off: sets 250kts as the target speed in auto-pilot, engages speed-with-throttle, takes the brakes OFF &amp;amp; sets flaps to 20%.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|PgUp}}&lt;br /&gt;
|Climb-out: sets 600kts as the target speed in auto-pilot, engages speed-with-throttle, sets flaps to 0%.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|PgDn}}&lt;br /&gt;
|Approach: sets 200kts as the target speed in auto-pilot, engages speed-with-throttle.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|End}}&lt;br /&gt;
|Landing: sets 130kts as the target speed in auto-pilot, engages speed-with-throttle, puts the brakes ON &amp;amp; sets flaps to 60%. Will also lower arrester-hook if an aircraft carrier is within 10nm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Lower flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Raise flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Space}}&lt;br /&gt;
|Toggle speed brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|c}}&lt;br /&gt;
|Canopy toggle&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|l}}&lt;br /&gt;
|Landing light toggle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Automatic flight controls ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|a}}&lt;br /&gt;
|Toggle autopilot altitude mode: sets current altitude in AP&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|h}}&lt;br /&gt;
| Toggle autopilot heading mode: sets current heading in AP&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|s}}&lt;br /&gt;
|Toggle autopilot Speed lock: sets current speed in AP&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Cut power and AP: also applies all brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|+}}&lt;br /&gt;
|Set  AP to current values (speed, heading and altitude)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HSD - radar and RWR ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|h}}&lt;br /&gt;
|Cycles through HSD modes: radar - compas - ECM (RWR)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|e}}&lt;br /&gt;
|Decrease Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|r}}&lt;br /&gt;
|Increase Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|q}}&lt;br /&gt;
|Toggles Radar Standby Mode. In standby mode the radar doesn't emit and the &amp;quot;STAND BY&amp;quot; words are displayed on the HSD screen when in TID mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Carrier operations ===&lt;br /&gt;
See also [[Howto:Carrier]] and [[Carrier over MP]]&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Shift|o}}&lt;br /&gt;
|Lower the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|o}}&lt;br /&gt;
|Raise the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|l}}&lt;br /&gt;
|Engage launch bar (keep holding until engaged)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|c}}&lt;br /&gt;
|Release catapult&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Weapons ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|w}}&lt;br /&gt;
|Cycle through master arm switch modes (see master arm switch in cockpit).&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|w}}&lt;br /&gt;
|Cycle Stick Weapon Mode Selector (see Weapon Mode knob selector on side of joystick in cockpit).  Four positions: Off, Gun, SW, SP-PH.  &lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|m}}&lt;br /&gt;
|Toggle AIM-9 selection (must have at least one AIM-9 loaded through Tomcat Controls/Fuel &amp;amp; Stores menu)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|e}}&lt;br /&gt;
|Trigger M61A1 Vulcan gun or AIM-9 missiles (depending on stick weapon mode selection)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92178</id>
		<title>User:Warty/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92178"/>
		<updated>2016-02-01T14:55:08Z</updated>

		<summary type="html">&lt;p&gt;Warty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For testing and drafts&lt;br /&gt;
&lt;br /&gt;
SU-37 Variant&lt;br /&gt;
&lt;br /&gt;
modified from F-14.....&lt;br /&gt;
&lt;br /&gt;
== Keyboard controls ==&lt;br /&gt;
=== Flight controls ===&lt;br /&gt;
{| &lt;br /&gt;
|{{Key press|Home}}&lt;br /&gt;
|Take-off: sets 250kts as the target speed in auto-pilot, engages speed-with-throttle, takes the brakes OFF &amp;amp; sets flaps to 20%.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|PgUp}}&lt;br /&gt;
|Climb-out: sets 600kts as the target speed in auto-pilot, engages speed-with-throttle, sets flaps to 0%.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|PgDn}}&lt;br /&gt;
|Approach: sets 200kts as the target speed in auto-pilot, engages speed-with-throttle.&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|End}}&lt;br /&gt;
|Landing: sets 130kts as the target speed in auto-pilot, engages speed-with-throttle, puts the brakes ON &amp;amp; sets flaps to 60%. Will also lower arrester-hook if an aircraft carrier is within 10nm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Lower flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Raise flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Space}}&lt;br /&gt;
|Toggle speed brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|k}}&lt;br /&gt;
|Increase speed brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|j}}&lt;br /&gt;
|Decrease speed brakes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Automatic flight controls ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|a}}&lt;br /&gt;
|Toggle autopilot altitude mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|a}}&lt;br /&gt;
|Toggle APC (Landing Automatic Power Control)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|h}}&lt;br /&gt;
|Cycle autopilot heading mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|t}}&lt;br /&gt;
|Toggle {{Wikipedia|Aircraft flight control systems|AFCS] (Defaut Attitude Mode)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Engage AFCS Altitude Mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|s}}&lt;br /&gt;
|Toggle ground spoilers armed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HSD - radar and RWR ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|h}}&lt;br /&gt;
|Cycles through HSD modes: radar - compas - ECM (RWR)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|e}}&lt;br /&gt;
|Decrease Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|r}}&lt;br /&gt;
|Increase Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|q}}&lt;br /&gt;
|Toggles Radar Standby Mode. In standby mode the radar doesn't emit and the &amp;quot;STAND BY&amp;quot; words are displayed on the HSD screen when in TID mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Carrier operations ===&lt;br /&gt;
See also [[Howto:Carrier]] and [[Carrier over MP]]&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Shift|o}}&lt;br /&gt;
|Lower the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|o}}&lt;br /&gt;
|Raise the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|l}}&lt;br /&gt;
|Engage launch bar (keep holding until engaged)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|c}}&lt;br /&gt;
|Release catapult&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Weapons ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|w}}&lt;br /&gt;
|Cycle through master arm switch modes (see master arm switch in cockpit).&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|w}}&lt;br /&gt;
|Cycle Stick Weapon Mode Selector (see Weapon Mode knob selector on side of joystick in cockpit).  Four positions: Off, Gun, SW, SP-PH.  &lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|m}}&lt;br /&gt;
|Toggle AIM-9 selection (must have at least one AIM-9 loaded through Tomcat Controls/Fuel &amp;amp; Stores menu)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|e}}&lt;br /&gt;
|Trigger M61A1 Vulcan gun or AIM-9 missiles (depending on stick weapon mode selection)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92115</id>
		<title>User:Warty/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=92115"/>
		<updated>2016-01-31T15:01:11Z</updated>

		<summary type="html">&lt;p&gt;Warty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For testing and drafts&lt;br /&gt;
&lt;br /&gt;
From F-14.....&lt;br /&gt;
&lt;br /&gt;
== Keyboard controls ==&lt;br /&gt;
=== Flight controls ===&lt;br /&gt;
{| &lt;br /&gt;
|{{Key press|Home}}&lt;br /&gt;
|Increase elevator trim&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|End}}&lt;br /&gt;
|Decrease elevator trim&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} or {{Key press|f}}&lt;br /&gt;
|Lower flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;}} or {{Key press|Shift|f}}&lt;br /&gt;
|Raise flaps&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|b}}&lt;br /&gt;
|Toggle speed brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|k}}&lt;br /&gt;
|Increase speed brakes&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|j}}&lt;br /&gt;
|Decrease speed brakes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Automatic flight controls ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|a}}&lt;br /&gt;
|Toggle autopilot altitude mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|a}}&lt;br /&gt;
|Toggle APC (Landing Automatic Power Control)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|h}}&lt;br /&gt;
|Cycle autopilot heading mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|t}}&lt;br /&gt;
|Toggle {{Wikipedia|Aircraft flight control systems|AFCS] (Defaut Attitude Mode)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Engage AFCS Altitude Mode&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|s}}&lt;br /&gt;
|Toggle ground spoilers armed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HSD - radar and RWR ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|h}}&lt;br /&gt;
|Cycles through HSD modes: radar - compas - ECM (RWR)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|e}}&lt;br /&gt;
|Decrease Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|r}}&lt;br /&gt;
|Increase Radar Range&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|q}}&lt;br /&gt;
|Toggles Radar Standby Mode. In standby mode the radar doesn't emit and the &amp;quot;STAND BY&amp;quot; words are displayed on the HSD screen when in TID mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Carrier operations ===&lt;br /&gt;
See also [[Howto:Carrier]] and [[Carrier over MP]]&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Shift|o}}&lt;br /&gt;
|Lower the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|o}}&lt;br /&gt;
|Raise the hook&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|l}}&lt;br /&gt;
|Engage launch bar (keep holding until engaged)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Shift|c}}&lt;br /&gt;
|Release catapult&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Weapons ===&lt;br /&gt;
{|&lt;br /&gt;
|{{Key press|Ctrl|w}}&lt;br /&gt;
|Cycle through master arm switch modes (see master arm switch in cockpit).&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|w}}&lt;br /&gt;
|Cycle Stick Weapon Mode Selector (see Weapon Mode knob selector on side of joystick in cockpit).  Four positions: Off, Gun, SW, SP-PH.  &lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|Ctrl|m}}&lt;br /&gt;
|Toggle AIM-9 selection (must have at least one AIM-9 loaded through Tomcat Controls/Fuel &amp;amp; Stores menu)&lt;br /&gt;
|-&lt;br /&gt;
|{{Key press|e}}&lt;br /&gt;
|Trigger M61A1 Vulcan gun or AIM-9 missiles (depending on stick weapon mode selection)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=91171</id>
		<title>User:Warty/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty/Sandbox&amp;diff=91171"/>
		<updated>2015-12-31T16:06:30Z</updated>

		<summary type="html">&lt;p&gt;Warty: initialisation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For testing and drafts&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91153</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91153"/>
		<updated>2015-12-30T21:33:34Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Warnings and Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It only does some basic error-checking to see if this is the case and so this would need to be verified as adequate for your own implementation on an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go '''down''' to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that the aircraft needs to head to the '''right''' to intersect the approach line of the landing deck (even though the carrier is off to the left - see [1]).&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach, once the approach line of the landing deck has been intersected (see [4]).&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.  Basically, a lot is going on here and so a good deal of spacial awareness is required. Watch the video for an example.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	# Check to see if a carrier is available&lt;br /&gt;
	if(slopeToCarrier != nil){&lt;br /&gt;
		me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
		me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
		me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
		# The CARRIER approach heading Left/Right needle&lt;br /&gt;
		var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
		var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
		me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
		var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
		me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
		var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
		me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
		me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
		me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
		var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
		var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
		me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
		me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
		var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
		me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
 	}&lt;br /&gt;
 	else{ # hide from view&lt;br /&gt;
 		me.STC.setTranslation(300,300);&lt;br /&gt;
		me.gsiC.setTranslation(300,300);&lt;br /&gt;
 		me.carrierOffTxt.setTranslation(300,300);&lt;br /&gt;
 		me.lbiC.setTranslation(300,300);&lt;br /&gt;
 		me.carrierDiagramTxt.setTranslation(300,300);&lt;br /&gt;
 	});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91152</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91152"/>
		<updated>2015-12-30T21:31:53Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Drawing them on the HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go '''down''' to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that the aircraft needs to head to the '''right''' to intersect the approach line of the landing deck (even though the carrier is off to the left - see [1]).&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach, once the approach line of the landing deck has been intersected (see [4]).&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.  Basically, a lot is going on here and so a good deal of spacial awareness is required. Watch the video for an example.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	# Check to see if a carrier is available&lt;br /&gt;
	if(slopeToCarrier != nil){&lt;br /&gt;
		me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
		me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
		me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
		# The CARRIER approach heading Left/Right needle&lt;br /&gt;
		var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
		var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
		me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
		var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
		me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
		var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
		me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
		me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
		me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
		var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
		var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
		me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
		me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
		var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
		me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
 	}&lt;br /&gt;
 	else{ # hide from view&lt;br /&gt;
 		me.STC.setTranslation(300,300);&lt;br /&gt;
		me.gsiC.setTranslation(300,300);&lt;br /&gt;
 		me.carrierOffTxt.setTranslation(300,300);&lt;br /&gt;
 		me.lbiC.setTranslation(300,300);&lt;br /&gt;
 		me.carrierDiagramTxt.setTranslation(300,300);&lt;br /&gt;
 	});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91140</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91140"/>
		<updated>2015-12-30T20:40:18Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */ tidy up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91136</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91136"/>
		<updated>2015-12-30T20:36:53Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go '''down''' to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that the aircraft needs to head to the '''right''' to intersect the approach line of the landing deck (even though the carrier is off to the left - see [1]).&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach, once the approach line of the landing deck has been intersected (see [4]).&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.  Basically, a lot is going on here and so a good deal of spacial awareness is required. Watch the video for an example.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91135</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91135"/>
		<updated>2015-12-30T20:33:56Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go '''down''' to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that the aircraft needs to head to the '''right''' to intersect the approach line of the landing deck (even though the carrier is off to the left - see [1]).&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach, once the approach line of the landing deck has been intersected (see [4]).&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.  Basically, a lot is going on here and so a good deal of spacial awareness is required.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91134</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91134"/>
		<updated>2015-12-30T20:29:41Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go down to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that th aircraft needs to head to the '''right''' to intersect the approach line of the landing deck (even though the carrier is off to the left - see [1]).&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach.&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91133</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91133"/>
		<updated>2015-12-30T20:28:20Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.  This is showing that aircraft needs to go down to get onto the glide-slope.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. This is showing that th aircraft needs to head to the left to intersect the approach line of the landing deck.&lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach.&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91132</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91132"/>
		<updated>2015-12-30T20:22:23Z</updated>

		<summary type="html">&lt;p&gt;Warty: new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. &lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach.&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91131</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91131"/>
		<updated>2015-12-30T20:21:46Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Interpreting the Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
[[File:CLA-display.jpg|For Howto:Carrier_Landing_Assistant_in_HUD wiki]]&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. &lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach.&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:CLA-display.jpg&amp;diff=91130</id>
		<title>File:CLA-display.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:CLA-display.jpg&amp;diff=91130"/>
		<updated>2015-12-30T20:19:58Z</updated>

		<summary type="html">&lt;p&gt;Warty: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=For Howto:Carrier_Landing_Assistant_in_HUD wiki}}&lt;br /&gt;
|date=2015-12-30 21:19:01&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Warty|Warty]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91129</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91129"/>
		<updated>2015-12-30T20:16:57Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Extras (Draft) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Interpreting the Display ==&lt;br /&gt;
&lt;br /&gt;
[1] is the bearing to the carrier (226) and so, with the current heading of 249, it is off to the left. Within about +/- 30 degrees of the aircraft centreline the carrier symbol will show up at the top of the HUD (see [6]).&lt;br /&gt;
&lt;br /&gt;
[2] is the heading of the landing deck, which in this case is defined as 8 degrees to the left of the carrier's heading.&lt;br /&gt;
&lt;br /&gt;
[3] is the down angle to the carrier.  The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; at 3 degrees.&lt;br /&gt;
&lt;br /&gt;
[4] is the offset angle between [1] and [2]. The &amp;quot;''needle''&amp;quot; is set to align with &amp;quot;''Centre''&amp;quot; when they are equal. The idea is to give a steer to get on the approach centreline to the landing deck. &lt;br /&gt;
&lt;br /&gt;
[5] is the difference in headings between that of the aircraft and the landing deck.  This angle is also shown graphically in [6]. It indicates how much of a turn is required once the centreline of [4] is acheived.&lt;br /&gt;
&lt;br /&gt;
[6] is a graphical representation of the carrier location and orientation.  In this example it is off to the left and the landing deck is even further to the left. This would imply a gentle sweep to the left is required for the approach.&lt;br /&gt;
&lt;br /&gt;
Ideally (with a stationary carrier and no wind) the perfect approach would be where Heading == BrgTo == DeckHg (so RelHdg == 0). But with the carrier moving away and a wind it will be unlikely to be that simple.&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91128</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91128"/>
		<updated>2015-12-30T18:26:11Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing Assistant in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Extras (Draft) ==&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91127</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91127"/>
		<updated>2015-12-30T18:25:24Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* ILS in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91126</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91126"/>
		<updated>2015-12-30T18:24:33Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing Assistant in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 13:24, 30 December 2015 (EST)&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91125</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91125"/>
		<updated>2015-12-30T18:24:04Z</updated>

		<summary type="html">&lt;p&gt;Warty: Replaced content with &amp;quot;== ILS in HUD == This has now been created as ILS in HUD --Warty (talk) 04:02, 30 December 2015 (EST) == Carrier Landing Assistant i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
This has now been moved t: [[Howto:Carrier_Landing_Assistant_in_HUD]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91124</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91124"/>
		<updated>2015-12-30T18:03:24Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Warnings and Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
* The heading needle is really only there to get within the last few hundred metres as it points towards the centre of the carrier model rather than the arrester cables.&lt;br /&gt;
* It is based on an offset angle of 8 degrees for the landing deck from the ship's heading and a 3 degree glideslope.  These may need to be changed.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91123</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91123"/>
		<updated>2015-12-30T17:50:19Z</updated>

		<summary type="html">&lt;p&gt;Warty: added templates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91122</id>
		<title>Howto:Carrier Landing Assistant in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Carrier_Landing_Assistant_in_HUD&amp;diff=91122"/>
		<updated>2015-12-30T17:49:04Z</updated>

		<summary type="html">&lt;p&gt;Warty: first draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91121</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91121"/>
		<updated>2015-12-30T17:46:35Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Warnings and Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
* It was done as a quick fix, just to see if it was possible. Consequently it is not particularly elegant or well-commented. Hopefully it will be improved in time.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91120</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91120"/>
		<updated>2015-12-30T17:44:12Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing Assistant in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;''generic''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91119</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91119"/>
		<updated>2015-12-30T17:43:54Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing Assistant in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;generic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Warnings and Limitations ==&lt;br /&gt;
* This HowTo builds on the [[ILS_in_HUD]] Wiki.  If you haven't fully read and understood that then you probably should not read any further.  Just take the video as inspiration for what you may one day achieve and go back a stage.&lt;br /&gt;
* It is based on having a valid TACAN signal and a carrier in range and also that the carrier is &amp;quot;'''/ai/models/carrier[0]'''&amp;quot;.  It does NOT do any error-checking to see if this is the case and so this would need to be done for your own implementation in an aircraft.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91118</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91118"/>
		<updated>2015-12-30T17:21:14Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing Assistant in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;generic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91117</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91117"/>
		<updated>2015-12-30T17:19:50Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Although a carrier would not be based on this data, in real life, this method has the advantage of being &amp;quot;generic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91116</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91116"/>
		<updated>2015-12-30T17:18:20Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.  It deals specifically with modifying an SU-37, though the principle should be applicable to any carrier-capable aircraft. The properties used are:&lt;br /&gt;
* /ai/models/carrier[%d]/controls/flols/angle-degs&lt;br /&gt;
* /ai/models/carrier[%d]/orientation/true-heading-deg&lt;br /&gt;
* /instrumentation/tacan/indicated-bearing-true-deg&lt;br /&gt;
* /orientation/heading-deg&lt;br /&gt;
&lt;br /&gt;
Though, in real life, a carrier would not be based on this data this has the advantage of being &amp;quot;generic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91115</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91115"/>
		<updated>2015-12-30T17:12:53Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
* [[ILS_in_HUD]]&lt;br /&gt;
* [[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91114</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91114"/>
		<updated>2015-12-30T17:12:29Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
[[ILS_in_HUD]]&lt;br /&gt;
[[Howto:Carrier]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91113</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91113"/>
		<updated>2015-12-30T17:10:08Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
[[ILS_in_HUD]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91112</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91112"/>
		<updated>2015-12-30T17:06:56Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
This Howto Details modifications to the Canvas-based [[ILS_in_HUD]] Wiki.&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
 . . . in progresss!&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91111</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91111"/>
		<updated>2015-12-30T17:04:58Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
== The Canvas graphics elements ==&lt;br /&gt;
Additions to the '''new: func(placement)'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ----------------------------------------------------------------- Carrier Landing System&lt;br /&gt;
# UP/DOWN:&lt;br /&gt;
   	# glide slope indicator for CARRIER&lt;br /&gt;
    m.gsiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);      &lt;br /&gt;
      # Slope to CARRIER vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.STC =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      		.setFontSize(14, 0.9)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(180, -20)&lt;br /&gt;
            .setColor(1,1,0);     &lt;br /&gt;
# LEFT/RIGHT:&lt;br /&gt;
    # localiser beam indicator for CARRIER  &lt;br /&gt;
    m.lbiC = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbiC.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-40)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(95)&lt;br /&gt;
         .setStrokeLineWidth(2.0)&lt;br /&gt;
         .setColor(1,1,0);&lt;br /&gt;
    # For Carrier LANDING DECK heading text box&lt;br /&gt;
    m.carrierHdgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 105)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Bearing TO the carrier text box&lt;br /&gt;
    m.carrierBrgTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;right-top&amp;quot;)&lt;br /&gt;
            .setTranslation(240, 90)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier Offset text box &lt;br /&gt;
    m.carrierOffTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(16, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 100)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
    # Carrier pointer text box &lt;br /&gt;
    m.carrierDiagramTxt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(24, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -70)&lt;br /&gt;
            .setColor(1,1,0)&lt;br /&gt;
            .setText('=&amp;gt;');&lt;br /&gt;
    # relativeDeckHeading text box &lt;br /&gt;
       m.relativeDeckHeadingText =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(12, 1.0)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -55)&lt;br /&gt;
            .setColor(1,1,0); &lt;br /&gt;
# ---------------------------------------------------------- end of Carrier Landing System&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Drawing them on the HUD ==&lt;br /&gt;
&lt;br /&gt;
Additions to the '''update: func()'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
	# The CARRIER Glide Slope Up/Down needle&lt;br /&gt;
	var closestCarrier = 0;&lt;br /&gt;
	var slopeToCarrierProp = sprintf(&amp;quot;/ai/models/carrier[%d]/controls/flols/angle-degs&amp;quot;, closestCarrier);&lt;br /&gt;
	var slopeToCarrier = getprop(slopeToCarrierProp);&lt;br /&gt;
	me.STC.setText(sprintf(&amp;quot;%1.2f&amp;quot;, -slopeToCarrier));&lt;br /&gt;
	me.STC.setTranslation(185, 20*(slopeToCarrier -3) -5 );&lt;br /&gt;
	me.gsiC.setTranslation(0, 20*(slopeToCarrier -3) );&lt;br /&gt;
	&lt;br /&gt;
	# The CARRIER approach heading Left/Right needle&lt;br /&gt;
	var carrierHdgProp = sprintf(&amp;quot;/ai/models/carrier[%d]/orientation/true-heading-deg&amp;quot;, closestCarrier); &lt;br /&gt;
	var carrierHdg = getprop(carrierHdgProp); &lt;br /&gt;
	me.carrierHdgTxt.setText(sprintf(&amp;quot;DeckHdg: %1.0f&amp;quot;, carrierHdg-8)); # allow for landing deck offset&lt;br /&gt;
	var carrierBrgTo = getprop(&amp;quot;/instrumentation/tacan/indicated-bearing-true-deg&amp;quot;);&lt;br /&gt;
	me.carrierBrgTxt.setText(sprintf(&amp;quot;BrgTo: %1.0f&amp;quot;, carrierBrgTo)); # heading TO the carrier&lt;br /&gt;
	var carrierOffset = carrierHdg - carrierBrgTo -8 ; # landing deck offset&lt;br /&gt;
	me.carrierOffTxt.setText(sprintf(&amp;quot;%1.1f&amp;quot;, -carrierOffset));&lt;br /&gt;
	me.carrierOffTxt.setTranslation(-10*(carrierOffset), 100 );&lt;br /&gt;
	me.lbiC.setTranslation(-10*(carrierOffset), 0 );&lt;br /&gt;
	var currentHeading = getprop(&amp;quot;/orientation/heading-deg&amp;quot;);&lt;br /&gt;
	var relativeDeckHeading = -(currentHeading - carrierHdg +8) ;&lt;br /&gt;
	me.relativeDeckHeadingText.setText(sprintf(&amp;quot;RelHdg: %1.0f&amp;quot;, relativeDeckHeading)); # landing deck offset&lt;br /&gt;
 	me.carrierDiagramTxt.setRotation( ((relativeDeckHeading -105 )* math.pi )/ 180);&lt;br /&gt;
 	var hdgOffsetToCarrier =  currentHeading - carrierBrgTo;&lt;br /&gt;
 	me.carrierDiagramTxt.setTranslation(-10*(hdgOffsetToCarrier), -90 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
 . . . in progresss!&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91110</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91110"/>
		<updated>2015-12-30T16:54:06Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Carrier Landing system in HUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
{{#ev:youtube|baYkioV68k0|||Nimitz Almeria.|frame}}&lt;br /&gt;
&lt;br /&gt;
 . . . in progresss!&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91109</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91109"/>
		<updated>2015-12-30T16:49:58Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* What to expect */ embedded YouTube video&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.  See: [[AC files: Basic changes to textures and colors]]&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 This defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|OsXeTV7zDsM|||ILS in HUD.|frame}}&lt;br /&gt;
&lt;br /&gt;
== Related Forum topics ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=14&amp;amp;t=19602 ILS and Properties]&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=25334 ILS in the property-tree]&lt;br /&gt;
&lt;br /&gt;
see also: [[Howto:Add a 2D canvas instrument to your aircraft]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91102</id>
		<title>User:Warty</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Warty&amp;diff=91102"/>
		<updated>2015-12-30T09:03:24Z</updated>

		<summary type="html">&lt;p&gt;Warty: Tidy up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ILS in HUD ==&lt;br /&gt;
This has now been created as [[ILS in HUD]]&lt;br /&gt;
--[[User:Warty|Warty]] ([[User talk:Warty|talk]]) 04:02, 30 December 2015 (EST)&lt;br /&gt;
== Carrier Landing system in HUD ==&lt;br /&gt;
 . . . in progresss!&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91082</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91082"/>
		<updated>2015-12-29T17:51:04Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* A piece of glass to draw on */ WikiLink added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.  See: [[AC files: Basic changes to textures and colors]]&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 This defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;br /&gt;
&lt;br /&gt;
== Related Forum topics ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=14&amp;amp;t=19602 ILS and Properties]&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=25334 ILS in the property-tree]&lt;br /&gt;
&lt;br /&gt;
see also: [[Howto:Add a 2D canvas instrument to your aircraft]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91081</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91081"/>
		<updated>2015-12-29T17:48:23Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Related Forum topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 This defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;br /&gt;
&lt;br /&gt;
== Related Forum topics ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=14&amp;amp;t=19602 ILS and Properties]&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=25334 ILS in the property-tree]&lt;br /&gt;
&lt;br /&gt;
see also: [[Howto:Add a 2D canvas instrument to your aircraft]]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91080</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91080"/>
		<updated>2015-12-29T17:45:47Z</updated>

		<summary type="html">&lt;p&gt;Warty: Related Forum topics section added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 This defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;br /&gt;
&lt;br /&gt;
== Related Forum topics ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=14&amp;amp;t=19602 ILS and Properties]&lt;br /&gt;
&lt;br /&gt;
[http://forum.flightgear.org/viewtopic.php?f=4&amp;amp;t=25334 ILS in the property-tree]&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91079</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91079"/>
		<updated>2015-12-29T17:40:21Z</updated>

		<summary type="html">&lt;p&gt;Warty: last attempt to format this&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 This defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91078</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91078"/>
		<updated>2015-12-29T17:39:01Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Placing the glass in the cockpit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 which defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91077</id>
		<title>ILS in HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ILS_in_HUD&amp;diff=91077"/>
		<updated>2015-12-29T17:38:31Z</updated>

		<summary type="html">&lt;p&gt;Warty: /* Placing the glass in the cockpit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{Template:Canvas Navigation}}&lt;br /&gt;
== Adding ILS to the HUD of an SU-37 ==&lt;br /&gt;
[[File:ILS in SU-37 HUD.jpg|thumb|ILS is superimposed over the standard HUD, in red]]&lt;br /&gt;
This is just one way of implementing this on a particular aircraft.  Even on this aircraft there are many ways of achieving this. Apart from the SU-37-set.xml file that will need to be amended manually, the other files are available in [https://www.dropbox.com/sh/0e7s6s6h4q63hh0/AACpjpvG0PnaZBT_lBk4PQ6ua?dl=0 this dropbox folder].&lt;br /&gt;
&lt;br /&gt;
== A piece of glass to draw on ==&lt;br /&gt;
First of all a surface is required to draw on using Canvas.  The needs to be a 3d-model in ac3d format.  For this SU-37 example,  the file &amp;quot;''hudGlass.ac''&amp;quot; was used.  These file types are saved as text files, this one being:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AC3Db&lt;br /&gt;
MATERIAL &amp;quot;ac3dmat4&amp;quot; rgb 1 0.5 0  amb 0.2 0.2 0.2  emis 1 0.8 0.6  spec 0.2 0.2 0.2  shi 128  trans 0.5&lt;br /&gt;
OBJECT world&lt;br /&gt;
kids 1&lt;br /&gt;
OBJECT poly&lt;br /&gt;
name &amp;quot;PFD-Screen&amp;quot;&lt;br /&gt;
loc -1.81012e-05 9.69689e-06 0.138677&lt;br /&gt;
texture &amp;quot;Aircraft/SU-37/Hud/screen-test.png&amp;quot;&lt;br /&gt;
texoff -0.036 -0.073&lt;br /&gt;
crease 45.000000&lt;br /&gt;
numvert 4&lt;br /&gt;
0 0.106446 -0.052729&lt;br /&gt;
0 0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.224199&lt;br /&gt;
0 -0.106446 -0.052729&lt;br /&gt;
numsurf 1&lt;br /&gt;
SURF 0x30&lt;br /&gt;
mat 0&lt;br /&gt;
refs 4&lt;br /&gt;
3 0 0&lt;br /&gt;
2 1 0&lt;br /&gt;
1 1 1&lt;br /&gt;
0 0 1&lt;br /&gt;
kids 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''NOTE''': for this to work, the surface (known as &amp;quot;''PFD-Screen''&amp;quot; in this example MUST be textured.  Pretty much anything will do because Canvas replaces this texture with its own creation. Here the file specifies &amp;quot;''Aircraft/SU-37/Hud/screen-test.png''&amp;quot; as the texture file.  Obviously, this file must exist, must be a graphics file (.jpg .png etc) and must be where is says it is.  Here, it would need to be in the '''Aircraft/SU-37/Hud/''' folder.&lt;br /&gt;
&lt;br /&gt;
== Placing the glass in the cockpit ==&lt;br /&gt;
This example used an extra model by adding some extra lines in the SU-37-set.xml file, following the main model:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;model&amp;gt;&lt;br /&gt;
        &amp;lt;path&amp;gt;Aircraft/SU-37/Models/SU-37-model.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
        &amp;lt;nozzle-animation type=&amp;quot;float&amp;quot;&amp;gt;1&amp;lt;/nozzle-animation&amp;gt;&lt;br /&gt;
	&amp;lt;/model&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	 &amp;lt;model&amp;gt;&lt;br /&gt;
  		&amp;lt;path&amp;gt;Aircraft/SU-37/Hud/canvas-ILS.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
 	&amp;lt;/model&amp;gt;&lt;br /&gt;
#======================================================================== End of Warty mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file canvas-ILS.xml contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;path&amp;gt;Aircraft/SU-37/Hud/hudGlass.ac&amp;lt;/path&amp;gt;&lt;br /&gt;
 &amp;lt;offsets&amp;gt;&lt;br /&gt;
   &amp;lt;heading-deg&amp;gt;0&amp;lt;/heading-deg&amp;gt;&lt;br /&gt;
   &amp;lt;roll-deg&amp;gt;0&amp;lt;/roll-deg&amp;gt;&lt;br /&gt;
   &amp;lt;pitch-deg&amp;gt;40&amp;lt;/pitch-deg&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;4.55&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-0.005 &amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;1.415&amp;lt;/z-m&amp;gt;&lt;br /&gt;
 &amp;lt;/offsets&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 . .  which defines the piece of glass to be used (Aircraft/SU-37/Hud/hudGlass.ac) and positions it in a convenient place.&lt;br /&gt;
&lt;br /&gt;
== ILS properies ==&lt;br /&gt;
The properties required to place ILS &amp;quot;''needles''&amp;quot; in a HUD are:&lt;br /&gt;
  /instrumentation/nav/heading-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-needle-deflection&lt;br /&gt;
  /instrumentation/nav/gs-in-range&lt;br /&gt;
  /instrumentation/nav/in-range&lt;br /&gt;
&lt;br /&gt;
To be certain of these being recognised properly (i.e.: as the correct types) it might be advisable to &amp;quot;''declare''&amp;quot; them in the aircraft's -set.xml file. For example, in the SU-37-set.xml file, between the &amp;lt;instrumentation&amp;gt; and the &amp;lt;/instrumentation&amp;gt; tags, the group&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;nav&amp;gt;&lt;br /&gt;
			&amp;lt;heading-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/heading-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/in-range&amp;gt;&lt;br /&gt;
			&amp;lt;gs-needle-deflection type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/gs-needle-deflection&amp;gt;&lt;br /&gt;
			&amp;lt;gs-in-range type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/gs-in-range&amp;gt;&lt;br /&gt;
		&amp;lt;/nav&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
could be added. &lt;br /&gt;
&lt;br /&gt;
== Drawing the ILS &amp;quot;''needles''&amp;quot; on the glass ==&lt;br /&gt;
This ILS example uses a derivative of what TheTom did at [[Canvas_HUD]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
# Head up display ILS extras for SU-37&lt;br /&gt;
# ==============================================================================&lt;br /&gt;
var HUD = {&lt;br /&gt;
  canvas_settings: {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;HUD&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: [1024, 1024],&lt;br /&gt;
    &amp;quot;view&amp;quot;: [640, 640],&lt;br /&gt;
    &amp;quot;mipmapping&amp;quot;: 1&lt;br /&gt;
  },&lt;br /&gt;
  new: func(placement)&lt;br /&gt;
  {&lt;br /&gt;
    var m = {&lt;br /&gt;
      parents: [HUD],&lt;br /&gt;
      canvas: canvas.new(HUD.canvas_settings)&lt;br /&gt;
    };&lt;br /&gt;
    m.canvas.addPlacement(placement);&lt;br /&gt;
    m.canvas.setColorBackground(1, 0, 0, 0.02);&lt;br /&gt;
    m.root =&lt;br /&gt;
      m.canvas.createGroup()&lt;br /&gt;
              .setScale(1, 2)&lt;br /&gt;
              .setTranslation(320, 320)&lt;br /&gt;
              .set(&amp;quot;font&amp;quot;, &amp;quot;LiberationFonts/LiberationMono-Regular.ttf&amp;quot;)&lt;br /&gt;
              .setDouble(&amp;quot;character-size&amp;quot;, 9)&lt;br /&gt;
              .setDouble(&amp;quot;character-aspect-ration&amp;quot;, 0.45)&lt;br /&gt;
              .set(&amp;quot;stroke&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
    m.text =&lt;br /&gt;
      m.root.createChild(&amp;quot;group&amp;quot;)&lt;br /&gt;
            .set(&amp;quot;fill&amp;quot;, &amp;quot;rgba(255,0,0,0.9)&amp;quot;);&lt;br /&gt;
# ------------------------------------------------------------------------ ILS deflections&lt;br /&gt;
	# horizontal needle deflection text box (left/right)  &lt;br /&gt;
    m.hnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, -135); &lt;br /&gt;
            &lt;br /&gt;
      # vertical needle deflection text box (up/down)      &lt;br /&gt;
      m.vnd =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .setDrawMode(3)&lt;br /&gt;
            .setPadding(2)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(200, 0);&lt;br /&gt;
                       &lt;br /&gt;
    # Radar altidude (for below 1,000' AGL)&lt;br /&gt;
    m.rad_alt =&lt;br /&gt;
      m.text.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
      .setFontSize(18, 0.9)&lt;br /&gt;
            .setAlignment(&amp;quot;center-top&amp;quot;)&lt;br /&gt;
            .setTranslation(0, 120);&lt;br /&gt;
 &lt;br /&gt;
    # Waterline / Pitch indicator (used for alignment with main HUD)&lt;br /&gt;
      m.root.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
            .moveTo(-24, 0)&lt;br /&gt;
            .horizTo(-8)&lt;br /&gt;
            .lineTo(-4, 6)&lt;br /&gt;
            .lineTo(0, 0)&lt;br /&gt;
            .lineTo(4, 6)&lt;br /&gt;
            .lineTo(8, 0)&lt;br /&gt;
            .horizTo(24)&lt;br /&gt;
            .setStrokeLineWidth(0.9);&lt;br /&gt;
 &lt;br /&gt;
# ------------------------------------------------- ILS glide slope/localiser beam needles&lt;br /&gt;
	# glide slope indicator&lt;br /&gt;
    m.gsi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.gsi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(-4, 0)&lt;br /&gt;
         .horiz(-150)&lt;br /&gt;
         .moveTo(4, 0)&lt;br /&gt;
         .horiz(150)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
         &lt;br /&gt;
    # localiser beam indicator    &lt;br /&gt;
    m.lbi = m.root.createChild(&amp;quot;group&amp;quot;, &amp;quot;GSI&amp;quot;);&lt;br /&gt;
    m.lbi.createChild(&amp;quot;path&amp;quot;)&lt;br /&gt;
         .moveTo(8, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0, -16, 0)&lt;br /&gt;
         .arcSmallCCW(8, 8, 0,  16, 0)&lt;br /&gt;
         .moveTo(0, -4)&lt;br /&gt;
         .vert(-100)&lt;br /&gt;
         .moveTo(0, 4)&lt;br /&gt;
         .vert(200)&lt;br /&gt;
         .setStrokeLineWidth(2.0);&lt;br /&gt;
 # ---------------------------------------------------------------------------------------&lt;br /&gt;
    m.input = {&lt;br /&gt;
      hnd:		  &amp;quot;/instrumentation/nav/heading-needle-deflection&amp;quot;,&lt;br /&gt;
      snd:		  &amp;quot;/instrumentation/nav/gs-needle-deflection&amp;quot;,&lt;br /&gt;
      gsir:		  &amp;quot;/instrumentation/nav/gs-in-range&amp;quot;,&lt;br /&gt;
      hir:		  &amp;quot;/instrumentation/nav/in-range&amp;quot;,&lt;br /&gt;
      rad_alt:    &amp;quot;/position/altitude-agl-ft&amp;quot;,&lt;br /&gt;
      wow_nlg:    &amp;quot;/gear/gear[4]/wow&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
    foreach(var name; keys(m.input)){&lt;br /&gt;
    	m.input[name] = props.globals.getNode(m.input[name], 1);&lt;br /&gt;
    }&lt;br /&gt;
    return m;&lt;br /&gt;
  },&lt;br /&gt;
  # ------------------------------------------------------------------------------- update&lt;br /&gt;
  update: func()&lt;br /&gt;
  {&lt;br /&gt;
    var rad_alt = me.input.rad_alt.getValue(); # Only show below 1000AGL&lt;br /&gt;
    if( rad_alt and rad_alt &amp;lt; 1000 ){rad_alt = sprintf(&amp;quot;%4d AGL&amp;quot;, rad_alt);}&lt;br /&gt;
    else                            {rad_alt = nil;}&lt;br /&gt;
    me.rad_alt.setText(rad_alt);&lt;br /&gt;
    &lt;br /&gt;
    # the Left/right needle&lt;br /&gt;
    gslr = me.input.hnd.getValue();&lt;br /&gt;
    hir = me.input.hir.getValue();&lt;br /&gt;
    me.hnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gslr));&lt;br /&gt;
    if(hir ==  0){gslr =  10.8;}&lt;br /&gt;
    me.lbi.setTranslation(20*gslr, 0);     &lt;br /&gt;
&lt;br /&gt;
    # The Glide Slope Up/Down needle&lt;br /&gt;
    gsud = me.input.snd.getValue();&lt;br /&gt;
    gsir = me.input.gsir.getValue();&lt;br /&gt;
    me.vnd.setText(sprintf(&amp;quot;%1.3f&amp;quot;, gsud));&lt;br /&gt;
    if(gsir ==  0){gsud =  7.2;}&lt;br /&gt;
	me.gsi.setTranslation(0, -20*gsud);&lt;br /&gt;
 &lt;br /&gt;
    settimer(func me.update(), 0);&lt;br /&gt;
  } # ---------------------------------------------------------------------- end of update&lt;br /&gt;
}; # end of HUD&lt;br /&gt;
 &lt;br /&gt;
var init = setlistener(&amp;quot;/sim/signals/fdm-initialized&amp;quot;, func() {&lt;br /&gt;
  removelistener(init); # only call once&lt;br /&gt;
  var hud_pilot = HUD.new({&amp;quot;node&amp;quot;: &amp;quot;PFD-Screen&amp;quot;}); &lt;br /&gt;
  hud_pilot.update();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It was saved as &amp;quot;''hudCanvasILS.nas''&amp;quot; in Aircraft/SU-37/Hud/&lt;br /&gt;
&lt;br /&gt;
== Getting the Nasal to run ==&lt;br /&gt;
&lt;br /&gt;
Adding this line in the nasal section at the bottom of the &amp;quot;SU-37-set.xml&amp;quot; file will make the ILS script load and run with the aircraft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
#====================================================================== Start of Warty mod&lt;br /&gt;
	&amp;lt;canvas_test&amp;gt;&amp;lt;file&amp;gt;Aircraft/SU-37/Hud/hudCanvasILS.nas&amp;lt;/file&amp;gt;&amp;lt;/canvas_test&amp;gt;&lt;br /&gt;
#====================================================================== End of Warty mod&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;SU-27&amp;gt;	  &lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/refuel.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;file&amp;gt;Aircraft/SU-37/Nasal/Explode.nas&amp;lt;/file&amp;gt;&lt;br /&gt;
	&amp;lt;/SU-27&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What to expect ==&lt;br /&gt;
&lt;br /&gt;
See: https://www.youtube.com/watch?v=OsXeTV7zDsM&lt;/div&gt;</summary>
		<author><name>Warty</name></author>
	</entry>
</feed>