I'm using the Basic Example in this wiki page - http://wiki.flightgear.org/Howto:Use_SVG_inside_a_Canvas#Basic_example by doing this-
But I get an error that says -
- Code: Select all
Nasal runtime error: non-objects have no members
at /home/narendran/fgfs/projects/A380/Models/Instruments/ND/vsd.nas, line 79
Where the line is -
- Code: Select all
me.group.getElementById("text_range1").setText(int(me.range*0.25));
I have a feeling it's not able to get the ElementById("text_range1") but I have an objet with that name in the SVG file.
Here's the vsd hash for reference - (ofcourse, it's not complete)
- Code: Select all
var vsd = {
new: func(efis_id, obj_name, switches, interface_props, svg_path) {
var t = {parents:[vsd]};
# Initialize VSD Display
t.display = canvas.new({
"name": "vsdScreen",
"size": [1024, 512],
"view": [1024, 512],
"mipmapping": 1
});
t.efis_id = efis_id;
t.switches = switches;
t.interface_props = interface_props;
# Add placement onto 3D model
t.display.addPlacement({"node": obj_name});
# Create canvas group
t.group = t.display.createGroup();
# Load Vertical Situation Display
canvas.parsesvg(t.group, svg_path);
return t;
},
init: func {
me.UPDATE_INTERVAL = 0.1;
me.loopid = 0;
me.reset();
},
update: func {
# Set Range Numbers
me.range = getprop("/instrumentation/efis["~me.efis_id~"]"~me.switches['set_range'].path);
me.group.getElementById("text_range1").setText(int(me.range*0.25));
me.group.getElementById("text_range2").setText(int(me.range*0.50));
me.group.getElementById("text_range3").setText(int(me.range*0.75));
me.group.getElementById("text_range4").setText(int(me.range));
# Set Altitude Numbers
me.altitude = getprop(me.interface_props.altitude_ind);
foreach(var alt; [10000, 20000, 30000, 40000]) {
if(me.altitude <= alt) {
me.alt_ceil = alt;
break;
}
}
me.group.getElementById("text_alt1").setText(int(me.alt_ceil/2));
me.group.getElementById("text_alt2").setText(me.alt_ceil);
# Move Aircraft Pointer
me.group.getElementById("aircraft_marker").setTranslation(0,262*(me.altitude/me.alt_ceil));
me.group.getElementById("speed_arrow").setTranslation(0,262*(me.altitude/me.alt_ceil));
# Move Altitude Setting Line
me.group.getElementById("altitude_set").setTranslation(0,262*(getprop("/instrumentation/efis["~me.efis_id~"]"~me.interface_props.ap_altitude_set)/me.alt_ceil));
},
reset: func {
me.loopid += 1;
me._loop_(me.loopid);
},
_loop_: func(id) {
id = me.loopid or return;
me.update();
settimer(func {me._loop_(id); }, me.UPDATE_INTERVAL);
}
};
EDIT - Btw, it seems to be loading the svg file on to the canvas file, it just doesn't let me access the objects.