2017-12-31 16:10:52 +00:00
|
|
|
# See: http://wiki.flightgear.org/MapStructure
|
|
|
|
#
|
|
|
|
# Direct TO line. Displays line from current position to a given Lat/Lon
|
|
|
|
|
|
|
|
# Class things:
|
|
|
|
var name = 'DTO';
|
|
|
|
var parents = [LineSymbol];
|
|
|
|
var __self__ = caller(0)[0];
|
|
|
|
LineSymbol.makeinstance( name, __self__ );
|
|
|
|
|
|
|
|
SymbolLayer.get(name).df_style = { # style to use by default
|
|
|
|
line_width: 2,
|
|
|
|
color: [1.0,1.0,1.0],
|
|
|
|
dash_array: [5,5,5,5],
|
|
|
|
};
|
|
|
|
|
|
|
|
var init = func {
|
|
|
|
me.element.setColor(me.layer.style.color)
|
|
|
|
.setStrokeLineWidth(me.layer.style.line_width)
|
|
|
|
.setStrokeDashArray(me.layer.style.dash_array);
|
|
|
|
};
|
|
|
|
|
|
|
|
var draw = func() {
|
|
|
|
me.callback('draw_before');
|
2020-04-20 14:24:49 +00:00
|
|
|
logprint(_MP_dbg_lvl, "redrawing a LineSymbol "~me.layer.type);
|
2017-12-31 16:10:52 +00:00
|
|
|
me.element.reset();
|
|
|
|
var cmds = [];
|
|
|
|
var coords = [];
|
|
|
|
var cmd = canvas.Path.VG_LINE_TO;
|
|
|
|
|
|
|
|
append(coords,"N"~me.layer.map.getLat());
|
|
|
|
append(coords,"E"~me.layer.map.getLon());
|
|
|
|
append(cmds,canvas.Path.VG_MOVE_TO);
|
|
|
|
|
|
|
|
var path = me.model;
|
|
|
|
if(typeof(path) == 'hash'){
|
|
|
|
path = me.model.path;
|
|
|
|
if(path == nil)
|
|
|
|
__die("LineSymbol model requires a 'path' member (vector)");
|
|
|
|
}
|
|
|
|
foreach (var m; path) {
|
|
|
|
if(size(keys(m)) >= 2){
|
|
|
|
var (lat,lon) = me.controller.getpos(m);
|
|
|
|
append(coords,"N"~lat);
|
|
|
|
append(coords,"E"~lon);
|
|
|
|
append(cmds,cmd);
|
|
|
|
cmd = canvas.Path.VG_LINE_TO;
|
|
|
|
} else {
|
|
|
|
cmd = canvas.Path.VG_MOVE_TO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
me.element.setDataGeo(cmds, coords);
|
|
|
|
me.element.update(); # this doesn't help with flickering, it seems
|
|
|
|
me.callback('draw_after');
|
|
|
|
};
|