Merge branch 'next' of git://git.code.sf.net/p/flightgear/fgdata into next
This commit is contained in:
commit
65ffffa2cc
9 changed files with 33332 additions and 1449 deletions
File diff suppressed because it is too large
Load diff
Binary file not shown.
BIN
Aircraft/Instruments-3d/kln94/kln94.blend1
Normal file
BIN
Aircraft/Instruments-3d/kln94/kln94.blend1
Normal file
Binary file not shown.
|
@ -1,385 +1,446 @@
|
|||
var kln94 = nil;
|
||||
|
||||
var KLN94 = {
|
||||
|
||||
Page: {
|
||||
new : func(owner, s, idx)
|
||||
{
|
||||
m = {
|
||||
parents:[KLN94.Page],
|
||||
section: s,
|
||||
index: idx
|
||||
};
|
||||
return m;
|
||||
},
|
||||
|
||||
# encode various behavioural flags as predicates
|
||||
# real Pages can over-ride these defaults as needed
|
||||
hasActiveIdent: func { return 0; },
|
||||
numberOfCyanLines: func { return 0; },
|
||||
showsCDI: func { return 0; },
|
||||
isMulti: func { return 0; },
|
||||
|
||||
# cursor stuff
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
refresh: func(gps)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
pageNames : ['APT', 'VOR', 'NDB', 'INT', 'USR', 'ACT', 'NAV', 'FPL', 'SET', 'AUX'],
|
||||
|
||||
PAGE_APT: 0,
|
||||
PAGE_VOR: 1,
|
||||
PAGE_NDB: 2,
|
||||
PAGE_INT: 3,
|
||||
PAGE_USR: 4,
|
||||
PAGE_ACT: 5,
|
||||
PAGE_NAV: 6,
|
||||
PAGE_FPL: 7,
|
||||
PAGE_SET: 8,
|
||||
PAGE_AUX: 9,
|
||||
|
||||
|
||||
PAGE_BAR_HEIGHT: 20,
|
||||
NAV_DATA_WIDTH: 128,
|
||||
|
||||
canvas_settings: {
|
||||
"name": "KLN94",
|
||||
"size": [512, 256],
|
||||
"view": [480, 160],
|
||||
"mipmapping": 1,
|
||||
},
|
||||
|
||||
new : func(prop1, placement)
|
||||
{
|
||||
m = { parents : [KLN94]};
|
||||
|
||||
m.rootNode = props.globals.initNode(prop1);
|
||||
m._setupCanvas(placement);
|
||||
m._page = nil;
|
||||
|
||||
m._messageScreenActive = 0;
|
||||
m._messages = [];
|
||||
|
||||
m._cursorActive = 0;
|
||||
m._cursorField = 0;
|
||||
m._enterAction = nil;
|
||||
|
||||
|
||||
m._setupProps();
|
||||
|
||||
return m;
|
||||
},
|
||||
|
||||
_setupCanvas: func(placement)
|
||||
{
|
||||
me._canvas = canvas.new(KLN94.canvas_settings);
|
||||
var text_style = {
|
||||
'font': "LiberationFonts/LiberationMono-Bold.ttf",
|
||||
'character-size': 34,
|
||||
'character-aspect-ratio': 1.2
|
||||
};
|
||||
|
||||
me.rootNode.initNode('brightness-norm', 0.5, 'DOUBLE');
|
||||
|
||||
me._canvas.setColorBackground(1.0, 0.0, 0.0);
|
||||
me._canvas.addPlacement(placement);
|
||||
|
||||
me._navDataArea = me._canvas.createGroup();
|
||||
me._navDataArea.setTranslation(0, 0);
|
||||
me._navDataLines = [];
|
||||
|
||||
var navAreaH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 2;
|
||||
var r1 = me._navDataArea.rect(0, 0, KLN94.NAV_DATA_WIDTH, navAreaH);
|
||||
var r2 = me._navDataArea.rect(0, navAreaH, KLN94.NAV_DATA_WIDTH, navAreaH);
|
||||
r1.setColor(0,1,1); # cyan
|
||||
r2.setColor(0,1,1);
|
||||
|
||||
var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
|
||||
|
||||
for (var i=0; i<4; i +=1) {
|
||||
var t = me._navDataArea.createChild("text");
|
||||
t.setColor(1, 1, 1);
|
||||
t._node.setValues(text_style);
|
||||
t.setAlignment("left-center");
|
||||
t.setTranslation(0.0, (i + 0.5) * lineH);
|
||||
append(me._navDataLines, t);
|
||||
}
|
||||
|
||||
me._pageBarArea = me._canvas.createGroup();
|
||||
me._pageBarArea.setTranslation(0, KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT);
|
||||
|
||||
var ln = me._pageBarArea.createChild('path');
|
||||
ln.setColor(0,1,1); # cyan
|
||||
|
||||
me._pageBarText = me._pageBarArea.createChild("text");
|
||||
me._pageBarText._node.setValues(text_style);
|
||||
me._pageBarText.setAlignment("left-center");
|
||||
me._pageBarText.setColor(0, 0, 1);
|
||||
|
||||
me._pageBarInverseText = me._pageBarArea.createChild("text");
|
||||
me._pageBarInverseText._node.setValues(text_style);
|
||||
me._pageBarInverseText.setAlignment("left-center");
|
||||
me._pageBarInverseText.setColor(1, 1, 1);
|
||||
me._pageBarInverseText.setColorFill(0, 0, 1);
|
||||
|
||||
me._pageArea = me._canvas.createGroup();
|
||||
me._pageBarArea.setTranslation(100, 0);
|
||||
|
||||
me._pageAreaLines = [];
|
||||
for (var i=0; i<5; i +=1) {
|
||||
var t = me._pageArea.createChild("text");
|
||||
t.setColor(0, 1, 0);
|
||||
t._node.setValues(text_style);
|
||||
t.setAlignment("left-center");
|
||||
t.setTranslation(0.0, (i + 0.5) * lineH);
|
||||
append(me._pageAreaLines, t);
|
||||
}
|
||||
|
||||
# inverted text block
|
||||
me._pageAreaInverted = me._pageArea.createChild("text");
|
||||
me._pageAreaInverted.setColor(0, 0, 0);
|
||||
me._pageAreaInverted.setColorFill(0, 1, 0);
|
||||
me._pageAreaInverted._node.setValues(text_style);
|
||||
me._pageAreaInverted.setAlignment("left-center");
|
||||
|
||||
me._cdiGroup = me._pageArea.createChild("group");
|
||||
canvas.parsesvg(me._cdiGroup, resolvepath('Aircraft/Instruments-3d/kln94/cdi.svg'));
|
||||
me._cdiGroup.setTranslation(0, lineH);
|
||||
},
|
||||
|
||||
_setupProps: func
|
||||
{
|
||||
var p = me.rootNode;
|
||||
me.props = {
|
||||
distanceToActiveNm: p.getNode(),
|
||||
groundspeedKt: p.getNode(),
|
||||
activeIdent: p.getNode(),
|
||||
previousIdent: p.getNode(),
|
||||
obsBearing: p.getNode(),
|
||||
legTrack: p.getNode(),
|
||||
groundTrack: p.getNode(),
|
||||
cdiDeviationNm: p.getNode(),
|
||||
};
|
||||
},
|
||||
|
||||
_setActivePage: func(pg)
|
||||
{
|
||||
me._page = pg;
|
||||
if (pg == nil) return;
|
||||
|
||||
# update line colors
|
||||
for (var l=0; l<4; l+=1) {
|
||||
me._pageAreaLines[l].setColor(0, 1, l < pg.numberOfCyanLines() ? 1 : 0);
|
||||
}
|
||||
|
||||
# hide or show the CDI area as appropriate
|
||||
me._cdiGroup.setVisible(pg.showsCDI());
|
||||
},
|
||||
|
||||
_updateNavData : func
|
||||
{
|
||||
me._navDataLines[0].setText(sprintf('%4dnm', me._props.distanceToActiveNm.getValue()));
|
||||
if (me._page.hasActiveIdent()) {
|
||||
me._navDataLines[1].setText(sprintf('%4dkt', me._props.groundspeedKt.getValue()));
|
||||
} else {
|
||||
me._navDataLines[1].setText(me._props.activeIdent.getValue());
|
||||
}
|
||||
if (me._obsMode) {
|
||||
me._navDataLines[2].setText(sprintf('OBS%03d*', me._props.obsBearing.getValue()));
|
||||
} else {
|
||||
me._navDataLines[2].setText(sprintf('DTK%03d*', me._props.legTrack.getValue()));
|
||||
}
|
||||
me._navDataLines[3].setText(sprintf(' TK%03d*', me._props.groundTrack.getValue()));
|
||||
},
|
||||
|
||||
_updateAnnunciationArea : func
|
||||
{
|
||||
if (size(me._messages) > 0) {
|
||||
# show 'M' symbol
|
||||
}
|
||||
|
||||
if (me._enterAction != nil) {
|
||||
# show 'ENT' symbol
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_updatePageBar : func
|
||||
{
|
||||
# hide in NAV-4 mode
|
||||
if (me.inNav4Mode()) {
|
||||
me._pageBarGroup.setVisible(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (me._cursorActive) {
|
||||
me._pageBarText.setText('');
|
||||
var t = ' * CRSR * ' ~ me.pageNames[activePage] ~ ' * CRSR *';
|
||||
me._pageBarInverseText.setText(t);
|
||||
return;
|
||||
}
|
||||
|
||||
# assemble the string
|
||||
var barString = '';
|
||||
var inverseBarString = '';
|
||||
var activePage = me.pageIndex[0];
|
||||
|
||||
for (var i=0; i < 10; i += 1) {
|
||||
if (activePage == i) {
|
||||
var sep = me.isMultiPage() ? '+' : ' ';
|
||||
inverseBarString ~= me.pageNames[i] ~ sep ~ me.pageIndex[1];
|
||||
barString ~= ' '; # 5 spaces
|
||||
} else {
|
||||
barString ~= ' ' ~ me.pageNames[i];
|
||||
if (i < activePage)
|
||||
inverseBarString ~= ' '; # 4 spaces
|
||||
}
|
||||
}
|
||||
|
||||
me._pageBarText.setText(barString);
|
||||
me._pageBarInverseText.setText(inverseBarString);
|
||||
},
|
||||
|
||||
_setInverted: func(line, firstcol, numcols=1)
|
||||
{
|
||||
var t = me._pageAreaInverted;
|
||||
var cellW = 20.0;
|
||||
var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
|
||||
t.setTranslation(firstcol * cellW, (line + 0.5) * lineH);
|
||||
t.setText(substr(me._pageAreaLines[line].getText(), firstcol, numcols));
|
||||
t.setVisible(1);
|
||||
},
|
||||
|
||||
_setBlink: func(line, firstcol, numcols=1)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
isPageActive: func(nm, idx)
|
||||
{
|
||||
if (me._page == nil) return 0;
|
||||
return (me._page.section == nm) and (me._page.index == idx);
|
||||
},
|
||||
|
||||
isMultiPage: func { return me._page.isMulti(); },
|
||||
|
||||
|
||||
toggleCursor: func
|
||||
{
|
||||
me._cursorActive = !me._cursorActive;
|
||||
if (me._cursorActive) {
|
||||
me._cursorField = 0;
|
||||
}
|
||||
|
||||
me._updatePageBar();
|
||||
},
|
||||
|
||||
_buildMessageScreen: func
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
# Nav4 mode is special
|
||||
inNav4Mode: func { return me.isPageActive(NAV, 4); },
|
||||
|
||||
formatDuration: func(timeInSeconds)
|
||||
{
|
||||
if (timeInSeconds > 60) {
|
||||
return sprintf("0:%02d", timeInSeconds);
|
||||
}
|
||||
|
||||
if (timeInSeconds > 3600) {
|
||||
var mins = int(timeInSeconds / 60);
|
||||
var secs = timeInSeconds - (mins * 60);
|
||||
return sprintf("%d:%02d", mins, secs);
|
||||
}
|
||||
|
||||
var hours = int(timeInSeconds / 3600);
|
||||
timeInSeconds -= (hours * 3600);
|
||||
var mins = int(timeInSeconds / 60);
|
||||
var secs = timeInSeconds - (mins * 60);
|
||||
return sprintf("%d:%02d:%02d", hours, mins, secs);
|
||||
},
|
||||
|
||||
formatLatitude: func(lat)
|
||||
{
|
||||
var north = (lat >= 0.0);
|
||||
var latDeg = int(lat);
|
||||
var latMinutes = math.abs(lat - latDeg) * 60;
|
||||
return sprintf('%s%02d*%04.1f', north ? "N" : "S", abs(latDeg), latMinutes);
|
||||
},
|
||||
|
||||
formatLongitude: func(lon)
|
||||
{
|
||||
var east = (lon >= 0.0);
|
||||
var lonDeg = int(lon);
|
||||
var lonMinutes = math.abs(lon - lonDeg) * 60;
|
||||
sprintf("%s%03d*%04.1f", east ? 'E' : 'W', abs(lonDeg), lonMinutes);
|
||||
},
|
||||
|
||||
## Input Handling
|
||||
|
||||
enter: func{
|
||||
# Enter Button Functionality
|
||||
},
|
||||
|
||||
Page: {
|
||||
new : func(owner, s, idx)
|
||||
{
|
||||
m = {
|
||||
parents:[KLN94.Page],
|
||||
section: s,
|
||||
index: idx
|
||||
};
|
||||
return m;
|
||||
},
|
||||
|
||||
# encode various behavioural flags as predicates
|
||||
# real Pages can over-ride these defaults as needed
|
||||
hasActiveIdent: func { return 0; },
|
||||
numberOfCyanLines: func { return 0; },
|
||||
showsCDI: func { return 0; },
|
||||
isMulti: func { return 0; },
|
||||
|
||||
# cursor stuff
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
refresh: func(gps)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
},
|
||||
toggleCursorMode: func{
|
||||
# Cursor Button Functionality
|
||||
},
|
||||
|
||||
pageNames : ['APT', 'VOR', 'NDB', 'INT', 'USR', 'ACT', 'NAV', 'FPL', 'SET', 'AUX'],
|
||||
|
||||
PAGE_APT: 0,
|
||||
PAGE_VOR: 1,
|
||||
PAGE_NDB: 2,
|
||||
PAGE_INT: 3,
|
||||
PAGE_USR: 4,
|
||||
PAGE_ACT: 5,
|
||||
PAGE_NAV: 6,
|
||||
PAGE_FPL: 7,
|
||||
PAGE_SET: 8,
|
||||
PAGE_AUX: 9,
|
||||
|
||||
|
||||
PAGE_BAR_HEIGHT: 20,
|
||||
NAV_DATA_WIDTH: 128,
|
||||
|
||||
canvas_settings: {
|
||||
"name": "KLN94",
|
||||
"size": [512, 256],
|
||||
"view": [480, 160],
|
||||
"mipmapping": 1,
|
||||
},
|
||||
|
||||
new : func(prop1, placement)
|
||||
{
|
||||
m = { parents : [KLN94]};
|
||||
nearestButton: func{
|
||||
# Nearest Button Functionality
|
||||
},
|
||||
|
||||
m.rootNode = props.globals.initNode(prop1);
|
||||
m._setupCanvas(placement);
|
||||
m._page = nil;
|
||||
|
||||
m._messageScreenActive = 0;
|
||||
m._messages = [];
|
||||
|
||||
m._cursorActive = 0;
|
||||
m._cursorField = 0;
|
||||
m._enterAction = nil;
|
||||
|
||||
|
||||
m._setupProps();
|
||||
|
||||
return m;
|
||||
},
|
||||
|
||||
_setupCanvas: func(placement)
|
||||
{
|
||||
me._canvas = canvas.new(KLN94.canvas_settings);
|
||||
var text_style = {
|
||||
'font': "LiberationFonts/LiberationMono-Bold.ttf",
|
||||
'character-size': 34,
|
||||
'character-aspect-ratio': 1.2
|
||||
};
|
||||
|
||||
me.rootNode.initNode('brightness-norm', 0.5, 'DOUBLE');
|
||||
|
||||
me._canvas.setColorBackground(1.0, 0.0, 0.0);
|
||||
me._canvas.addPlacement(placement);
|
||||
|
||||
me._navDataArea = me._canvas.createGroup();
|
||||
me._navDataArea.setTranslation(0, 0);
|
||||
me._navDataLines = [];
|
||||
|
||||
var navAreaH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 2;
|
||||
var r1 = me._navDataArea.rect(0, 0, KLN94.NAV_DATA_WIDTH, navAreaH);
|
||||
var r2 = me._navDataArea.rect(0, navAreaH, KLN94.NAV_DATA_WIDTH, navAreaH);
|
||||
r1.setColor(0,1,1); # cyan
|
||||
r2.setColor(0,1,1);
|
||||
|
||||
var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
|
||||
|
||||
for (var i=0; i<4; i +=1) {
|
||||
var t = me._navDataArea.createChild("text");
|
||||
t.setColor(1, 1, 1);
|
||||
t._node.setValues(text_style);
|
||||
t.setAlignment("left-center");
|
||||
t.setTranslation(0.0, (i + 0.5) * lineH);
|
||||
append(me._navDataLines, t);
|
||||
}
|
||||
|
||||
me._pageBarArea = me._canvas.createGroup();
|
||||
me._pageBarArea.setTranslation(0, KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT);
|
||||
|
||||
var ln = me._pageBarArea.createChild('path');
|
||||
ln.setColor(0,1,1); # cyan
|
||||
|
||||
me._pageBarText = me._pageBarArea.createChild("text");
|
||||
me._pageBarText._node.setValues(text_style);
|
||||
me._pageBarText.setAlignment("left-center");
|
||||
me._pageBarText.setColor(0, 0, 1);
|
||||
|
||||
me._pageBarInverseText = me._pageBarArea.createChild("text");
|
||||
me._pageBarInverseText._node.setValues(text_style);
|
||||
me._pageBarInverseText.setAlignment("left-center");
|
||||
me._pageBarInverseText.setColor(1, 1, 1);
|
||||
me._pageBarInverseText.setColorFill(0, 0, 1);
|
||||
|
||||
me._pageArea = me._canvas.createGroup();
|
||||
me._pageBarArea.setTranslation(100, 0);
|
||||
|
||||
me._pageAreaLines = [];
|
||||
for (var i=0; i<5; i +=1) {
|
||||
var t = me._pageArea.createChild("text");
|
||||
t.setColor(0, 1, 0);
|
||||
t._node.setValues(text_style);
|
||||
t.setAlignment("left-center");
|
||||
t.setTranslation(0.0, (i + 0.5) * lineH);
|
||||
append(me._pageAreaLines, t);
|
||||
}
|
||||
|
||||
# inverted text block
|
||||
me._pageAreaInverted = me._pageArea.createChild("text");
|
||||
me._pageAreaInverted.setColor(0, 0, 0);
|
||||
me._pageAreaInverted.setColorFill(0, 1, 0);
|
||||
me._pageAreaInverted._node.setValues(text_style);
|
||||
me._pageAreaInverted.setAlignment("left-center");
|
||||
|
||||
me._cdiGroup = me._pageArea.createChild("group");
|
||||
canvas.parsesvg(me._cdiGroup, resolvepath('Aircraft/Instruments-3d/kln94/cdi.svg'));
|
||||
me._cdiGroup.setTranslation(0, lineH);
|
||||
},
|
||||
|
||||
_setupProps: func
|
||||
{
|
||||
var p = me.rootNode;
|
||||
me.props = {
|
||||
distanceToActiveNm: p.getNode(),
|
||||
groundspeedKt: p.getNode(),
|
||||
activeIdent: p.getNode(),
|
||||
previousIdent: p.getNode(),
|
||||
obsBearing: p.getNode(),
|
||||
legTrack: p.getNode(),
|
||||
groundTrack: p.getNode(),
|
||||
cdiDeviationNm: p.getNode(),
|
||||
};
|
||||
},
|
||||
|
||||
_setActivePage: func(pg)
|
||||
{
|
||||
me._page = pg;
|
||||
if (pg == nil) return;
|
||||
|
||||
# update line colors
|
||||
for (var l=0; l<4; l+=1) {
|
||||
me._pageAreaLines[l].setColor(0, 1, l < pg.numberOfCyanLines() ? 1 : 0);
|
||||
}
|
||||
|
||||
# hide or show the CDI area as appropriate
|
||||
me._cdiGroup.setVisible(pg.showsCDI());
|
||||
},
|
||||
|
||||
_updateNavData : func
|
||||
{
|
||||
me._navDataLines[0].setText(sprintf('%4dnm', me._props.distanceToActiveNm.getValue()));
|
||||
if (me._page.hasActiveIdent()) {
|
||||
me._navDataLines[1].setText(sprintf('%4dkt', me._props.groundspeedKt.getValue()));
|
||||
} else {
|
||||
me._navDataLines[1].setText(me._props.activeIdent.getValue());
|
||||
}
|
||||
if (me._obsMode) {
|
||||
me._navDataLines[2].setText(sprintf('OBS%03d*', me._props.obsBearing.getValue()));
|
||||
} else {
|
||||
me._navDataLines[2].setText(sprintf('DTK%03d*', me._props.legTrack.getValue()));
|
||||
}
|
||||
me._navDataLines[3].setText(sprintf(' TK%03d*', me._props.groundTrack.getValue()));
|
||||
},
|
||||
|
||||
_updateAnnunciationArea : func
|
||||
{
|
||||
if (size(me._messages) > 0) {
|
||||
# show 'M' symbol
|
||||
}
|
||||
|
||||
if (me._enterAction != nil) {
|
||||
# show 'ENT' symbol
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_updatePageBar : func
|
||||
{
|
||||
# hide in NAV-4 mode
|
||||
if (me.inNav4Mode()) {
|
||||
me._pageBarGroup.setVisible(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (me._cursorActive) {
|
||||
me._pageBarText.setText('');
|
||||
var t = ' * CRSR * ' ~ me.pageNames[activePage] ~ ' * CRSR *';
|
||||
me._pageBarInverseText.setText(t);
|
||||
return;
|
||||
}
|
||||
|
||||
# assemble the string
|
||||
var barString = '';
|
||||
var inverseBarString = '';
|
||||
var activePage = me.pageIndex[0];
|
||||
|
||||
for (var i=0; i < 10; i += 1) {
|
||||
if (activePage == i) {
|
||||
var sep = me.isMultiPage() ? '+' : ' ';
|
||||
inverseBarString ~= me.pageNames[i] ~ sep ~ me.pageIndex[1];
|
||||
barString ~= ' '; # 5 spaces
|
||||
} else {
|
||||
barString ~= ' ' ~ me.pageNames[i];
|
||||
if (i < activePage)
|
||||
inverseBarString ~= ' '; # 4 spaces
|
||||
}
|
||||
}
|
||||
|
||||
me._pageBarText.setText(barString);
|
||||
me._pageBarInverseText.setText(inverseBarString);
|
||||
},
|
||||
|
||||
_setInverted: func(line, firstcol, numcols=1)
|
||||
{
|
||||
var t = me._pageAreaInverted;
|
||||
var cellW = 20.0;
|
||||
var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
|
||||
t.setTranslation(firstcol * cellW, (line + 0.5) * lineH);
|
||||
t.setText(substr(me._pageAreaLines[line].getText(), firstcol, numcols));
|
||||
t.setVisible(1);
|
||||
},
|
||||
|
||||
_setBlink: func(line, firstcol, numcols=1)
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
isPageActive: func(nm, idx)
|
||||
{
|
||||
if (me._page == nil) return 0;
|
||||
return (me._page.section == nm) and (me._page.index == idx);
|
||||
},
|
||||
|
||||
isMultiPage: func { return me._page.isMulti(); },
|
||||
|
||||
toggleCursor: func
|
||||
{
|
||||
me._cursorActive = !me._cursorActive;
|
||||
if (me._cursorActive) {
|
||||
me._cursorField = 0;
|
||||
}
|
||||
|
||||
me._updatePageBar();
|
||||
},
|
||||
|
||||
messageButton: func
|
||||
{
|
||||
if (me._messageScreenActive) {
|
||||
me._messages = me._messages[1:]; # pop front
|
||||
if (size(me._messages) == 0) {
|
||||
me._messageScreenActive = 0;
|
||||
# refresh normal screen
|
||||
return;
|
||||
}
|
||||
|
||||
me._buildMessageScreen();
|
||||
return;
|
||||
}
|
||||
|
||||
if (size(me._messages) == 0) {
|
||||
debug.dump('no messages to show');
|
||||
return;
|
||||
}
|
||||
|
||||
me._messageScreenActive = 1;
|
||||
me._buildMessageScreen();
|
||||
},
|
||||
|
||||
_buildMessageScreen: func
|
||||
{
|
||||
|
||||
},
|
||||
|
||||
# Nav4 mode is special
|
||||
inNav4Mode: func { return me.isPageActive(NAV, 4); },
|
||||
|
||||
formatDuration: func(timeInSeconds)
|
||||
{
|
||||
if (timeInSeconds > 60) {
|
||||
return sprintf("0:%02d", timeInSeconds);
|
||||
}
|
||||
|
||||
if (timeInSeconds > 3600) {
|
||||
var mins = int(timeInSeconds / 60);
|
||||
var secs = timeInSeconds - (mins * 60);
|
||||
return sprintf("%d:%02d", mins, secs);
|
||||
}
|
||||
|
||||
var hours = int(timeInSeconds / 3600);
|
||||
timeInSeconds -= (hours * 3600);
|
||||
var mins = int(timeInSeconds / 60);
|
||||
var secs = timeInSeconds - (mins * 60);
|
||||
return sprintf("%d:%02d:%02d", hours, mins, secs);
|
||||
},
|
||||
|
||||
formatLatitude: func(lat)
|
||||
{
|
||||
var north = (lat >= 0.0);
|
||||
var latDeg = int(lat);
|
||||
var latMinutes = math.abs(lat - latDeg) * 60;
|
||||
return sprintf('%s%02d*%04.1f', north ? "N" : "S", abs(latDeg), latMinutes);
|
||||
},
|
||||
|
||||
formatLongitude: func(lon)
|
||||
{
|
||||
var east = (lon >= 0.0);
|
||||
var lonDeg = int(lon);
|
||||
var lonMinutes = math.abs(lon - lonDeg) * 60;
|
||||
sprintf("%s%03d*%04.1f", east ? 'E' : 'W', abs(lonDeg), lonMinutes);
|
||||
},
|
||||
directTo: func{
|
||||
# Direct To (DTO) Button Functionality
|
||||
},
|
||||
|
||||
obsButton: func{
|
||||
# OBS Button Functionality
|
||||
},
|
||||
|
||||
messageButton: func{
|
||||
# Messages Button Functionality
|
||||
if (me._messageScreenActive) {
|
||||
me._messages = me._messages[1:]; # pop front
|
||||
if (size(me._messages) == 0) {
|
||||
me._messageScreenActive = 0;
|
||||
# refresh normal screen
|
||||
return;
|
||||
}
|
||||
|
||||
me._buildMessageScreen();
|
||||
return;
|
||||
}
|
||||
|
||||
if (size(me._messages) == 0) {
|
||||
debug.dump('no messages to show');
|
||||
return;
|
||||
}
|
||||
|
||||
me._messageScreenActive = 1;
|
||||
me._buildMessageScreen();
|
||||
},
|
||||
|
||||
procedureButton: func{
|
||||
# Procedure Button Functionality
|
||||
},
|
||||
|
||||
altitudeButton: func{
|
||||
# Altitude Button Functionality
|
||||
},
|
||||
|
||||
clearButton: func{
|
||||
# Clear Button Functionality
|
||||
},
|
||||
|
||||
menuButton: func{
|
||||
# Menu Button Functionality
|
||||
},
|
||||
|
||||
rangeButton: func( dir ){
|
||||
# Range Button Functionality
|
||||
# variable dir:
|
||||
# -1 = down (decrease)
|
||||
# 0 = not pressed
|
||||
# 1 = up (increase)
|
||||
},
|
||||
|
||||
innerKnob: func( offset ){
|
||||
# Inner Knob Functionality
|
||||
},
|
||||
|
||||
outerKnob: func( offset ){
|
||||
# Outer Knob Functionality
|
||||
},
|
||||
|
||||
powerButton: func{
|
||||
# Power Button Functionality
|
||||
# Power Button equals to pushing in the brightness knob
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
reload_gps = func
|
||||
{
|
||||
kln94._setActivePage(nil); # force existing page to be undisplayed cleanly
|
||||
|
||||
# make the cdu instance available inside the module namespace
|
||||
# we are going to load into.
|
||||
# for a reload this also wipes the existing namespace, which we want
|
||||
globals['kln94_NS'] = { gps: kln94, KLN94:KLN94 };
|
||||
|
||||
var pages = ['navPages.nas', 'infoPages.nas', 'flightplanPages.nas', 'settingPages.nas', 'auxPages.nas'];
|
||||
|
||||
#var settings = props.globals.getNode('/instrumentation/cdu/settings');
|
||||
foreach (var path; pages) {
|
||||
# resolve the path in FG_ROOT, and --fg-aircraft dir, etc
|
||||
var abspath = resolvepath('Aircraft/Instruments-3d/kln94/' ~ path);
|
||||
if (io.stat(abspath) == nil) {
|
||||
debug.dump('KN94 page not found:', path, abspath);
|
||||
continue;
|
||||
}
|
||||
|
||||
# load pages code into a seperate namespace which we defined above
|
||||
# also means we can clean out that namespace later
|
||||
io.load_nasal(abspath, 'kln94_NS');
|
||||
}
|
||||
# cdu.displayPageByTag(getprop('/instrumentation/cdu/settings/boot-page'));
|
||||
kln94._setActivePage(nil); # force existing page to be undisplayed cleanly
|
||||
|
||||
# make the cdu instance available inside the module namespace
|
||||
# we are going to load into.
|
||||
# for a reload this also wipes the existing namespace, which we want
|
||||
globals['kln94_NS'] = { gps: kln94, KLN94:KLN94 };
|
||||
|
||||
var pages = ['navPages.nas', 'flightplanPages.nas', 'settingPages.nas', 'auxPages.nas'];
|
||||
# , 'infoPages.nas'
|
||||
|
||||
#var settings = props.globals.getNode('/instrumentation/cdu/settings');
|
||||
foreach (var path; pages) {
|
||||
# resolve the path in FG_ROOT, and --fg-aircraft dir, etc
|
||||
var abspath = resolvepath('Aircraft/Instruments-3d/kln94/' ~ path);
|
||||
if (io.stat(abspath) == nil) {
|
||||
debug.dump('KLN94 page not found:', path, abspath);
|
||||
continue;
|
||||
}
|
||||
|
||||
# load pages code into a seperate namespace which we defined above
|
||||
# also means we can clean out that namespace later
|
||||
io.load_nasal(abspath, 'kln94_NS');
|
||||
}
|
||||
# cdu.displayPageByTag(getprop('/instrumentation/cdu/settings/boot-page'));
|
||||
};
|
||||
|
||||
setlistener("/nasal/canvas/loaded", func
|
||||
{
|
||||
# create base PGS
|
||||
kln94 = KLN94.new('/instrumentation/gps', {"node": "screen"});
|
||||
reload_gps();
|
||||
# create base PGS
|
||||
kln94 = KLN94.new('/instrumentation/gps', {"node": "screen"});
|
||||
reload_gps();
|
||||
}, 1);
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 78 KiB |
788
Aircraft/Instruments-3d/kln94/kln94.svg
Normal file
788
Aircraft/Instruments-3d/kln94/kln94.svg
Normal file
|
@ -0,0 +1,788 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1024"
|
||||
height="512"
|
||||
viewBox="0 0 1024 512.00002"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3 (1:1.3+202307231459+0e150ed6c4)"
|
||||
sodipodi:docname="kln94.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="kln94.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#757575"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="1.8872648"
|
||||
inkscape:cx="103.0592"
|
||||
inkscape:cy="411.44199"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="977"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:export-bgcolor="#000000ff" /><defs
|
||||
id="defs1"><linearGradient
|
||||
id="linearGradient47"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop47" /><stop
|
||||
style="stop-color:#e5e5e5;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop48" /></linearGradient><linearGradient
|
||||
id="linearGradient41"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#000000;stop-opacity:0.5;"
|
||||
offset="0"
|
||||
id="stop41" /><stop
|
||||
style="stop-color:#000000;stop-opacity:0.30000001;"
|
||||
offset="0.25"
|
||||
id="stop44" /><stop
|
||||
style="stop-color:#000000;stop-opacity:0.1;"
|
||||
offset="0.40000001"
|
||||
id="stop46" /><stop
|
||||
style="stop-color:#000000;stop-opacity:0.1;"
|
||||
offset="0.60000002"
|
||||
id="stop45" /><stop
|
||||
style="stop-color:#000000;stop-opacity:0.30000001;"
|
||||
offset="0.75"
|
||||
id="stop43" /><stop
|
||||
style="stop-color:#000000;stop-opacity:0.5;"
|
||||
offset="1"
|
||||
id="stop42" /></linearGradient><linearGradient
|
||||
id="linearGradient37"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#555559;stop-opacity:1;"
|
||||
offset="0.1"
|
||||
id="stop37" /><stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0.89999998"
|
||||
id="stop38" /></linearGradient><linearGradient
|
||||
id="linearGradient23"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop23" /><stop
|
||||
style="stop-color:#f2f2f2;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop24" /></linearGradient><marker
|
||||
style="overflow:visible"
|
||||
id="Triangle"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Triangle arrow"
|
||||
markerWidth="1.20000005"
|
||||
markerHeight="0.89999998"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="none"><path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path135" /></marker><linearGradient
|
||||
id="linearGradient10"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0.00357637"
|
||||
id="stop10" /><stop
|
||||
style="stop-color:#212121;stop-opacity:1;"
|
||||
offset="0.45044389"
|
||||
id="stop14" /><stop
|
||||
style="stop-color:#9b9b9b;stop-opacity:1;"
|
||||
offset="0.62822884"
|
||||
id="stop13" /><stop
|
||||
style="stop-color:#cfcfcf;stop-opacity:1;"
|
||||
offset="0.72696996"
|
||||
id="stop18" /><stop
|
||||
style="stop-color:#d0d0d0;stop-opacity:1;"
|
||||
offset="0.82252026"
|
||||
id="stop12" /><stop
|
||||
style="stop-color:#ededed;stop-opacity:1;"
|
||||
offset="0.88386118"
|
||||
id="stop16" /><stop
|
||||
style="stop-color:#afafaf;stop-opacity:1;"
|
||||
offset="0.93145448"
|
||||
id="stop15" /><stop
|
||||
style="stop-color:#cecece;stop-opacity:1;"
|
||||
offset="0.96410459"
|
||||
id="stop17" /><stop
|
||||
style="stop-color:#b5b5b5;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop11" /></linearGradient><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient10"
|
||||
id="radialGradient11"
|
||||
cx="130.78629"
|
||||
cy="44.993439"
|
||||
fx="130.78629"
|
||||
fy="44.993439"
|
||||
r="16.786892"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.8174278,0,0,1.8174278,-203.26463,279.34555)" /><filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter19"
|
||||
x="-0.38212442"
|
||||
y="-0.19577836"
|
||||
width="1.7642488"
|
||||
height="1.3915567"><feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="8.6749521"
|
||||
id="feGaussianBlur19" /></filter><filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter22"
|
||||
x="-0.57421333"
|
||||
y="-0.57421333"
|
||||
width="2.1484267"
|
||||
height="2.1484267"><feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="7.0695823"
|
||||
id="feGaussianBlur22" /></filter><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient24"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,0,464.22735)"
|
||||
gradientUnits="userSpaceOnUse" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient25"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,66.056847,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient27"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,198.17054,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient28"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,132.11369,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient31"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,462.39793,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient32"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,396.34108,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient33"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,330.28424,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient34"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,264.22739,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient35"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.54026014,-66.056839,464.22735)"
|
||||
cx="236.14624"
|
||||
cy="1009.7609"
|
||||
fx="236.14624"
|
||||
fy="1009.7609"
|
||||
r="33.028423" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient37"
|
||||
id="linearGradient38"
|
||||
x1="864.81"
|
||||
y1="448.01194"
|
||||
x2="1024"
|
||||
y2="448.01194"
|
||||
gradientUnits="userSpaceOnUse" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient23"
|
||||
id="radialGradient40"
|
||||
cx="593.52612"
|
||||
cy="1165.3798"
|
||||
fx="593.52612"
|
||||
fy="1165.3798"
|
||||
r="9.5591116"
|
||||
gradientTransform="matrix(1,0,0,2.6572999,0,-1931.3839)"
|
||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient41"
|
||||
id="linearGradient42"
|
||||
x1="593.52612"
|
||||
y1="1169.8085"
|
||||
x2="593.52612"
|
||||
y2="1160.9512"
|
||||
gradientUnits="userSpaceOnUse" /><filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter46"
|
||||
x="-0.0036989802"
|
||||
y="-0.0079841331"
|
||||
width="1.007398"
|
||||
height="1.0159683"><feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.029465803"
|
||||
id="feGaussianBlur46" /></filter><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient47"
|
||||
id="radialGradient48"
|
||||
cx="593.62998"
|
||||
cy="1213.0676"
|
||||
fx="593.62998"
|
||||
fy="1213.0676"
|
||||
r="9.531229"
|
||||
gradientUnits="userSpaceOnUse" /></defs><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><g
|
||||
id="data_loader_jack"><rect
|
||||
style="fill:#c6c6c6;fill-opacity:1;stroke:none;stroke-width:2.2;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect36"
|
||||
width="68.859962"
|
||||
height="68.85997"
|
||||
x="0"
|
||||
y="326.6879" /><circle
|
||||
style="fill:url(#radialGradient11);stroke-width:2.72615;stroke-linecap:round"
|
||||
id="path10"
|
||||
cx="34.429981"
|
||||
cy="361.11789"
|
||||
r="30.508963" /></g><g
|
||||
id="buttons"
|
||||
transform="matrix(1.6065961,0,0,1.6065961,-151.34166,-1266.9221)"><g
|
||||
id="crsr_btn"><rect
|
||||
style="fill:url(#radialGradient24);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect2-6"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="203.11781"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.294px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.30659;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="259.88785"
|
||||
y="923.52979"
|
||||
id="text23"
|
||||
transform="scale(0.90847249,1.1007488)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan23"
|
||||
x="259.88785"
|
||||
y="923.52979"
|
||||
style="stroke-width:2.30659">CRSR</tspan></text></g><g
|
||||
id="msg_btn"><rect
|
||||
style="fill:url(#radialGradient25);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect24"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="269.17465"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="315.47238"
|
||||
y="973.4859"
|
||||
id="text24"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan24"
|
||||
x="315.47238"
|
||||
y="973.4859"
|
||||
style="stroke-width:2.43136">MSG</tspan></text></g><g
|
||||
id="obs_btn"><rect
|
||||
style="fill:url(#radialGradient28);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect25"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="335.23151"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="384.43723"
|
||||
y="973.48541"
|
||||
id="text25"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan25"
|
||||
x="384.43723"
|
||||
y="973.48541"
|
||||
style="stroke-width:2.43136">OBS</tspan></text></g><g
|
||||
id="alt_btn"><rect
|
||||
style="fill:url(#radialGradient27);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect26"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="401.28836"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="453.40005"
|
||||
y="973.4859"
|
||||
id="text26"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan26"
|
||||
x="453.40005"
|
||||
y="973.4859"
|
||||
style="stroke-width:2.43136">ALT</tspan></text></g><g
|
||||
id="nrst_btn"><rect
|
||||
style="fill:url(#radialGradient34);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect28"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="467.34521"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="522.45935"
|
||||
y="973.4859"
|
||||
id="text28"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan28"
|
||||
x="522.45935"
|
||||
y="973.4859"
|
||||
style="stroke-width:2.43136">NRST</tspan></text></g><g
|
||||
id="clr_btn"><rect
|
||||
style="fill:url(#radialGradient32);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect30"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="599.45892"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="660.40137"
|
||||
y="973.4859"
|
||||
id="text30"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan30"
|
||||
x="660.40137"
|
||||
y="973.4859"
|
||||
style="stroke-width:2.43136">CLR</tspan></text></g><g
|
||||
id="ent_btn"><rect
|
||||
style="fill:url(#radialGradient31);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect31"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="665.51575"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.2295px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.43136;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="729.40424"
|
||||
y="973.4859"
|
||||
id="text31"
|
||||
transform="scale(0.9576141,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan31"
|
||||
x="729.40424"
|
||||
y="973.4859"
|
||||
style="stroke-width:2.43136">ENT</tspan></text></g><g
|
||||
id="proc_btn"><rect
|
||||
style="fill:url(#radialGradient35);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect34"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="137.06097"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.294px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.30659;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="187.17685"
|
||||
y="923.5293"
|
||||
id="text34"
|
||||
transform="scale(0.90847249,1.1007488)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan34"
|
||||
x="187.17685"
|
||||
y="923.5293"
|
||||
style="stroke-width:2.30659">PROC</tspan></text></g><g
|
||||
id="dct_btn"><rect
|
||||
style="fill:url(#radialGradient33);fill-opacity:1;stroke-width:1.5203;stroke-linecap:round"
|
||||
id="rect29"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="533.40204"
|
||||
y="991.91699"
|
||||
rx="0"
|
||||
ry="0" /><g
|
||||
id="g35"
|
||||
transform="matrix(0.9,0,0,0.9,57.060975,100.9761)"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.255px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.70151;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="591.38312"
|
||||
y="974.21082"
|
||||
id="text29"
|
||||
transform="scale(0.95761411,1.044262)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan29"
|
||||
x="591.38312"
|
||||
y="974.21082"
|
||||
style="stroke-width:2.70151">D</tspan></text><path
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.2;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle)"
|
||||
d="M 551.95046,1009.7609 H 579.8942"
|
||||
id="path35" /></g></g><g
|
||||
id="rng_btn"
|
||||
transform="matrix(1.5679571,0,0,1.5679571,-313.20852,-759.8324)"><rect
|
||||
style="fill:url(#radialGradient40);fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect38"
|
||||
width="19.118223"
|
||||
height="50.802853"
|
||||
x="583.96704"
|
||||
y="1139.9784" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path40"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="802.21515"
|
||||
sodipodi:cy="586.65814"
|
||||
sodipodi:r1="9.0928698"
|
||||
sodipodi:r2="4.5464349"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:arg2="1.5707963"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 810.08981,591.20458 -15.74932,0 7.87466,-13.63931 z"
|
||||
transform="matrix(0.58248765,0,0,0.58248765,126.24574,812.19181)"
|
||||
inkscape:transform-center-y="-2.1273322" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path41"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="802.21515"
|
||||
sodipodi:cy="586.65814"
|
||||
sodipodi:r1="9.0928698"
|
||||
sodipodi:r2="4.5464349"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:arg2="1.5707963"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 810.08981,591.20458 -15.74932,0 7.87466,-13.63931 z"
|
||||
transform="matrix(-0.58248765,0,0,-0.58248765,1060.8066,1518.2937)"
|
||||
inkscape:transform-center-y="2.1272992"
|
||||
inkscape:transform-center-x="-4.2155407e-05" /><rect
|
||||
style="opacity:0.37464232;fill:url(#linearGradient42);fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter46)"
|
||||
id="rect41"
|
||||
width="19.118223"
|
||||
height="8.8573084"
|
||||
x="583.96704"
|
||||
y="1160.9512" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.89858px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.811052;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="593.47864"
|
||||
y="1167.491"
|
||||
id="text41"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan41"
|
||||
style="stroke-width:0.811052"
|
||||
x="593.47864"
|
||||
y="1167.491">RNG</tspan></text></g><g
|
||||
id="mnu_btn"
|
||||
transform="matrix(2.1317959,0,0,2.1317959,-683.38982,-1538.0891)"><rect
|
||||
style="opacity:1;fill:url(#radialGradient48);fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect47"
|
||||
width="19.062458"
|
||||
height="19.062458"
|
||||
x="584.09875"
|
||||
y="1203.5364" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.86638px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.806625;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="593.64862"
|
||||
y="1215.1313"
|
||||
id="text47"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan47"
|
||||
style="stroke-width:0.806625"
|
||||
x="593.64862"
|
||||
y="1215.1313">MNU</tspan></text></g></g><rect
|
||||
style="fill:url(#linearGradient38);fill-opacity:1;stroke:none;stroke-width:2.2;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="gradient"
|
||||
width="159.18997"
|
||||
height="127.97614"
|
||||
x="864.81"
|
||||
y="384.02386" /><g
|
||||
id="bezel"><rect
|
||||
style="fill:#555559;fill-opacity:1;stroke:none;stroke-width:2.134;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="background"
|
||||
width="1024"
|
||||
height="326.6879"
|
||||
x="0"
|
||||
y="0"
|
||||
rx="0"
|
||||
ry="0" /><g
|
||||
id="element_shadows"><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect1"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="100.03304"
|
||||
y="79.98143"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect2"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="202.00568"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect3"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="295.33902"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect4"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="388.67236"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect5"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="482.00571"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect6"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="575.33905"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect7"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="668.67236"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect8"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="762.00568"
|
||||
y="274.73492"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><circle
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="path8"
|
||||
cx="125.76662"
|
||||
cy="253.27666"
|
||||
r="27.143105" /><circle
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:3.1984;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="circle8"
|
||||
cx="913.21527"
|
||||
cy="220.13216"
|
||||
r="57.876289" /><circle
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:0.816458;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="circle9"
|
||||
cx="802.0899"
|
||||
cy="169.88144"
|
||||
r="14.774124" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect9"
|
||||
width="29.548248"
|
||||
height="81.530716"
|
||||
x="787.3158"
|
||||
y="52.900757"
|
||||
rx="14.774124"
|
||||
ry="14.774124" /><rect
|
||||
style="fill:#010101;fill-opacity:1;stroke-width:1.5203;stroke-linecap:round;filter:url(#filter22)"
|
||||
id="rect21"
|
||||
width="66.056847"
|
||||
height="35.687881"
|
||||
x="885.07422"
|
||||
y="79.98143"
|
||||
rx="5.5493536"
|
||||
ry="5.5493536" /><rect
|
||||
style="mix-blend-mode:normal;fill:#000000;fill-opacity:0.42438552;stroke-width:1.17777;stroke-linecap:round;filter:url(#filter19)"
|
||||
id="rect18"
|
||||
width="54.484573"
|
||||
height="106.34416"
|
||||
x="20.913731"
|
||||
y="138.94962"
|
||||
rx="24.394333"
|
||||
ry="24.394333"
|
||||
transform="matrix(0.89957285,0,0,1,4.8361718,0)" /></g><g
|
||||
id="markings"><text
|
||||
xml:space="preserve"
|
||||
style="font-size:16.2498px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.52341;stroke-linecap:round"
|
||||
x="1007.6089"
|
||||
y="28.643665"
|
||||
id="text9"
|
||||
transform="scale(0.91116257,1.097499)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9"
|
||||
x="1007.6089"
|
||||
y="28.643665"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:1.52341">KLN 94 TSO</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:19.6141px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.83881;stroke-linecap:round"
|
||||
x="1007.6072"
|
||||
y="51.702934"
|
||||
id="text10"
|
||||
transform="scale(0.91116257,1.097499)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10"
|
||||
x="1007.6072"
|
||||
y="51.702934"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:1.83881">GPS</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:16.5292px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.54961;stroke-linecap:round"
|
||||
x="136.55606"
|
||||
y="180.87639"
|
||||
id="text19"
|
||||
transform="scale(0.91561743,1.0921592)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19"
|
||||
x="136.55606"
|
||||
y="180.87639"
|
||||
style="stroke-width:1.54961">PUSH ON</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:16.5292px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.54961;stroke-linecap:round"
|
||||
x="136.07584"
|
||||
y="202.25269"
|
||||
id="text20"
|
||||
transform="scale(0.91561743,1.0921592)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan20"
|
||||
x="136.07584"
|
||||
y="202.25269"
|
||||
style="stroke-width:1.54961">BRT</tspan></text><path
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.134;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle)"
|
||||
id="circle20"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="125.76662"
|
||||
sodipodi:cy="253.27666"
|
||||
sodipodi:rx="38.613586"
|
||||
sodipodi:ry="38.613586"
|
||||
sodipodi:start="5.0614548"
|
||||
sodipodi:end="5.5850536"
|
||||
sodipodi:arc-type="arc"
|
||||
d="m 138.97324,216.99175 a 38.613586,38.613586 0 0 1 16.3731,11.46457"
|
||||
sodipodi:open="true" /><path
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.134;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path20"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="125.76662"
|
||||
sodipodi:cy="253.27666"
|
||||
sodipodi:rx="38.613586"
|
||||
sodipodi:ry="38.613586"
|
||||
sodipodi:start="3.7524579"
|
||||
sodipodi:end="4.2760567"
|
||||
sodipodi:arc-type="arc"
|
||||
d="M 94.136219,231.12881 A 38.613586,38.613586 0 0 1 109.44781,218.28086"
|
||||
sodipodi:open="true" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.6541px;line-height:105%;font-family:Arial;-inkscape-font-specification:'Arial Bold Italic';text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.82112;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="148.72911"
|
||||
y="261.17526"
|
||||
id="text21"
|
||||
transform="scale(0.85338233,1.1718077)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan21"
|
||||
x="148.72911"
|
||||
y="261.17526"
|
||||
style="stroke-width:1.82112">BENDIX/KING</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:16.5292px;line-height:105%;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.54961;stroke-linecap:round"
|
||||
x="997.41681"
|
||||
y="276.62503"
|
||||
id="text19-2"
|
||||
transform="scale(0.91561743,1.0921592)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19-7"
|
||||
x="997.41681"
|
||||
y="276.62503"
|
||||
style="stroke-width:1.54961">PULL SCAN</tspan></text></g></g><rect
|
||||
style="opacity:1;fill:#f7f7f7;fill-opacity:1;stroke:none;stroke-width:1.36935;stroke-linecap:butt;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="white"
|
||||
width="42.860779"
|
||||
height="72.483772"
|
||||
x="94.200188"
|
||||
y="1034.7778"
|
||||
transform="matrix(1.6065961,0,0,1.6065961,-151.34166,-1266.9221)" /></g></svg>
|
After Width: | Height: | Size: 33 KiB |
|
@ -1,164 +1,580 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<!-- This simulates a Bendix/King KLN94 GPS
|
||||
|
||||
Nasal and XML 2013 James Turner
|
||||
Model, Texture and Animations 2023 Benedikt Wolf
|
||||
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>kln94.ac</path>
|
||||
|
||||
<!--
|
||||
<animation>
|
||||
<type>material</type>
|
||||
<texture alias="../../texture"/>
|
||||
</animation>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Effects/lightmap</inherits-from>
|
||||
<parameters>
|
||||
<texture n="1">
|
||||
<image>Aircraft/Instruments-3d/cdu2/boeing_lightmap.png</image>
|
||||
</texture>
|
||||
<condition><use>/instrumentation/cdu/serviceable</use></condition>
|
||||
|
||||
<factor><use>/instrumentation/cdu/brightness-norm</use></factor>
|
||||
</parameters>
|
||||
<object-name>CDU</object-name>
|
||||
<object-name>Btn.side.r.1</object-name>
|
||||
<object-name>Btn.side.r.2</object-name>
|
||||
<object-name>Btn.side.r.3</object-name>
|
||||
<object-name>Btn.side.r.4</object-name>
|
||||
<object-name>Btn.side.r.5</object-name>
|
||||
<object-name>Btn.side.r.6</object-name>
|
||||
</effect> -->
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>ent-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.enter();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>crsr-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.toggleCursorMode();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>nrst-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.nearestButton();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>dto-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.directTo();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>obs-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.obsButton();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>msg-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.messageButton();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>alt-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.altitudeButton();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>clr-btn</object-name>
|
||||
<action>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.clearButton();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-inner</object-name>
|
||||
<action>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.innerKnob(cmdarg().getNode('offset').getValue());</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-outer</object-name>
|
||||
<action>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.outerKnob(cmdarg().getNode('offset').getValue());</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-brightness</object-name>
|
||||
<action>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/instrumentation/kln94/brightness-norm</property>
|
||||
<step>0.05</step>
|
||||
<min>0</min>
|
||||
<max>1</max>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
</PropertyList>
|
||||
|
||||
<path>kln94.ac</path>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>ent-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.enter();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/enter-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/enter-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>ent-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/enter-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>crsr-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.toggleCursorMode();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/cursor-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/cursor-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>crsr-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/cursor-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>nrst-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.nearestButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/nearest-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/nearest-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>nrst-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/nearest-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>dto-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.directTo();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/direct-to-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/direct-to-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>dto-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/direct-to-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>obs-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.obsButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/obs-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/obs-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>obs-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/obs-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>msg-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.messageButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/message-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/message-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>msg-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/message-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>proc-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.procedureButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/procedure-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/procedure-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>proc-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/procedure-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>alt-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.altitudeButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/altitude-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/altitude-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>alt-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/altitude-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>clr-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.clearButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/clear-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/clear-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>clr-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/clear-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>mnu-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.menuButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/menu-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/menu-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>mnu-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/menu-btn</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x> 0.966</x> <!-- cos(15 deg) -->
|
||||
<y>-0.259</y> <!-- -sin(15 deg) -->
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>rng-btn</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.rangeButton( 1 );</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
<action>
|
||||
<button>1</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.rangeButton( -1 );</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>-1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>rng-btn-up</object-name>
|
||||
<visible>0</visible>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.rangeButton( 1 );</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>rng-btn-down</object-name>
|
||||
<visible>0</visible>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.rangeButton( -1 );</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>-1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>rng-btn</object-name>
|
||||
<property>instrumentation/kln94[0]/range-btn</property>
|
||||
<factor>-10</factor>
|
||||
<center>
|
||||
<x-m>0.0142</x-m>
|
||||
<y-m>0.046</y-m>
|
||||
<z-m>0.0108</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0.259</x> <!-- sin(15 deg) -->
|
||||
<y>0.966</y> <!-- cos(15 deg) -->
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-inner</object-name>
|
||||
<property>instrumentation/kln94[0]/inner-knob</property>
|
||||
<factor>1</factor>
|
||||
<center>
|
||||
<y-m> 0.063 </y-m>
|
||||
<z-m> -0.009 </z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
<action>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.innerKnob(cmdarg().getNode('offset').getValue());</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>instrumentation/kln94[0]/inner-knob</property>
|
||||
<factor>5</factor>
|
||||
<min>0</min>
|
||||
<max>359</max>
|
||||
<wrap>1</wrap>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-outer</object-name>
|
||||
<property>instrumentation/kln94[0]/outer-knob</property>
|
||||
<factor>1</factor>
|
||||
<center>
|
||||
<y-m> 0.063 </y-m>
|
||||
<z-m> -0.009 </z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
<action>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.outerKnob(cmdarg().getNode('offset').getValue());</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>instrumentation/kln94[0]/outer-knob</property>
|
||||
<factor>5</factor>
|
||||
<min>0</min>
|
||||
<max>359</max>
|
||||
<wrap>1</wrap>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
|
||||
<animation>
|
||||
<type>knob</type>
|
||||
<object-name>knob-brightness</object-name>
|
||||
<property>/instrumentation/kln94/brightness-norm</property>
|
||||
<factor>270</factor>
|
||||
<center>
|
||||
<y-m> -0.0605 </y-m>
|
||||
<z-m> -0.014 </z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
<action>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>instrumentation/kln94/brightness-norm</property>
|
||||
<factor>0.05</factor>
|
||||
<min>0</min>
|
||||
<max>1</max>
|
||||
<wrap>false</wrap>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>knob-brightness-push</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>KLN94.kln94.powerButton();</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/power-brightness-knob</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>instrumentation/kln94[0]/power-brightness-knob</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>knob-brightness</object-name>
|
||||
<object-name>knob-brightness-push</object-name>
|
||||
<property>instrumentation/kln94[0]/power-brightness-knob</property>
|
||||
<factor>-0.001</factor>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
</PropertyList>
|
||||
|
|
Binary file not shown.
|
@ -2,79 +2,81 @@
|
|||
|
||||
var Nav1Page =
|
||||
{
|
||||
a:2,
|
||||
|
||||
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav1Page, KLN94.Page.new(KLN94.PAGE_NAV, 0)]};
|
||||
return m;
|
||||
},
|
||||
|
||||
hasActiveIdent: func { 1 },
|
||||
showsCDI: func { 1 },
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
if (gps.isDirectToActive()) {
|
||||
|
||||
} else {
|
||||
# leg mode
|
||||
gps.setLine(0, sprintf('%6s->%6s',
|
||||
gps.props.previousIdent.getStringValue(),
|
||||
gps.props.activeIdent.getStringValue())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
gps.setLine(3, ' VNV Off');
|
||||
|
||||
var toFrom = gps.isTo() ? 'To' : 'Fr';
|
||||
var eteToWp1 = gps.formatDuration(gps.props.timeToWaypoint.getIntValue());
|
||||
gps.setLine(4, sprintf('%03d*%s ', bearingToWp1, toFrom) ~ eteToWp1);
|
||||
},
|
||||
|
||||
refresh: func(gps)
|
||||
{
|
||||
|
||||
}
|
||||
a:2,
|
||||
|
||||
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav1Page, KLN94.Page.new(KLN94.PAGE_NAV, 0, 0)]};
|
||||
return m;
|
||||
},
|
||||
|
||||
hasActiveIdent: func { 1 },
|
||||
showsCDI: func { 1 },
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
if (gps.isDirectToActive()) {
|
||||
|
||||
} else {
|
||||
# leg mode
|
||||
gps.setLine(0, sprintf('%6s->%6s',
|
||||
gps.props.previousIdent.getStringValue(),
|
||||
gps.props.activeIdent.getStringValue())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
gps.setLine(3, ' VNV Off');
|
||||
|
||||
var toFrom = gps.isTo() ? 'To' : 'Fr';
|
||||
var eteToWp1 = gps.formatDuration(gps.props.timeToWaypoint.getIntValue());
|
||||
gps.setLine(4, sprintf('%03d*%s ', bearingToWp1, toFrom) ~ eteToWp1);
|
||||
},
|
||||
|
||||
refresh: func(gps)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
var Nav2Page =
|
||||
{
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav2Page, KLN94.Page.new(KLN94.PAGE_NAV, 1)]};
|
||||
return m;
|
||||
},
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
# select refnavaid!
|
||||
|
||||
gps.setLine(0, ' PRESENT POSN'),
|
||||
gps.setLine(1, ' Ref:%s', gps.refNavaid.id);
|
||||
|
||||
gps.setLine(3, ' ' + gps.formatLatitude(gps.props.indicatedLat.getDoubleValue()));
|
||||
gps.setLine(4, ' ' + gps.formatLongitude(gps.props.indicatedLon.getDoubleValue()));
|
||||
}
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav2Page, KLN94.Page.new(KLN94.PAGE_NAV, 0, 1)]};
|
||||
return m;
|
||||
},
|
||||
|
||||
display: func(gps)
|
||||
{
|
||||
# select refnavaid!
|
||||
|
||||
gps.setLine(0, ' PRESENT POSN');
|
||||
gps.setLine(1, ' Ref:%s', gps.refNavaid.id);
|
||||
|
||||
gps.setLine(3, ' ' + gps.formatLatitude(gps.props.indicatedLat.getDoubleValue()));
|
||||
gps.setLine(4, ' ' + gps.formatLongitude(gps.props.indicatedLon.getDoubleValue()));
|
||||
}
|
||||
};
|
||||
|
||||
var Nav3Page =
|
||||
{
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav3Page, KLN94.Page.new(KLN94.PAGE_NAV, 2)]};
|
||||
return m;
|
||||
},
|
||||
new: func()
|
||||
{
|
||||
m = {parents: [Nav3Page, KLN94.Page.new(KLN94.PAGE_NAV, 0, 2)]};
|
||||
return m;
|
||||
},
|
||||
};
|
||||
|
||||
var nav1 = Nav1Page.new();
|
||||
gps.addPage(nav1);
|
||||
|
||||
|
||||
gps.addPage(Nav2Page.new());
|
||||
gps.addPage(Nav3Page.new());
|
||||
|
||||
|
||||
# FIXME gps.addPage causes a "No such member" error
|
||||
# I don't yet know how to fix this, thus it's commented out for now
|
||||
# (Benedikt Wolf 2023)
|
||||
|
||||
#gps.addPage(nav1);
|
||||
|
||||
|
||||
#gps.addPage(Nav2Page.new());
|
||||
#gps.addPage(Nav3Page.new());
|
||||
|
|
Loading…
Reference in a new issue