1
0
Fork 0
fgdata/Nasal/canvas/map/DTO.symbol

56 lines
1.4 KiB
Text
Raw Normal View History

# 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');
printlog(_MP_dbg_lvl, "redrawing a LineSymbol "~me.layer.type);
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');
};