diff --git a/A320-main.xml b/A320-main.xml index 29693e06..f5a1ac94 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -764,7 +764,6 @@ Aircraft/A320Family/Nasal/libraries.nas Aircraft/A320Family/Nasal/PFD_FMA.nas - Aircraft/A320Family/Models/Instruments/ND/ND.nas Aircraft/A320Family/Nasal/gpws.nas Aircraft/A320Family/Nasal/efis.nas Aircraft/A320Family/Nasal/ECAM.nas @@ -797,6 +796,9 @@ Aircraft/A320Family/Nasal/MCDU/MCDU2.nas + + Aircraft/A320Family/Models/Instruments/ND/canvas/ND.nas + diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index 3a6cc783..8da0e851 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -3682,7 +3682,7 @@ false property-toggle - /instrumentation/efis/inputs/CSTR + /instrumentation/efis[1]/inputs/CSTR @@ -3708,7 +3708,7 @@ false property-toggle - /instrumentation/efis/inputs/wpt + /instrumentation/efis[1]/inputs/wpt @@ -3738,11 +3738,11 @@ false property-toggle - /instrumentation/efis/inputs/VORD + /instrumentation/efis[1]/inputs/VORD property-toggle - /instrumentation/efis/inputs/DME + /instrumentation/efis[1]/inputs/DME @@ -3768,7 +3768,7 @@ false property-toggle - /instrumentation/efis/inputs/NDB + /instrumentation/efis[1]/inputs/NDB @@ -3794,7 +3794,7 @@ false property-toggle - /instrumentation/efis/inputs/arpt + /instrumentation/efis[1]/inputs/arpt @@ -3814,7 +3814,7 @@ textranslate cstr.001 - /instrumentation/efis/inputs/CSTR + /instrumentation/efis[1]/inputs/CSTR 0.0625 0 @@ -3838,7 +3838,7 @@ textranslate wpt.001 - /instrumentation/efis/inputs/wpt + /instrumentation/efis[1]/inputs/wpt 0.0625 0 @@ -3862,7 +3862,7 @@ textranslate vord.001 - /instrumentation/efis/inputs/VORD + /instrumentation/efis[1]/inputs/VORD 0.0625 0 @@ -3886,7 +3886,7 @@ textranslate ndb.001 - /instrumentation/efis/inputs/NDB + /instrumentation/efis[1]/inputs/NDB 0.0625 0 @@ -3910,7 +3910,7 @@ textranslate arpt.001 - /instrumentation/efis/inputs/arpt + /instrumentation/efis[1]/inputs/arpt 0.0625 0 @@ -3951,7 +3951,7 @@ false nasal - + @@ -3960,7 +3960,7 @@ false nasal - + @@ -3997,7 +3997,7 @@ false nasal - + @@ -4006,7 +4006,7 @@ false nasal - + @@ -4042,14 +4042,14 @@ false property-cycle - /instrumentation/efis/input/vor-adf-1 + /instrumentation/efis[1]/input/vor-adf-1 0 1 2 property-cycle - /instrumentation/efis/input/lh-vor-adf + /instrumentation/efis[1]/input/lh-vor-adf 0 1 -1 @@ -4088,14 +4088,14 @@ false property-cycle - /instrumentation/efis/input/vor-adf-2 + /instrumentation/efis[1]/input/vor-adf-2 0 1 2 property-cycle - /instrumentation/efis/input/rh-vor-adf + /instrumentation/efis[1]/input/rh-vor-adf 0 1 -1 @@ -4129,7 +4129,7 @@ rotate nd-mode-right - /instrumentation/efis/mfd/pnl_mode-num + /instrumentation/efis[1]/mfd/pnl_mode-num 0 0 1 45 @@ -4172,7 +4172,7 @@ rotate nd-range-right - /instrumentation/efis/inputs/range-nm + /instrumentation/efis[1]/inputs/range-nm 100 2045 diff --git a/Models/Instruments/ND/ND.bck.nas b/Models/Instruments/ND/ND.bck.nas new file mode 100644 index 00000000..f4efab06 --- /dev/null +++ b/Models/Instruments/ND/ND.bck.nas @@ -0,0 +1,680 @@ +## +# storage container for all ND instances +var nd_display = {}; + +#canvas.NDStyles.Airbus = { +var airbusSt = { + font_mapper: func(family, weight) { + if( family == "Liberation Sans" and weight == "normal" ) + return "LiberationFonts/LiberationSans-Regular.ttf"; + }, + + # where all the symbols are stored + # TODO: SVG elements should be renamed to use boeing/airbus prefix + # aircraft developers should all be editing the same ND.svg image + # the code can deal with the differences now + svg_filename: "Nasal/canvas/map/boeingND.svg", + ## + ## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map) + ## + + layers: [ + { + name:'fixes', + disabled:1, + update_on:['toggle_range','toggle_waypoints'], + predicate: func(nd, layer) { + # print("Running fixes predicate"); + var visible=nd.get_switch('toggle_waypoints') and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']) and (nd.rangeNm() <= 40); + if (visible) { + # print("fixes update requested!"); + trigger_update( layer ); + } + layer._view.setVisible(visible); + }, # end of layer update predicate + }, # end of fixes layer + { + name:'FIX', + isMapStructure:1, + update_on:['toggle_range','toggle_waypoints'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + # print("Running vor layer predicate"); + # toggle visibility here + var visible=nd.get_switch('toggle_waypoints') and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']) and (nd.rangeNm() <= 40); + layer.group.setVisible( nd.get_switch('toggle_waypoints') ); + if (visible) { + #print("Updating MapStructure ND layer: FIX"); + # (Hopefully) smart update + layer.update(); + } + }, # end of layer update predicate + }, # end of FIX layer + # Should redraw every 10 seconds + { + name:'storms', + update_on:['toggle_range','toggle_weather','toggle_display_mode'], + predicate: func(nd, layer) { + # print("Running fixes predicate"); + var visible=nd.get_switch('toggle_weather') and nd.get_switch('toggle_display_mode') != "PLAN"; + if (visible) { + #print("storms update requested!"); + trigger_update( layer ); + } + layer._view.setVisible(visible); + }, # end of layer update predicate + }, # end of storms layer + { + name:'airplaneSymbol', + update_on:['toggle_display_mode'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_display_mode') == "PLAN"; + if (visible) { + trigger_update( layer ); + } + layer._view.setVisible(visible); + }, + }, + { + name:'airports-nd', + update_on:['toggle_range','toggle_airports','toggle_display_mode'], + predicate: func(nd, layer) { + # print("Running airports-nd predicate"); + var visible = nd.get_switch('toggle_airports') and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']); + if (visible) { + trigger_update( layer ); # clear & redraw + } + layer._view.setVisible( visible ); + }, # end of layer update predicate + }, # end of airports layer + + # Should distinct between low and high altitude navaids. Hiding above 40 NM for now, to prevent clutter/lag. + { + name:'vor', + disabled:1, + update_on:['toggle_range','toggle_vor','toggle_display_mode'], + predicate: func(nd, layer) { + # print("Running vor layer predicate"); + var visible = nd.get_switch('toggle_vor') and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']) and (nd.rangeNm() <= 40); + if(visible) { + trigger_update( layer ); # clear & redraw + } + layer._view.setVisible( nd.get_switch('toggle_vor') ); + }, # end of layer update predicate + }, # end of VOR layer + { + name:'VOR', + isMapStructure:1, + update_on:['toggle_range','toggle_vor','toggle_display_mode'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + # print("Running vor layer predicate"); + # toggle visibility here + var visible = nd.get_switch('toggle_vor') and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']) and (nd.rangeNm() <= 40); + layer.group.setVisible( visible ); + if (visible) { + #print("Updating MapStructure ND layer: VOR"); + # (Hopefully) smart update + layer.update(); + } + }, # end of layer update predicate + }, # end of VOR layer + + # Should distinct between low and high altitude navaids. Hiding above 40 NM for now, to prevent clutter/lag. + { name:'dme', disabled:1, update_on:['toggle_range','toggle_stations'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40); + if(visible) { + trigger_update( layer ); # clear & redraw + } + layer._view.setVisible( nd.get_switch('toggle_stations') ); + }, # end of layer update predicate + }, # end of DME layers + { name:'DME', isMapStructure:1, update_on:['toggle_range','toggle_stations'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_stations') and nd.in_mode('toggle_display_mode', ['MAP']) and (nd.rangeNm() <= 40); + # print("Running vor layer predicate"); + # toggle visibility here + layer.group.setVisible( visible ); + if (visible) { + #print("Updating MapStructure ND layer: DME"); + # (Hopefully) smart update + layer.update(); + } + }, # end of layer update predicate + }, # end of DME layer + + { + name:'mp-traffic', + update_on:['toggle_range','toggle_traffic'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_traffic'); + layer._view.setVisible( visible ); + if (visible) { + trigger_update( layer ); # clear & redraw + } + }, # end of layer update predicate + }, # end of traffic layer + { + name:'TFC', + disabled:1, + isMapStructure:1, + update_on:['toggle_range','toggle_traffic'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_traffic'); + layer.group.setVisible( visible ); + if (visible) { + #print("Updating MapStructure ND layer: TFC"); + layer.update(); + } + }, # end of layer update predicate + }, # end of traffic layer + + { + name:'runway-nd', + update_on:['toggle_range','toggle_display_mode'], + predicate: func(nd, layer) { + var visible = (nd.rangeNm() <= 40) and getprop("autopilot/route-manager/active") and nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN']) ; + if (visible) + trigger_update( layer ); # clear & redraw + layer._view.setVisible( visible ); + }, # end of layer update predicate + }, # end of airports-nd layer + + { + name:'route', + update_on:['toggle_range','toggle_display_mode'], + predicate: func(nd, layer) { + var visible= (nd.in_mode('toggle_display_mode', ['NAV', 'ARC','PLAN'])); + if (visible) + trigger_update( layer ); # clear & redraw + layer._view.setVisible( visible ); + }, # end of layer update predicate + }, # end of route layer + + ## add other layers here, layer names must match the registered names as used in *.layer files for now + ## this will all change once we're using Philosopher's MapStructure framework + + ], # end of vector with configured layers + + # This is where SVG elements are configured by providing "behavior" hashes, i.e. for animations + + # to animate each SVG symbol, specify behavior via callbacks (predicate, and true/false implementation) + # SVG identifier, callback etc + # TODO: update_on([]), update_mode (update() vs. timers/listeners) + # TODO: support putting symbols on specific layers + features: [ + { + # TODO: taOnly doesn't need to use getprop polling in update(), use a listener instead! + id: 'taOnly', # the SVG ID + impl: { # implementation hash + init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor + predicate: func(nd) getprop("instrumentation/tcas/inputs/mode") == 2, # the condition + is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this + is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this + }, # end of taOnly behavior/callbacks + }, # end of taOnly + { + id: 'tas', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.aircraft_source.get_spd() > 100, + is_true: func(nd) { + nd.symbols.tas.setText(sprintf("%3.0f",getprop("/velocities/airspeed-kt") )); + nd.symbols.tas.show(); + }, + is_false: func(nd) nd.symbols.tas.hide(), + }, + }, + { + id: 'tasLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.aircraft_source.get_spd() > 100, + is_true: func(nd) nd.symbols.tasLbl.show(), + is_false: func(nd) nd.symbols.tasLbl.hide(), + }, + }, + { + id: 'ilsFreq', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS']), + is_true: func(nd) { + nd.symbols.ilsFreq.show(); + if(getprop("instrumentation/nav/in-range")) + nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/nav-id")); + else + nd.symbols.ilsFreq.setText(getprop("instrumentation/nav/frequencies/selected-mhz-fmt")); + }, + is_false: func(nd) nd.symbols.ilsFreq.hide(), + }, + }, + { + id: 'ilsLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS']), + is_true: func(nd) { + nd.symbols.ilsLbl.show(); + }, + is_false: func(nd) nd.symbols.ilsLbl.hide(), + }, + }, + { + id: 'wpActiveId', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/id") != nil and getprop("autopilot/route-manager/active"), + is_true: func(nd) { + nd.symbols.wpActiveId.setText(getprop("/autopilot/route-manager/wp/id")); + nd.symbols.wpActiveId.show(); + }, + is_false: func(nd) nd.symbols.wpActiveId.hide(), + }, # of wpActiveId.impl + }, # of wpActiveId + { + id: 'wpActiveDist', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active"), + is_true: func(nd) { + nd.symbols.wpActiveDist.setText(sprintf("%3.01f",getprop("/autopilot/route-manager/wp/dist"))); + nd.symbols.wpActiveDist.show(); + }, + is_false: func(nd) nd.symbols.wpActiveDist.hide(), + }, + }, + { + id: 'wpActiveDistLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active"), + is_true: func(nd) { + nd.symbols.wpActiveDistLbl.show(); + if(getprop("/autopilot/route-manager/wp/dist") > 1000) + nd.symbols.wpActiveDistLbl.setText(" NM"); + }, + is_false: func(nd) nd.symbols.wpActiveDistLbl.hide(), + }, + }, + { + id: 'eta', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("autopilot/route-manager/wp/eta") != nil and getprop("autopilot/route-manager/active"), + is_true: func(nd) { + var etaSec = getprop("/sim/time/utc/day-seconds")+getprop("autopilot/route-manager/wp/eta-seconds"); + var h = math.floor(etaSec/3600); + etaSec=etaSec-3600*h; + var m = math.floor(etaSec/60); + etaSec=etaSec-60*m; + var s = etaSec/10; + if (h>24) h=h-24; + nd.symbols.eta.setText(sprintf("%02.0f%02.0f.%01.0fz",h,m,s)); + nd.symbols.eta.show(); + }, + is_false: func(nd) nd.symbols.eta.hide(), + }, # of eta.impl + }, # of eta + { + id: 'gsGroup', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS']), + is_true: func(nd) { + if(nd.get_switch('toggle_centered')) + nd.symbols.gsGroup.setTranslation(0,0); + else + nd.symbols.gsGroup.setTranslation(0,150); + nd.symbols.gsGroup.show(); + }, + is_false: func(nd) nd.symbols.gsGroup.hide(), + }, + }, + { + id:'hdg', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','NAV', 'ARC','VOR']), + is_true: func(nd) { + var hdgText = ""; + if(nd.in_mode('toggle_display_mode', ['NAV', 'ARC'])) { + if(nd.get_switch('toggle_true_north')) + hdgText = nd.aircraft_source.get_trk_tru(); + else + hdgText = nd.aircraft_source.get_trk_mag(); + } else { + if(nd.get_switch('toggle_true_north')) + hdgText = nd.aircraft_source.get_hdg_tru(); + else + hdgText = nd.aircraft_source.get_hdg_mag(); + } + nd.symbols.hdg.setText(sprintf("%03.0f", hdgText+0.5)); + }, + is_false: NOTHING, + }, + }, + { + id:'hdgGroup', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','NAV','ARC','VOR']), + is_true: func(nd) { + nd.symbols.hdgGroup.show(); + if(nd.get_switch('toggle_centered')) + nd.symbols.hdgGroup.setTranslation(0,100); + else + nd.symbols.hdgGroup.setTranslation(0,0); + }, + is_false: func(nd) nd.symbols.hdgGroup.hide(), + }, + }, + { + id:'gs', + impl: { + init: func(nd,symbol), + common: func(nd) nd.symbols.gs.setText(sprintf("%3.0f",nd.aircraft_source.get_gnd_spd() )), + predicate: func(nd) nd.aircraft_source.get_gnd_spd() >= 30, + is_true: func(nd) { + nd.symbols.gs.setFontSize(36); + }, + is_false: func(nd) nd.symbols.gs.setFontSize(52), + }, + }, + { + id:'rangeArcs', + impl: { + init: func(nd,symbol), + predicate: func(nd) ((nd.in_mode('toggle_display_mode', ['ILS','VOR']) and nd.get_switch('toggle_weather')) or nd.get_switch('toggle_display_mode') == "ARC"), + is_true: func(nd) nd.symbols.rangeArcs.show(), + is_false: func(nd) nd.symbols.rangeArcs.hide(), + }, # of rangeArcs.impl + }, # of rangeArcs + { + id:'rangePln1', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN", + is_true: func(nd) { + nd.symbols.rangePln1.show(); + nd.symbols.rangePln1.setText(sprintf("%3.0f",nd.rangeNm())); + }, + is_false: func(nd) nd.symbols.rangePln1.hide(), + }, + }, + { + id:'rangePln2', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN", + is_true: func(nd) { + nd.symbols.rangePln2.show(); + nd.symbols.rangePln2.setText(sprintf("%3.0f",nd.rangeNm()/2)); + }, + is_false: func(nd) nd.symbols.rangePln2.hide(), + }, + }, + { + id:'rangePln3', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN", + is_true: func(nd) { + nd.symbols.rangePln3.show(); + nd.symbols.rangePln3.setText(sprintf("%3.0f",nd.rangeNm()/2)); + }, + is_false: func(nd) nd.symbols.rangePln3.hide(), + }, + }, + { + id:'rangePln4', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN", + is_true: func(nd) { + nd.symbols.rangePln4.show(); + nd.symbols.rangePln4.setText(sprintf("%3.0f",nd.rangeNm())); + }, + is_false: func(nd) nd.symbols.rangePln4.hide(), + }, + }, + { + id:'crsLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','VOR']), + is_true: func(nd) nd.symbols.crsLbl.show(), + is_false: func(nd) nd.symbols.crsLbl.hide(), + }, + }, + { + id:'crs', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','VOR']), + is_true: func(nd) { + nd.symbols.crs.show(); + if(getprop("instrumentation/nav/radials/selected-deg") != nil) + nd.symbols.crs.setText(sprintf("%03.0f",getprop("instrumentation/nav/radials/selected-deg"))); + }, + is_false: func(nd) nd.symbols.crs.hide(), + }, + }, + { + id:'dmeLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','VOR']), + is_true: func(nd) nd.symbols.dmeLbl.show(), + is_false: func(nd) nd.symbols.dmeLbl.hide(), + }, + }, + { + id:'dme', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS','VOR']), + is_true: func(nd) { + nd.symbols.dme.show(); + if(getprop("instrumentation/dme/in-range")) + nd.symbols.dme.setText(sprintf("%3.1f",getprop("instrumentation/nav/nav-distance")*0.000539)); + }, + is_false: func(nd) nd.symbols.dme.hide(), + }, + }, + { + id:'trkInd2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['ILS','VOR'])), + is_true: func(nd) { + nd.symbols.trkInd2.show(); + nd.symbols.trkInd2.setRotation((nd.aircraft_source.get_trk_tru()-nd.aircraft_source.get_hdg_tru())*D2R); + }, + is_false: func(nd) nd.symbols.trkInd2.hide(), + }, + }, + { + id:'vorCrsPtr', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['ILS','VOR'])), + is_true: func(nd) { + nd.symbols.vorCrsPtr.show(); + nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_tru())*D2R); + }, + is_false: func(nd) nd.symbols.vorCrsPtr.hide(), + }, + }, + { + id:'vorCrsPtr2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['ILS','VOR'])), + is_true: func(nd) { + nd.symbols.vorCrsPtr2.show(); + nd.symbols.vorCrsPtr2.setRotation((getprop("instrumentation/nav/radials/selected-deg")-nd.aircraft_source.get_hdg_tru())*D2R); + }, + is_false: func(nd) nd.symbols.vorCrsPtr2.hide(), + }, + }, + { + id: 'gsDiamond', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['ILS']), + is_true: func(nd) { + if(getprop("instrumentation/nav/gs-needle-deflection-norm") != nil) + nd.symbols.gsDiamond.setTranslation(-getprop("instrumentation/nav/gs-needle-deflection-norm")*150,0); + }, + is_false: func(nd) nd.symbols.gsGroup.hide(), + }, + }, + { + id:'locPtr', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['ILS','VOR']) and !nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")), + is_true: func(nd) { + nd.symbols.locPtr.show(); + var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm"); + nd.symbols.locPtr.setTranslation(deflection*150,0); + }, + is_false: func(nd) nd.symbols.locPtr.hide(), + }, + }, + { + id:'locPtr2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['ILS','VOR']) and nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")), + is_true: func(nd) { + nd.symbols.locPtr2.show(); + var deflection = getprop("instrumentation/nav/heading-needle-deflection-norm"); + nd.symbols.locPtr2.setTranslation(deflection*150,0); + }, + is_false: func(nd) nd.symbols.locPtr2.hide(), + }, + }, + { + id:'wind', + impl: { + init: func(nd,symbol), + predicate: ALWAYS, + is_true: func(nd) { + var windDir = getprop("environment/wind-from-heading-deg"); + if(!nd.get_switch('toggle_true_north')) + windDir = windDir + getprop("environment/magnetic-variation-deg"); + nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,getprop("environment/wind-speed-kt"))); + }, + is_false: NOTHING, + }, + }, + { + id:'windArrow', + impl: { + init: func(nd,symbol), + predicate: func(nd) (!(nd.in_mode('toggle_display_mode', ['PLAN']) and (nd.get_switch('toggle_display_type') == "LCD")) and nd.aircraft_source.get_spd() > 100), + is_true: func(nd) { + nd.symbols.windArrow.show(); + var windArrowRot = getprop("environment/wind-from-heading-deg"); + if(nd.in_mode('toggle_display_mode', ['NAV','ARC','PLAN'])) { + if(nd.get_switch('toggle_true_north')) + windArrowRot = windArrowRot - nd.aircraft_source.get_trk_tru(); + else + windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag(); + } else { + if(nd.get_switch('toggle_true_north')) + windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_tru(); + else + windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag(); + } + nd.symbols.windArrow.setRotation(windArrowRot*D2R); + }, + is_false: func(nd) nd.symbols.windArrow.hide(), + }, + }, + ], # end of vector with features +} + +### +# entry point, this will set up all ND instances + +setlistener("sim/signals/fdm-initialized", func() { + +## +# configure aircraft specific cockpit/ND switches here +# these are to be found in the property branch you specify +# via the NavDisplay.new() call +# the backend code in navdisplay.mfd should NEVER contain any aircraft-specific +# properties, or it will break other aircraft using different properties +# instead, make up an identifier (hash key) and map it to the property used +# in your aircraft, relative to your ND root in the backend code, only ever +# refer to the handle/key instead via the me.get_switch('toggle_range') method +# which would internally look up the matching aircraft property, e.g. '/instrumentation/efis'/inputs/range-nm' +# +# note: it is NOT sufficient to just add new switches here, the backend code in navdisplay.mfd also +# needs to know what to do with them ! +# refer to incomplete symbol implementations to learn how they work (e.g. WXR, STA) + + var myCockpit_switches = { + # symbolic alias : relative property (as used in bindings), initial value, type + 'toggle_range': {path: '/inputs/range-nm', value:40, type:'INT'}, + 'toggle_weather': {path: '/inputs/wxr', value:0, type:'BOOL'}, + 'toggle_airports': {path: '/inputs/arpt', value:0, type:'BOOL'}, + 'toggle_stations': {path: '/inputs/sta', value:0, type:'BOOL'}, + 'toggle_waypoints': {path: '/inputs/wpt', value:0, type:'BOOL'}, + 'toggle_position': {path: '/inputs/pos', value:0, type:'BOOL'}, + 'toggle_data': {path: '/inputs/data',value:0, type:'BOOL'}, + 'toggle_terrain': {path: '/inputs/terr',value:0, type:'BOOL'}, + 'toggle_traffic': {path: '/inputs/tfc',value:0, type:'BOOL'}, + 'toggle_centered': {path: '/inputs/nd-centered',value:0, type:'BOOL'}, + 'toggle_lh_vor_adf': {path: '/inputs/lh-vor-adf',value:0, type:'INT'}, + 'toggle_rh_vor_adf': {path: '/inputs/rh-vor-adf',value:0, type:'INT'}, + 'toggle_display_mode': {path: '/nd/display-mode', value:'NAV', type:'STRING'}, + 'toggle_display_type': {path: '/mfd/display-type', value:'LCD', type:'STRING'}, + 'toggle_true_north': {path: '/mfd/true-north', value:0, type:'BOOL'}, + # add new switches here + }; + + + # get a handle to the NavDisplay in canvas namespace (for now), see $FG_ROOT/Nasal/canvas/map/navdisplay.mfd + var ND = canvas.NavDisplay; + + ## TODO: We want to support multiple independent ND instances here! + # foreach(var pilot; var pilots = [ {name:'cpt', path:'instrumentation/efis', + # name:'fo', path:'instrumentation[1]/efis']) { + + + ## + # set up a new ND instance, under 'instrumentation/efis' and use the + # myCockpit_switches hash to map control properties + var NDCpt = ND.new("instrumentation/efis", myCockpit_switches, 'Airbus'); + + nd_display.main = canvas.new({ + "name": "ND", + "size": [1024, 1024], + "view": [1024, 1024], + "mipmapping": 1 + }); + + nd_display.main.addPlacement({"node": "ND.screen"}); + var group = nd_display.main.createGroup(); + NDCpt.newMFD(group); + NDCpt.update(); + + + print("ND Canvas Initialized!"); + +}); # fdm-initialized listener callback + + +var showNd = func() { + # The optional second arguments enables creating a window decoration + var dlg = canvas.Window.new([400, 400], "dialog"); + dlg.setCanvas( nd_display["main"] ); +} + + diff --git a/Models/Instruments/ND/ND.nas b/Models/Instruments/ND/ND.nas deleted file mode 100644 index b3fa7744..00000000 --- a/Models/Instruments/ND/ND.nas +++ /dev/null @@ -1,249 +0,0 @@ - var nd_display = {}; - - setlistener("sim/signals/fdm-initialized", func() { - - setprop("instrumentation/efis/nd/display-mode", "ARC"); - setprop("instrumentation/efis/inputs/tfc", 1); - setprop("instrumentation/efis/inputs/wpt", 0); - setprop("instrumentation/efis/inputs/wxr", 0); - setprop("instrumentation/efis/inputs/sta", 0); - setprop("instrumentation/efis/inputs/arpt", 0); - setprop("instrumentation/efis/mfd/true-north", 0); - - var toggle_listeners = { - # symbolic alias : relative property (as used in bindings), initial value, type - 'toggle_range': {path: '/inputs/range-nm', value:40, type:'INT'}, - 'toggle_weather': {path: '/inputs/wxr', value:0, type:'BOOL'}, - 'toggle_airports': {path: '/inputs/arpt', value:0, type:'BOOL'}, - 'toggle_ndb': {path: '/inputs/NDB', value:0, type:'BOOL'}, - 'toggle_stations': {path: '/inputs/sta', value:0, type:'BOOL'}, - 'toggle_vor': {path: '/inputs/VORD', value:0, type:'BOOL'}, - 'toggle_cstr': {path: '/inputs/CSTR', value:0, type:'BOOL'}, - 'toggle_waypoints': {path: '/inputs/wpt', value:0, type:'BOOL'}, - 'toggle_position': {path: '/inputs/pos', value:0, type:'BOOL'}, - 'toggle_data': {path: '/inputs/data',value:0, type:'BOOL'}, - 'toggle_terrain': {path: '/inputs/terr',value:0, type:'BOOL'}, - 'toggle_traffic': {path: '/inputs/tfc',value:0, type:'BOOL'}, - 'toggle_centered': {path: '/inputs/nd-centered',value:0, type:'BOOL'}, - 'toggle_lh_vor_adf': {path: '/input/lh-vor-adf',value:0, type:'INT'}, - 'toggle_rh_vor_adf': {path: '/input/rh-vor-adf',value:0, type:'INT'}, - 'toggle_display_mode': {path: '/nd/canvas-display-mode', value:'NAV', type:'STRING'}, - 'toggle_display_type': {path: '/mfd/display-type', value:'LCD', type:'STRING'}, - 'toggle_true_north': {path: '/mfd/true-north', value:0, type:'BOOL'}, - 'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'}, - 'toggle_fplan': {path: '/nd/route-manager-active', value:0, type: 'BOOL'}, # flight plan active - 'toggle_lnav': {path: '/nd/lnav', value:0, type: 'BOOL'}, # LNAV active - 'toggle_vnav': {path: '/nd/vnav', value:0, type: 'BOOL'}, # VNAV active - 'toggle_wpt_idx': {path: '/inputs/plan-wpt-index', value: -1, type: 'INT'},# WPT Index to be used in PLAN - 'toggle_plan_loop': {path: '/nd/plan-mode-loop', value: 0, type: 'INT'}, # Not used - 'toggle_app_mode': {path: '/nd/app-mode', value:'', type: 'STRING'}, # Approach mode string (ie. 'ILS APP') - 'toggle_cur_td': {path: '/nd/current-td', value: 0, type: 'INT'}, # Top of Desc dist. along route - 'toggle_cur_tc': {path: '/nd/current-tc', value: 0, type: 'INT'}, # Top of Climb dist. along route - 'toggle_cur_sc': {path: '/nd/current-sc', value: 0, type: 'INT'}, # Start of Climb dist. along route - 'toggle_cur_ed': {path: '/nd/current-ed', value: 0, type: 'INT'}, # End of Desc dist. along route - 'toggle_cur_sd': {path: '/nd/current-sd', value: 0, type: 'INT'}, # Start of Desc dist. along route - 'toggle_cur_ec': {path: '/nd/current-ec', value: 0, type: 'INT'}, # End of Climb dist. along route - 'toggle_lvl_off_at': {path: '/nd/level-off-at', value: 0, type: 'INT'}, # Level-off point along route - 'toggle_man_spd': {path: '/nd/managed-spd', value: 0, type: 'INT'}, # Managed Speed Mode - 'toggle_athr': {path: '/it-autoflight/output/athr', value: 0, type: 'INT'}, # Auto-thrust engaged - 'toggle_spd_point_100': {path: '/nd/spd-change-raw-100', value: 0, type: 'INT'}, # Speed limit change point FL100 - 'toggle_spd_point_140': {path: '/nd/spd-change-raw-140', value: 0, type: 'INT'}, # Speed limit change point FL140 - 'toggle_spd_point_250': {path: '/nd/spd-change-raw-250', value: 0, type: 'INT'}, # Speed limit change point FL250 - 'toggle_spd_point_260': {path: '/nd/spd-change-raw-260', value: 0, type: 'INT'}, # Speed limit change point FL260 - 'toggle_nav1_frq': {path: '/nd/nav1_frq', value: 0, type: 'INT'}, # Nav1 Freq. Listener - 'toggle_nav2_frq': {path: '/nd/nav2_frq', value: 0, type: 'INT'}, # Nav2 Freq. Listener - 'toggle_adf1_frq': {path: '/nd/adf1_frq', value: 0, type: 'INT'}, # ADF1 Freq. Listener - 'toggle_adf2_frq': {path: '/nd/adf2_frq', value: 0, type: 'INT'}, # ADF2 Freq. Listener - 'toggle_hold_init': {path: '/nd/hold_init', value: 0, type: 'INT'}, # HOLD pattern init Listener - 'toggle_hold_update': {path: '/nd/hold_update', value: 0, type: 'INT'}, # HOLD pattern update Listener - 'toggle_hold_wp': {path: '/nd/hold_wp', value: '', type: 'STRING'}, # HOLD pattern waypoint - 'toggle_route_num': {path: '/nd/route_num', value: 0, type: 'INT'}, # Route waypoint count - 'toggle_cur_wp': {path: '/nd/cur_wp', value: 0, type: 'INT'}, # Current Waypoint (TO Waypoint) index - 'toggle_ap1': {path: '/nd/ap1', value: '', type: 'STRING'}, # AP1 engaged - 'toggle_ap2': {path: '/nd/ap2', value: '', type: 'STRING'}, # AP2 engaged - 'toggle_dep_rwy': {path: '/nd/dep_rwy', value: '', type: 'STRING'}, # Departure runway - 'toggle_dest_rwy': {path: '/nd/dest_rwy', value: '', type: 'STRING'}, # Destination runway - }; - - var ND = canvas.NavDisplay; - var NDCpt = ND.new("instrumentation/efis", toggle_listeners, 'Airbus'); - - nd_display.main = canvas.new({ - "name": "ND", - "size": [1024, 1024], - "view": [1024, 1024], - "mipmapping": 1 - }); - - nd_display.main.addPlacement({"node": "ND.screen"}); - var group = nd_display.main.createGroup(); - - NDCpt.newMFD(group); - - NDCpt.update(); - - setprop("instrumentation/efis/inputs/plan-wpt-index", -1); - - print("ND Canvas Initialized!"); - }); # fdm-initialized listener callback - - # Create Listeners to update the ND, change the property map values to fit - # the properties you use in your own aircraft - - var property_map = { - des_apt: "/autopilot/route-manager/destination/airport", - dep_apt: "/autopilot/route-manager/departure/airport", - des_rwy: "/autopilot/route-manager/destination/runway", - dep_rwy: "/autopilot/route-manager/departure/runway", - fplan_active: 'autopilot/route-manager/active', - athr: '/it-autoflight/output/athr', - cur_wp: "/autopilot/route-manager/current-wp", - vnav_node: "/autopilot/route-manager/vnav/", - spd_node: "/autopilot/route-manager/spd/", - holding: "/flight-management/hold", - holding_points: "/flight-management/hold/points", - adf1_frq: 'instrumentation/adf/frequencies/selected-khz', - adf2_frq: 'instrumentation/adf[1]/frequencies/selected-khz', - nav1_frq: 'instrumentation/nav/frequencies/selected-mhz', - nav2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz', - lat_ctrl: '/it-autoflight/output/lat', - ver_ctrl: "/it-autoflight/output/lat", - spd_ctrl: "flight-management/control/spd-ctrl", - }; - - setlistener("instrumentation/efis/nd/display-mode", func{ - var canvas_mode = "instrumentation/efis/nd/canvas-display-mode"; - var nd_centered = "instrumentation/efis/inputs/nd-centered"; - var mode = getprop("instrumentation/efis/nd/display-mode"); - var cvs_mode = 'NAV'; - var centered = 1; - if(mode == 'ILS'){ - cvs_mode = 'APP'; - } - elsif(mode == 'VOR') { - cvs_mode = 'VOR'; - } - elsif(mode == 'NAV'){ - cvs_mode = 'MAP'; - } - elsif(mode == 'ARC'){ - cvs_mode = 'MAP'; - centered = 0; - } - elsif(mode == 'PLAN'){ - cvs_mode = 'PLAN'; - } - setprop(canvas_mode, cvs_mode); - setprop(nd_centered, centered); - }); - - setlistener(property_map.fplan_active, func{ - var actv = getprop(property_map.fplan_active); - setprop('instrumentation/efis/nd/route-manager-active', actv); - }); - - setlistener(property_map.athr, func{ - var athr = getprop(property_map.athr); - setprop('instrumentation/efis/nd/athr', (athr == '1')); - }); - - setlistener(property_map.ver_ctrl, func{ - var verctrl = getprop(property_map.ver_ctrl); - setprop('instrumentation/efis/nd/vnav', (verctrl == 'fmgc')); - }); - - setlistener(property_map.spd_ctrl, func{ - var spdctrl = getprop(property_map.spd_ctrl); - setprop('instrumentation/efis/nd/managed-spd', (spdctrl == 'fmgc')); - }); - - setlistener(property_map.lat_ctrl, func{ - var latctrl = getprop(property_map.lat_ctrl); - setprop('instrumentation/efis/nd/lnav', (latctrl == '1')); - }); - - setlistener("/instrumentation/mcdu/f-pln/disp/first", func{ - var first = getprop("/instrumentation/mcdu/f-pln/disp/first"); - if(typeof(first) == 'nil') first = -1; - if(getprop('autopilot/route-manager/route/num') == 0) first = -1; - setprop("instrumentation/efis/inputs/plan-wpt-index", first); - }); - - setlistener('/instrumentation/efis/nd/terrain-on-nd', func{ - var terr_on_hd = getprop('/instrumentation/efis/nd/terrain-on-nd'); - var alpha = 1; - if(terr_on_hd) alpha = 0.5; - nd_display.main.setColorBackground(0,0,0,alpha); - }); - - setlistener('instrumentation/nav/frequencies/selected-mhz', func{ - var mhz = getprop('instrumentation/nav/frequencies/selected-mhz'); - if(mhz == nil) mhz = 0; - setprop('/instrumentation/efis/nd/nav1_frq', mhz); - }); - - setlistener('instrumentation/nav[1]/frequencies/selected-mhz', func{ - var mhz = getprop('instrumentation/nav[1]/frequencies/selected-mhz'); - if(mhz == nil) mhz = 0; - setprop('/instrumentation/efis/nd/nav2_frq', mhz); - }); - - setlistener('instrumentation/adf/frequencies/selected-khz', func{ - var khz = getprop('instrumentation/adf/frequencies/selected-khz'); - if(khz == nil) khz = 0; - setprop('/instrumentation/efis/nd/adf1_frq', khz); - }); - - setlistener('instrumentation/adf[1]/frequencies/selected-khz', func{ - var khz = getprop('instrumentation/adf[1]/frequencies/selected-khz'); - if(khz == nil) khz = 0; - setprop('/instrumentation/efis/nd/adf2_frq', khz); - }); - - setlistener('flight-management/hold/init', func{ - var init = getprop('flight-management/hold/init'); - if(init == nil) init = 0; - setprop('/instrumentation/efis/nd/hold_init', init); - }); - - setlistener("/flight-management/hold/wp", func{ - var wpid = getprop("/flight-management/hold/wp"); - if(wpid == nil) wpid = ''; - setprop('/instrumentation/efis/nd/hold_wp', wpid); - }); - - setlistener('autopilot/route-manager/route/num', func{ - var num = getprop('autopilot/route-manager/route/num'); - setprop('/instrumentation/efis/nd/route_num', num); - }); - - setlistener(property_map.cur_wp, func(){ - var curwp = getprop('autopilot/route-manager/current-wp'); - setprop('/instrumentation/efis/nd/cur_wp',curwp); - }); - - setlistener("/flight-management/control/ap1-master", func(){ - var ap1 = getprop("/flight-management/control/ap1-master"); - setprop('/instrumentation/efis/nd/ap1',ap1); - }); - - setlistener("/flight-management/control/ap2-master", func(){ - var ap2 = getprop("/flight-management/control/ap2-master"); - setprop('/instrumentation/efis/nd/ap2',ap2); - }); - - setlistener("/autopilot/route-manager/departure/runway", func(){ - var rwy = getprop("/autopilot/route-manager/departure/runway"); - setprop('/instrumentation/efis/nd/dep_rwy',rwy); - }); - - setlistener("/autopilot/route-manager/destination/runway", func(){ - var rwy = getprop("/autopilot/route-manager/destination/runway"); - setprop('/instrumentation/efis/nd/dest_rwy',rwy); - }); - - var showNd = func() { - # The optional second arguments enables creating a window decoration - var dlg = canvas.Window.new([400, 400], "dialog"); - dlg.setCanvas( nd_display["main"] ); - } \ No newline at end of file diff --git a/Models/Instruments/ND/ND_L.xml b/Models/Instruments/ND/ND_L.xml index 848c52a8..b9983435 100644 --- a/Models/Instruments/ND/ND_L.xml +++ b/Models/Instruments/ND/ND_L.xml @@ -1,34 +1,30 @@ - + -ND_L.ac - - - - material - ND.screen - - 1.0 - 1.0 - 1.0 - /controls/lighting/ndl-norm - - - - - pick - ND.screen - - - false - - nasal - - - - - + res/ND.ac + + + + + pick + ND.screen + + + false + + nasal + + + + + diff --git a/Models/Instruments/ND/ND_R.xml b/Models/Instruments/ND/ND_R.xml index 20dc0dfc..f831cbda 100644 --- a/Models/Instruments/ND/ND_R.xml +++ b/Models/Instruments/ND/ND_R.xml @@ -1,34 +1,30 @@ - + -ND_R.ac - - - - material - ND.screen - - 1.0 - 1.0 - 1.0 - /controls/lighting/ndr-norm - - - - - pick - ND.screen - - - false - - nasal - - - - - + res/ND_R.ac + + + + + pick + ND_R.screen + + + false + + nasal + + + + + diff --git a/Models/Instruments/ND/canvas/A3XX_ND.nas b/Models/Instruments/ND/canvas/A3XX_ND.nas new file mode 100644 index 00000000..491badec --- /dev/null +++ b/Models/Instruments/ND/canvas/A3XX_ND.nas @@ -0,0 +1,39 @@ +# A3XX ND Implementation + +var get_local_path = func(file){ + var aircraft_dir = split('/', getprop("/sim/aircraft-dir"))[-1]; + return "Aircraft/" ~ aircraft_dir ~ "/Models/Instruments/ND/canvas/"~ file; +}; + +var version = getprop('sim/version/flightgear'); +var v = split('.', version); +version = num(v[0]~'.'~v[1]); + +var SymbolLayer = canvas.SymbolLayer; +var SingleSymbolLayer = canvas.SingleSymbolLayer; +var MultiSymbolLayer = canvas.MultiSymbolLayer; +var NavaidSymbolLayer = canvas.NavaidSymbolLayer; +var Symbol = canvas.Symbol; +var Group = canvas.Group; +var Path = canvas.Path; +var DotSym = canvas.DotSym; +var Map = canvas.Map; +var SVGSymbol = canvas.SVGSymbol; +var LineSymbol = canvas.LineSymbol; +var StyleableCacheable = canvas.StyleableCacheable; +var SymbolCache32x32 = canvas.SymbolCache32x32; +var SymbolCache = canvas.SymbolCache; +var Text = canvas.Text; + + +if(version < 3.2){ + io.include('canvas_compat.nas'); +} + +io.include('ND_config.nas'); +io.include('framework/canvas.nas'); +io.include('framework/navdisplay.nas'); +io.include('framework/MapDrivers.nas'); +io.include('loaders.nas'); +io.include('helpers.nas'); +io.include('style.nas'); diff --git a/Models/Instruments/ND/canvas/A3XX_ND_drivers.nas b/Models/Instruments/ND/canvas/A3XX_ND_drivers.nas new file mode 100644 index 00000000..254c3a49 --- /dev/null +++ b/Models/Instruments/ND/canvas/A3XX_ND_drivers.nas @@ -0,0 +1,105 @@ +var A3XXRouteDriver = { + new: func(){ + var m = { + parents: [A3XXRouteDriver], + }; + m.init(); + return m; + }, + init: func(){ + me.update(); + }, + update: func(){ + me.flightplan = flightplan(); + }, + getNumberOfFlightPlans: func(){1}, + getFlightPlanType: func(fpNum){'current'}, + getFlightPlan: func(fpNum){me.flightplan}, + getPlanSize: func(fpNum){me.flightplan.getPlanSize()}, + getWP: func(fpNum, idx){me.flightplan.getWP(idx)}, + getPlanModeWP: func(plan_wp_idx){me.flightplan.getWP(plan_wp_idx)}, + hasDiscontinuity: func(fpNum, wptID){0}, + getListeners: func(){[]}, + shouldUpdate: func 1 +}; + +var MultiA3XXRouteDriver = { + parents: [A3XXRouteDriver], + new: func(){ + var m = { + parents: [MultiA3XXRouteDriver], + _flightplans: [], + currentFlightPlan: 0 + }; + m.init(); + return m; + }, + addFlightPlan: func(type, plan){ + append(me._flightplans, { + type: type, + flightplan: plan + }); + }, + removeFlightPlanAtIndex: func(idx){ + var sz = size(me._flightplans); + if(idx < sz){ + if(sz == 1) + me._flightplans = []; + elsif(sz == 2 and idx == 0) + me._flightplans = [me._flightplans[1]]; + elsif(sz == 2 and idx == 1) + pop(me._flightplans); + else { + var subv_l = subvec(me._flightplans, 0, idx); + var subv_r = subvec(me._flightplans, idx + 1); + me._flightplans = subv_l ~ subv_r; + } + } + me.triggerSignal('fp-added'); + }, + removeFlightPlanOfType: func(type){ + var new_vec = []; + foreach(var fp; me._flightplans){ + if(fp['type'] != type) + append(new_vec, fp); + } + me._flightplans = new_vec; + me.triggerSignal('fp-removed'); + }, + getNumberOfFlightPlans: func(){ + size(me._flightplans); + }, + getFlightPlanType: func(fpNum){ + if(fpNum >= size(me._flightplans)) return nil; + var fp = me._flightplans[fpNum]; + return fp.type; + }, + getFlightPlan: func(fpNum){ + if(fpNum >= size(me._flightplans)) return nil; + return me._flightplans[fpNum]; + }, + getPlanSize: func(fpNum){ + if(fpNum >= size(me._flightplans)) return 0; + return me._flightplans[fpNum].getPlanSize(); + }, + getWP: func(fpNum, idx){ + if(fpNum >= size(me._flightplans)) return nil; + var fp = me._flightplans[fpNum].getPlanSize(); + return fp.getWP(idx); + }, + getPlanModeWP: func(idx){ + if(me.currentFlightPlan >= size(me._flightplans)) return nil; + var fp = me._flightplans[me.currentFlightPlan]; + return fp.getWP(idx); + }, + triggerSignal: func(signal){ + setprop(me.signalPath(signal)); + }, + signalPath: func(signal){ + 'autopilot/route-manager/signals/rd-'~ signal; + }, + getListeners: func(){[ + me.getSignal('fp-added'), + me.getSignal('fp-removed') + ]} +}; diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas new file mode 100644 index 00000000..85eeb552 --- /dev/null +++ b/Models/Instruments/ND/canvas/ND.nas @@ -0,0 +1,150 @@ +var ND_AIRBUS_SUPPORT = contains(canvas.NDStyles, 'Airbus_v2'); + +if(!ND_AIRBUS_SUPPORT){ + io.include('A3XX_ND.nas'); +}# else { +# io.include('ND_config.nas'); +#} + +io.include('A3XX_ND_drivers.nas'); +canvas.NDStyles['Airbus'].options.defaults.route_driver = A3XXRouteDriver.new(); + +var nd_display = {}; + +setlistener("sim/signals/fdm-initialized", func() { + + var myCockpit_switches = { + # symbolic alias : relative property (as used in bindings), initial value, type + 'toggle_range': {path: '/inputs/range-nm', value:40, type:'INT'}, + 'toggle_weather': {path: '/inputs/wxr', value:0, type:'BOOL'}, + 'toggle_airports': {path: '/inputs/arpt', value:0, type:'BOOL'}, + 'toggle_ndb': {path: '/inputs/NDB', value:0, type:'BOOL'}, + 'toggle_stations': {path: '/inputs/sta', value:0, type:'BOOL'}, + 'toggle_vor': {path: '/inputs/VORD', value:0, type:'BOOL'}, + 'toggle_dme': {path: '/inputs/DME', value:0, type:'BOOL'}, + 'toggle_cstr': {path: '/inputs/CSTR', value:0, type:'BOOL'}, + 'toggle_waypoints': {path: '/inputs/wpt', value:0, type:'BOOL'}, + 'toggle_position': {path: '/inputs/pos', value:0, type:'BOOL'}, + 'toggle_data': {path: '/inputs/data',value:0, type:'BOOL'}, + 'toggle_terrain': {path: '/inputs/terr',value:0, type:'BOOL'}, + 'toggle_traffic': {path: '/inputs/tfc',value:0, type:'BOOL'}, + 'toggle_centered': {path: '/inputs/nd-centered',value:0, type:'BOOL'}, + 'toggle_lh_vor_adf': {path: '/input/lh-vor-adf',value:0, type:'INT'}, + 'toggle_rh_vor_adf': {path: '/input/rh-vor-adf',value:0, type:'INT'}, + 'toggle_display_mode': {path: '/nd/canvas-display-mode', value:'NAV', type:'STRING'}, + 'toggle_display_type': {path: '/mfd/display-type', value:'LCD', type:'STRING'}, + 'toggle_true_north': {path: '/mfd/true-north', value:1, type:'BOOL'}, + 'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'}, + 'toggle_wpt_idx': {path: '/inputs/plan-wpt-index', value: -1, type: 'INT'}, + 'toggle_plan_loop': {path: '/nd/plan-mode-loop', value: 0, type: 'INT'}, + 'toggle_weather_live': {path: '/mfd/wxr-live-enabled', value: 0, type: 'BOOL'}, + 'toggle_chrono': {path: '/inputs/CHRONO', value: 0, type: 'INT'}, + 'toggle_xtrk_error': {path: '/mfd/xtrk-error', value: 0, type: 'BOOL'}, + 'toggle_trk_line': {path: '/mfd/trk-line', value: 0, type: 'BOOL'}, + # add new switches here + }; + + # get a handle to the NavDisplay in canvas namespace (for now), see $FG_ROOT/Nasal/canvas/map/navdisplay.mfd + var ND = canvas.NavDisplay; + + ## TODO: We want to support multiple independent ND instances here! + # foreach(var pilot; var pilots = [ {name:'cpt', path:'instrumentation/efis', + # name:'fo', path:'instrumentation[1]/efis']) { + + + ## + # set up a new ND instance, under 'instrumentation/efis' and use the + # myCockpit_switches hash to map control properties + var NDCpt = ND.new("instrumentation/efis", myCockpit_switches, 'Airbus'); + var NDFo = ND.new("instrumentation/efis[1]", myCockpit_switches, 'Airbus'); + + nd_display.main = canvas.new({ + "name": "ND", + "size": [1024, 1024], + "view": [1024, 1024], + "mipmapping": 1 + }); + + nd_display.right = canvas.new({ + "name": "ND", + "size": [1024, 1024], + "view": [1024, 1024], + "mipmapping": 1 + }); + + nd_display.main.addPlacement({"node": "ND.screen"}); + nd_display.right.addPlacement({"node": "ND_R.screen"}); + + var group = nd_display.main.createGroup(); + NDCpt.newMFD(group); + NDCpt.update(); + + var group_r = nd_display.right.createGroup(); + NDFo.newMFD(group_r); + NDFo.update(); + + setprop("instrumentation/efis/inputs/plan-wpt-index", -1); + setprop("instrumentation/efis[1]/inputs/plan-wpt-index", -1); + + print("ND Canvas Initialized!"); +}); # fdm-initialized listener callback + +for(i = 0; i < 2; i = i + 1){ + setlistener("instrumentation/efis["~i~"]/nd/display-mode", func(node){ + var par = node.getParent().getParent(); + var idx = par.getIndex(); + var canvas_mode = "instrumentation/efis["~idx~"]/nd/canvas-display-mode"; + var nd_centered = "instrumentation/efis["~idx~"]/inputs/nd-centered"; + var mode = getprop("instrumentation/efis["~idx~"]/nd/display-mode"); + var cvs_mode = 'NAV'; + var centered = 1; + if(mode == 'ILS'){ + cvs_mode = 'APP'; + } + elsif(mode == 'VOR') { + cvs_mode = 'VOR'; + } + elsif(mode == 'NAV'){ + cvs_mode = 'MAP'; + } + elsif(mode == 'ARC'){ + cvs_mode = 'MAP'; + centered = 0; + } + elsif(mode == 'PLAN'){ + cvs_mode = 'PLAN'; + } + setprop(canvas_mode, cvs_mode); + setprop(nd_centered, centered); + }); +} + +#setlistener("/instrumentation/mcdu/f-pln/disp/first", func{ + #var first = getprop("/instrumentation/mcdu/f-pln/disp/first"); + #if(typeof(first) == 'nil') first = -1; + #if(getprop('autopilot/route-manager/route/num') == 0) first = -1; + #setprop("instrumentation/efis/inputs/plan-wpt-index", first); + #setprop("instrumentation/efis[1]/inputs/plan-wpt-index", first); +#}); + +setlistener('/instrumentation/efis/nd/terrain-on-nd', func{ + var terr_on_hd = getprop('/instrumentation/efis/nd/terrain-on-nd'); + var alpha = 1; + if(terr_on_hd) alpha = 0.5; + nd_display.main.setColorBackground(0,0,0,alpha); +}); + +setlistener('/flight-management/control/capture-leg', func(n){ + var capture_leg = n.getValue(); + setprop("instrumentation/efis/mfd/xtrk-error", capture_leg); + setprop("instrumentation/efis[1]/mfd/xtrk-error", capture_leg); + setprop("instrumentation/efis/mfd/trk-line", capture_leg); + setprop("instrumentation/efis[1]/mfd/trk-line", capture_leg); +}, 0, 0); + +var showNd = func(nd = nil) { + if(nd == nil) nd = 'main'; + # The optional second arguments enables creating a window decoration + var dlg = canvas.Window.new([400, 400], "dialog"); + dlg.setCanvas( nd_display[nd] ); +} diff --git a/Models/Instruments/ND/canvas/ND_config.nas b/Models/Instruments/ND/canvas/ND_config.nas new file mode 100644 index 00000000..c857ead0 --- /dev/null +++ b/Models/Instruments/ND/canvas/ND_config.nas @@ -0,0 +1,21 @@ +canvas.NDConfig = { + properties: { + des_apt: "/autopilot/route-manager/destination/airport", + dep_apt: "/autopilot/route-manager/departure/airport", + des_rwy: "/autopilot/route-manager/destination/runway", + dep_rwy: "/autopilot/route-manager/departure/runway", + fplan_active: 'autopilot/route-manager/active', + athr: '/it-autoflight/output/athr', + cur_wp: "/autopilot/route-manager/current-wp", + vnav_node: "/autopilot/route-manager/vnav/", + spd_node: "/autopilot/route-manager/spd/", + holding: "/flight-management/hold", + holding_points: "/flight-management/hold/points", + adf1_frq: 'instrumentation/adf/frequencies/selected-khz', + adf2_frq: 'instrumentation/adf[1]/frequencies/selected-khz', + nav1_frq: 'instrumentation/nav/frequencies/selected-mhz', + nav2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz', + lat_ctrl: 'flight-management/control/lat-ctrl', + ver_ctrl: "flight-management/control/ver-ctrl", + } +}; diff --git a/Models/Instruments/ND/canvas/canvas_compat.nas b/Models/Instruments/ND/canvas/canvas_compat.nas new file mode 100644 index 00000000..e47bd987 --- /dev/null +++ b/Models/Instruments/ND/canvas/canvas_compat.nas @@ -0,0 +1,355 @@ +var _MP_dbg_lvl = "info"; +#var _MP_dbg_lvl = "alert"; +#io.include('Nasal/canvas/MapStructure.nas'); + +var makedie = func(prefix) func(msg) globals.die(prefix~" "~msg); + +var __die = makedie("MapStructure"); + +var _arg2valarray = func +{ + var ret = arg; + while ( typeof(ret) == "vector" + and size(ret) == 1 and typeof(ret[0]) == "vector" ) + ret = ret[0]; + return ret; +} + +var assert_m = func(hash, member) + if (!contains(hash, member)) + die("required field not found: '"~member~"'"); +var assert_ms = func(hash, members...) + foreach (var m; members) + if (m != nil) assert_m(hash, m); + +## +# Combine a specific hash with a default hash, e.g. for +# options/df_options and style/df_style in a SymbolLayer. +# +var default_hash = func(opt, df) { + if (opt != nil and typeof(opt)=='hash') { + if (df != nil and opt != df and !isa(opt, df)) { + if (contains(opt, "parents")) + opt.parents ~= [df]; + else + opt.parents = [df]; + } + return opt; + } else return df; +} + + +var try_aux_method = func(obj, method_name) { + var name = ""; + call(compile("obj."~method_name~"()", name), nil, var err=[]); # try... + #debug.dump(err); + if (size(err)) # ... and either leave caght or rethrow + if (err[1] != name) + die(err[0]); +} + +Group.setColor = func(r,g,b, excl = nil){ + var children = me.getChildren(); + foreach(var e; children){ + var do_skip = 0; + if(excl != nil){ + foreach(var cl; excl){ + if(isa(e, cl)){ + do_skip = 1; + continue; + } + } + } + if(!do_skip) + e.setColor(r,g,b); + } +} + +Symbol._new = func(m) { + #m.style = m.layer.style; + #m.options = m.layer.options; + if (m.controller != nil) { + temp = m.controller.new(m,m.model); + if (temp != nil) + m.controller = temp; + } + else __die("Symbol._new(): default controller not found"); +}; + +Symbol.del = func() { + if (me.controller != nil) + me.controller.del(me, me.model); + try_aux_method(me.model, "del"); +}; + +SymbolLayer.findsym = func(model, del=0) { + forindex (var i; me.list) { + var e = me.list[i]; + #print("List["~i~"]"); + #debug.dump(e); + if (Symbol.Controller.equals(e.model, model)) { + if (del) { + # Remove this element from the list + # TODO: maybe C function for this? extend pop() to accept index? + var prev = subvec(me.list, 0, i); + var next = subvec(me.list, i+1); + me.list = prev~next; + #return 1; + } + return e; + } + } + return nil; +}; + +# to add support for additional ghosts, just append them to the vector below, possibly at runtime: +var supported_ghosts = ['positioned','Navaid','Fix','flightplan-leg','FGAirport']; +var is_positioned_ghost = func(obj) { + var gt = ghosttype(obj); + foreach(var ghost; supported_ghosts) { + if (gt == ghost) return 1; # supported ghost was found + } + return 0; # not a known/supported ghost +}; + +Symbol.Controller.equals = func(l, r, p=nil) { + if (l == r) return 1; + if (p == nil) { + var ret = Symbol.Controller.equals(l, r, l); + if (ret != nil) return ret; + if (contains(l, "parents")) { + foreach (var p; l.parents) { + var ret = Symbol.Controller.equals(l, r, p); + if (ret != nil) return ret; + } + } + die("Symbol.Controller: no suitable equals() found! Of type: "~typeof(l)); + } else { + if (typeof(p) == 'ghost') + if ( is_positioned_ghost(p) ) + return l.id == r.id; + else + die("Symbol.Controller: bad/unsupported ghost of type '"~ghosttype(l)~"' (see MapStructure.nas Symbol.Controller.getpos() to add new ghosts)"); + if (typeof(p) == 'hash'){ + # Somewhat arbitrary convention: + # * l.equals(r) -- instance method, i.e. uses "me" and "arg[0]" + # * parent._equals(l,r) -- class method, i.e. uses "arg[0]" and "arg[1]" + if (contains(p, "equals")) + return l.equals(r); + } + if (contains(p, "_equals")) + return p._equals(l,r); + } + return nil; # scio correctum est +}; + +canvas.LineSymbol = { + parents:[Symbol], + element_id: nil, + needs_update: 1, + # Static/singleton: + makeinstance: func(name, hash) { + if (!isa(hash, LineSymbol)) + die("LineSymbol: OOP error"); + return Symbol.add(name, hash); +}, + # For the instances returned from makeinstance: + new: func(group, model, controller=nil) { + if (me == nil) die("Need me reference for LineSymbol.new()"); + if (typeof(model) != 'vector') die("LineSymbol.new(): need a vector of points"); + var m = { + parents: [me], + group: group, + #layer: layer, + model: model, + controller: controller == nil ? me.df_controller : controller, + element: group.createChild( + "path", me.element_id + ), + }; + append(m.parents, m.element); + Symbol._new(m); + + m.init(); + return m; + }, + # Non-static: + draw: func() { + if (!me.needs_update) return; + #printlog(_MP_dbg_lvl, "redrawing a LineSymbol "~me.layer.type); + me.element.reset(); + var cmds = []; + var coords = []; + var cmd = Path.VG_MOVE_TO; + foreach (var m; me.model) { + var (lat,lon) = me.controller.getpos(m); + append(coords,"N"~lat); + append(coords,"E"~lon); + append(cmds,cmd); + cmd = Path.VG_LINE_TO; + } + me.element.setDataGeo(cmds, coords); + me.element.update(); # this doesn't help with flickering, it seems + }, + del: func() { + printlog(_MP_dbg_lvl, "LineSymbol.del()"); + me.deinit(); + call(Symbol.del, nil, me); + me.element.del(); + }, + # Default wrappers: + init: func() me.draw(), + deinit: func(), + update: func() { + if (me.controller != nil) { + if (!me.controller.update(me, me.model)) return; + elsif (!me.controller.isVisible(me.model)) { + me.element.hide(); + return; + } + } else + me.element.show(); + me.draw(); + }, +}; # of LineSymbol + +Path.addSegmentGeo = func(cmd, coords...) +{ + var coords = _arg2valarray(coords); + var num_coords = me.num_coords[cmd]; + if( size(coords) != num_coords ) + debug.warn + ( + "Invalid number of arguments (expected " ~ num_coords ~ ")" + ); + else + { + me.setInt("cmd[" ~ (me._last_cmd += 1) ~ "]", cmd); + for(var i = 0; i < num_coords; i += 1) + me.set("coord-geo[" ~ (me._last_coord += 1) ~ "]", coords[i]); + } + + return me; +} + +Path.arcGeo = func(cmd, rx,ry,unk,lat,lon){ + if(cmd < 18 and cmd > 24){ + debug.warn("Invalid command " ~ cmd); + return me; + } + else + { + me.setInt("cmd[" ~ (me._last_cmd += 1) ~ "]", cmd); + #for(var i = 0; i < num_coords; i += 1) + me.setDouble("coord[" ~ (me._last_coord += 1) ~ "]", rx); + me.setDouble("coord[" ~ (me._last_coord += 1) ~ "]", ry); + me.setDouble("coord[" ~ (me._last_coord += 1) ~ "]", unk); + me.setDouble("coord-geo[N" ~ (me._last_coord += 1) ~ "]", lat); + me.setDouble("coord-geo[E" ~ (me._last_coord += 1) ~ "]", lat); + } + + return me; +} + +SymbolLayer.onRemoved = func(model) { + #print('onRemoved'); + #debug.dump(model); + var sym = me.findsym(model, 1); + if (sym == nil) die("model not found"); + #print(typeof(model.del)); + #call(func sym.del, nil, var err = []); + sym.del(); + #print('ERR CHK'); + #debug.dump(err); + # ignore errors + # TODO: ignore only missing member del() errors? and only from the above line? + # Note: die(err[0]) rethrows it; die(err[0]~"") does not. +} + +Map.addLayer = func(factory, type_arg=nil, priority=nil){ + if(contains(me.layers, type_arg)) + print("addLayer() warning: overwriting existing layer:", type_arg); + + # print("addLayer():", type_arg); + + # Argument handling + if (type_arg != nil) + var type = factory.get(type_arg); + else var type = factory; + + var the_layer = me.layers[type_arg]= type.new(me); + the_layer.map = me; + if (priority == nil) + priority = type.df_priority; + if (priority != nil) + me.layers[type_arg].setInt("z-index", priority); + return me; +} + +Map.getLat = func me.get("ref-lat"); +Map.getLon = func me.get("ref-lon"); +Map.getHdg = func me.get("hdg"); +Map.getAlt = func me.get("altitude"); +Map.getRange = func me.get("range"); +Map.getLatLon = func [me.get("ref-lat"), me.get("ref-lon")]; +Map.getPosCoord = func { + var (lat, lon) = (me.get("ref-lat"), + me.get("ref-lon")); + var alt = me.get("altitude"); + if (lat == nil or lon == nil) { + if (contains(me, "coord")) { + debug.warn("canvas.Map: lost ref-lat and/or ref-lon source"); + } + return nil; + } + if (!contains(me, "coord")) { + me.coord = geo.Coord.new(); + var m = me; + me.coord.update = func m.getPosCoord(); + } + me.coord.set_latlon(lat,lon,alt or 0); + return me.coord; +} + +SymbolLayer.new = func(group, controller=nil) { + var m = { + parents: [me], + map: group, + group: group.createChild("group", me.id), # TODO: the id is not properly set, but would be useful for debugging purposes (VOR, FIXES, NDB etc) + list: [], + }; + m.searcher = geo.PositionedSearch.new(me.searchCmd, me.onAdded, me.onRemoved, m); + # FIXME: hack to expose type of layer: + if (caller(1)[1] == Map.addLayer) { + var this_type = caller(1)[0].type_arg; + if (this_type != nil) + m.group.set("symbol-layer-type", this_type); + } + if (controller == nil) + #controller = SymbolLayer.Controller.new(me.type, m); + controller = me.df_controller; + assert_m(controller, "parents"); + if (controller.parents[0] == SymbolLayer.Controller) + controller = controller.new(m); + assert_m(controller, "parents"); + assert_m(controller.parents[0], "parents"); + if (controller.parents[0].parents[0] != SymbolLayer.Controller) + die("OOP error"); + m.controller = controller; + m.update(); + return m; +}; + +canvas.SingleSymbolLayer = { + parents: [SymbolLayer] +}; + +canvas.MultiSymbolLayer = { + parents: [SymbolLayer] +}; + +canvas.NavaidSymbolLayer = { + parents: [canvas.MultiSymbolLayer] +}; + + diff --git a/Models/Instruments/ND/canvas/framework/MapDrivers.nas b/Models/Instruments/ND/canvas/framework/MapDrivers.nas new file mode 100644 index 00000000..9b77a678 --- /dev/null +++ b/Models/Instruments/ND/canvas/framework/MapDrivers.nas @@ -0,0 +1,116 @@ +canvas.RouteDriver = { + new: func(){ + var m = { + parents: [canvas.RouteDriver], + }; + m.init(); + return m; + }, + init: func(){ + me.update(); + }, + update: func(){ + me.flightplan = flightplan(); + }, + getNumberOfFlightPlans: func(){1}, + getFlightPlanType: func(fpNum){'active'}, + getFlightPlan: func(fpNum){me.flightplan}, + getPlanSize: func(fpNum){me.flightplan.getPlanSize()}, + getWP: func(fpNum, idx){me.flightplan.getWP(idx)}, + getListeners: func(){[]}, + getPlanModeWP: func(plan_wp_idx){me.flightplan.getWP(plan_wp_idx)}, + hasDiscontinuity: func(fpNum, wpt){0}, + getHoldPattern: func(fpNum, wpt){nil}, + getHoldPatterns: func(fpNum){[]}, + shouldUpdate: func 1, + shouldDisplayWP: func(fpNum, idx) 1, + getCurrentWPIdx: func(fpNum) getprop('autopilot/route-manager/current-wp'), + getTimeConstraint: func (fpNum, wp_idx) {nil} +}; + +canvas.MultiRouteDriver = { + parents: [canvas.RouteDriver], + new: func(){ + var m = { + parents: [MultiRouteDriver], + _flightplans: [], + currentFlightPlan: 0 + }; + m.init(); + return m; + }, + addFlightPlan: func(type, plan){ + append(me._flightplans, { + type: type, + flightplan: plan + }); + }, + removeFlightPlanAtIndex: func(idx){ + var sz = size(me._flightplans); + if(idx < sz){ + if(sz == 1) + me._flightplans = []; + elsif(sz == 2 and idx == 0) + me._flightplans = [me._flightplans[1]]; + elsif(sz == 2 and idx == 1) + pop(me._flightplans); + else { + var subv_l = subvec(me._flightplans, 0, idx); + var subv_r = subvec(me._flightplans, idx + 1); + me._flightplans = subv_l ~ subv_r; + } + } + me.triggerSignal('fp-added'); + }, + removeFlightPlanOfType: func(type){ + var new_vec = []; + foreach(var fp; me._flightplans){ + if(fp['type'] != type) + append(new_vec, fp); + } + me._flightplans = new_vec; + me.triggerSignal('fp-removed'); + }, + getNumberOfFlightPlans: func(){ + size(me._flightplans); + }, + getFlightPlanType: func(fpNum){ + if(fpNum >= size(me._flightplans)) return nil; + var fp = me._flightplans[fpNum]; + return fp.type; + }, + getFlightPlan: func(fpNum){ + if(fpNum >= size(me._flightplans)) return nil; + return me._flightplans[fpNum]; + }, + getPlanSize: func(fpNum){ + if(fpNum >= size(me._flightplans)) return 0; + return me._flightplans[fpNum].getPlanSize(); + }, + getWP: func(fpNum, idx){ + if(fpNum >= size(me._flightplans)) return nil; + var fp = me._flightplans[fpNum]; + return fp.getWP(idx); + }, + getPlanModeWP: func(idx){ + if(me.currentFlightPlan >= size(me._flightplans)) return nil; + var fp = me._flightplans[me.currentFlightPlan]; + return fp.getWP(idx); + }, + triggerSignal: func(signal){ + setprop(me.signalPath(signal)); + }, + signalPath: func(signal){ + 'autopilot/route-manager/signals/rd-'~ signal; + }, + getListeners: func(){[ + me.getSignal('fp-added'), + me.getSignal('fp-removed') + ]}, + getCurrentWPIdx: func(fpNum) { + var fp = me.getFlightPlan(fpNum); + var wp = fp.getWP(); + if (wp == nil) return -1; + return wp.index; + } +}; diff --git a/Models/Instruments/ND/canvas/framework/canvas.nas b/Models/Instruments/ND/canvas/framework/canvas.nas new file mode 100644 index 00000000..0a7924bf --- /dev/null +++ b/Models/Instruments/ND/canvas/framework/canvas.nas @@ -0,0 +1,303 @@ +var assert_m = canvas.assert_m; + +# -------------------------------- +# From FGDATA/Nasal/canvas/api.nas +# -------------------------------- + +# Recursively get all children of class specified by first param +canvas.Group.getChildrenOfType = func(type, array = nil){ + var children = array; + if(children == nil) + children = []; + var my_children = me.getChildren(); + if(typeof(type) != 'vector') + type = [type]; + foreach(var c; my_children){ + foreach(var t; type){ + if(isa(c, t)){ + append(children, c); + } + } + if(isa(c, canvas.Group)){ + c.getChildrenOfType(type, children); + } + } + return children; +}; + + # Set color to children of type Path and Text. It is possible to optionally + # specify which types of children should be affected by passing a vector as + # the last agrument, ie. my_group.setColor(1,1,1,[Path]); +canvas.Group.setColor = func(){ + var color = arg; + var types = [Path, Text]; + var arg_c = size(color); + if(arg_c > 1 and typeof(color[-1]) == 'vector'){ + types = color[-1]; + color = subvec(color, 0, arg_c - 1); + } + var children = me.getChildrenOfType(types); + if(typeof(color) == 'vector'){ + var first = color[0]; + if(typeof(first) == 'vector') + color = first; + } + foreach(var c; children) + c.setColor(color); +}; + +canvas.Map.addLayer = func(factory, type_arg=nil, priority=nil, style=nil, opts=nil, visible=1) +{ + if(contains(me.layers, type_arg)) + printlog("warn", "addLayer() warning: overwriting existing layer:", type_arg); + var options = opts; + # Argument handling + + if (type_arg != nil) { + var layer = factory.new(type:type_arg, group:me, map:me, style:style, options:options, visible:visible); + var type = factory.get(type_arg); + var key = type_arg; + } else { + var layer = factory.new(group:me, map:me, style:style, options:options, visible:visible); + var type = factory; + var key = factory.type; + } + me.layers[type_arg] = layer; + + if (priority == nil) + priority = type.df_priority; + if (priority != nil) + layer.group.setInt("z-index", priority); + + return layer; # return new layer to caller() so that we can directly work with it, i.e. to register event handlers (panning/zooming) +}; + +# ----------------------------------------- +# From FGDATA/Nasal/canvas/MapStructure.nas +# ----------------------------------------- + +var opt_member = func(h,k) { + if (contains(h, k)) return h[k]; + if (contains(h, "parents")) { + var _=h.parents; + for (var i=0;i= 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'); +}; + diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas new file mode 100644 index 00000000..6c61908c --- /dev/null +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -0,0 +1,582 @@ +# Override FGDATA/Nasal/canvas/map/navdisplay.mfd + +var default_hash = canvas.default_hash; +var _MP_dbg_lvl = canvas._MP_dbg_lvl; +var assert_m = canvas.assert_m; + +var wxr_live_tree = "/instrumentation/wxr"; + +canvas.NavDisplay.set_switch = func(s, v) { + var switch = me.efis_switches[s]; + if(switch == nil) return nil; + var path = me.efis_path ~ switch.path ; + #print(s,":Getting switch prop:", path); + + setprop( path, v ); +}; + +canvas.NavDisplay.get_nav_path = func (type, idx) { + var name = (type == 'dme' ? type : 'nav'); + var path = 'instrumentation/%s[%d]/'; + var indexes = me.radio_cfg[type]; + if (indexes != nil) { + idx = indexes[idx]; + } + return sprintf(path, name, idx); +}; + +canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update_time=0.05) +{ + if (me.inited) die("MFD already was added to scene"); + me.range_dependant_layers = []; + me.always_update_layers = {}; + me.inited = 1; + me.update_timer = maketimer(update_time, func me.update() ); + me.nd = canvas_group; + me.canvas_handle = parent; + me.df_options = nil; + if(contains(me.nd_style, 'options')) + me.df_options = me.nd_style.options; + nd_options = default_hash(nd_options, me.df_options); + me.options = nd_options; + me.route_driver = nil; + if(contains(me.options, 'route_driver')){ + me.route_driver = me.options.route_driver; + } + elsif(contains(me.options, 'defaults')){ + if(contains(me.options.defaults, 'route_driver')) + me.route_driver = me.options.defaults.route_driver; + } + me.radio_cfg = me.options['radio']; + if (me.radio_cfg == nil) me.radio_cfg = {}; + + # load the specified SVG file into the me.nd group and populate all sub groups + + canvas.parsesvg(me.nd, me.nd_style.svg_filename, {'font-mapper': me.nd_style.font_mapper}); + me.symbols = {}; # storage for SVG elements, to avoid namespace pollution (all SVG elements end up here) + + foreach(var feature; me.nd_style.features ) { + me.symbols[feature.id] = me.nd.getElementById(feature.id).updateCenter(); + if(contains(feature.impl,'init')) feature.impl.init(me.nd, feature); # call The element's init code (i.e. updateCenter) + } + + ### this is the "old" method that's less flexible, we want to use the style hash instead (see above) + # because things are much better configurable that way + # now look up all required SVG elements and initialize member fields using the same name to have a convenient handle + foreach(var element; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId", + "status.wxr","status.wpt","status.sta","status.arpt"]) + me.symbols[element] = me.nd.getElementById(element); + + # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each + # anything that needs updatecenter called, should be added to the vector here + # + foreach(var element; ["staArrowL2","staArrowR2","staFromL2","staToL2","staFromR2","staToR2", + "hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr", + "HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2", + "staArrowL","staArrowR","staToL","staFromL","staToR","staFromR"] ) + me.symbols[element] = me.nd.getElementById(element).updateCenter(); + + me.map = me.nd.createChild("map","map") + .set("clip", "rect(124, 1024, 1024, 0)") + .set("screen-range", 700) + .set('z-index',-1); + + me.update_sub(); # init some map properties based on switches + + var vor1_path = me.get_nav_path('vor', 0); + var vor2_path = me.get_nav_path('vor', 1); + # predicate for the draw controller + var is_tuned = func(freq) { + var nav1=getprop(vor1_path~ "frequencies/selected-mhz"); + var nav2=getprop(vor1_path~ "frequencies/selected-mhz"); + if (freq == nav1 or freq == nav2) return 1; + return 0; + } + + # another predicate for the draw controller + var get_course_by_freq = func(freq) { + if (freq == getprop(vor1_path~ "frequencies/selected-mhz")) + return getprop(vor1_path~ "radials/selected-deg"); + else + return getprop(vor2_path~ "radials/selected-deg"); + } + + var get_current_position = func { + delete(caller(0)[0], "me"); # remove local me, inherit outer one + return [ + me.aircraft_source.get_lat(), me.aircraft_source.get_lon() + ]; + } + + # a hash with controller callbacks, will be passed onto draw routines to customize behavior/appearance + # the point being that draw routines don't know anything about their frontends (instrument or GUI dialog) + # so we need some simple way to communicate between frontend<->backend until we have real controllers + # for now, a single controller hash is shared by most layers - unsupported callbacks are simply ignored by the draw files + # + + var controller = { + parents: [canvas.Map.Controller], + _pos: nil, _time: nil, + is_tuned:is_tuned, + get_tuned_course:get_course_by_freq, + get_position: get_current_position, + new: func(map) return { parents:[controller], map:map }, + should_update_all: func { + # TODO: this is just copied from aircraftpos.controller, + # it really should be moved to somewhere common and reused + # and extended to fully differentiate between "static" + # and "volatile" layers. + var pos = me.map.getPosCoord(); + if (pos == nil) return 0; + var time = systime(); + if (me._pos == nil) + me._pos = geo.Coord.new(pos); + else { + var dist_m = me._pos.direct_distance_to(pos); + # 2 NM until we update again + if (dist_m < 2 * NM2M) return 0; + # Update at most every 4 seconds to avoid excessive stutter: + elsif (time - me._time < 4) return 0; + } + #print("update aircraft position"); + var (x,y,z) = pos.xyz(); + me._pos.set_xyz(x,y,z); + me._time = time; + return 1; + }, + }; + me.map.setController(controller); + + ### + # set up various layers, controlled via callbacks in the controller hash + # revisit this code once Philosopher's "Smart MVC Symbols/Layers" work is committed and integrated + + # helper / closure generator + var make_event_handler = func(predicate, layer) func predicate(me, layer); + + me.layers={}; # storage container for all ND specific layers + # look up all required layers as specified per the NDStyle hash and do the initial setup for event handling + var default_opts = me.options != nil and contains(me.options, 'defaults') ? me.options.defaults : nil; + foreach(var layer; me.nd_style.layers) { + if(layer['disabled']) continue; # skip this layer + #print("newMFD(): Setting up ND layer:", layer.name); + + var the_layer = nil; + if(!layer['isMapStructure']) # set up an old INEFFICIENT and SLOW layer + the_layer = me.layers[layer.name] = canvas.MAP_LAYERS[layer.name].new( me.map, layer.name, controller ); + else { + printlog(_MP_dbg_lvl, "Setting up MapStructure-based layer for ND, name:", layer.name); + var opt = me.options != nil and me.options[layer.name] != nil ? me.options[layer.name] :nil; + if(opt == nil and contains(layer, 'options')) + opt = layer.options; + if(opt != nil and default_opts != nil) + opt = default_hash(opt, default_opts); + #elsif(default_opts != nil) + # opt = default_opts; + var style = nil; + if(contains(layer, 'style')) + style = layer.style; + #print("Options is: ", opt!=nil?"enabled":"disabled"); + #debug.dump(opt); + me.map.addLayer( + factory: canvas.SymbolLayer, + type_arg: layer.name, + opts: opt, + visible:0, + style: style, + priority: layer['z-index'] + ); + #me.map.addLayer(canvas.SymbolLayer, layer.name, layer['z-index'], style, opt, 0); + the_layer = me.layers[layer.name] = me.map.getLayer(layer.name); + if(opt != nil and contains(opt, 'range_dependant')){ + if(opt.range_dependant) + append(me.range_dependant_layers, the_layer); + } + if(contains(layer, 'always_update')) + me.always_update_layers[layer.name] = layer.always_update; + if (1) (func { + var l = layer; + var _predicate = l.predicate; + l.predicate = func { + var t = systime(); + call(_predicate, arg, me); + printlog(_MP_dbg_lvl, "Took "~((systime()-t)*1000)~"ms to update layer "~l.name); + } + })(); + } + + # now register all layer specific notification listeners and their corresponding update predicate/callback + # pass the ND instance and the layer handle to the predicate when it is called + # so that it can directly access the ND instance and its own layer (without having to know the layer's name) + var event_handler = make_event_handler(layer.predicate, the_layer); + foreach(var event; layer.update_on) { + # this handles timers + if (typeof(event)=='hash' and contains(event, 'rate_hz')) { + #print("FIXME: navdisplay.mfd timer handling is broken ATM"); + var job=me.addtimer(1/event.rate_hz, event_handler); + job.start(); + } + # and this listeners + else + # print("Setting up subscription:", event, " for ", layer.name, " handler id:", id(event_handler) ); + me.listen_switch(event, event_handler); + } # foreach event subscription + # and now update/init each layer once by calling its update predicate for initialization + event_handler(); + } # foreach layer + + #print("navdisplay.mfd:ND layer setup completed"); + + # start the update timer, which makes sure that the update() will be called + me.update_timer.start(); + + # TODO: move this to RTE.lcontroller ? + me.listen("/autopilot/route-manager/current-wp", func(activeWp) { + canvas.updatewp( activeWp.getValue() ); + }); + +}; + +canvas.NavDisplay.update_sub = func(){ + # Variables: + var userLat = me.aircraft_source.get_lat(); + var userLon = me.aircraft_source.get_lon(); + var userGndSpd = me.aircraft_source.get_gnd_spd(); + var userVSpd = me.aircraft_source.get_vspd(); + var dispLCD = me.get_switch('toggle_display_type') == "LCD"; + # Heading update + var userHdgMag = me.aircraft_source.get_hdg_mag(); + var userHdgTru = me.aircraft_source.get_hdg_tru(); + var userTrkMag = me.aircraft_source.get_trk_mag(); + var userTrkTru = me.aircraft_source.get_trk_tru(); + + if(me.get_switch('toggle_true_north')) { + var userHdg=userHdgTru; + me.userHdg=userHdgTru; + var userTrk=userTrkTru; + me.userTrk=userTrkTru; + } else { + var userHdg=userHdgMag; + me.userHdg=userHdgMag; + var userTrk=userTrkMag; + me.userTrk=userTrkMag; + } + # this should only ever happen when testing the experimental AI/MP ND driver hash (not critical) + # or when an error occurs (critical) + if (!userHdg or !userTrk or !userLat or !userLon) { + print("aircraft source invalid, returning !"); + return; + } + if (me.aircraft_source.get_gnd_spd() < 80) { + userTrk = userHdg; + me.userTrk=userHdg; + } + + if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT") + or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD")) + { + userHdgTrk = userTrk; + me.userHdgTrk = userTrk; + userHdgTrkTru = userTrkTru; + me.symbols.hdgTrk.setText("TRK"); + } else { + userHdgTrk = userHdg; + me.userHdgTrk = userHdg; + userHdgTrkTru = userHdgTru; + me.symbols.hdgTrk.setText("HDG"); + } + + # First, update the display position of the map + var oldRange = me.map.getRange(); + var pos = { + lat: nil, lon: nil, + alt: nil, hdg: nil, + range: nil, + }; + # reposition the map, change heading & range: + var pln_wpt_idx = getprop(me.efis_path ~ "/inputs/plan-wpt-index"); + if(me.in_mode('toggle_display_mode', ['PLAN']) and pln_wpt_idx >= 0) { + if(me.route_driver != nil){ + var wp = me.route_driver.getPlanModeWP(pln_wpt_idx); + if(wp != nil){ + pos.lat = wp.wp_lat; + pos.lon = wp.wp_lon; + } else { + pos.lat = getprop("/autopilot/route-manager/route/wp["~pln_wpt_idx~"]/latitude-deg"); + pos.lon = getprop("/autopilot/route-manager/route/wp["~pln_wpt_idx~"]/longitude-deg"); + } + } else { + pos.lat = getprop("/autopilot/route-manager/route/wp["~pln_wpt_idx~"]/latitude-deg"); + pos.lon = getprop("/autopilot/route-manager/route/wp["~pln_wpt_idx~"]/longitude-deg"); + } + } else { + pos.lat = userLat; + pos.lon = userLon; + } + if(me.in_mode('toggle_display_mode', ['PLAN'])) { + pos.hdg = 0; + pos.range = me.rangeNm()*2 + } else { + pos.range = me.rangeNm(); # avoid this here, use a listener instead + pos.hdg = userHdgTrkTru; + } + if(me.options != nil and (var pos_callback = me.options['position_callback']) != nil) + pos_callback(me, pos); + call(me.map.setPos, [pos.lat, pos.lon], me.map, pos); + if(pos.range != oldRange){ + foreach(l; me.range_dependant_layers){ + l.update(); + } + } +}; + +canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft specific, cannot easily be reused by other aircraft +{ + var _time = systime(); + # Disables WXR Live if it's not enabled. The toggle_weather_live should be common to all + # ND instances. + var wxr_live_enabled = getprop(wxr_live_tree~'/enabled'); + if(wxr_live_enabled == nil or wxr_live_enabled == '') + wxr_live_enabled = 0; + me.set_switch('toggle_weather_live', wxr_live_enabled); + call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables + + # MapStructure update! + if (me.map.controller.should_update_all()) { + me.map.update(); + } else { + # TODO: ugly list here + # FIXME: use a VOLATILE layer helper here that handles TFC, APS, WXR etc ? + var update_layers = me.always_update_layers; + me.map.update(func(layer) contains(update_layers, layer.type)); + } + + # Other symbol update + # TODO: should be refactored! + var translation_callback = nil; + if(me.options != nil) + translation_callback = me.options['translation_callback']; + if(typeof(translation_callback) == 'func'){ + var trsl = translation_callback(me); + me.map.setTranslation(trsl.x, trsl.y); + } else { + if(me.in_mode('toggle_display_mode', ['PLAN'])) + me.map.setTranslation(512,512); + elsif(me.get_switch('toggle_centered')) + me.map.setTranslation(512,565); + else + me.map.setTranslation(512,824); + } + var vor1_path = me.get_nav_path('vor', 0); + var vor2_path = me.get_nav_path('vor', 1); + var dme1_path = me.get_nav_path('dme', 0); + var dme2_path = me.get_nav_path('dme', 1); + + if(me.get_switch('toggle_rh_vor_adf') == 1) { + me.symbols.vorR.setText("VOR R"); + me.symbols.vorR.setColor(0.195,0.96,0.097); + me.symbols.dmeR.setText("DME"); + me.symbols.dmeR.setColor(0.195,0.96,0.097); + if(getprop(vor2_path~ "in-range")) + me.symbols.vorRId.setText(getprop(vor2_path~ "nav-id")); + else + me.symbols.vorRId.setText(getprop(vor2_path~ "frequencies/selected-mhz-fmt")); + me.symbols.vorRId.setColor(0.195,0.96,0.097); + if(getprop(dme2_path~ "in-range")) + me.symbols.dmeRDist.setText(sprintf("%3.1f",getprop(dme2_path~ "indicated-distance-nm"))); + else me.symbols.dmeRDist.setText(" ---"); + me.symbols.dmeRDist.setColor(0.195,0.96,0.097); + } elsif(me.get_switch('toggle_rh_vor_adf') == -1) { + me.symbols.vorR.setText("ADF R"); + me.symbols.vorR.setColor(0,0.6,0.85); + me.symbols.dmeR.setText(""); + me.symbols.dmeR.setColor(0,0.6,0.85); + if((var navident=getprop("instrumentation/adf[1]/ident")) != "") + me.symbols.vorRId.setText(navident); + else me.symbols.vorRId.setText(sprintf("%3d",getprop("instrumentation/adf[1]/frequencies/selected-khz"))); + me.symbols.vorRId.setColor(0,0.6,0.85); + me.symbols.dmeRDist.setText(""); + me.symbols.dmeRDist.setColor(0,0.6,0.85); + } else { + me.symbols.vorR.setText(""); + me.symbols.dmeR.setText(""); + me.symbols.vorRId.setText(""); + me.symbols.dmeRDist.setText(""); + } + + # Hide heading bug 10 secs after change + var vhdg_bug = getprop("autopilot/settings/heading-bug-deg") or 0; + var hdg_bug_active = getprop("autopilot/settings/heading-bug-active"); + if (hdg_bug_active == nil) + hdg_bug_active = 1; + + if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT") + or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD")) + { + me.symbols.trkInd.setRotation(0); + me.symbols.curHdgPtr.setRotation((userHdg-userTrk)*D2R); + me.symbols.curHdgPtr2.setRotation((userHdg-userTrk)*D2R); + } + else + { + me.symbols.trkInd.setRotation((userTrk-userHdg)*D2R); + me.symbols.curHdgPtr.setRotation(0); + me.symbols.curHdgPtr2.setRotation(0); + } + if(!me.in_mode('toggle_display_mode', ['PLAN'])) + { + var hdgBugRot = (vhdg_bug-userHdgTrk)*D2R; + me.symbols.selHdgLine.setRotation(hdgBugRot); + me.symbols.hdgBug.setRotation(hdgBugRot); + me.symbols.hdgBug2.setRotation(hdgBugRot); + me.symbols.selHdgLine2.setRotation(hdgBugRot); + } + + var staPtrVis = !me.in_mode('toggle_display_mode', ['PLAN']); + if((me.in_mode('toggle_display_mode', ['MAP']) and me.get_switch('toggle_display_type') == "CRT") + or (me.get_switch('toggle_track_heading') and me.get_switch('toggle_display_type') == "LCD")) + { + var vorheading = userTrkTru; + var adfheading = userTrkMag; + } + else + { + var vorheading = userHdgTru; + var adfheading = userHdgMag; + } + if(getprop(vor1_path~ "heading-deg") != nil) + var nav0hdg=getprop(vor1_path~ "heading-deg") - vorheading; + if(getprop(vor2_path~ "heading-deg") != nil) + var nav1hdg=getprop(vor2_path~ "heading-deg") - vorheading; + var adf0hdg=getprop("instrumentation/adf/indicated-bearing-deg"); + var adf1hdg=getprop("instrumentation/adf[1]/indicated-bearing-deg"); + if(!me.get_switch('toggle_centered')) + { + if(me.in_mode('toggle_display_mode', ['PLAN'])) + me.symbols.trkInd.hide(); + else + me.symbols.trkInd.show(); + if((getprop(vor1_path~ "in-range") and me.get_switch('toggle_lh_vor_adf') == 1)) { + me.symbols.staArrowL.setVisible(staPtrVis); + me.symbols.staToL.setColor(0.195,0.96,0.097); + me.symbols.staFromL.setColor(0.195,0.96,0.097); + me.symbols.staArrowL.setRotation(nav0hdg*D2R); + } + elsif(getprop("instrumentation/adf/in-range") and (me.get_switch('toggle_lh_vor_adf') == -1)) { + me.symbols.staArrowL.setVisible(staPtrVis); + me.symbols.staToL.setColor(0,0.6,0.85); + me.symbols.staFromL.setColor(0,0.6,0.85); + me.symbols.staArrowL.setRotation(adf0hdg*D2R); + } else { + me.symbols.staArrowL.hide(); + } + if((getprop(vor2_path~ "in-range") and me.get_switch('toggle_rh_vor_adf') == 1)) { + me.symbols.staArrowR.setVisible(staPtrVis); + me.symbols.staToR.setColor(0.195,0.96,0.097); + me.symbols.staFromR.setColor(0.195,0.96,0.097); + me.symbols.staArrowR.setRotation(nav1hdg*D2R); + } elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch('toggle_rh_vor_adf') == -1)) { + me.symbols.staArrowR.setVisible(staPtrVis); + me.symbols.staToR.setColor(0,0.6,0.85); + me.symbols.staFromR.setColor(0,0.6,0.85); + me.symbols.staArrowR.setRotation(adf1hdg*D2R); + } else { + me.symbols.staArrowR.hide(); + } + me.symbols.staArrowL2.hide(); + me.symbols.staArrowR2.hide(); + me.symbols.curHdgPtr2.hide(); + me.symbols.HdgBugCRT2.hide(); + me.symbols.TrkBugLCD2.hide(); + me.symbols.HdgBugLCD2.hide(); + me.symbols.selHdgLine2.hide(); + me.symbols.curHdgPtr.setVisible(staPtrVis); + me.symbols.HdgBugCRT.setVisible(staPtrVis and !dispLCD); + if(me.get_switch('toggle_track_heading')) + { + me.symbols.HdgBugLCD.hide(); + me.symbols.TrkBugLCD.setVisible(staPtrVis and dispLCD); + } + else + { + me.symbols.TrkBugLCD.hide(); + me.symbols.HdgBugLCD.setVisible(staPtrVis and dispLCD); + } + me.symbols.selHdgLine.setVisible(staPtrVis and hdg_bug_active); + } else { + me.symbols.trkInd.hide(); + if((getprop(vor1_path~ "in-range") and me.get_switch('toggle_lh_vor_adf') == 1)) { + me.symbols.staArrowL2.setVisible(staPtrVis); + me.symbols.staFromL2.setColor(0.195,0.96,0.097); + me.symbols.staToL2.setColor(0.195,0.96,0.097); + me.symbols.staArrowL2.setRotation(nav0hdg*D2R); + } elsif(getprop("instrumentation/adf/in-range") and (me.get_switch('toggle_lh_vor_adf') == -1)) { + me.symbols.staArrowL2.setVisible(staPtrVis); + me.symbols.staFromL2.setColor(0,0.6,0.85); + me.symbols.staToL2.setColor(0,0.6,0.85); + me.symbols.staArrowL2.setRotation(adf0hdg*D2R); + } else { + me.symbols.staArrowL2.hide(); + } + if((getprop(vor2_path~ "in-range") and me.get_switch('toggle_rh_vor_adf') == 1)) { + me.symbols.staArrowR2.setVisible(staPtrVis); + me.symbols.staFromR2.setColor(0.195,0.96,0.097); + me.symbols.staToR2.setColor(0.195,0.96,0.097); + me.symbols.staArrowR2.setRotation(nav1hdg*D2R); + } elsif(getprop("instrumentation/adf[1]/in-range") and (me.get_switch('toggle_rh_vor_adf') == -1)) { + me.symbols.staArrowR2.setVisible(staPtrVis); + me.symbols.staFromR2.setColor(0,0.6,0.85); + me.symbols.staToR2.setColor(0,0.6,0.85); + me.symbols.staArrowR2.setRotation(adf1hdg*D2R); + } else { + me.symbols.staArrowR2.hide(); + } + me.symbols.staArrowL.hide(); + me.symbols.staArrowR.hide(); + me.symbols.curHdgPtr.hide(); + me.symbols.HdgBugCRT.hide(); + me.symbols.TrkBugLCD.hide(); + me.symbols.HdgBugLCD.hide(); + me.symbols.selHdgLine.hide(); + me.symbols.curHdgPtr2.setVisible(staPtrVis); + me.symbols.HdgBugCRT2.setVisible(staPtrVis and !dispLCD); + if(me.get_switch('toggle_track_heading')) + { + me.symbols.HdgBugLCD2.hide(); + me.symbols.TrkBugLCD2.setVisible(staPtrVis and dispLCD); + } + else + { + me.symbols.TrkBugLCD2.hide(); + me.symbols.HdgBugLCD2.setVisible(staPtrVis and dispLCD); + } + me.symbols.selHdgLine2.setVisible(staPtrVis and hdg_bug_active); + } + + ## run all predicates in the NDStyle hash and evaluate their true/false behavior callbacks + ## this is in line with the original design, but normally we don't need to getprop/poll here, + ## using listeners or timers would be more canvas-friendly whenever possible + ## because running setprop() on any group/canvas element at framerate means that the canvas + ## will be updated at frame rate too - wasteful ... (check the performance monitor!) + + foreach(var feature; me.nd_style.features ) { + # for stuff that always needs to be updated + if (contains(feature.impl, 'common')) feature.impl.common(me); + # conditional stuff + if(!contains(feature.impl, 'predicate')) continue; # no conditional stuff + if ( var result=feature.impl.predicate(me) ) + feature.impl.is_true(me, result); # pass the result to the predicate + else + feature.impl.is_false( me, result ); # pass the result to the predicate + } + + ## update the status flags shown on the ND (wxr, wpt, arpt, sta) + # this could/should be using listeners instead ... + me.symbols['status.wxr'].setVisible( me.get_switch('toggle_weather') and me.in_mode('toggle_display_mode', ['MAP'])); + me.symbols['status.wpt'].setVisible( me.get_switch('toggle_waypoints') and me.in_mode('toggle_display_mode', ['MAP'])); + me.symbols['status.arpt'].setVisible( me.get_switch('toggle_airports') and me.in_mode('toggle_display_mode', ['MAP'])); + me.symbols['status.sta'].setVisible( me.get_switch('toggle_stations') and me.in_mode('toggle_display_mode', ['MAP'])); + # Okay, _how_ do we hook this up with FGPlot? + printlog(_MP_dbg_lvl, "Total ND update took "~((systime()-_time)*100)~"ms"); + setprop("/instrumentation/navdisplay["~ canvas.NavDisplay.id ~"]/update-ms", systime() - _time); +}; diff --git a/Models/Instruments/ND/canvas/helpers.nas b/Models/Instruments/ND/canvas/helpers.nas new file mode 100644 index 00000000..af562f8b --- /dev/null +++ b/Models/Instruments/ND/canvas/helpers.nas @@ -0,0 +1,139 @@ +var SymbolPainter = { + aircraft_dir: nil, + getOpts: func(opts){ + if(opts == nil) opts = {}; + var defOpts = {id:nil,color:nil,scale:1,create_group:0,update_center:0}; + if(contains(opts, 'id')) + defOpts.id = opts.id; + if(contains(opts, 'color')) + defOpts.color = opts.color; + if(contains(opts, 'scale')) + defOpts.scale = opts.scale; + if(contains(opts, 'create_group')) + defOpts.create_group = opts.create_group; + if(contains(opts, 'update_center')) + defOpts.update_center = opts.update_center; + return defOpts; + }, + getAircraftDir: func(){ + if(me.aircraft_dir == nil) + me.aircraft_dir = split('/', getprop("/sim/aircraft-dir"))[-1]; + return me.aircraft_dir; + }, + svgPath: func(file){ + return "Aircraft/" ~ me.getAircraftDir() ~ "/Models/Instruments/ND/canvas/res/"~file; + }, + drawFIX : func(grp, opts = nil){ + var icon_fix = nil; + opts = me.getOpts(opts); + var sym_id = opts.id; + if(sym_id != nil) + icon_fix = grp.createChild("path", sym_id); + else + icon_fix = grp.createChild("path"); + var color = opts.color; + if(color == nil){ + color = { + r: 0.69, + g: 0, + b: 0.39 + }; + } + var scale = opts.scale; + if(scale == nil) scale = 0.8; + icon_fix.moveTo(-10,0) + .lineTo(0,-17) + .lineTo(10,0) + .lineTo(0,17) + .close() + .setStrokeLineWidth(3) + .setColor(color.r,color.g,color.b) + .setScale(scale,scale); + return icon_fix; + }, + drawVOR: func(grp, opts = nil){ + opts = me.getOpts(opts); + if(opts.create_group){ + var sym_id = opts.id; + if(sym_id != nil) + grp = grp.createChild("group", sym_id); + else + grp = grp.createChild("group"); + } + var svg_path = me.svgPath('airbus_vor.svg'); + canvas.parsesvg(grp, svg_path); + var scale = opts.scale; + if(scale == nil) scale = 0.8; + grp.setScale(scale,scale); + if(opts.update_center) + grp.setTranslation(-24 * scale,-24 * scale); + if(!contains(grp, 'setColor')){ + grp.setColor = func { + var layer1 = grp.getElementById('layer1'); + if(layer1 == nil) return; + var children = layer1.getChildren(); + foreach(var c; children){ + if(isa(c, canvas.Path)) + c.setColor(arg); + } + }; + } + return grp; + }, + drawNDB: func(grp, opts = nil){ + var icon_ndb = nil; + opts = me.getOpts(opts); + var sym_id = opts.id; + if(sym_id != nil) + icon_ndb = grp.createChild("path", sym_id); + else + icon_ndb = grp.createChild("path"); + var color = opts.color; + var color = opts.color; + if(color == nil){ + color = { + r: 0.69, + g: 0, + b: 0.39 + }; + } + var scale = opts.scale; + if(scale == nil) scale = 0.8; + icon_ndb.moveTo(-15,15) + .lineTo(0,-15) + .lineTo(15,15) + .close() + .setStrokeLineWidth(3) + .setColor(color.r,color.g,color.b) + .setScale(scale,scale); + return icon_ndb; + }, + drawAirport: func(grp, opts = nil){ + opts = me.getOpts(opts); + if(opts.create_group){ + var sym_id = opts.id; + if(sym_id != nil) + grp = grp.createChild("group", sym_id); + else + grp = grp.createChild("group"); + } + var svg_path = me.svgPath('airbus_airport.svg'); + canvas.parsesvg(grp, svg_path); + var scale = opts.scale; + if(scale == nil) scale = 0.8; + grp.setScale(scale,scale); + if(opts.update_center) + grp.setTranslation(-24 * scale,-24 * scale); + return grp; + }, + draw: func(type, grp, opts = nil){ + if(type == 'VOR' or type == 'vor') + return me.drawVOR(grp, opts); + elsif(type == 'NDB' or type == 'ndb') + return me.drawNDB(grp, opts); + elsif(type == 'ARPT' or type == 'arpt') + return me.drawAirport(grp, opts); + else + return me.drawFIX(grp, opts); + } +}; diff --git a/Models/Instruments/ND/canvas/loaders.nas b/Models/Instruments/ND/canvas/loaders.nas new file mode 100644 index 00000000..54cd1b43 --- /dev/null +++ b/Models/Instruments/ND/canvas/loaders.nas @@ -0,0 +1,83 @@ +var version = getprop('sim/version/flightgear'); +var v = split('.', version); +version = num(v[0]~'.'~v[1]); + +setlistener("/nasal/canvas/loaded", func() { + + ####### LOAD FILES ####### + #print("loading files"); + (func { + var aircraft_root = getprop("/sim/aircraft-dir"); + + var load = func(file, name) { + #print("Loading ..." ~ file); + if (name == nil) + var name = split("/", file)[-1]; + if (substr(name, size(name)-4) == ".draw") + name = substr(name, 0, size(name)-5); + #print("reading file"); + var code = io.readfile(file); + #print("compiling file"); + # This segfaults for some reason: + #var code = call(compile, [code], var err=[]); + var code = call(func compile(code, file), [code], var err=[]); + if (size(err)) { + #print("handling error"); + if (substr(err[0], 0, 12) == "Parse error:") { # hack around Nasal feature + var e = split(" at line ", err[0]); + if (size(e) == 2) + err[0] = string.join("", [e[0], "\n at ", file, ", line ", e[1], "\n "]); + } + for (var i = 1; (var c = caller(i)) != nil; i += 1) + err ~= subvec(c, 2, 2); + debug.printerror(err); + return; + } + #print("calling code"); + call(code, nil, nil, var hash = {}); + #debug.dump(keys(hash)); + return hash; + }; + + var load_deps = func(name) { + print('Loading MapStructure Layer: '~ name); + load(aircraft_root~"/Models/Instruments/ND/map/"~name~".lcontroller", name); + load(aircraft_root~"/Models/Instruments/ND/map/"~name~".symbol", name); + if(version < 3.2) + load(aircraft_root~"/Models/Instruments/ND/map/"~name~".scontroller", name); + } + + #foreach( var name; ['APS','ALT-profile','SPD-profile','RTE','WPT','DECEL','NDB'] ) + #load_deps( name ); + var dep_names = [ + # With these extensions, in this order: + "lcontroller", + "symbol", + "scontroller", + "controller", + ]; + var map_root = aircraft_root~"/Models/Instruments/ND/canvas/map/"; + var files = directory(map_root); + var deps = {}; + foreach (var d; dep_names) deps[d] = []; + foreach(var f; files){ + var ext = size(var s=split(".", f)) > 1 ? s[-1] : nil; + foreach (var d; dep_names) { + if (ext == d) { + append(deps[d], f); + break + } + } + } + + foreach (var d; dep_names) { + foreach (var f; deps[d]) { + var name = split(".", f)[0]; + load(map_root~f, name); + } + } + +})(); + + +}, 1); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/map.removed/HOLD.lcontroller b/Models/Instruments/ND/canvas/map.removed/HOLD.lcontroller new file mode 100644 index 00000000..06dca70b --- /dev/null +++ b/Models/Instruments/ND/canvas/map.removed/HOLD.lcontroller @@ -0,0 +1,112 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'HOLD'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + #debug.dump(layer.parents); + layer.searcher._equals = func(a,b) a.id == b.id; + #append(m.listeners, setlistener(layer.options.fplan_active, func m.layer.update() )); + #m.addVisibilityListener(); + var driver = opt_member(m.layer.options, 'route_driver'); + if(driver == nil){ + driver = RouteDriver.new(); + } +# var driver_listeners = driver.getListeners(); +# foreach(var listener; driver_listeners){ +# append(m.listeners, setlistener(listener, func m.layer.update())); +# } + m.route_driver = driver; + + return m; +}; + +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + var driver = me.route_driver; + if(!driver.shouldUpdate()) return []; + driver.update(); + var results = []; + var planCount = driver.getNumberOfFlightPlans(); + var cur_fp = flightplan(); + var cur_wp = cur_fp.getWP(); + var next_wp = nil; + if (cur_wp != nil) + next_wp = cur_fp.getWP(cur_wp.index + 1); + var range = me.map.getRange(); + if (range == nil) range = 0; + for(var idx = 0; idx < planCount; idx += 1){ + var patterns = me.route_driver.getHoldPatterns(idx); + if (typeof(patterns) == 'vector') { + foreach (var pattern; patterns) { + var wp = pattern['wp']; + if (wp == nil) continue; + var wp_id = wp.id; + var wp_idx = wp.index; + var node = pattern['node']; + if (node == nil) continue; + var pointsNode = node.getNode('points'); + var pointNode = nil; + if(pointsNode != nil) + pointNode = pointsNode.getNode('point', 0); + if (pointNode == nil) continue; + var r = pattern['crs']; + var d = pattern['dist']; + var t = pattern['turn']; + if (r == nil or d == nil or t == nil) continue; + var active = node.getValue('active') == 1; + var fpId = pattern['fpId']; + var type = 'hold_symbol'; + var sfx = '-inactive'; + if (fpId == 'active' or fpId == 'temporary') { + if (range <= 160) { + if ((cur_wp != nil and cur_wp.index == wp_idx) or + (next_wp != nil and next_wp.index == wp_idx)) { + type = 'pattern'; + sfx = ''; + } + } + } + var lat = wp.wp_lat; + var lon = wp.wp_lon; + var model = { + parents: [geo.Coord], + id: wp_id~r~d~t~sfx, + pos: {lat: lat, lon: lon}, + type: type, + latlon: func(){ + return [ + me.pos.lat, + me.pos.lon + ]; + }, + radial: r, + dist: d, + turn: t, + fpId: fpId, + equals: func(o){me.id == o.id} + }; + append(results, model); + } + } + } + + return results; +} diff --git a/Models/Instruments/ND/canvas/map.removed/HOLD.scontroller b/Models/Instruments/ND/canvas/map.removed/HOLD.scontroller new file mode 100644 index 00000000..b1e8f2bc --- /dev/null +++ b/Models/Instruments/ND/canvas/map.removed/HOLD.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'HOLD'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map.removed/HOLD.symbol b/Models/Instruments/ND/canvas/map.removed/HOLD.symbol new file mode 100644 index 00000000..ddacf7fa --- /dev/null +++ b/Models/Instruments/ND/canvas/map.removed/HOLD.symbol @@ -0,0 +1,124 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'HOLD'; +var parents = [canvas.DotSym]; +var __self__ = caller(0)[0]; +canvas.DotSym.makeinstance( name, __self__ ); + +#canvas.SymbolLayer.get(name).df_style = { +# radius: 13, +#}; + +var element_type = "group"; + +var draw_pattern = func(dist, turn, from_point = -1){ + var pattern = me.element.createChild("path", 'hold-pattern'); + pattern.set("z-index",4); + var w = (dist * 2) / math.pi; + var h = dist * 70; + var r = w / 2; + var perp1 = 70; + var perp2 = -70; + if (turn == 'L') { + perp1 = -70; + perp2 = 70; + } + if (turn == 'R') + pattern.arcSmallCW(r,r,0,70 * w,0); + else + pattern.arcSmallCCW(r,r,0,-70 * w,0); + pattern.line(0,h); + if (turn == 'R') + pattern.arcSmallCW(r,r,0,-70 * w,0); + else + pattern.arcSmallCCW(r,r,0,70 * w,0); + pattern.line(0,-h). + setStrokeLineWidth(5). + setColor(me.active_color); + return pattern; +}; + +var draw_hold_sym = func(turn){ + var hold_symbol = me.element.createChild("group", 'hold-symbol'); + var svg = get_local_path("res/airbus_hold"~turn~".svg"); + canvas.parsesvg(hold_symbol, svg); + hold_symbol.setTranslation(-32,-64).set('z-index', 4); + return hold_symbol; +} + +var init = func { + var type = me.model.type; + var dist = me.model.dist; + var turn = me.model.turn; + me.active_color = me.getStyle('active_color', + me.getOption('active_route_color', + [0.4,0.7,0.4])); + me.inactive_color = me.getStyle('inactive_color', + me.getOption('inactive_route_color', + [0.95,0.95,0.21])); + if(type == 'pattern'){ + me.hold_pattern = me.draw_pattern(dist, turn); + me.hold_symbol = nil; + } else { + #print('CREATING HOLD SYM'); + me.hold_pattern = nil; + me.hold_symbol = me.draw_hold_sym(turn); + } +} + +var draw = func{ + var type = me.model.type; + var map = me.layer.map; + var pos = map.getPos(); + #print('DRAW HOLD '~ type); + if(type == 'pattern'){ + var dist = me.model.dist; + var turn = me.model.turn; + if(me.hold_symbol != nil){ + me.hold_symbol.hide(); + } + if(me.hold_pattern == nil) + me.hold_pattern = me.draw_pattern(dist, turn); + if(me.hold_pattern == nil) return; + var radial = me.model.radial; + if(radial != nil){ + var hdg = pos[2]; + if(hdg == nil) hdg = 0; + radial -= hdg; + if(radial < 0) radial = 360 + radial; + me.element.setRotation(radial*D2R); + } + var rng = pos[3]; + #print("CANVAS: Map RNG: " ~ rng); + if(rng == nil) rng = 10; + rng = 10 / rng; + #print("CANVAS: Hold Scale: " ~ rng); + me.element.setScale(rng,rng); + me.hold_pattern.setStrokeLineWidth(5 * (1/rng)); + var lat_ctrl = getprop(me.getOption('lat_ctrl')); + var lnav = (lat_ctrl == me.getOption('lat_ctrl_managed','fmgc')); + var fp_actv = getprop(me.getOption('fplan_active')); + var fpId = me.model.fpId; + #print('HOLD ' ~ lnav ~ ',' ~ fp_actv); + var is_tmpy = (fpId == 'temporary'); + if(!lnav or !fp_actv or is_tmpy) + me.hold_pattern.setStrokeDashArray([32, 16]); + else + me.hold_pattern.setStrokeDashArray([1,0]); + if(!fp_actv or is_tmpy) + me.hold_pattern.setColor(me.inactive_color); + else + me.hold_pattern.setColor(me.active_color); + } else { + var turn = me.model.turn; + if(me.hold_pattern != nil){ + me.hold_pattern.hide(); + } + if(me.hold_symbol == nil) + me.hold_symbol = me.draw_hold_sym(turn); + + me.hold_symbol.show(); + me.element.setScale(1,1); + me.element.setRotation(0); + } +} diff --git a/Models/Instruments/ND/canvas/map/ALT-profile.lcontroller b/Models/Instruments/ND/canvas/map/ALT-profile.lcontroller new file mode 100644 index 00000000..3cfcd553 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/ALT-profile.lcontroller @@ -0,0 +1,47 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'ALT-profile'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + fplan_active: "/autopilot/route-manager/active", + vnav_node: "/autopilot/route-manager/vnav/", + types: ["tc", "td", "ec", "ed","sc", "sd"], + } +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(a,b) a.getName() == b.getName(); + append(m.listeners, setlistener(layer.options.fplan_active, + func m.layer.update() )); + m.addVisibilityListener(); + + return m; +}; +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + var results = []; + var symNode = props.globals.getNode(me.layer.options.vnav_node); + if (symNode != nil) + foreach (var t; me.layer.options.types) { + var n = symNode.getNode(t); + if (n != nil) + append(results, n); + } + return results; +} + diff --git a/Models/Instruments/ND/canvas/map/ALT-profile.scontroller b/Models/Instruments/ND/canvas/map/ALT-profile.scontroller new file mode 100644 index 00000000..1bd3fee3 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/ALT-profile.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'ALT-profile'; +var parents = [Symbol.Controller]; +var __self__ = caller(0)[0]; +Symbol.Controller.add(name, __self__); +Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map/ALT-profile.symbol b/Models/Instruments/ND/canvas/map/ALT-profile.symbol new file mode 100644 index 00000000..0d4ada33 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/ALT-profile.symbol @@ -0,0 +1,51 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'ALT-profile'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +SymbolLayer.get(name).df_style = { + radius: 13, +}; + +var element_type = "group"; + +var init = func { + var name = me.model.getName(); + var svg_path = me.getOption('svg_path'); + if(svg_path != nil){ + var grp = me.element.createChild("group", name); + if(typeof(svg_path) == 'scalar'){ + canvas.parsesvg(me.element, svg_path); + } + else{ #need hash + if(!contains(svg_path, name)) + die('ALT-Profile: no SVG Path for '~ name); + var path = svg_path[name]; + canvas.parsesvg(me.element, path); + } + } else { + var disptext = chr(string.toupper(name[0]))~"/"~chr(string.toupper(name[1])); + var radius = me.style.radius; + me.element.createChild("path") + .setStrokeLineWidth(5) + .moveTo(-radius, 0) + .arcLargeCW(radius, radius, 0, 2 * radius, 0) + .arcLargeCW(radius, radius, 0, -2 * radius, 0) + .setColor(0.195,0.96,0.097); + me.element.createChild("text") + .setDrawMode( canvas.Text.TEXT ) + .setText(disptext) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setTranslation(25,35) + .setColor(0.195,0.96,0.097); + } + me.callback('init_after'); +} + +var draw = func{ + me.callback('draw'); +} + diff --git a/Models/Instruments/ND/canvas/map/APS.lcontroller b/Models/Instruments/ND/canvas/map/APS.lcontroller new file mode 100644 index 00000000..a3441567 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APS.lcontroller @@ -0,0 +1,26 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'APS'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [SingleSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_style: {}, +}); +# N.B.: if used, this SymbolLayer should be updated every frame +# by the Map Controller, or as often as the position is changed. +var new = func(layer) { + var __model = layer.map.getPosCoord(); + #debug.dump(typeof(layer.options)); + if(layer.options != nil and contains(layer.options, 'model')) + __model = layer.options.model; + return { + parents: [__self__], + _model: __model, + }; +}; +var del = func; + diff --git a/Models/Instruments/ND/canvas/map/APS.scontroller b/Models/Instruments/ND/canvas/map/APS.scontroller new file mode 100644 index 00000000..e82d4c0a --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APS.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'APS'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map/APS.symbol b/Models/Instruments/ND/canvas/map/APS.symbol new file mode 100644 index 00000000..e54f4639 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APS.symbol @@ -0,0 +1,19 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'APS'; +var parents = [SVGSymbol]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var svg_path = "Nasal/canvas/map/Images/boeingAirplane.svg"; +var element_id = "airplane"; + +# Rotate with the main aircraft. +# Will have to be adapted if intended for use with other aircraft +# (but one could simply copy the layer for that). +var draw = func { + var rot = getprop("/orientation/heading-deg"); + rot -= me.layer.map.getHdg(); + me.element.setRotation(rot*D2R); +}; + diff --git a/Models/Instruments/ND/canvas/map/APT.lcontroller b/Models/Instruments/ND/canvas/map/APT.lcontroller new file mode 100644 index 00000000..2b20829a --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APT.lcontroller @@ -0,0 +1,47 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'APT'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_style: { + line_width: 3, + scale_factor: 1, + debug: 1, + color_default: [0,0.6,0.85], + label_font_color:[0,0.6,0.85], + label_font_size: 28, + text_offset: [17,35], + svg_path: nil + }, + +}); +var a_instance = nil; +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + m.addVisibilityListener(); + + return m; +}; +var del = func() { + #print(name,".lcontroller.del()"); + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + #print("Running query:", name); + var range = me.map.getRange(); + if (range == nil) return; + return positioned.findAirportsWithinRange(me.map.getPosCoord(), range); +}; + diff --git a/Models/Instruments/ND/canvas/map/APT.scontroller b/Models/Instruments/ND/canvas/map/APT.scontroller new file mode 100644 index 00000000..d41a6049 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APT.scontroller @@ -0,0 +1,16 @@ +# Class things: +var name = 'APT'; +var parents = [Symbol.Controller]; +var __self__ = caller(0)[0]; +Symbol.Controller.add(name, __self__); +Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = SymbolLayer.Controller.registry[name]; +var isActive = func(model) LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); + +var getpos = func(model){ + [model.lat, model.lon]; +} + diff --git a/Models/Instruments/ND/canvas/map/APT.symbol b/Models/Instruments/ND/canvas/map/APT.symbol new file mode 100644 index 00000000..2786d3c6 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/APT.symbol @@ -0,0 +1,44 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'APT'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; # we want a group, becomes "me.element" +var icon_apt = nil; +var text_apt = nil; + +# add the draw routine from airports-nd.draw here +var init = func { + var icon_apt = nil; + var style = me.layer.style; + var svg_path = style.svg_path; + if(svg_path != nil){ + canvas.parsesvg(me.element, svg_path); + } else { + icon_apt = me.element.createChild("path", name ~ " icon" ) + .moveTo(-17,0) + .arcSmallCW(17,17,0,34,0) + .arcSmallCW(17,17,0,-34,0) + .close() + .setColor(style.color_default) + .setStrokeLineWidth(style.line_width); + } + var text = me.getLabelFromModel(); + if(text == nil){ + text = me.model.id; + } + var text_apt = me.element.createChild("text", name ~ " label") + .setDrawMode( canvas.Text.TEXT ) + .setTranslation(style.text_offset) + .setText(text) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setColor(style.label_font_color) + .setFontSize(style.label_font_size); + + # FIXME: this applies scale to the whole group, better do this separately for each element? + me.element.setScale(style.scale_factor); +}; +var draw = func; + diff --git a/Models/Instruments/ND/canvas/map/DEBUG.lcontroller b/Models/Instruments/ND/canvas/map/DEBUG.lcontroller new file mode 100644 index 00000000..9d427ba2 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DEBUG.lcontroller @@ -0,0 +1,71 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'DEBUG'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [canvas.MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { + update_t : 'autopilot/route-manager/debug/update_t', + listen: ['update_t'] + }, + df_style: { + default_color: [1,0,0], + } +}); + +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(a,b) a.equals(b); + + return m; +}; + +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + var result = []; + #return result; + var node = me['node']; + if (node == nil) { + node = props.globals.getNode('autopilot/route-manager/debug/', 1); + me.node = node; + } + var points = me.node.getNode('points', 1).getChildren(); + #var count = getprop('autopilot/route-manager/debug/num') or 0; + var count = size(points); + #print('Map DEBUG: querying '~ count ~' results.'); + for(var idx = 0; idx < count; idx += 1){ + var point = points[idx]; + #var id = getprop('autopilot/route-manager/debug/point['~idx~']/id'); + #var lat = getprop('autopilot/route-manager/debug/point['~idx~']/lat'); + #var lon = getprop('autopilot/route-manager/debug/point['~idx~']/lon'); + var id = point.getValue('id'); + var lat = point.getValue('lat'); + var lon = point.getValue('lon'); + if (id == nil or id == '') continue; + #print('Map DEBUG: found '~ id ~' debug point.'); + var model = { + id: id, + lat: lat, + lon: lon, + equals: func(o){ + me.id == o.id and me.lat == o.lat and me.lon == o.lon + } + }; + append(result, model); + } + return result; +} diff --git a/Models/Instruments/ND/canvas/map/DEBUG.symbol b/Models/Instruments/ND/canvas/map/DEBUG.symbol new file mode 100644 index 00000000..b58444d7 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DEBUG.symbol @@ -0,0 +1,29 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'DEBUG'; +var parents = [canvas.DotSym]; +var __self__ = caller(0)[0]; +canvas.DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; + +var init = func { + me.text_wps = me.element.createChild("text", "dbg-text-" ~ me.model.id) + .setDrawMode( canvas.Text.TEXT ) + .setText(me.model.id) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setTranslation(25,15) + .setColor(1,0,0); + me.text_alt = nil; + me.sym = me.element.createChild("path"). + setStrokeLineWidth(4). + moveTo(-16,0). + arcSmallCW(16,16,0,32,0). + arcSmallCW(16,16,0,-32,0). + setColor(1,0,0); +} + +var draw = func{ + +} diff --git a/Models/Instruments/ND/canvas/map/DECEL.lcontroller b/Models/Instruments/ND/canvas/map/DECEL.lcontroller new file mode 100644 index 00000000..a4ec57a1 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DECEL.lcontroller @@ -0,0 +1,37 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'DECEL'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options : { # default configuration options + decel_node: "/autopilot/route-manager/vnav/decel/" + } +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(a,b) a.getName() == b.getName(); + return m; +}; +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + var results = []; + var symNode = props.globals.getNode(me.layer.options.decel_node); + if (symNode != nil and symNode.getValue('longitude-deg') != nil) + append(results, symNode); + return results; +} diff --git a/Models/Instruments/ND/canvas/map/DECEL.scontroller b/Models/Instruments/ND/canvas/map/DECEL.scontroller new file mode 100644 index 00000000..4e749b10 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DECEL.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'DECEL'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map/DECEL.symbol b/Models/Instruments/ND/canvas/map/DECEL.symbol new file mode 100644 index 00000000..cc39fd65 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DECEL.symbol @@ -0,0 +1,32 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'DECEL'; +var parents = [canvas.DotSym]; +var __self__ = caller(0)[0]; +canvas.DotSym.makeinstance( name, __self__ ); + +#canvas.SymbolLayer.get(name).df_style = { +# radius: 13, +#}; + +var element_type = "group"; + +var init = func { + var svg_path = me.getStyle('svg_path'); + if(svg_path == nil) + svg_path = get_local_path('res/airbus_decel.svg'); + me.decel_grp = me.element.createChild("group","decel"); + canvas.parsesvg(me.decel_grp, svg_path); + me.decel_grp.set('z-index', 5); +} + +var draw = func{ + if(me.decel_grp != nil){ + var spd_ctrl = getprop(me.options.spd_ctrl); + var spd_managed = (spd_ctrl == me.options.managed_val); + if(spd_managed) + me.decel_grp.setColor(me.style.managed_color); + else + me.decel_grp.setColor(me.style.selected_color); + } +} diff --git a/Models/Instruments/ND/canvas/map/DME.symbol b/Models/Instruments/ND/canvas/map/DME.symbol new file mode 100644 index 00000000..fcbaba3d --- /dev/null +++ b/Models/Instruments/ND/canvas/map/DME.symbol @@ -0,0 +1,152 @@ +# See: http://wiki.flightgear.org/MapStructure +# This layer is currently being restructured to better support 1) styling, 2) LOD and 3) caching of instanced symbols +# The corresponding APIs in MapStructure.nas and api.nas should probably be extended acccordingly +# +# We can look into adapting the other layers once we have a single use-case that works properly - including styling, LOD and caching - +# at that point, the framework should have evolved sufficiently. +# +# It would probably be a good idea to incrementally port some other layers and provide the corresponding helpers/APIs, to reduce the amount +# of specialized/identical code in the .symbol files. +# + + +# Class things: +var name = 'DME'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; # we want a group, becomes "me.element" + +var timer = nil; + +### +# symbols (canvas groups) managed by this file +# +var icon_dme = nil; + +var scale_animation = 1; + +var animate = func { + if (me.scale_animation >= 1) + me.scale_animation -= .5; + else + me.scale_animation += .5; + me.element.setScale( me.scale_animation ); +} + + +var del = func { + # me.timer.stop(); +} + +# CachedElement +# StyleAttribute +# Styleable +# RangeAwareElement + + + +# var DMEIcon = StyleableElement.new( [{color:IconColor}, ] ); + +### +# FIXME: these should probably be part of MapStructure itself +# TODO: Need to come up with a StyleableElement class for this sort of stuff +var apply_styling = func { + # add all styleable groups here + + # no need to do this whenever draw is called - typically, attributes won't change at all - so this is kinda redundant + var current_color = me.icon_dme.getColor(); + var required_color = nil; + + if (typeof(me.map.controller["is_tuned"]) == 'func' and me.map.controller.is_tuned(me.model.frequency/100)) + #TODO: once we support caching/instancing, we cannot just change the symbol like this - we need to use a different symbol from the cache instead + # which is why these things need to be done ONCE during init to set up a cache entry for each symbol variation to come up with a corresponding raster image + # TODO: API-wise it would make sense to maintain a vector of required keys, so that the style hash can be validated in the ctor of the layer + # to ensure that all mandatory fields are supplied + required_color = canvas._getColor( me.layer.style.color_tuned); + else + required_color = canvas._getColor( me.layer.style.color_default); + + if (current_color != required_color) { + # print("Setting color!"); + # TODO: this is where we would select another cached symbol + me.icon_dme.setColor( required_color ); + } + # else print("Not changing color (unnecessary)"); + + # debug.dump(me.layer.style); +} + + +### +# NOTE: This is only applied during initialization +# TODO: expose via addLayer/style param +# TODO: also needs to be aware of current range, so that proper LOD handling can be implemented +var apply_scale = func { + # add all symbols here that need scaling + me.icon_dme.setScale( me.layer.style.scale_factor ); +} + +### +# draw routines must be called here to create a lookup table +# with different symbols, based on styling (colors etc) +# because we can no longer change instanced symbols later on +# as they will be shared, so we need one cache entry for each +# variation in style +var init_cache = func { + +} + +## +# init is done separately to prepare support for caching (instanced symbols) +# +var init = func { + # debug.dump(me.layer.style); + var draw_func = me.getOption('draw_dme'); + if(typeof(draw_func) == 'func'){ + me.icon_dme = draw_func(me); + } else { + me.icon_dme = me.element.createChild("path") + .moveTo(-15,0) + .line(-12.5,-7.5) + .line(7.5,-12.5) + .line(12.5,7.5) + .lineTo(7.5,-12.5) + .line(12.5,-7.5) + .line(7.5,12.5) + .line(-12.5,7.5) + .lineTo(15,0) + .lineTo(7.5,12.5) + .vert(14.5) + .horiz(-14.5) + .vert(-14.5) + .close() + .setStrokeLineWidth( me.layer.style.line_width ); + } + + # finally scale the symbol as requested, this is done last so that people can override this when creating the layer + me.apply_scale(); + if(me.getOption('draw_text', 0)){ + me.dme_text = me.element.createChild("text") + .setDrawMode( canvas.Text.TEXT ) + .setText(me.model.id) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setColor(me.getStyle('text_color', [1,1,1])) + .setTranslation(me.getStyle('translation', [45,25])); + } + if (me.layer.style.animation_test) { + me.timer = maketimer(0.33, func me.animate() ); + me.timer.start(); + } + me.draw(); +} + +## +# this method is REQUIRED +# check if the current station is tuned or not - and style the symbol accordingly (color) +var draw = func { + me.apply_styling(); +}; + diff --git a/Models/Instruments/ND/canvas/map/FIX.lcontroller b/Models/Instruments/ND/canvas/map/FIX.lcontroller new file mode 100644 index 00000000..316690c8 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/FIX.lcontroller @@ -0,0 +1,31 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'FIX'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [NavaidSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + query_type:'fix', + }; + m.addVisibilityListener(); + + return m; +}; +var del = func() { + printlog(_MP_dbg_lvl, "VOR.lcontroller.del()"); + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = NavaidSymbolLayer.make('fix'); + diff --git a/Models/Instruments/ND/canvas/map/FIX.scontroller b/Models/Instruments/ND/canvas/map/FIX.scontroller new file mode 100644 index 00000000..5726f86a --- /dev/null +++ b/Models/Instruments/ND/canvas/map/FIX.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'FIX'; +var parents = [Symbol.Controller]; +var __self__ = caller(0)[0]; +Symbol.Controller.add(name, __self__); +Symbol.registry[ name ].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = SymbolLayer.Controller.registry[ name ]; +var isActive = func(model) LayerController.a_instance.isActive(model); +var query_range = func() + die( name~".scontroller.query_range /MUST/ be provided by implementation" ); + diff --git a/Models/Instruments/ND/canvas/map/FIX.symbol b/Models/Instruments/ND/canvas/map/FIX.symbol new file mode 100644 index 00000000..dfc13d9a --- /dev/null +++ b/Models/Instruments/ND/canvas/map/FIX.symbol @@ -0,0 +1,60 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'FIX'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +SymbolLayer.get(name).df_style = { + line_width: 3, + scale_factor: 1, + font: "LiberationFonts/LiberationSans-Regular.ttf", + font_color: [0,0,0], + font_size: 28, + color: [0, 0.6, 0.85], + show_labels: 1, +}; + + +var element_type = "group"; # we want a group, becomes "me.element" + +## +# used during initialization to populate the symbol cache with a FIX symbol +# +var drawFIX = func(group) { + group.createChild("path") + .moveTo(-15,15) + .lineTo(0,-15) + .lineTo(15,15) + .close() + .setStrokeLineWidth(line_width) + .setColor(color); +} +var _name = name; + +var init = func { + # initialize the cached fix symbol + var draw_fn = me.getOption('draw_function'); + if(typeof(draw_fn) != 'func') + draw_fn = drawFIX; + debug.dump(name); + var cache = StyleableCacheable.new( + name:_name, + draw_func: draw_fn, + cache: SymbolCache32x32, + draw_mode: SymbolCache.DRAW_CENTERED, + relevant_keys: ["line_width", "color"] + ); + cache.render(me.element, me.style).setScale(me.style.scale_factor); + + var txt_offset = me.getStyle('text_offset', [17, 35]); + var txt_color = me.getStyle('text_color', [0,0.6,0.85]); + # non-cached stuff: + if (me.style.show_labels){ + me.text_fix = me.newText(me.model.id). + setScale(me.style.scale_factor). + setTranslation(txt_offset). + setColor(txt_color); + } +} +var draw = func {me.callback('draw');}; diff --git a/Models/Instruments/ND/canvas/map/NDB.lcontroller b/Models/Instruments/ND/canvas/map/NDB.lcontroller new file mode 100644 index 00000000..5f31c728 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/NDB.lcontroller @@ -0,0 +1,32 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'NDB'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [NavaidSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_style: {}, +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + query_type:'ndb', + }; + m.addVisibilityListener(); + + return m; +}; +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = NavaidSymbolLayer.make('ndb'); + + diff --git a/Models/Instruments/ND/canvas/map/NDB.scontroller b/Models/Instruments/ND/canvas/map/NDB.scontroller new file mode 100644 index 00000000..7d1011db --- /dev/null +++ b/Models/Instruments/ND/canvas/map/NDB.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'NDB'; +var parents = [Symbol.Controller]; +var __self__ = caller(0)[0]; +Symbol.Controller.add(name, __self__); +Symbol.registry[ name ].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = SymbolLayer.Controller.registry[ name ]; +var isActive = func(model) LayerController.a_instance.isActive(model); +var query_range = func() + die( name~".scontroller.query_range /MUST/ be provided by implementation" ); + diff --git a/Models/Instruments/ND/canvas/map/NDB.symbol b/Models/Instruments/ND/canvas/map/NDB.symbol new file mode 100644 index 00000000..01615c75 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/NDB.symbol @@ -0,0 +1,7 @@ +# See: http://wiki.flightgear.org/MapStructure +DotSym.makeinstance('NDB', { + parents: [SVGSymbol], + svg_path: "/gui/dialogs/images/ndb_symbol.svg", + #cacheable: 1, +}); + diff --git a/Models/Instruments/ND/canvas/map/RTE.lcontroller b/Models/Instruments/ND/canvas/map/RTE.lcontroller new file mode 100644 index 00000000..342ad14d --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RTE.lcontroller @@ -0,0 +1,100 @@ +# See: http://wiki.flightgear.org/MapStructure +# TODO: this layer doesn't make sense to support for AI/MP traffic, because we don't currently have access to flightplan/routing info +# that also applies to other layers like WPT or even navaid layers that handle station tuning based on local radio settings +# +# Class things: +var name = 'RTE'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + active_node: "/autopilot/route-manager/active", + current_wp_node: "/autopilot/route-manager/current-wp", + wp_num: "/autopilot/route-manager/route/num", + display_inactive_rte: 0 + } +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(l,r) 0; # TODO: create model objects instead? + append(m.listeners, setlistener(layer.options.active_node, func m.layer.update() ), setlistener(layer.options.wp_num, func m.layer.update() )); + m.addVisibilityListener(); + var driver = opt_member(m.layer.options, 'route_driver'); + if(driver == nil){ + driver = RouteDriver.new(); + } + var driver_listeners = driver.getListeners(); + foreach(var listener; driver_listeners){ + append(m.listeners, setlistener(listener, func m.layer.update())); + } + m.route_driver = driver; + return m; +}; +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var last_result = []; + +var searchCmd = func { + # FIXME: do we return the active route even if it isn't active? + printlog(_MP_dbg_lvl, "Running query: ", name); + var plans = []; + var driver = me.route_driver; + if(!driver.shouldUpdate()) return me.last_result; + driver.update(); + # http://wiki.flightgear.org/Nasal_Flightplan + var planCount = driver.getNumberOfFlightPlans(); + for(var idx = 0; idx < planCount; idx += 1){ + #var fp = driver.getFlightPlan(idx); + var fpSize = driver.getPlanSize(idx); + if(fpSize < 2) continue; + var type = driver.getFlightPlanType(idx); + if(type == nil) type = 'active'; + if (!getprop(me.layer.options.active_node) and + type == 'active' and + !me.layer.options.display_inactive_rte) fpSize = 0; + var coords = []; + var discontinuity = 0; + for (var i=0; i= 2) + path = subvec(path, 0, 1) ~ subvec(path, path_l - 1, 1); + } + coords ~= path; + discontinuity = driver.hasDiscontinuity(idx, leg); + } + append(plans, { + id: type, + #name: type, + type: type, + path: coords, + #size: fpSize, + equals: func(o){ + me.id == o.id# and me.size == o.size + } + }); + } + me.last_result = plans; + return plans; +}; + diff --git a/Models/Instruments/ND/canvas/map/RTE.scontroller b/Models/Instruments/ND/canvas/map/RTE.scontroller new file mode 100644 index 00000000..7890370b --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RTE.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'RTE'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map/RTE.symbol b/Models/Instruments/ND/canvas/map/RTE.symbol new file mode 100644 index 00000000..70265ac3 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RTE.symbol @@ -0,0 +1,46 @@ +# See: http://wiki.flightgear.org/MapStructure + +# Class things: +var name = 'RTE'; +var parents = [LineSymbol]; +var __self__ = caller(0)[0]; +LineSymbol.makeinstance( name, __self__ ); + +SymbolLayer.get(name).df_style = { # style to use by default + line_width: 5, + color: [1,0,1] +}; + +var getLineStyle = func(property, df_val){ + var type = nil; + if(typeof(me.model) == 'hash'){ + type = me.model.type; + } + if(type != nil and type != 'active'){ + var base_prop = property; + property = property~'_'~type; + me.getStyle(property, me.getStyle(base_prop, df_val)); + } else { + me.getStyle(property, df_val); + } +}; + +var setRouteStyle = func{ + var df_style = SymbolLayer.get(name).df_style; + var dash = me.getLineStyle('line_dash', []); + var color = me.getLineStyle('color', df_style.color); + var line_width = me.getLineStyle('line_width', df_style.line_width); + me.element.setColor(color) + .setStrokeLineWidth(line_width); + if(typeof(dash) == 'vector') + me.element.setStrokeDashArray(dash); +}; + +var init = func { + me.setRouteStyle(); +}; + +#var draw = func { +# me.setRouteStyle(); +#}; + diff --git a/Models/Instruments/ND/canvas/map/RWY-profile.lcontroller b/Models/Instruments/ND/canvas/map/RWY-profile.lcontroller new file mode 100644 index 00000000..70ca2ddf --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RWY-profile.lcontroller @@ -0,0 +1,105 @@ +# See: http://wiki.flightgear.org/MapStructure + +var name = 'RWY-profile'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + disable_position: 1, + dep_rwy: '/autopilot/route-manager/departure/runway', + dest_rwy: '/autopilot/route-manager/destination/runway', + dep_arpt: '/autopilot/route-manager/departure/airport', + dest_arpt: '/autopilot/route-manager/destination/airport' + } +}); + +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(l,r) {l.equals(r)}; # TODO: create model objects instead? + #append(m.listeners, setlistener(layer.options.active_node, func m.layer.update() )); + #m.addVisibilityListener(); + var driver = opt_member(m.layer.options, 'route_driver'); + if(driver == nil){ + driver = RouteDriver.new(); + } + var driver_listeners = driver.getListeners(); + foreach(var listener; driver_listeners){ + append(m.listeners, setlistener(listener, func m.layer.update())); + } + m.route_driver = driver; + return m; +}; + +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var FPRunwayModel = { + new: func(apt, rwy){ + var m = { + parents: [FPRunwayModel], + id: rwy.id, + lat: rwy.lat, + lon: rwy.lon, + length: rwy.length, + width: rwy.width, + heading: rwy.heading, + airport_id: apt.id + }; + return m; + }, + latlon: func(){ + return [ + me.lat, + me.lon + ]; + }, + equals: func(o){me.id == o.id and me.airport_id == o.airport_id} +}; + +var searchCmd = func { + #var desApt = airportinfo(getprop(me.layer.options.dest_arpt)); + #var depApt = airportinfo(getprop(me.layer.options.dep_arpt)); + #if(desApt == nil and depApt == nil) + # return []; + var res = []; + var desRwy = nil; + var depRwy = nil; + + var driver = me.route_driver; + if(!driver.shouldUpdate()) return res; + driver.update(); + var fpcount = driver.getNumberOfFlightPlans(); + for(var i = 0; i < fpcount; i += 1){ + if(!driver.shouldUpdate()) continue; + var fp = driver.getFlightPlan(i); + var depApt = fp.departure; + if(depApt != nil){ + var depRwy = fp.departure_runway; + if(depRwy != nil){ + var model = FPRunwayModel.new(depApt, depRwy); + append(res, model); + } + } + var desApt = fp.destination; + if(desApt != nil){ + var desRwy = fp.destination_runway; + if(desRwy != nil){ + var model = FPRunwayModel.new(desApt, desRwy); + append(res, model); + } + } + } + + return res; +}; diff --git a/Models/Instruments/ND/canvas/map/RWY-profile.scontroller b/Models/Instruments/ND/canvas/map/RWY-profile.scontroller new file mode 100644 index 00000000..1d824e72 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RWY-profile.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'RWY-profile'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() +die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/map/RWY-profile.symbol b/Models/Instruments/ND/canvas/map/RWY-profile.symbol new file mode 100644 index 00000000..41987a75 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/RWY-profile.symbol @@ -0,0 +1,93 @@ +# See: http://wiki.flightgear.org/MapStructure + +# Class things: +var name = 'RWY-profile'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; + +var style = { # style to use by default + zoom: 20, + color: [1,1,1], + center_line_len: 0.75, + line_width: 3 +}; + +SymbolLayer.get(name).df_style = style; +#var already_drawn = 0; + +var init = func { + #if(me.already_drawn) return; + var lat = me.model.lat; + var lon = me.model.lon; + var rwyhdg = me.model.heading; + var width = me.model.width; + var length = me.model.length; + var group = me.element; + var ctr_len = length * me.getStyle('center_line_len', 0.75); + var crds = []; + var coord = geo.Coord.new(); + width = width * me.getStyle('zoom', 20); # Else rwy is too thin to be visible + var line_w = me.getStyle('line_width', 3); + var color = me.getStyle('color', [1,1,1]); + coord.set_latlon(lat, lon); + coord.apply_course_distance(rwyhdg, -(ctr_len / 2)); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg, (ctr_len)); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + icon_rwy = group.createChild("path", "rwy-cl") + .setStrokeLineWidth(line_w) + .setDataGeo([2,4],crds) + .setColor(color); + #.setStrokeDashArray([10, 20, 10, 20, 10]); + #icon_rwy.hide(); + var crds = []; + coord.set_latlon(lat, lon); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg + 90, width/2); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg, length); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + icon_rwy = group.createChild("path", "rwy") + .setStrokeLineWidth(line_w) + .setDataGeo([2,4,4],crds) + .setColor(color); + var crds = []; + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg - 90, width); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg, -length); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + coord.apply_course_distance(rwyhdg + 90, width / 2); + append(crds,"N"~coord.lat()); + append(crds,"E"~coord.lon()); + icon_rwy = group.createChild("path", "rwy") + .setStrokeLineWidth(line_w) + .setDataGeo([2,4,4,4],crds) + .setColor(color); +}; + +var draw = func{} + + +#var update = func() { +# if (me.controller != nil) { +# if (!me.controller.update(me, me.model)) return; +# elsif (!me.controller.isVisible(me.model)) { +# me.element.hide(); +# return; +# } +# } else +# me.element.show(); +# me.draw(); +#} diff --git a/Models/Instruments/ND/canvas/map/SPD-profile.lcontroller b/Models/Instruments/ND/canvas/map/SPD-profile.lcontroller new file mode 100644 index 00000000..65d08ad6 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/SPD-profile.lcontroller @@ -0,0 +1,51 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'SPD-profile'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +var _options = { # default configuration options + alts: [100,140,250,260,'wp'] +}; +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: _options +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + #map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(a,b) a.getName() == b.getName(); + #append(m.listeners, setlistener(layer.options.fplan_active, func m.layer.update() )); + #m.addVisibilityListener(); + + return m; +}; +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + var results = []; + var spdNode = props.globals.getNode(me.layer.options.spd_node); + if (spdNode != nil) { + var limits = spdNode.getChildren(); + foreach (var limit; limits) { + #t = 'spd-change-point' ~ '-' ~ alt; + #print('SPD-Controller, search for '~t); + #var n = spdNode.getNode(t); + if (limit != nil and limit.getValue('longitude-deg') != nil){ + #print('SPD-Controller -> Append'); + append(results, limit); + } + } + } + return results; +} diff --git a/Models/Instruments/ND/canvas/map/SPD-profile.scontroller b/Models/Instruments/ND/canvas/map/SPD-profile.scontroller new file mode 100644 index 00000000..191945db --- /dev/null +++ b/Models/Instruments/ND/canvas/map/SPD-profile.scontroller @@ -0,0 +1,12 @@ +# Class things: +var name = 'SPD-profile'; +var parents = [canvas.Symbol.Controller]; +var __self__ = caller(0)[0]; +canvas.Symbol.Controller.add(name, __self__); +canvas.Symbol.registry[name].df_controller = __self__; +var new = func(model) ; # this controller doesn't need an instance +var LayerController = canvas.SymbolLayer.Controller.registry[name]; +var isActive = func(model) {return 1};#LayerController.a_instance.isActive(model); +var query_range = func() + die(name~".scontroller.query_range /MUST/ be provided by implementation"); +#var model = props.globals.getNode('/position'); diff --git a/Models/Instruments/ND/canvas/map/SPD-profile.symbol b/Models/Instruments/ND/canvas/map/SPD-profile.symbol new file mode 100644 index 00000000..deffbafe --- /dev/null +++ b/Models/Instruments/ND/canvas/map/SPD-profile.symbol @@ -0,0 +1,40 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'SPD-profile'; +var parents = [canvas.SVGSymbol]; +var __self__ = caller(0)[0]; +canvas.DotSym.makeinstance( name, __self__ ); + +#canvas.SymbolLayer.get(name).df_style = { +# radius: 13, +#}; + +var element_type = "group"; +var svg_path = get_local_path('res/airbus_spd_limit.svg'); +var spd_sym = nil; +#var init = func { +# var name = me.model.getName(); +# #var radius = me.style.radius; +# var sym_group = me.element.createChild("group", name); +# sym_group.set("z-index",5); +# var color = me.getStyle('color'); +# var spd_path = sym_group.createChild("path"). +# setStrokeLineWidth(3). +# moveTo(-17,0). +# arcSmallCW(17,17,0,34,0). +# arcSmallCW(17,17,0,-34,0). +# setColor(color). +# setColorFill(color). +# set("z-index",5); +#} + +var draw = func{ +# var name = me.model.getName(); +# var sym_group = me.element.getElementById(name); +# sym_group.set('z-index', 5); + if(me.spd_sym == nil){ + me.spd_sym = me.getElementById("airbus-spd-sym"); + me.spd_sym.setTranslation(-24, -24).set('z-index', 5); + } + +} diff --git a/Models/Instruments/ND/canvas/map/VOR-airbus.lcontroller b/Models/Instruments/ND/canvas/map/VOR-airbus.lcontroller new file mode 100644 index 00000000..b4d1120b --- /dev/null +++ b/Models/Instruments/ND/canvas/map/VOR-airbus.lcontroller @@ -0,0 +1,62 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name ='VOR-airbus'; +var parents = [SymbolLayer.Controller]; +var __self__ = caller(0)[0]; +SymbolLayer.Controller.add(name, __self__); +SymbolLayer.add(name, { + parents: [NavaidSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { + vor1_frq: 'instrumentation/nav/frequencies/selected-mhz', + vor2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz' + }, + df_style: { + scale: 1 + } +}); +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + active_vors: [], + navNs: props.globals.getNode("instrumentation").getChildren("nav"), + listeners: [], + query_type:'vor', + }; + setsize(m.active_vors, size(m.navNs)); + foreach (var navN; m.navNs) { + append(m.listeners, setlistener( + navN.getNode("frequencies/selected-mhz"), + func m.changed_freq() + )); + } + #call(debug.dump, keys(layer)); + m.changed_freq(update:0); + m.addVisibilityListener(); + + return m; +}; +var del = func() { + printlog(_MP_dbg_lvl, name,".lcontroller.del()"); + foreach (var l; me.listeners) + removelistener(l); +}; + +# Controller methods +var isActive = func(model) { + var my_freq = model.frequency/100; + foreach (var freq; me.active_vors) + if (freq == my_freq) return 1; + return 0; +}; +var changed_freq = func(update=1) { + #debug.dump(me.active_vors); + foreach (var navN; me.navNs) + me.active_vors[ navN.getIndex() ] = navN.getValue("frequencies/selected-mhz"); + if (update) me.layer.update(); +}; + +var searchCmd = NavaidSymbolLayer.make('vor'); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/map/VOR-airbus.symbol b/Models/Instruments/ND/canvas/map/VOR-airbus.symbol new file mode 100644 index 00000000..bdd8f7ca --- /dev/null +++ b/Models/Instruments/ND/canvas/map/VOR-airbus.symbol @@ -0,0 +1,43 @@ +# Class things: +var name = 'VOR-airbus'; +var parents = [SVGSymbol]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; # we want a group, becomes "me.element" +var text_vor = nil; + +var svg_path = get_local_path('res/airbus_vor.svg'); +var vor_sym = nil; + +var draw = func{ + if(me.vor_sym == nil) + me.vor_sym = me.element.getElementById("airbus-vor-sym"); + me.vor_sym.setTranslation(-24,-24); + if(me.text_vor == nil){ + var transl = me.getStyle('translation', [25,10]); + var text_color = me.getStyle('text_color', [1,1,1]); + me.text_vor = me.element.createChild("text") + .setDrawMode( canvas.Text.TEXT ) + .setText(me.model.id) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setColor(text_color) + .setTranslation(transl); + } + + var frq = me.model.frequency; + if(frq != nil){ + var dfcolor = me.getStyle('color', [0.9,0,0.47]); + var tuned_color = me.getStyle('tuned_color', [0,0.62,0.84]); + frq = frq / 100; + var vor1_frq = getprop(me.options.vor1_frq); + var vor2_frq = getprop(me.options.vor2_frq); + if(vor1_frq == frq or vor2_frq == frq){ + me.element.setColor(tuned_color); + } else { + me.element.setColor(dfcolor); + } + } + me.text_vor.setColor(me.getStyle('text_color', [1,1,1])); +} \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/map/WPT-airbus.lcontroller b/Models/Instruments/ND/canvas/map/WPT-airbus.lcontroller new file mode 100644 index 00000000..a91f8d3f --- /dev/null +++ b/Models/Instruments/ND/canvas/map/WPT-airbus.lcontroller @@ -0,0 +1,137 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'WPT-airbus'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [canvas.MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + fix_symbol: func(group){ + group.createChild('path') + .moveTo(-10,0) + .lineTo(0,-17) + .lineTo(10,0) + .lineTo(0,17) + .close() + .setStrokeLineWidth(3) + .setColor(1,1,1) + .setScale(1); + }, + vor_symbol: 'Nasal/canvas/map/Airbus/Images/airbus_vor.svg', + airport_symbol: 'Nasal/canvas/map/Airbus/Images/airbus_airport.svg', + ndb_symbol: func(group){ + group.createChild('path') + .moveTo(-15,15) + .lineTo(0,-15) + .lineTo(15,15) + .close() + .setStrokeLineWidth(3) + #.setColor(0.69,0,0.39) + #.setTranslation(-24, -24), + .setScale(1,1); + } + }, + df_style: { + active_wp_color: [0.4,0.7,0.4], + current_wp_color: [1,1,1], + translation: { + 'airport': [-24,-24], + 'vor': [-24,-24] + } + }, + toggle_cstr: 0 +}); + +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(a,b) a.equals(b); + var driver = opt_member(m.layer.options, 'route_driver'); + if(driver == nil){ + driver = RouteDriver.new(); + } + var driver_listeners = driver.getListeners(); + foreach(var listener; driver_listeners){ + append(m.listeners, setlistener(listener, func m.layer.update())); + } + m.route_driver = driver; + return m; +}; + +var del = func() { + foreach (var l; me.listeners) + removelistener(l); +}; + +var WPTModel = { + new: func(fp, idx) { + var m = { parents:[WPTModel] }; + var wp = fp.getWP(idx); + + m.id = wp.id; + m.name = wp.wp_name; + m.alt = wp.alt_cstr; + m.spd = wp.speed_cstr; + m.type = wp.wp_type; + + (m.lat,m.lon) = (wp.wp_lat,wp.wp_lon); + var is_rwy = (m.type == 'runway'); + var id_len = size(m.id); + if(!is_rwy and id_len < 5){ + if(id_len == 4 and airportinfo(m.id) != nil) + m.navtype = 'airport'; + else { + var navaid = nil; + foreach(var t; ['vor', 'ndb']){ + navaid = navinfo(m.lat, m.lon, t, m.id); + if(navaid != nil and size(navaid)){ + m.navtype = t; + break; + } + } + if(navaid == nil or !size(navaid)) m.navtype = 'fix'; + } + } else { + m.navtype = (is_rwy ? 'rwy' : 'fix'); + } + + m.wp = wp; + idx = wp.index; + m.idx = idx; + m.is_departure = (idx == 0 and is_rwy); + m.is_destination = (idx > 0 and is_rwy); + return m; + }, + equals: func(other) { + # this is set on symbol init, so use this for equality... + me.name == other.name and me.alt == other.alt and + me.type == other.type and me.idx == other.idx and + me.navtype == other.navtype + }, +}; + +var searchCmd = func { + var driver = me.route_driver; + if(!driver.shouldUpdate()) return []; + driver.update(); + var result = []; + var planCount = driver.getNumberOfFlightPlans(); + for(var idx = 0; idx < planCount; idx += 1){ + var fp = driver.getFlightPlan(idx); + if(fp == nil) continue; + var fpSize = fp.getPlanSize(idx); + for (var i = 0; i < fpSize; i+=1){ + if(!driver.shouldUpdate()) return[]; + append(result, WPTModel.new(fp, i)); + } + } + return result; +} diff --git a/Models/Instruments/ND/canvas/map/WPT-airbus.symbol b/Models/Instruments/ND/canvas/map/WPT-airbus.symbol new file mode 100644 index 00000000..29f6fe26 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/WPT-airbus.symbol @@ -0,0 +1,137 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'WPT-airbus'; +var parents = [canvas.DotSym]; +var __self__ = caller(0)[0]; +canvas.DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; + +var init = func { + var name = me.model.name; + var alt = me.model.alt; + var spd = me.model.spd; + var wp_group = me.element; + me.alt_path = nil; + + var colors = [ + 'wp_color', + 'current_wp_color', + 'constraint_color', + 'active_constraint_color', + 'missed_constraint_color' + ]; + foreach(col; colors){ + me[col] = me.getStyle(col, me.getOption(col)); + } + + var idLen = size(me.model.id); + var draw_sym = nil; + var navtype = me.model.navtype; + if (navtype == nil) navtype = 'fix'; + if(navtype == 'airport') + draw_sym = me.options.airport_symbol; + elsif(navtype == 'vor') + draw_sym = me.options.vor_symbol; + elsif(navtype == 'ndb') + draw_sym = me.options.ndb_symbol; + else + draw_sym = me.options.fix_symbol; + me.wp_sym = me.element.createChild('group', 'wp-'~ me.model.idx); + if(typeof(draw_sym) == 'func') + draw_sym(me.wp_sym); + elsif(typeof(draw_sym) == 'scalar') + canvas.parsesvg(me.wp_sym, draw_sym); + var translation = me.getStyle('translation', {}); + if(contains(translation, navtype)){ + me.wp_sym.setTranslation(translation[navtype]); + } + me.text_wps = wp_group.createChild("text", "wp-text-" ~ me.model.idx) + .setDrawMode( canvas.Text.TEXT ) + .setText(me.model.name) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setTranslation(25,15) + .setColor(1,1,1); + me.text_alt = nil; + if(alt > 0 or spd > 0){ + var cstr_txt = "\n"; + if(alt > 0){ + if(alt > 10000) + cstr_txt ~= sprintf('FL%3.0f', int(alt / 100)); + else + cstr_txt ~= sprintf('%4.0f', int(alt)); + } + if(spd > 0){ + if(alt > 0) cstr_txt ~= "\n"; + if(spd <= 1) + cstr_txt ~= sprintf('%1.2fM', spd); + else + cstr_txt ~= sprintf('%3.0fKT', int(spd)); + } + me.text_alt = wp_group.createChild("text", "wp-alt-text-" ~ me.model.idx) + .setDrawMode( canvas.Text.TEXT ) + .setText(cstr_txt) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setTranslation(25,15); + } +} + +var draw = func{ + var wp_group = me.element; + var alt = me.model.alt; + var i = me.model.idx; + var vnav_actv = getprop(me.options.ver_ctrl) == me.options.managed_val; + var curwp = getprop(me.options.current_wp); + if(alt > 0){ + var wp_d = me.model.wp.distance_along_route; + var lvl_off_at = getprop(me.options.level_off_alt); + if(lvl_off_at == nil) lvl_off_at = 0; + if(me.alt_path == nil){ + me.alt_path = wp_group.createChild("path"). + setStrokeLineWidth(4). + moveTo(-22,0). + arcSmallCW(22,22,0,44,0). + arcSmallCW(22,22,0,-44,0); + } + if(vnav_actv){ + if(lvl_off_at and (lvl_off_at - wp_d) > 0.5 and curwp == i) + me.alt_path.setColor(me.missed_constraint_color); + else + me.alt_path.setColor(me.active_constraint_color); + } + else + me.alt_path.setColor(me.constraint_color); + if(me.layer.toggle_cstr) + me.alt_path.show(); + else + me.alt_path.hide(); + } else { + if(me.alt_path != nil) me.alt_path.hide(); + } + wp_group.set("z-index",4); + #var sym = me.element.getElementById('wp-' ~ me.model.idx); + if(alt > 0 and me.text_alt != nil){ + if(vnav_actv) + me.text_alt.setColor(me.active_constraint_color); + else + me.text_alt.setColor(me.constraint_color); + } + if(i == curwp) { + me.wp_sym.setColor(me.current_wp_color); + me.text_wps.setColor(me.current_wp_color); + } else { + me.wp_sym.setColor(me.wp_color); + me.text_wps.setColor(me.wp_color); + } + if(me.model.is_departure or me.model.is_destination){ + var prop = (me.model.is_departure ? 'departure' : 'destination'); + var rwy = getprop("/autopilot/route-manager/"~prop~"/runway"); + if(rwy != nil and size(rwy) > 0){ + me.wp_sym.hide(); + } else { + me.wp_sym.show(); + } + } +} diff --git a/Models/Instruments/ND/canvas/map/WXR_live.lcontroller b/Models/Instruments/ND/canvas/map/WXR_live.lcontroller new file mode 100644 index 00000000..f75c8322 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/WXR_live.lcontroller @@ -0,0 +1,72 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'WXR_live'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [canvas.MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + viewport_radius: 670 + } +}); + +var wxr_tree = "/instrumentation/wxr"; + +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(l,r) l.equals(r); + m.addVisibilityListener(); + var aircraft_dir = split('/', getprop("/sim/aircraft-dir"))[-1]; + var saved_conf = getprop("/sim/fg-home") ~ "/Export/wxr_api.xml"; + var df_conf = getprop("/sim/fg-root") ~ "/Aircraft/" ~ aircraft_dir ~ + "/Models/Instruments/ND/canvas/wxr_api.xml"; + if(io.stat(saved_conf) != nil) + io.read_properties(saved_conf, wxr_tree); + else + io.read_properties(df_conf, wxr_tree); + return m; +}; +var del = func() { + #print(name~".lcontroller.del()"); + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + if(me.map.getRange() == nil) return []; + var api_key = getprop(wxr_tree~"/api-key"); + if(!api_key or api_key == '' or api_key == 'YOUR API KEY') + return []; + var lat = getprop(wxr_tree~"/center/latitude-deg"); + var lon = getprop(wxr_tree~"/center/longitude-deg"); + + if(lat == nil or lon == nil) { + var pos = geo.aircraft_position(); + lat = pos.lat(); + lon = pos.lon(); + } + + var result = geo.Coord.new(); + result.set_latlon(lat, lon); + result.rangeNm = me.map.getRange(); + result.key = api_key; + result.res = getprop(wxr_tree~"/resolution"); + result.ltype = getprop(wxr_tree~"/layer-type"); + result.smooth = getprop(wxr_tree~"/smooth"); + result.fetchRad = getprop(wxr_tree~"/fetch-radius"); + result.equals = func(r){ + me.ltype == r.ltype and me.fetchRad == r.fetchRad and + me.lat == r.lat and me.lon == r.lon + }; + + return [result]; +}; diff --git a/Models/Instruments/ND/canvas/map/WXR_live.symbol b/Models/Instruments/ND/canvas/map/WXR_live.symbol new file mode 100644 index 00000000..71c794f3 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/WXR_live.symbol @@ -0,0 +1,114 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'WXR_live'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; + +var getWXRImageFilePath = func(){ + var home = getprop('sim/fg-home'); + var aircraft = getprop('sim/aircraft'); + var idx = me.layer.getCanvas()._node.getIndex(); + return home ~ '/Export/' ~ aircraft ~ '-wxr-'~me.ltype~'-'~idx~'.png'; +}; + +var getWXRAPIUrl = func(lat, lon){ + var res = me.res; + if(me.ltype == "radar"){ + return "http://api.wunderground.com/api/"~me.key~ + "/radar/image.png?centerlat="~lat~"¢erlon="~lon~ + "&radius="~me.fetchRad~"&width="~res~"&height="~res~ + "&smooth="~me.smooth; + } else { + return nil; + } +}; + +var fetchWXRMap = func(size){ + if(me.fetching) return; + var pos = geo.aircraft_position(); + var lat = pos.lat(); + var lon = pos.lon(); + var url = me.getWXRAPIUrl(lat, lon); + var filePath = me.getWXRImageFilePath(); + if(url == nil) { + print(me.name~': No URL!'); + return; + } + me.fetching = 1; + http.save(url, filePath) + .fail(func(){ + print(me.name~': Download failed!'); + me.wxlayer.hide(); + }) + .done(func(){ + var sz = size * 2; + var transl = -size; + me.wxlayer.hide(); + me.wxlayer.setFile(filePath) + .setSize(sz, sz) + .setTranslation(transl, transl); + me.wxlayer.show(); + me.last_request = getprop("/sim/time/elapsed-sec"); + }) + .always(func(){ + setprop("/instrumentation/wxr/center/latitude-deg", lat); + setprop("/instrumentation/wxr/center/longitude-deg", lon); + me.fetching = 0; + print("[WXR] Live Layer Request: "~url); # Debugging + }); +}; + +var init = func { + #print('WXR init'); + me.fetching = 0; + me.key = me.model.key; # API Key from Wunderground API Subscription + me.res = me.model.res; # Resolution of image to fetch (default 2048) + me.ltype = me.model.ltype; # Layer Type - radar, satellite + me.smooth = me.model.smooth; # If we should fetch a smoothened image or the original + me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch + me.range = me.model.rangeNm; # Range of Navigation Display + me.viewport_radius = me.getOption('viewport_radius', 670); + + me.wxlayer = me.element.createChild("image").set("z-index", -100).hide(); + + me.last_request = -210; + me.update_interval = 240; + + var r_scaled = (me.fetchRad*me.viewport_radius)/me.range; + me.fetchWXRMap(r_scaled); +}; + +var draw = func { + var range = me.layer.map.getRange(); # Range of Navigation Display + var update_size = (range != me.range); + me.range = range; + me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch + #var r_scaled = (me.fetchRad*670)/me.range; + var r_scaled = (me.fetchRad*me.viewport_radius)/me.range; + var hdg = me.layer.map.getHdg(); + var rot = 0 - hdg; + if(rot < 0) rot = 360 + rot; + me.element.setRotation(rot*D2R); + if(update_size){ + print('WXR draw range:'~ me.range); + print('Update size: '~r_scaled~'x2 = '~(r_scaled*2)); + me.wxlayer.hide(); + me.wxlayer.setSize(2*r_scaled, 2*r_scaled) + .setTranslation(-r_scaled, -r_scaled); + me.wxlayer.show(); + } + + if(getprop("/sim/time/elapsed-sec") - me.last_request > me.update_interval) { + #print('Fetching WXR map...'); + me.key = me.model.key; # API Key from Wunderground API Subscription + me.res = me.model.res; # Resolution of image to fetch (default 2048) + me.ltype = me.model.ltype; # Layer Type - radar, satellite + me.smooth = me.model.smooth; # If we should fetch a smoothened image or the original + + me.fetchWXRMap(r_scaled); + } +}; + diff --git a/Models/Instruments/ND/canvas/res/airbusAirplane.svg b/Models/Instruments/ND/canvas/res/airbusAirplane.svg new file mode 100644 index 00000000..2f2dda8e --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbusAirplane.svg @@ -0,0 +1,70 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg new file mode 100644 index 00000000..841a1e68 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -0,0 +1,2120 @@ + + + +image/svg+xmlGijs de RooyABCD +999.9 +0 +33 +30 +27 +24 +21 +18 +15 +12 +9 +6 +3 + +1 +2 +4 +5 +7 +8 +10 +11 +13 +14 +16 +17 +19 +20 +22 +23 +25 +26 +28 +29 +31 +32 +34 +35 +999°/ 99 +999 +999 +GS +TAS +999 +HDG +MAG +VOR 1 +NM +99.9 +ABC +VOR 2 +NM +99.9 +ABC +08 34.4z +99 + + + + + +NM +ILS +999.99 +360 +00' 00'' +99 +.1L +.1L +OFST +.1L +.1L +N +33 +30 +W +24 +21 +S +15 +12 +E +6 +3 +CRS + +999 +99.9 +ILS APP +N +W +E +S +99 +99 +99 +99 +99 + \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/res/airbusNDNoMap.png b/Models/Instruments/ND/canvas/res/airbusNDNoMap.png new file mode 100644 index 00000000..d8ca13ac Binary files /dev/null and b/Models/Instruments/ND/canvas/res/airbusNDNoMap.png differ diff --git a/Models/Instruments/ND/canvas/res/airbusNDNoMap.svg b/Models/Instruments/ND/canvas/res/airbusNDNoMap.svg new file mode 100644 index 00000000..520a97a8 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbusNDNoMap.svg @@ -0,0 +1,236 @@ + + + +image/svg+xmlGijs de Rooy--- +--- +GS +TAS +NO MAP AVAIL +HDG + \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/res/airbus_airport.svg b/Models/Instruments/ND/canvas/res/airbus_airport.svg new file mode 100644 index 00000000..588ab387 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_airport.svg @@ -0,0 +1,99 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_decel.svg b/Models/Instruments/ND/canvas/res/airbus_decel.svg new file mode 100644 index 00000000..c1833f09 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_decel.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + D + + diff --git a/Models/Instruments/ND/canvas/res/airbus_ec.svg b/Models/Instruments/ND/canvas/res/airbus_ec.svg new file mode 100644 index 00000000..258b9cce --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_ec.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_ed.svg b/Models/Instruments/ND/canvas/res/airbus_ed.svg new file mode 100644 index 00000000..372f1e54 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_ed.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_holdL.svg b/Models/Instruments/ND/canvas/res/airbus_holdL.svg new file mode 100644 index 00000000..0807b36f --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_holdL.svg @@ -0,0 +1,60 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_holdR.svg b/Models/Instruments/ND/canvas/res/airbus_holdR.svg new file mode 100644 index 00000000..6c51add3 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_holdR.svg @@ -0,0 +1,62 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_sc.svg b/Models/Instruments/ND/canvas/res/airbus_sc.svg new file mode 100644 index 00000000..fe9fb1eb --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_sc.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_sd.svg b/Models/Instruments/ND/canvas/res/airbus_sd.svg new file mode 100644 index 00000000..aca32e87 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_sd.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_spd_limit.svg b/Models/Instruments/ND/canvas/res/airbus_spd_limit.svg new file mode 100644 index 00000000..ca47e41d --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_spd_limit.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_tc.svg b/Models/Instruments/ND/canvas/res/airbus_tc.svg new file mode 100644 index 00000000..353ce25d --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_tc.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_td.svg b/Models/Instruments/ND/canvas/res/airbus_td.svg new file mode 100644 index 00000000..c167154a --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_td.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_vor.old.svg b/Models/Instruments/ND/canvas/res/airbus_vor.old.svg new file mode 100644 index 00000000..43b3ef98 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_vor.old.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + Layer 1 + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/res/airbus_vor.svg b/Models/Instruments/ND/canvas/res/airbus_vor.svg new file mode 100644 index 00000000..87fbaa44 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/airbus_vor.svg @@ -0,0 +1,90 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas new file mode 100644 index 00000000..027027e0 --- /dev/null +++ b/Models/Instruments/ND/canvas/style.nas @@ -0,0 +1,1784 @@ +# ============================================================================== +# Boeing Navigation Display by Gijs de Rooy +# See: http://wiki.flightgear.org/Canvas_ND_Framework +# ============================================================================== +# This file makes use of the MapStructure framework, see: http://wiki.flightgear.org/Canvas_MapStructure +# +# Sooner or later, some parts will be revamped by coming up with a simple animation framework: http://wiki.flightgear.org/NavDisplay#mapping_vs._SVG_animation + +## +# pseudo DSL-ish: use these as placeholders in the config hash below +var ALWAYS = func 1; +var NOTHING = func nil; + +## +# TODO: move ND-specific implementation details into this lookup hash +# so that other aircraft and ND types can be more easily supported +# +# any aircraft-specific ND behavior should be wrapped here, +# to isolate/decouple things in the generic NavDisplay class +# +# TODO: move this to an XML config file (maybe supporting SGCondition and/or SGStateMachine markup for the logic?) +# +canvas.NDStyles["Airbus"] = { + font_mapper: func(family, weight) { + if( family == "Liberation Sans" and weight == "normal" ) + return "LiberationFonts/LiberationSans-Regular.ttf"; + }, + + # where all the symbols are stored + # TODO: SVG elements should be renamed to use boeing/airbus prefix + # aircraft developers should all be editing the same ND.svg image + # the code can deal with the differences now + svg_filename: get_local_path("res/airbusND.svg"), + ## + ## this loads and configures existing layers (currently, *.layer files in Nasal/canvas/map) + ## + options: { + position_callback: func(nd, pos){ + if(nd.get_switch('toggle_centered') or + nd.get_switch('toggle_display_mode') == 'PLAN') + pos.range = (nd.rangeNm() * 1.6156087432822295); + }, + translation_callback: func(nd){ + var t = {x: 512, y: 824}; + if(nd.get_switch('toggle_centered') or + nd.get_switch('toggle_display_mode') == 'PLAN') + t.y = 512; + return t; + }, + defaults: { + # Configurable Global Options: + # - fplan_active: the boolean property used to determine if the flight plan is active + # - lat_ctrl: the property used to determine if lateral flight mode is managed + # Lateral managed mode is similar to Boeing LNAV and indicates that the + # aircraft should follow the current active flight plan. By default + # the lat_ctrl property is checked against 'fmgc' (managed) value. + # You can use a custom value instead on 'fmgc' by overriding 'managed_val' + # - managed_val: the value that the property defined by 'lat_ctrl' should have in case + # that the lateral flight mode is managed. + # You can easily override these options before creating the ND, example: + # canvas.NDStyles['Airbus'].options.defaults.fplan_active = 'my/autpilot/f-plan/active' + fplan_active: 'autopilot/route-manager/active', + lat_ctrl: 'flight-management/control/lat-ctrl', + managed_val: 'fmgc', + ver_ctrl: 'flight-management/control/ver-ctrl', + spd_ctrl: '/flight-management/control/spd-ctrl', + current_wp: '/autopilot/route-manager/current-wp', + ap1: '/flight-management/control/ap1-master', + ap2: '/flight-management/control/ap2-master', + nav1_frq: 'instrumentation/nav/frequencies/selected-mhz', + nav2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz', + vor1_frq: 'instrumentation/nav[2]/frequencies/selected-mhz', + vor2_frq: 'instrumentation/nav[3]/frequencies/selected-mhz', + adf1_frq: 'instrumentation/adf/frequencies/selected-khz', + adf2_frq: 'instrumentation/adf[1]/frequencies/selected-khz', + dep_rwy: '/autopilot/route-manager/departure/runway', + dest_rwy: '/autopilot/route-manager/destination/runway', + wp_count: 'autopilot/route-manager/route/num', + level_off_alt: '/autopilot/route-manager/vnav/level-off-alt', + athr: '/flight-management/control/a-thrust', + app_mode: 'instrumentation/nd/app-mode', + chrono_node: 'instrumentation/chrono', + fpln_offset: 'autopilot/route-manager/offset', + active_route_color: [0.4,0.7,0.4], + inactive_route_color: [0.95,0.95,0.21] + }, + radio: { + ils: [0, 1], + vor: [2, 3], + dme: [2, 3] + } + }, + layers: [ + { + name:'WXR_live', + isMapStructure:1, + always_update: 1, + update_on:[ 'toggle_range','toggle_weather','toggle_display_mode','toggle_weather_live'], + predicate: func(nd, layer) { + var visible=nd.get_switch('toggle_weather') and + nd.get_switch('toggle_weather_live') and + nd.get_switch('toggle_display_mode') != "PLAN"; + layer.group.setVisible(visible); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + options: { + viewport_radius: 706 + }, + 'z-index': -100, + }, + { + name:'WXR', + isMapStructure:1, + update_on:[ {rate_hz: 0.1}, 'toggle_range','toggle_weather','toggle_display_mode', 'toggle_weather_live'], + predicate: func(nd, layer) { + #print("Running storms predicate"); + var visible=nd.get_switch('toggle_weather') and + !nd.get_switch('toggle_weather_live') and + nd.get_switch('toggle_display_mode') != "PLAN"; + layer.group.setVisible(visible); + if (visible) { + #print("storms update requested! (timer issue when closing the dialog?)"); + layer.update(); + } + }, # end of layer update predicate + 'z-index': -4, + }, # end of storms/WXR layer + { + name:'FIX', + isMapStructure:1, + update_on:['toggle_range','toggle_waypoints', + 'toggle_display_mode'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_waypoints') and + nd.in_mode('toggle_display_mode', ['MAP']) and + (nd.rangeNm() <= 40); + layer.group.setVisible( visible ); + if (visible) + layer.update(); + }, # end of layer update predicate + style: { + color: [0.69, 0, 0.39], + text_offset: [20,10], + text_color: [1,1,1] + }, + options: { + draw_function: func(group){ + group.createChild('path') + .moveTo(-10,0) + .lineTo(0,-17) + .lineTo(10,0) + .lineTo(0,17) + .close() + .setStrokeLineWidth(3) + .setColor(color) + .setScale(1); + } + } + }, # end of FIX layer + { + name: 'ALT-profile', + isMapStructure: 1, + update_on: ['toggle_display_mode','toggle_range',{rate_hz: 2}], + predicate: func(nd, layer) { + var visible = nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']);# and nd.get_switch('toggle_fplan'); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, + style: { + default_color: [1,1,1], + armed_color: [0.06,0.55,1], + managed_color: [0.68, 0, 0.38] + }, + options: { + # You can overwrite these with different nodes, before creating the ND + # Example: canvas.NDStyles['Airbus'].layers['ALT-profile'].options.vnav_node = 'my/vnav/node'; + # In order to display ALT-profile on your ND you have to create the various + # nodes corresponding to the different ALT pseudowaypoint in your aircraft code. + # Every node must be set into the 'vnav_node' configured here (you can override it). + # Example: if you want to display the top-of-descent symbol you must create a 'td' + # node into vnav_node. Something like this: + # /autopilot/route-manager/vnav/td/ + # Each node should have the latitude-deg and longitude-deg properties. + # Available nodes are: + # tc (top of climb) + # td (top of descent) + # ec (end of climb) + # ed (end of descent) + # sc (start of climb) + # sd (start of descent) + # If ec and ed are altitude constraints, their node should have the + # boolean 'alt-cstr' property set to 1. + vnav_node: "/autopilot/route-manager/vnav/", + types: ["tc", "td", "ec", "ed","sc","sd"], + svg_path: { + tc: get_local_path('res/airbus_tc.svg'), + td: get_local_path('res/airbus_td.svg'), + ec: get_local_path('res/airbus_ec.svg'), + ed: get_local_path('res/airbus_ed.svg'), + sc: get_local_path('res/airbus_sc.svg'), + sd: get_local_path('res/airbus_sd.svg') + }, + listen: [ + 'fplan_active', + 'ver_ctrl', + 'ap1', + 'ap2', + 'current_wp' + ], + draw_callback: func(){ + var name = me.model.getName(); + var grp = me.element.getElementById(name~'_symbol'); + if(grp == nil) return; + var dfcolor = me.getStyle('default_color'); + var armed_color = me.getStyle('armed_color'); + var managed_color = me.getStyle('managed_color'); + #print('Draw: -> ' ~ name); + if(name == 'td' or name == 'sd' or name == 'sc'){ + var vnav_armed = me.model.getValue('vnav-armed'); + if(vnav_armed and name != 'td') + grp.setColor(armed_color); + else + grp.setColor(dfcolor); + } + elsif(name == 'ed' or name == 'ec'){ + var is_cstr = me.model.getValue('alt-cstr'); + if(is_cstr) + grp.setColor(managed_color); + else + grp.setColor(armed_color); + } + }, + init_after_callback: func{ + var name = me.model.getName(); + var grp = me.element.getElementById(name~'_symbol'); + if(name != 'td' and name != 'sd' and name != 'sc'){ + grp.setTranslation(-66,0); + } + } + } + }, + { + name:'APT', + isMapStructure:1, + update_on:['toggle_range','toggle_airports', + 'toggle_display_mode'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_airports') and + nd.in_mode('toggle_display_mode', ['MAP']); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + style: { + svg_path: get_local_path('res/airbus_airport.svg'), + text_offset: [45, 35], + label_font_color: [1,1,1], + label_font_size: 28 + } + }, # end of APT layer + { + name:'VOR-airbus', + isMapStructure:1, + update_on:['toggle_range','toggle_vor','toggle_display_mode'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + # print("Running vor layer predicate"); + # toggle visibility here + var visible = nd.get_switch('toggle_vor') and + nd.in_mode('toggle_display_mode', ['MAP']) and + (nd.rangeNm() <= 40); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + # You can override default colors within the style + # Default color: 'color' + # Tuned color: 'tuned_color' + # Example: + # canvas.NDStyles['Airbus'].layers['VOR-airbus'].style.color = [1,1,1]; + # canvas.NDStyles['Airbus'].layers['VOR-airbus'].style.tuned_color = [0,0,1]; + style: {}, + options:{ + listen: [ + 'vor1_frq', + 'vor2_frq' + ] + } + }, # end of VOR layer + { + name:'DME', + disabled:1, + isMapStructure:1, + update_on:['toggle_display_mode','toggle_range','toggle_dme'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_dme') and + nd.in_mode('toggle_display_mode', ['MAP']) and + (nd.rangeNm() <= 40); + # toggle visibility here + layer.group.setVisible( visible ); + if (visible) { + #print("Updating MapStructure ND layer: DME"); + layer.update(); + } + }, # end of layer update predicate + options: { + draw_dme: func(sym){ + return sym.createChild("path") + .moveTo(-13, 0) + .arcSmallCW(13,13,0,26,0) + .arcSmallCW(13,13,0,-26,0) + .setStrokeLineWidth(2) + .close(); + }, + draw_text: 1 + }, + style: { + color_default: [0.9,0,0.47], + color_tuned: [0,0.62,0.84], + }, + 'z-index': -2, + }, # end of DME layer + { + name:'NDB', + isMapStructure:1, + update_on:['toggle_range','toggle_ndb','toggle_display_mode'], + # FIXME: this is a really ugly place for controller code + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_ndb') and + nd.in_mode('toggle_display_mode', ['MAP']) and + (nd.rangeNm() <= 40); + # print("Running vor layer predicate"); + # toggle visibility here + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + # You can override default colors within the style + # Default color: 'color' + # Tuned color: 'tuned_color' + # Example: + # canvas.NDStyles['Airbus'].layers['VOR-airbus'].style.color = [1,1,1]; + # canvas.NDStyles['Airbus'].layers['VOR-airbus'].style.tuned_color = [0,0,1]; + style: { + #svg_path: get_local_path('res/airbus_ndb.svg') + svg_path: '' + }, + options: { + listen: [ + 'adf1_frq', + 'adf2_frq' + ], + init_after_callback: func{ + #me.element.removeAllChildren(); + me.text_ndb = me.element.createChild("text") + .setDrawMode( canvas.Text.TEXT ) + .setText(me.model.id) + .setFont("LiberationFonts/LiberationSans-Regular.ttf") + .setFontSize(28) + .setTranslation(25,10); + me.ndb_sym = me.element.createChild('path'); + me.ndb_sym.moveTo(-15,15) + .lineTo(0,-15) + .lineTo(15,15) + .close() + .setStrokeLineWidth(3) + .setColor(0.69,0,0.39) + .setScale(1,1); + }, + draw_callback: func{ + var frq = me.model.frequency; + if(frq != nil){ + var dfcolor = me.getStyle('color', [0.9,0,0.47]); + var tuned_color = me.getStyle('tuned_color', [0,0.62,0.84]); + frq = frq / 100; + var adf1_frq = getprop(me.options.adf1_frq); + var adf2_frq = getprop(me.options.adf2_frq); + if(adf1_frq == frq or adf2_frq == frq){ + me.element.setColor(tuned_color, [Path]); + } else { + me.element.setColor(dfcolor, [Path]); + } + } + }, + } + }, # end of NDB layer + { + name:'TFC', + #disabled:1, + always_update: 1, + isMapStructure:1, + update_on:['toggle_range','toggle_traffic'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_traffic'); + layer.group.setVisible( visible ); + if (visible) { + #print("Updating MapStructure ND layer: TFC"); + layer.update(); + } + }, # end of layer update predicate + }, # end of traffic layer + { + name:'RWY-profile', + isMapStructure:1, + update_on:['toggle_range','toggle_display_mode'], + predicate: func(nd, layer) { + var visible = (nd.rangeNm() <= 40) and + nd.in_mode('toggle_display_mode', ['MAP','PLAN']) ; + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + options: { + listen: [ + 'fplan_active', + 'dep_rwy', + 'dest_rwy' + ] + } + }, # end of runway layer + { + name:'HOLD', + isMapStructure: 1, + always_update: 1, + update_on:['toggle_range','toggle_display_mode','toggle_wpt_idx'], + predicate: func(nd, layer) { + var visible= nd.in_mode('toggle_display_mode', ['MAP','PLAN']); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, + options: { + hold_node: '/flight-management/hold', + hold_init: 'flight-management/hold/init', + points_node: '/flight-management/hold/points', + first_point_node: '/flight-management/hold/points/point/lat', + hold_wp: '/flight-management/hold/wp', + hold_wp_idx: '/flight-management/hold/wp_id', + range_dependant: 1, + listen: [ + 'first_point_node', + 'fplan_active', + 'lat_ctrl', + 'current_wp', + 'hold_wp', + 'hold_init', + 'hold_wp_idx' + ] + } + # end of layer update predicate + }, # end of HOLD layer + { + name:'RTE', + isMapStructure: 1, + update_on:['toggle_range','toggle_display_mode', 'toggle_cstr', + 'toggle_wpt_idx'], + predicate: func(nd, layer) { + var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN'])); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, # end of layer update predicate + options: { + display_inactive_rte: 1, + listen: [ + 'fplan_active', + 'lat_ctrl', + 'current_wp', + 'wp_count' + ], + draw_after_callback: func{ + me.setRouteStyle(); + } + }, + style: { + line_width: 5, + #inactive_color: [0.95,0.95,0.21], + #active_color: [0.4,0.7,0.4], + color: func{ + if(!contains(me, 'inactive_color')){ + me.inactive_color = me.getStyle('inactive_color'); + if(me.inactive_color == nil) + me.inactive_color = me.getOption('inactive_route_color'); + } + if(!contains(me, 'active_color')){ + me.active_color = me.getStyle('active_color'); + if(me.active_color == nil) + me.active_color = me.getOption('active_route_color'); + } + var is_active = getprop(me.options.fplan_active); + (is_active ? me.active_color : me.inactive_color); + }, + color_alternate_active: [0,0.62,0.84], + color_missed: [0,0.62,0.84], + color_temporary: func me.getStyle('inactive_color', me.getOption('inactive_route_color')), + color_secondary: [1,1,1], + color_alternate_secondary: [1,1,1], + line_dash: func{ + var lat_ctrl = getprop(me.options.lat_ctrl); + var is_managed = (lat_ctrl == me.options.managed_val); + var is_active = getprop(me.options.fplan_active); + (is_managed and is_active ? [] : [32, 16]); + }, + line_dash_alternate_active: [32,16], + line_dash_temporary: [32,16], + line_dash_original: [32,16] + } + }, # end of route layer + { + name:'WPT-airbus', + isMapStructure: 1, + update_on:['toggle_range','toggle_display_mode', 'toggle_cstr', + 'toggle_wpt_idx'], + style: { + wp_color: [0.4,0.7,0.4], + current_wp_color: [1,1,1], + constraint_color: [1,1,1], + active_constraint_color: [0.69,0,0.39], + missed_constraint_color: [1,0.57,0.14] + }, + predicate: func(nd, layer) { + var visible= (nd.in_mode('toggle_display_mode', ['MAP','PLAN'])); + layer.group.setVisible( visible ); + if (visible) { + layer.toggle_cstr = nd.get_switch('toggle_cstr'); + layer.update(); + } + }, # end of layer update predicate + options: { + listen: [ + 'fplan_active', + 'lat_ctrl', + 'ver_ctrl', + 'current_wp', + 'wp_count', + 'dep_rwy', + 'dest_rwy', + 'level_off_alt' + ], + } + }, # end of WPT layer + { + name: 'SPD-profile', + isMapStructure: 1, + update_on: ['toggle_display_mode','toggle_range',{rate_hz: 2}], + predicate: func(nd, layer) { + var visible = nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, + style: { + color: [0.69,0,0.39] + }, + options: { + spd_node: "/autopilot/route-manager/spd/", + listen: [ + 'fplan_active' + ] + } + }, + { + name: 'DECEL', + isMapStructure: 1, + update_on: ['toggle_display_mode','toggle_range'], + predicate: func(nd, layer) { + var visible = nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, + options: { + # Overridable options: + # decel_node: node containing latitude-deg and longitude-deg used to mark the deceleration point + # managed_speed_node: boolean property indicating that the aircraft is flying in managed speed mode + listen: [ + 'fplan_active', + 'spd_ctrl', + 'ver_ctrl', + 'athr' + ] + }, + style: { + # managed_color: decelaration symbol color when the aircraft flies in managed speed mode + # selected_color: decelaration symbol color when the aircraft flies in selected speed mode + managed_color: [0.68, 0, 0.38], + selected_color: [1,1,1] + } + }, + { + name:'APS', + isMapStructure:1, + always_update: 1, + update_on:['toggle_display_mode'], + predicate: func(nd, layer) { + var visible = nd.get_switch('toggle_display_mode') == "PLAN"; + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + }, + style: { + svg_path: get_local_path('res/airbusAirplane.svg'), + #translate: [-45,-52] + }, + options: { + model: { + parents: [geo.Coord], + id: 999999, + pos: props.globals.getNode('position'), + type: 'position', + latlon: func(){ + me.pos = props.globals.getNode('position'); + return [ + me.pos.getValue("latitude-deg"), + me.pos.getValue("longitude-deg"), + me.pos.getValue("altitude-ft") + ]; + }, + equals: func(o){me.id == o.id} + }, + init_after_callback: func{ + var aplSymbol = me.element.getElementById("airplane"); + aplSymbol.setTranslation(-45,-52); + } + } + }, + { + name: 'DEBUG', + isMapStructure: 1, + always_update: 1, + update_on: ['toggle_display_mode'], + predicate: func(nd, layer){ + var map_mode = nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']); + var debug_actv = getprop('autopilot/route-manager/debug/active') or 0; + var visible = (map_mode and debug_actv); + layer.group.setVisible( visible ); + if (visible) { + layer.update(); + } + } + } + + ## add other layers here, layer names must match the registered names as used in *.layer files for now + ## this will all change once we're using Philosopher's MapStructure framework + + ], # end of vector with configured layers + + # This is where SVG elements are configured by providing "behavior" hashes, i.e. for animations + + # to animate each SVG symbol, specify behavior via callbacks (predicate, and true/false implementation) + # SVG identifier, callback etc + # TODO: update_on([]), update_mode (update() vs. timers/listeners) + # TODO: support putting symbols on specific layers + features: [ + { + id: 'compass_mask', + impl: { + init: func(nd, symbol), + predicate: func(nd) !nd.get_switch('toggle_centered'), + is_true: func(nd) nd.symbols.compass_mask.show(), + is_false: func(nd) nd.symbols.compass_mask.hide(), + } + }, + { + id: 'compass_mask_ctr', + impl: { + init: func(nd, symbol), + predicate: func(nd) nd.get_switch('toggle_centered') or nd.in_mode('toggle_display_mode',['PLAN']), + is_true: func(nd) nd.symbols.compass_mask_ctr.show(), + is_false: func(nd) nd.symbols.compass_mask_ctr.hide(), + } + }, + { + # TODO: taOnly doesn't need to use getprop polling in update(), use a listener instead! + id: 'taOnly', # the SVG ID + impl: { # implementation hash + init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor + predicate: func(nd) getprop("instrumentation/tcas/inputs/mode") == 2, # the condition + is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this + is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this + }, # end of taOnly behavior/callbacks + }, # end of taOnly + { + id: 'tas', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.aircraft_source.get_spd() > 100, + is_true: func(nd) { + nd.symbols.tas.setText(sprintf("%3.0f",getprop("/fdm/jsbsim/velocities/vtrue-kts") )); + nd.symbols.tas.show(); + }, + is_false: func(nd) nd.symbols.tas.hide(), + }, + }, + { + id: 'tasLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.aircraft_source.get_spd() > 100, + is_true: func(nd) nd.symbols.tasLbl.show(), + is_false: func(nd) nd.symbols.tasLbl.hide(), + }, + }, + { + id: 'ilsFreq', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP', 'VOR']), + is_true: func(nd) { + nd.symbols.ilsFreq.show(); + var is_ils = (nd.get_switch('toggle_display_mode') == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + nd.symbols.ilsFreq.setText(getprop(path~ "frequencies/selected-mhz-fmt")); + if(is_ils) + nd.symbols.ilsFreq.setColor(0.69,0,0.39); + else + nd.symbols.ilsFreq.setColor(1,1,1); + }, + is_false: func(nd) nd.symbols.ilsFreq.hide(), + }, + }, + { + id: 'ilsLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP', 'VOR']), + is_true: func(nd) { + nd.symbols.ilsLbl.show(); + if(nd.get_switch('toggle_display_mode') == 'APP') + nd.symbols.ilsLbl.setText('ILS'); + else + nd.symbols.ilsLbl.setText('VOR 1'); + }, + is_false: func(nd) nd.symbols.ilsLbl.hide(), + }, + }, + { + id: 'wpActiveId', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/id") != nil and + getprop("autopilot/route-manager/active") and + nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']), + is_true: func(nd) { + nd.symbols.wpActiveId.setText(getprop("/autopilot/route-manager/wp/id")); + nd.symbols.wpActiveId.show(); + }, + is_false: func(nd) nd.symbols.wpActiveId.hide(), + }, # of wpActiveId.impl + }, # of wpActiveId + { + id: 'wpActiveCrs', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/id") != nil and + getprop("autopilot/route-manager/active") and + nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']), + is_true: func(nd) { + #var cur_wp = getprop("autopilot/route-manager/current-wp"); + var deg = int(getprop("/autopilot/route-manager/wp/bearing-deg")); + nd.symbols.wpActiveCrs.setText(''~deg~'°'); + nd.symbols.wpActiveCrs.show(); + }, + is_false: func(nd) nd.symbols.wpActiveCrs.hide(), + }, # of wpActiveId.impl + }, # of wpActiveId + { + id: 'wpActiveDist', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and + getprop("autopilot/route-manager/active") and + nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']), + is_true: func(nd) { + var dst = getprop("/autopilot/route-manager/wp/dist"); + nd.symbols.wpActiveDist.setText(sprintf("%3.01f",dst)); + nd.symbols.wpActiveDist.show(); + }, + is_false: func(nd) nd.symbols.wpActiveDist.hide(), + }, + }, + { + id: 'wpActiveDistLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("/autopilot/route-manager/wp/dist") != nil and getprop("autopilot/route-manager/active") and nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']), + is_true: func(nd) { + nd.symbols.wpActiveDistLbl.show(); + if(getprop("/autopilot/route-manager/wp/dist") > 1000) + nd.symbols.wpActiveDistLbl.setText(" NM"); + }, + is_false: func(nd) nd.symbols.wpActiveDistLbl.hide(), + }, + }, + { + id: 'eta', + impl: { + init: func(nd,symbol), + predicate: func(nd) getprop("autopilot/route-manager/wp/eta") != nil and getprop("autopilot/route-manager/active") and nd.in_mode('toggle_display_mode', ['MAP', 'PLAN']), + is_true: func(nd) { + var etaSec = getprop("/sim/time/utc/day-seconds")+ + getprop("autopilot/route-manager/wp/eta-seconds"); + var h = math.floor(etaSec/3600); + etaSec = etaSec-3600*h; + var m = math.floor(etaSec/60); + etaSec = etaSec-60*m; + var s = etaSec / 10; + if (h > 24) h = h - 24; + nd.symbols.eta.setText(sprintf("%02.0f:%02.0f",h,m)); + nd.symbols.eta.show(); + }, + is_false: func(nd) nd.symbols.eta.hide(), + }, # of eta.impl + }, # of eta + { + id: 'gsGroup', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']), + is_true: func(nd) { + if(nd.get_switch('toggle_centered')) + nd.symbols.gsGroup.setTranslation(0,0); + else + nd.symbols.gsGroup.setTranslation(0,150); + nd.symbols.gsGroup.show(); + }, + is_false: func(nd) nd.symbols.gsGroup.hide(), + }, + }, + { + id:'hdg', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']), + is_true: func(nd) { + var hdgText = ""; + if(nd.in_mode('toggle_display_mode', ['MAP'])) { + if(nd.get_switch('toggle_true_north')) + hdgText = nd.aircraft_source.get_trk_tru(); + else + hdgText = nd.aircraft_source.get_trk_mag(); + } else { + if(nd.get_switch('toggle_true_north')) + hdgText = nd.aircraft_source.get_hdg_tru(); + else + hdgText = nd.aircraft_source.get_hdg_mag(); + } + nd.symbols.hdg.setText(sprintf("%03.0f", hdgText+0.5)); + }, + is_false: NOTHING, + }, + }, + { + id:'hdgGroup', + impl: { + init: func(nd,symbol), + predicate: func(nd) {return 0},#nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']), + is_true: func(nd) { + nd.symbols.hdgGroup.show(); + if(nd.get_switch('toggle_centered')) + nd.symbols.hdgGroup.setTranslation(0,100); + else + nd.symbols.hdgGroup.setTranslation(0,0); + }, + is_false: func(nd) nd.symbols.hdgGroup.hide(), + }, + }, + { + id:'altArc', + impl: { + init: func(nd,symbol), + predicate: func(nd) {return 0},#nd.in_mode('toggle_display_mode', ['APP','MAP','VOR']), + is_true: func(nd) { + nd.symbols.altArc.show(); + }, + is_false: func(nd) nd.symbols.altArc.hide(), + }, + }, + { + id:'gs', + impl: { + init: func(nd,symbol), + common: func(nd) nd.symbols.gs.setText(sprintf("%3.0f",nd.aircraft_source.get_gnd_spd() )), + predicate: func(nd) nd.aircraft_source.get_gnd_spd() >= 30, + is_true: func(nd) { + #nd.symbols.gs.show(); + nd.symbols.gs.setFontSize(36); + }, + is_false: func(nd) {},#nd.symbols.gs.hide(), + }, + }, + { + id:'compass', + impl: { + init: func(nd,symbol), + predicate: func(nd) (!nd.get_switch('toggle_centered') and nd.get_switch('toggle_display_mode') != "PLAN"), + is_true: func(nd) { + nd.symbols.compass.setRotation(-nd.userHdgTrk*D2R); + nd.symbols.compass.show() + }, + is_false: func(nd) nd.symbols.compass.hide(), + }, # of compass.impl + }, # of compass + { + id:'compassApp', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_centered') and nd.get_switch('toggle_display_mode') != "PLAN"), + is_true: func(nd) { + nd.symbols.compassApp.setRotation(-nd.userHdgTrk*D2R); + nd.symbols.compassApp.show() + }, + is_false: func(nd) nd.symbols.compassApp.hide(), + }, # of compassApp.impl + }, # of compassApp + { + id:'northUp', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN", + is_true: func(nd) nd.symbols.northUp.show(), + is_false: func(nd) nd.symbols.northUp.hide(), + }, # of northUp.impl + }, # of northUp + { + id:'planArcs', + impl: { + init: func(nd,symbol), + predicate: func(nd) ((nd.in_mode('toggle_display_mode', ['APP','VOR','PLAN'])) or ((nd.get_switch('toggle_display_mode') == "MAP") and (nd.get_switch('toggle_centered')))), + is_true: func(nd) nd.symbols.planArcs.show(), + is_false: func(nd) nd.symbols.planArcs.hide(), + }, # of planArcs.impl + }, # of planArcs + { + id:'rangeArcs', + impl: { + init: func(nd,symbol), + predicate: func(nd) ((nd.get_switch('toggle_display_mode') == "MAP") and (!nd.get_switch('toggle_centered'))), + is_true: func(nd) nd.symbols.rangeArcs.show(), + is_false: func(nd) nd.symbols.rangeArcs.hide(), + }, # of rangeArcs.impl + }, # of rangeArcs + { + id:'rangePln1', + impl: { + init: func(nd,symbol), + predicate: func(nd) {return 0}, + is_true: func(nd) { + nd.symbols.rangePln1.show(); + nd.symbols.rangePln1.setText(sprintf("%3.0f",nd.rangeNm())); + }, + is_false: func(nd) nd.symbols.rangePln1.hide(), + }, + }, + { + id:'rangePln2', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "MAP" and !nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.rangePln2.show(); + nd.symbols.rangePln2.setText(sprintf("%3.0f",(nd.rangeNm()/2) + (nd.rangeNm()/4))); + }, + is_false: func(nd) nd.symbols.rangePln2.hide(), + }, + }, + { + id:'rangePln3', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN" or nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.rangePln3.show(); + nd.symbols.rangePln3.setText(sprintf("%3.0f",nd.rangeNm()/2)); + }, + is_false: func(nd) nd.symbols.rangePln3.hide(), + }, + }, + { + id:'rangePln4', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "PLAN" or nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.rangePln4.show(); + nd.symbols.rangePln4.setText(sprintf("%3.0f",nd.rangeNm())); + }, + is_false: func(nd) nd.symbols.rangePln4.hide(), + }, + }, + { + id:'rangePln5', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_display_mode') == "MAP" and !nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.rangePln5.show(); + nd.symbols.rangePln5.setText(sprintf("%3.0f",(nd.rangeNm()/2) + (nd.rangeNm()/4))); + }, + is_false: func(nd) nd.symbols.rangePln5.hide(), + }, + }, + { + id:'range', + impl: { + init: func(nd,symbol), + predicate: func(nd) !nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.range.show(); + nd.symbols.range.setText(sprintf("%3.0f",nd.rangeNm()/2)); + }, + is_false: func(nd) nd.symbols.range.hide(), + }, + }, + { + id:'range_r', + impl: { + init: func(nd,symbol), + predicate: func(nd) !nd.get_switch('toggle_centered'), + is_true: func(nd) { + nd.symbols.range_r.show(); + nd.symbols.range_r.setText(sprintf("%3.0f",nd.rangeNm()/2)); + }, + is_false: func(nd) nd.symbols.range_r.hide(), + }, + }, + { + id:'aplSymMap', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == "MAP" and !nd.get_switch('toggle_centered')), + is_true: func(nd) { + nd.symbols.aplSymMap.set('z-index', 10); + nd.symbols.aplSymMap.show(); + + }, + is_false: func(nd) nd.symbols.aplSymMap.hide(), + }, + }, + { + id:'aplSymMapCtr', + impl: { + init: func(nd,symbol), + predicate: func(nd) ((nd.get_switch('toggle_display_mode') == "MAP" and nd.get_switch('toggle_centered')) or nd.in_mode('toggle_display_mode', ['APP','VOR'])), + is_true: func(nd) { + nd.symbols.aplSymMapCtr.set('z-index', 10); + nd.symbols.aplSymMapCtr.show(); + + }, + is_false: func(nd) nd.symbols.aplSymMapCtr.hide(), + }, + }, + { + id:'aplSymVor', + impl: { + init: func(nd,symbol), + predicate: func(nd) {return 0;}, + is_true: func(nd) { + nd.symbols.aplSymVor.show(); + + }, + is_false: func(nd) nd.symbols.aplSymVor.hide(), + }, + }, + { + id:'crsLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']), + is_true: func(nd) nd.symbols.crsLbl.show(), + is_false: func(nd) nd.symbols.crsLbl.hide(), + }, + }, + { + id:'crs', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']), + is_true: func(nd) { + nd.symbols.crs.show(); + var is_ils = (nd.get_switch('toggle_display_mode') == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + var crs = getprop(path~ "radials/selected-deg"); + if(crs != nil) + nd.symbols.crs.setText(sprintf("%03.0f", crs)); + }, + is_false: func(nd) nd.symbols.crs.hide(), + }, + }, + { + id:'dmeLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']), + is_true: func(nd) nd.symbols.dmeLbl.show(), + is_false: func(nd) nd.symbols.dmeLbl.hide(), + }, + }, + { + id:'dme', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP','VOR']), + is_true: func(nd) { + nd.symbols.dme.show(); + var is_ils = (nd.get_switch('toggle_display_mode') == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + nd.symbols.dme.setText(getprop(path~ "nav-id")); + if(is_ils) + nd.symbols.dme.setColor(0.69,0,0.39); + else + nd.symbols.dme.setColor(1,1,1); + }, + is_false: func(nd) nd.symbols.dme.hide(), + }, + }, + { + id:'trkline', + impl: { + init: func(nd,symbol), + predicate: func(nd){ + nd.get_switch('toggle_display_mode') == 'MAP' and + !nd.get_switch('toggle_centered') and + ( + getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val or + nd.get_switch('toggle_trk_line') + ) + }, + is_true: func(nd) { + nd.symbols.trkline.show(); + }, + is_false: func(nd) nd.symbols.trkline.hide(), + }, + }, + { + id:'trkInd2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR','MAP']) and + nd.get_switch('toggle_centered')), + is_true: func(nd) { + nd.symbols.trkInd2.show(); + nd.symbols.trkInd2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R); + }, + is_false: func(nd) nd.symbols.trkInd2.hide(), + }, + }, + { + id:'trkline2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == 'MAP' and + nd.get_switch('toggle_centered') and + getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val), + is_true: func(nd) { + nd.symbols.trkline2.show(); + }, + is_false: func(nd) nd.symbols.trkline2.hide(), + }, + }, + { + id:'vorCrsPtr', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered')), + is_true: func(nd) { + nd.symbols.vorCrsPtr.show(); + nd.symbols.vorCrsPtr.setRotation((getprop("instrumentation/nav[0]/radials/selected-deg")-nd.aircraft_source.get_hdg_tru())*D2R); + + }, + is_false: func(nd) nd.symbols.vorCrsPtr.hide(), + }, + }, + { + id:'vorCrsPtr2', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered')), + is_true: func(nd) { + nd.symbols.vorCrsPtr2.show(); + var is_ils = (nd.get_switch('toggle_display_mode') == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + nd.symbols.vorCrsPtr2.setRotation((getprop("/instrumentation/nav[0]/radials/selected-deg")-nd.aircraft_source.get_hdg_tru())*D2R); + var line = nd.symbols.vorCrsPtr2.getElementById('vorCrsPtr2_line'); + if(!is_ils){ + line.setColor(0,0.62,0.84); + line.setColorFill(0,0.62,0.84); + } else { + line.setColor(0.9,0,0.47); + line.setColorFill(0.9,0,0.47); + } + }, + is_false: func(nd) nd.symbols.vorCrsPtr2.hide(), + }, + }, + { + id: 'gsDiamond', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.in_mode('toggle_display_mode', ['APP']), + is_true: func(nd) { + if(getprop("instrumentation/nav/gs-needle-deflection-norm") != nil) + nd.symbols.gsDiamond.setTranslation(getprop("/instrumentation/nav[0]/gs-needle-deflection-norm")*150,0); + }, + is_false: func(nd) nd.symbols.gsGroup.hide(), + }, + }, + { + id:'locPtr', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['APP','VOR']) and !nd.get_switch('toggle_centered') and getprop("instrumentation/nav/in-range")), + is_true: func(nd) { + nd.symbols.locPtr.show(); + var deflection = getprop("/instrumentation/nav[0]/heading-needle-deflection-norm"); + nd.symbols.locPtr.setTranslation(deflection*150,0); + }, + is_false: func(nd) nd.symbols.locPtr.hide(), + }, + }, + { + id:'locPtr2', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var curmode = nd.get_switch('toggle_display_mode'); + var is_ils = (curmode == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + return (nd.in_mode('toggle_display_mode', ['APP','VOR']) and nd.get_switch('toggle_centered') and getprop(path~ "in-range")); + }, + is_true: func(nd) { + var curmode = nd.get_switch('toggle_display_mode'); + var is_ils = (curmode == 'APP'); + var type = (is_ils ? 'ils' : 'vor'); + var path = nd.get_nav_path(type, 0); + nd.symbols.locPtr2.show(); + var deflection = getprop(path~ "heading-needle-deflection-norm"); + nd.symbols.locPtr2.setTranslation(deflection*150,0); + var line = nd.symbols.locPtr2.getElementById('locPtr2_line'); + var arr1 = nd.symbols.locPtr2.getElementById('locPtr2_arr1'); + var arr2 = nd.symbols.locPtr2.getElementById('locPtr2_arr2'); + if(!is_ils){ + #nd.symbols.vorCrsPtr2.setColor(0,0.62,0.84); + line.setColor(0,0.62,0.84); + line.setColorFill(0,0.62,0.84); + arr1.show(); + arr2.show(); + } else { + line.setColor(0.9,0,0.47); + line.setColorFill(0.9,0,0.47); + arr1.hide(); + arr2.hide(); + } + }, + is_false: func(nd) nd.symbols.locPtr2.hide(), + }, + }, + { + id:'locTrkPointer', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var nav_id = getprop("/instrumentation/nav/nav-id"); + var ils_mode = getprop('/flight-management/freq/ils-mode'); + var has_ils = (nav_id != nil and nav_id != ''); + (nd.get_switch('toggle_display_mode') == 'MAP' and + !nd.get_switch('toggle_centered') and has_ils and ils_mode); + }, + is_true: func(nd) { + nd.symbols.locTrkPointer.show(); + var crs = getprop("instrumentation/nav/radials/selected-deg"); + var rotation = (crs - nd.aircraft_source.get_hdg_tru())*D2R; + nd.symbols.locTrkPointer.setRotation(rotation); + }, + is_false: func(nd) nd.symbols.locTrkPointer.hide(), + }, + }, + { + id:'locTrkPointer2', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var nav_id = getprop("/instrumentation/nav/nav-id"); + var ils_mode = getprop('/flight-management/freq/ils-mode'); + var has_ils = (nav_id != nil and nav_id != ''); + (nd.get_switch('toggle_display_mode') == 'MAP' and + nd.get_switch('toggle_centered') and has_ils and ils_mode); + }, + is_true: func(nd) { + nd.symbols.locTrkPointer2.show(); + var crs = getprop("instrumentation/nav/radials/selected-deg"); + var rotation = (crs - nd.aircraft_source.get_hdg_tru())*D2R; + nd.symbols.locTrkPointer2.setRotation(rotation); + }, + is_false: func(nd) nd.symbols.locTrkPointer2.hide(), + }, + }, + { + id:'wind', + impl: { + init: func(nd,symbol), + predicate: ALWAYS, + is_true: func(nd) { + var windDir = getprop("environment/wind-from-heading-deg"); + if(!nd.get_switch('toggle_true_north')) + windDir = windDir + getprop("environment/magnetic-variation-deg"); + nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,getprop("environment/wind-speed-kt"))); + }, + is_false: NOTHING, + }, + }, + { + id:'windArrow', + impl: { + init: func(nd,symbol), + predicate: func(nd) (!(nd.in_mode('toggle_display_mode', ['PLAN']) and (nd.get_switch('toggle_display_type') == "LCD"))), + is_true: func(nd) { + nd.symbols.windArrow.show(); + var windArrowRot = getprop("environment/wind-from-heading-deg"); + if(nd.in_mode('toggle_display_mode', ['MAP','PLAN'])) { + if(nd.get_switch('toggle_true_north')) + windArrowRot = windArrowRot - nd.aircraft_source.get_trk_tru(); + else + windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag(); + } else { + if(nd.get_switch('toggle_true_north')) + windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_tru(); + else + windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag(); + } + nd.symbols.windArrow.setRotation(windArrowRot*D2R); + }, + is_false: func(nd) nd.symbols.windArrow.hide(), + }, + }, + { + id:'staToL2', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var path = nd.get_nav_path('vor', 0); + return !(nd.in_mode('toggle_display_mode', ['PLAN'])) and nd.get_switch('toggle_centered') and ((getprop(path~ "in-range") and nd.get_switch('toggle_lh_vor_adf') == 1) or (getprop("instrumentation/adf/in-range") and nd.get_switch('toggle_lh_vor_adf') == -1)); + }, + is_true: func(nd) { + if(nd.get_switch('toggle_lh_vor_adf') < 0){ + nd.symbols.staToL2.setColor(0.195,0.96,0.097); + nd.symbols.staFromL2.setColor(0.195,0.96,0.097); + } else { + nd.symbols.staToL2.setColor(1,1,1); + nd.symbols.staFromL2.setColor(1,1,1); + } + nd.symbols.staToL2.show(); + nd.symbols.staFromL2.show(); + }, + is_false: func(nd){ + nd.symbols.staToL2.hide(); + nd.symbols.staFromL2.hide(); + } + } + }, + { + id:'staToR2', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var path = nd.get_nav_path('vor', 1); + return !(nd.in_mode('toggle_display_mode', ['PLAN'])) and nd.get_switch('toggle_centered') and ((getprop(path~ "in-range") and nd.get_switch('toggle_rh_vor_adf') == 1) or (getprop("instrumentation/adf[1]/in-range") and nd.get_switch('toggle_rh_vor_adf') == -1)); + }, + is_true: func(nd) { + if(nd.get_switch('toggle_rh_vor_adf') < 0){ + nd.symbols.staToR2.setColor(0.195,0.96,0.097); + nd.symbols.staFromR2.setColor(0.195,0.96,0.097); + } else { + nd.symbols.staToR2.setColor(1,1,1); + nd.symbols.staFromR2.setColor(1,1,1); + } + nd.symbols.staToR2.show(); + nd.symbols.staFromR2.show(); + }, + is_false: func(nd){ + nd.symbols.staToR2.hide(); + nd.symbols.staFromR2.hide(); + } + } + }, + { + id:'staToL', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var path = nd.get_nav_path('vor', 0); + return nd.in_mode('toggle_display_mode', ['MAP']) and !nd.get_switch('toggle_centered') and ((getprop(path~ "in-range") and nd.get_switch('toggle_lh_vor_adf') == 1) or (getprop("instrumentation/adf/in-range") and nd.get_switch('toggle_lh_vor_adf') == -1)); + }, + is_true: func(nd) { + if(nd.get_switch('toggle_lh_vor_adf') < 0){ + nd.symbols.staToL.setColor(0.195,0.96,0.097); + nd.symbols.staFromL.setColor(0.195,0.96,0.097); + } else { + nd.symbols.staToL.setColor(1,1,1); + nd.symbols.staFromL.setColor(1,1,1); + } + nd.symbols.staToL.show(); + nd.symbols.staFromL.show(); + }, + is_false: func(nd){ + nd.symbols.staToL.hide(); + nd.symbols.staFromL.hide(); + } + } + }, + { + id:'staToR', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var path = nd.get_nav_path('vor', 1); + return nd.in_mode('toggle_display_mode', ['MAP']) and !nd.get_switch('toggle_centered') and ((getprop(path~ "in-range") and nd.get_switch('toggle_rh_vor_adf') == 1) or (getprop("instrumentation/adf[1]/in-range") and nd.get_switch('toggle_rh_vor_adf') == -1)); + }, + is_true: func(nd) { + if(nd.get_switch('toggle_rh_vor_adf') < 0){ + nd.symbols.staToR.setColor(0.195,0.96,0.097); + nd.symbols.staFromR.setColor(0.195,0.96,0.097); + } else { + nd.symbols.staToR.setColor(1,1,1); + nd.symbols.staFromR.setColor(1,1,1); + } + nd.symbols.staToR.show(); + nd.symbols.staFromR.show(); + }, + is_false: func(nd){ + nd.symbols.staToR.hide(); + nd.symbols.staFromR.hide(); + } + } + }, + { + id:'dmeL', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_lh_vor_adf') != 0), + is_true: func(nd) { + nd.symbols.dmeL.show(); + if(nd.get_switch('toggle_lh_vor_adf') < 0){ + nd.symbols.vorL.setText("ADF 1"); + nd.symbols.vorL.setColor(0.195,0.96,0.097); + nd.symbols.vorLId.setColor(0.195,0.96,0.097); + nd.symbols.dmeLDist.setColor(0.195,0.96,0.097); + } + else{ + nd.symbols.vorL.setText("VOR 1"); + nd.symbols.vorL.setColor(1,1,1); + nd.symbols.vorLId.setColor(1,1,1); + nd.symbols.dmeLDist.setColor(1,1,1); + } + nd.symbols.dmeL.setText('NM'); + nd.symbols.dmeL.setColor(0,0.59,0.8); + }, + is_false: func(nd){ + nd.symbols.dmeL.hide(); + } + } + }, + { + id:'dmeR', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_rh_vor_adf') != 0), + is_true: func(nd) { + nd.symbols.dmeR.show(); + if(nd.get_switch('toggle_rh_vor_adf') < 0){ + nd.symbols.vorR.setText("ADF 2"); + nd.symbols.vorR.setColor(0.195,0.96,0.097); + nd.symbols.vorRId.setColor(0.195,0.96,0.097); + nd.symbols.dmeRDist.setColor(0.195,0.96,0.097); + } else { + nd.symbols.vorR.setText("VOR 2"); + nd.symbols.vorR.setColor(1,1,1); + nd.symbols.vorRId.setColor(1,1,1); + nd.symbols.dmeRDist.setColor(1,1,1); + } + nd.symbols.dmeR.setText('NM'); + nd.symbols.dmeR.setColor(0,0.59,0.8); + }, + is_false: func(nd){ + nd.symbols.dmeR.hide(); + } + } + }, + { + id: 'vorL', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_lh_vor_adf') != 0), + is_true: func(nd) { + nd.symbols.vorL.show(); + nd.symbols.vorLId.show(); + nd.symbols.dmeLDist.show(); + if(nd.get_switch('toggle_rh_vor_adf') < 0){ + var adf = 'instrumentation/adf/'; + var navident = getprop(adf~ "ident"); + var frq = getprop(adf~ "frequencies/selected-khz"); + if(navident != "") + nd.symbols.vorLId.setText(navident); + else + nd.symbols.vorLId.setText(sprintf("%3d", frq)); + nd.symbols.dmeLDist.setText(""); + } else { + var nav = nd.get_nav_path('vor', 0); + var navID = getprop(nav~"nav-id"); + var frq = getprop(nav~"frequencies/selected-mhz-fmt"); + var dme = nd.get_nav_path('dme', 0); + var dst = getprop(dme~ "indicated-distance-nm"); + #print(dme~ "indicated-distance-nm"); + if(getprop(nav~ "in-range")) + nd.symbols.vorLId.setText(navID); + else + nd.symbols.vorLId.setText(frq); + if(getprop(dme~ "in-range")) + nd.symbols.dmeLDist.setText(sprintf("%3.1f", + dst)); + else nd.symbols.dmeLDist.setText(" ---"); + } + }, + is_false: func(nd){ + nd.symbols.vorL.hide(); + nd.symbols.vorLId.hide(); + nd.symbols.dmeLDist.hide(); + } + } + }, + { + id:'vorLSym', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_lh_vor_adf') != 0), + is_true: func(nd) { + nd.symbols.vorLSym.show(); + }, + is_false: func(nd){ + nd.symbols.vorLSym.hide(); + } + } + }, + { + id:'vorRSym', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_rh_vor_adf') != 0), + is_true: func(nd) { + nd.symbols.vorRSym.show(); + }, + is_false: func(nd){ + nd.symbols.vorRSym.hide(); + } + } + }, + { + id:'appMode', + impl: { + init: func(nd,symbol), + predicate: func(nd) { + var mode = getprop(nd.options.defaults.app_mode); + return (mode != '' and mode != nil); + }, + is_true: func(nd) { + var mode = getprop(nd.options.defaults.app_mode); + nd.symbols.appMode.show(); + nd.symbols.appMode.setText(mode); + }, + is_false: func(nd){ + nd.symbols.appMode.hide(); + } + } + }, + { + id:'chrono_box', + impl: { + init: func(nd,symbol), + predicate: func(nd) nd.get_switch('toggle_chrono'), + is_true: func(nd) { + var efis_node = props.globals.getNode(nd.efis_path); + var idx = efis_node.getIndex() or 0; + var chronoNode = nd.options.defaults.chrono_node~'['~idx~']'; + chronoNode = props.globals.getNode(chronoNode); + var time = nil; + if(chronoNode != nil){ + time = chronoNode.getValue('text'); + } + nd.symbols.chrono_box.show(); + if(time != nil and time != '') + nd.symbols.chrono_text.setText(time); + }, + is_false: func(nd){ + nd.symbols.chrono_box.hide(); + } + } + }, + { + id:'chrono_text', + impl: { + init: func(nd,symbol), + predicate: func(nd) 1, + is_true: func(nd) nd.symbols.chrono_text.show(), + is_false: func(nd) nd.symbols.chrono_text.hide(), + } + }, + { + id:'degreeArrows', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') != 'PLAN' and nd.get_switch('toggle_centered')), + is_true: func(nd) { + nd.symbols.degreeArrows.show(); + }, + is_false: func(nd){ + nd.symbols.degreeArrows.hide(); + } + } + }, + { + id: 'legDistL', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == 'MAP' and !nd.get_switch('toggle_centered')), + is_true: func(nd){ + var active = getprop('autopilot/route-manager/active'); + var lat_ctrl = getprop(nd.options.defaults.lat_ctrl); + var managed_v = nd.options.defaults.managed_val; + var is_managed = (lat_ctrl == managed_v); + var toggle_xtrk_err = nd.get_switch('toggle_xtrk_error'); + if((!active or is_managed) and !toggle_xtrk_err){ + nd.symbols.legDistL.hide(); + } else { + var dist = getprop('instrumentation/gps/wp/wp[1]/course-error-nm'); + if(dist == nil or dist == '' or dist > -0.1){ + nd.symbols.legDistL.hide(); + } else { + dist = sprintf('%.1fL', math.abs(dist)); + nd.symbols.legDistL.setText(dist); + nd.symbols.legDistL.show(); + } + } + }, + is_false: func(nd){ + nd.symbols.legDistL.hide(); + } + } + }, + { + id: 'legDistR', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == 'MAP' and !nd.get_switch('toggle_centered')), + is_true: func(nd){ + var active = getprop('autopilot/route-manager/active'); + var lat_ctrl = getprop(nd.options.defaults.lat_ctrl); + var managed_v = nd.options.defaults.managed_val; + var is_managed = (lat_ctrl == managed_v); + var toggle_xtrk_err = nd.get_switch('toggle_xtrk_error'); + if((!active or is_managed) and !toggle_xtrk_err){ + nd.symbols.legDistR.hide(); + } else { + var dist = getprop('instrumentation/gps/wp/wp[1]/course-error-nm'); + if(dist == nil or dist == '' or dist < 0.1){ + nd.symbols.legDistR.hide(); + } else { + dist = sprintf('%.1fR', math.abs(dist)); + nd.symbols.legDistR.setText(dist); + nd.symbols.legDistR.show(); + } + } + }, + is_false: func(nd){ + nd.symbols.legDistR.hide(); + } + } + }, + { + id: 'legDistCtrL', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == 'MAP' and nd.get_switch('toggle_centered')), + is_true: func(nd){ + var active = getprop('autopilot/route-manager/active'); + var lat_ctrl = getprop(nd.options.defaults.lat_ctrl); + var managed_v = nd.options.defaults.managed_val; + var is_managed = (lat_ctrl == managed_v); + var toggle_xtrk_err = nd.get_switch('toggle_xtrk_error'); + if((!active or is_managed) and !toggle_xtrk_err){ + nd.symbols.legDistCtrL.hide(); + } else { + var dist = getprop('instrumentation/gps/wp/wp[1]/course-error-nm'); + if(dist == nil or dist == '' or dist > -0.1){ + nd.symbols.legDistCtrL.hide(); + } else { + dist = sprintf('%.1fL', math.abs(dist)); + nd.symbols.legDistCtrL.setText(dist); + nd.symbols.legDistCtrL.show(); + } + } + }, + is_false: func(nd){ + nd.symbols.legDistCtrL.hide(); + } + } + }, + { + id: 'legDistCtrR', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.get_switch('toggle_display_mode') == 'MAP' and nd.get_switch('toggle_centered')), + is_true: func(nd){ + var active = getprop('autopilot/route-manager/active'); + var lat_ctrl = getprop(nd.options.defaults.lat_ctrl); + var managed_v = nd.options.defaults.managed_val; + var is_managed = (lat_ctrl == managed_v); + var toggle_xtrk_err = nd.get_switch('toggle_xtrk_error'); + if((!active or is_managed) and !toggle_xtrk_err){ + nd.symbols.legDistCtrR.hide(); + } else { + var dist = getprop('instrumentation/gps/wp/wp[1]/course-error-nm'); + if(dist == nil or dist == '' or dist < 0.1){ + nd.symbols.legDistCtrR.hide(); + } else { + dist = sprintf('%.1fR', math.abs(dist)); + nd.symbols.legDistCtrR.setText(dist); + nd.symbols.legDistCtrR.show(); + } + } + }, + is_false: func(nd){ + nd.symbols.legDistCtrR.hide(); + } + } + }, + { + id: 'offsetLbl', + impl: { + init: func(nd,symbol), + predicate: func(nd) (nd.in_mode('toggle_display_mode', ['MAP', 'PLAN'])), + is_true: func(nd){ + var active = getprop('autopilot/route-manager/active'); + var lat_ctrl = getprop(nd.options.defaults.lat_ctrl); + var managed_v = nd.options.defaults.managed_val; + var is_managed = (lat_ctrl == managed_v); + var offset = getprop(nd.options.defaults.fpln_offset); + var has_offset = (offset != nil and + offset != '' and + offset != 0); + if(!active or !is_managed or !has_offset){ + nd.symbols.offsetLbl.hide(); + } else { + nd.symbols.offsetLbl.setText("OFST\n"~ offset); + nd.symbols.offsetLbl.show(); + } + }, + is_false: func(nd){ + nd.symbols.offsetLbl.hide(); + } + } + } + ], # end of vector with features + +}; + diff --git a/Models/Instruments/ND/canvas/wxr_api.xml b/Models/Instruments/ND/canvas/wxr_api.xml new file mode 100644 index 00000000..d75a9322 --- /dev/null +++ b/Models/Instruments/ND/canvas/wxr_api.xml @@ -0,0 +1,10 @@ + + + + + radar + 2048 + 240 + true + false + diff --git a/Models/Instruments/ND/res/A320neo_symbols.png b/Models/Instruments/ND/res/A320neo_symbols.png new file mode 100644 index 00000000..ca6e434b Binary files /dev/null and b/Models/Instruments/ND/res/A320neo_symbols.png differ diff --git a/Models/Instruments/ND/res/Main_Displays.png b/Models/Instruments/ND/res/Main_Displays.png new file mode 100644 index 00000000..a881fd18 Binary files /dev/null and b/Models/Instruments/ND/res/Main_Displays.png differ diff --git a/Models/Instruments/ND/ND_L.ac b/Models/Instruments/ND/res/ND.ac similarity index 63% rename from Models/Instruments/ND/ND_L.ac rename to Models/Instruments/ND/res/ND.ac index 79d1bc07..2c84e202 100644 --- a/Models/Instruments/ND/ND_L.ac +++ b/Models/Instruments/ND/res/ND.ac @@ -4,16 +4,14 @@ OBJECT world kids 1 OBJECT poly name "ND.screen" -loc 0.002183 0.00101281 -1.84312e-005 -data 10 -ND.screenL +loc 0.000703464 0.00085881 7.61527e-005 texture "screen.png" -crease 30.000002 +crease 30.000000 numvert 4 -0 0.0788224 -0.0771343 -0 -0.0733778 -0.0771343 -0 -0.0733778 0.076915 -0 0.0788224 0.076915 +0.00169254 0.0788742 -0.0787579 +0.00169254 -0.0731794 -0.0787579 +0.00169254 -0.0731794 0.078523 +0.00169254 0.0788742 0.078523 numsurf 1 SURF 0x0 mat 0 diff --git a/Models/Instruments/ND/ND_R.ac b/Models/Instruments/ND/res/ND_R.ac similarity index 59% rename from Models/Instruments/ND/ND_R.ac rename to Models/Instruments/ND/res/ND_R.ac index c567a73d..fa27cd1b 100644 --- a/Models/Instruments/ND/ND_R.ac +++ b/Models/Instruments/ND/res/ND_R.ac @@ -3,17 +3,15 @@ MATERIAL "buttonlights" rgb 1 1 1 amb 1 1 1 emis 1 1 1 spec 0.33 0.33 0.33 s OBJECT world kids 1 OBJECT poly -name "ND.screen" -loc 0.002183 0.00101281 -1.84312e-005 -data 10 -ND.screenR +name "ND_R.screen" +loc 0.000703464 0.00085881 7.61527e-005 texture "screen.png" -crease 30.000002 +crease 30.000000 numvert 4 -0 0.0788224 -0.0771343 -0 -0.0733778 -0.0771343 -0 -0.0733778 0.076915 -0 0.0788224 0.076915 +0.00169254 0.0788742 -0.0787579 +0.00169254 -0.0731794 -0.0787579 +0.00169254 -0.0731794 0.078523 +0.00169254 0.0788742 0.078523 numsurf 1 SURF 0x0 mat 0 diff --git a/Models/Instruments/ND/res/airbus_symbols.png b/Models/Instruments/ND/res/airbus_symbols.png new file mode 100644 index 00000000..41a1c584 Binary files /dev/null and b/Models/Instruments/ND/res/airbus_symbols.png differ diff --git a/Models/Instruments/ND/res/black.png b/Models/Instruments/ND/res/black.png new file mode 100644 index 00000000..0b0c0842 Binary files /dev/null and b/Models/Instruments/ND/res/black.png differ diff --git a/Models/Instruments/ND/res/hsi2a.png b/Models/Instruments/ND/res/hsi2a.png new file mode 100644 index 00000000..633ff531 Binary files /dev/null and b/Models/Instruments/ND/res/hsi2a.png differ diff --git a/Models/Instruments/ND/res/hsiarc.png b/Models/Instruments/ND/res/hsiarc.png new file mode 100644 index 00000000..2c410ed8 Binary files /dev/null and b/Models/Instruments/ND/res/hsiarc.png differ diff --git a/Models/Instruments/ND/res/mask.png b/Models/Instruments/ND/res/mask.png new file mode 100644 index 00000000..74bad34d Binary files /dev/null and b/Models/Instruments/ND/res/mask.png differ diff --git a/Models/Instruments/ND/res/maskfull.png b/Models/Instruments/ND/res/maskfull.png new file mode 100644 index 00000000..ed8892c3 Binary files /dev/null and b/Models/Instruments/ND/res/maskfull.png differ diff --git a/Models/Instruments/ND/res/nd-empty.ac b/Models/Instruments/ND/res/nd-empty.ac new file mode 100644 index 00000000..4dd7e1f9 --- /dev/null +++ b/Models/Instruments/ND/res/nd-empty.ac @@ -0,0 +1,3 @@ +AC3Db +OBJECT world +kids 0 diff --git a/Models/Instruments/ND/screen.png b/Models/Instruments/ND/res/od_wxradar.png similarity index 100% rename from Models/Instruments/ND/screen.png rename to Models/Instruments/ND/res/od_wxradar.png diff --git a/Models/Instruments/ND/res/screen.png b/Models/Instruments/ND/res/screen.png new file mode 100644 index 00000000..159304c1 Binary files /dev/null and b/Models/Instruments/ND/res/screen.png differ diff --git a/Models/Instruments/ND/res/symbols.png b/Models/Instruments/ND/res/symbols.png new file mode 100644 index 00000000..7f663882 Binary files /dev/null and b/Models/Instruments/ND/res/symbols.png differ diff --git a/Models/Instruments/ND/res/terrain-gradient.png b/Models/Instruments/ND/res/terrain-gradient.png new file mode 100644 index 00000000..470a1ec0 Binary files /dev/null and b/Models/Instruments/ND/res/terrain-gradient.png differ diff --git a/Models/Instruments/ND/res/terrain-map-pixel.ac b/Models/Instruments/ND/res/terrain-map-pixel.ac new file mode 100644 index 00000000..e1cfe0b6 --- /dev/null +++ b/Models/Instruments/ND/res/terrain-map-pixel.ac @@ -0,0 +1,17669 @@ +AC3Db +MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 1 1 1 spec 0.5 0.5 0.5 shi 64 trans 0 +OBJECT world +kids 1 +OBJECT group +name "Plane" +loc -0.001 -0.0208943 -8.2573e-06 +kids 841 +OBJECT poly +name "Plane.001" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.001 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0840355 +0 -0.0830489 0.0787832 +0 -0.0778583 0.0840355 +0 -0.0778583 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.002" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.002 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0787832 +0 -0.0830489 0.0735311 +0 -0.0778583 0.0787832 +0 -0.0778583 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.003" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.003 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0735311 +0 -0.0830489 0.0682789 +0 -0.0778583 0.0735311 +0 -0.0778583 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.004" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.004 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0682789 +0 -0.0830489 0.0630266 +0 -0.0778583 0.0682789 +0 -0.0778583 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.005" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.005 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0630266 +0 -0.0830489 0.0577744 +0 -0.0778583 0.0630266 +0 -0.0778583 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.006" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.006 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0577744 +0 -0.0830489 0.0525222 +0 -0.0778583 0.0577744 +0 -0.0778583 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.007" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.007 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0525222 +0 -0.0830489 0.04727 +0 -0.0778583 0.0525222 +0 -0.0778583 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.008" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.008 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.04727 +0 -0.0830489 0.0420177 +0 -0.0778583 0.04727 +0 -0.0778583 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.009" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.009 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0420177 +0 -0.0830489 0.0367655 +0 -0.0778583 0.0420177 +0 -0.0778583 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.010" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.010 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0367655 +0 -0.0830489 0.0315134 +0 -0.0778583 0.0367655 +0 -0.0778583 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.011" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.011 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0315134 +0 -0.0830489 0.0262611 +0 -0.0778583 0.0315134 +0 -0.0778583 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.012" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.012 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0262611 +0 -0.0830489 0.0210089 +0 -0.0778583 0.0262611 +0 -0.0778583 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.013" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.013 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0210089 +0 -0.0830489 0.0157567 +0 -0.0778583 0.0210089 +0 -0.0778583 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.014" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.014 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0157567 +0 -0.0830489 0.0105045 +0 -0.0778583 0.0157567 +0 -0.0778583 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.015" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.015 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.0105045 +0 -0.0830489 0.00525225 +0 -0.0778583 0.0105045 +0 -0.0778583 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.016" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.016 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0.00525225 +0 -0.0830489 0 +0 -0.0778583 0.00525225 +0 -0.0778583 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.017" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.017 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 0 +0 -0.0830489 -0.0052522 +0 -0.0778583 0 +0 -0.0778583 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.018" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.018 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0052522 +0 -0.0830489 -0.0105045 +0 -0.0778583 -0.0052522 +0 -0.0778583 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.019" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.019 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0105045 +0 -0.0830489 -0.0157566 +0 -0.0778583 -0.0105045 +0 -0.0778583 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.020" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.020 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0157566 +0 -0.0830489 -0.0210089 +0 -0.0778583 -0.0157566 +0 -0.0778583 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.021" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.021 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0210089 +0 -0.0830489 -0.0262611 +0 -0.0778583 -0.0210089 +0 -0.0778583 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.022" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.022 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0262611 +0 -0.0830489 -0.0315133 +0 -0.0778583 -0.0262611 +0 -0.0778583 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.023" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.023 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0315133 +0 -0.0830489 -0.0367655 +0 -0.0778583 -0.0315133 +0 -0.0778583 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.024" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.024 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0367655 +0 -0.0830489 -0.0420177 +0 -0.0778583 -0.0367655 +0 -0.0778583 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.025" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.025 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0420177 +0 -0.0830489 -0.04727 +0 -0.0778583 -0.0420177 +0 -0.0778583 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.026" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.026 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.04727 +0 -0.0830489 -0.0525221 +0 -0.0778583 -0.04727 +0 -0.0778583 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.027" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.027 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0525221 +0 -0.0830489 -0.0577744 +0 -0.0778583 -0.0525221 +0 -0.0778583 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.028" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.028 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0577744 +0 -0.0830489 -0.0630266 +0 -0.0778583 -0.0577744 +0 -0.0778583 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.029" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.029 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0830489 -0.0630266 +0 -0.0830489 -0.0682789 +0 -0.0778583 -0.0630266 +0 -0.0778583 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.033" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.033 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0840355 +0 -0.0778583 0.0787832 +0 -0.0726677 0.0840355 +0 -0.0726677 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.034" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.034 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0787832 +0 -0.0778583 0.0735311 +0 -0.0726677 0.0787832 +0 -0.0726677 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.035" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.035 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0735311 +0 -0.0778583 0.0682789 +0 -0.0726677 0.0735311 +0 -0.0726677 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.036" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.036 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0682789 +0 -0.0778583 0.0630266 +0 -0.0726677 0.0682789 +0 -0.0726677 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.037" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.037 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0630266 +0 -0.0778583 0.0577744 +0 -0.0726677 0.0630266 +0 -0.0726677 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.038" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.038 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0577744 +0 -0.0778583 0.0525222 +0 -0.0726677 0.0577744 +0 -0.0726677 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.039" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.039 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0525222 +0 -0.0778583 0.04727 +0 -0.0726677 0.0525222 +0 -0.0726677 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.040" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.040 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.04727 +0 -0.0778583 0.0420177 +0 -0.0726677 0.04727 +0 -0.0726677 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.041" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.041 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0420177 +0 -0.0778583 0.0367655 +0 -0.0726677 0.0420177 +0 -0.0726677 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.042" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.042 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0367655 +0 -0.0778583 0.0315134 +0 -0.0726677 0.0367655 +0 -0.0726677 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.043" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.043 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0315134 +0 -0.0778583 0.0262611 +0 -0.0726677 0.0315134 +0 -0.0726677 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.044" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.044 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0262611 +0 -0.0778583 0.0210089 +0 -0.0726677 0.0262611 +0 -0.0726677 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.045" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.045 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0210089 +0 -0.0778583 0.0157567 +0 -0.0726677 0.0210089 +0 -0.0726677 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.046" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.046 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0157567 +0 -0.0778583 0.0105045 +0 -0.0726677 0.0157567 +0 -0.0726677 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.047" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.047 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.0105045 +0 -0.0778583 0.00525225 +0 -0.0726677 0.0105045 +0 -0.0726677 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.048" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.048 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0.00525225 +0 -0.0778583 0 +0 -0.0726677 0.00525225 +0 -0.0726677 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.049" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.049 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 0 +0 -0.0778583 -0.0052522 +0 -0.0726677 0 +0 -0.0726677 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.050" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.050 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0052522 +0 -0.0778583 -0.0105045 +0 -0.0726677 -0.0052522 +0 -0.0726677 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.051" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.051 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0105045 +0 -0.0778583 -0.0157566 +0 -0.0726677 -0.0105045 +0 -0.0726677 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.052" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.052 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0157566 +0 -0.0778583 -0.0210089 +0 -0.0726677 -0.0157566 +0 -0.0726677 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.053" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.053 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0210089 +0 -0.0778583 -0.0262611 +0 -0.0726677 -0.0210089 +0 -0.0726677 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.054" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.054 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0262611 +0 -0.0778583 -0.0315133 +0 -0.0726677 -0.0262611 +0 -0.0726677 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.055" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.055 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0315133 +0 -0.0778583 -0.0367655 +0 -0.0726677 -0.0315133 +0 -0.0726677 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.056" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.056 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0367655 +0 -0.0778583 -0.0420177 +0 -0.0726677 -0.0367655 +0 -0.0726677 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.057" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.057 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0420177 +0 -0.0778583 -0.04727 +0 -0.0726677 -0.0420177 +0 -0.0726677 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.058" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.058 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.04727 +0 -0.0778583 -0.0525221 +0 -0.0726677 -0.04727 +0 -0.0726677 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.059" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.059 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0525221 +0 -0.0778583 -0.0577744 +0 -0.0726677 -0.0525221 +0 -0.0726677 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.060" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.060 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0577744 +0 -0.0778583 -0.0630266 +0 -0.0726677 -0.0577744 +0 -0.0726677 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.061" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.061 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0778583 -0.0630266 +0 -0.0778583 -0.0682789 +0 -0.0726677 -0.0630266 +0 -0.0726677 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.065" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.065 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0840355 +0 -0.0726677 0.0787832 +0 -0.0674772 0.0840355 +0 -0.0674772 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.066" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.066 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0787832 +0 -0.0726677 0.0735311 +0 -0.0674772 0.0787832 +0 -0.0674772 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.067" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.067 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0735311 +0 -0.0726677 0.0682789 +0 -0.0674772 0.0735311 +0 -0.0674772 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.068" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.068 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0682789 +0 -0.0726677 0.0630266 +0 -0.0674772 0.0682789 +0 -0.0674772 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.069" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.069 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0630266 +0 -0.0726677 0.0577744 +0 -0.0674772 0.0630266 +0 -0.0674772 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.070" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.070 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0577744 +0 -0.0726677 0.0525222 +0 -0.0674772 0.0577744 +0 -0.0674772 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.071" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.071 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0525222 +0 -0.0726677 0.04727 +0 -0.0674772 0.0525222 +0 -0.0674772 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.072" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.072 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.04727 +0 -0.0726677 0.0420177 +0 -0.0674772 0.04727 +0 -0.0674772 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.073" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.073 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0420177 +0 -0.0726677 0.0367655 +0 -0.0674772 0.0420177 +0 -0.0674772 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.074" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.074 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0367655 +0 -0.0726677 0.0315134 +0 -0.0674772 0.0367655 +0 -0.0674772 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.075" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.075 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0315134 +0 -0.0726677 0.0262611 +0 -0.0674772 0.0315134 +0 -0.0674772 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.076" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.076 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0262611 +0 -0.0726677 0.0210089 +0 -0.0674772 0.0262611 +0 -0.0674772 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.077" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.077 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0210089 +0 -0.0726677 0.0157567 +0 -0.0674772 0.0210089 +0 -0.0674772 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.078" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.078 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0157567 +0 -0.0726677 0.0105045 +0 -0.0674772 0.0157567 +0 -0.0674772 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.079" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.079 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.0105045 +0 -0.0726677 0.00525225 +0 -0.0674772 0.0105045 +0 -0.0674772 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.080" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.080 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0.00525225 +0 -0.0726677 0 +0 -0.0674772 0.00525225 +0 -0.0674772 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.081" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.081 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 0 +0 -0.0726677 -0.0052522 +0 -0.0674772 0 +0 -0.0674772 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.082" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.082 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0052522 +0 -0.0726677 -0.0105045 +0 -0.0674772 -0.0052522 +0 -0.0674772 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.083" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.083 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0105045 +0 -0.0726677 -0.0157566 +0 -0.0674772 -0.0105045 +0 -0.0674772 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.084" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.084 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0157566 +0 -0.0726677 -0.0210089 +0 -0.0674772 -0.0157566 +0 -0.0674772 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.085" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.085 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0210089 +0 -0.0726677 -0.0262611 +0 -0.0674772 -0.0210089 +0 -0.0674772 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.086" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.086 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0262611 +0 -0.0726677 -0.0315133 +0 -0.0674772 -0.0262611 +0 -0.0674772 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.087" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.087 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0315133 +0 -0.0726677 -0.0367655 +0 -0.0674772 -0.0315133 +0 -0.0674772 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.088" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.088 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0367655 +0 -0.0726677 -0.0420177 +0 -0.0674772 -0.0367655 +0 -0.0674772 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.089" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.089 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0420177 +0 -0.0726677 -0.04727 +0 -0.0674772 -0.0420177 +0 -0.0674772 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.090" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.090 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.04727 +0 -0.0726677 -0.0525221 +0 -0.0674772 -0.04727 +0 -0.0674772 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.091" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.091 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0525221 +0 -0.0726677 -0.0577744 +0 -0.0674772 -0.0525221 +0 -0.0674772 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.092" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.092 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0577744 +0 -0.0726677 -0.0630266 +0 -0.0674772 -0.0577744 +0 -0.0674772 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.093" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.093 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0726677 -0.0630266 +0 -0.0726677 -0.0682789 +0 -0.0674772 -0.0630266 +0 -0.0674772 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.097" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.097 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0840355 +0 -0.0674772 0.0787832 +0 -0.0622866 0.0840355 +0 -0.0622866 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.098" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.098 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0787832 +0 -0.0674772 0.0735311 +0 -0.0622866 0.0787832 +0 -0.0622866 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.099" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.099 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0735311 +0 -0.0674772 0.0682789 +0 -0.0622866 0.0735311 +0 -0.0622866 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.100" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.100 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0682789 +0 -0.0674772 0.0630266 +0 -0.0622866 0.0682789 +0 -0.0622866 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.101" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.101 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0630266 +0 -0.0674772 0.0577744 +0 -0.0622866 0.0630266 +0 -0.0622866 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.102" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.102 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0577744 +0 -0.0674772 0.0525222 +0 -0.0622866 0.0577744 +0 -0.0622866 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.103" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.103 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0525222 +0 -0.0674772 0.04727 +0 -0.0622866 0.0525222 +0 -0.0622866 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.104" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.104 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.04727 +0 -0.0674772 0.0420177 +0 -0.0622866 0.04727 +0 -0.0622866 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.105" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.105 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0420177 +0 -0.0674772 0.0367655 +0 -0.0622866 0.0420177 +0 -0.0622866 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.106" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.106 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0367655 +0 -0.0674772 0.0315134 +0 -0.0622866 0.0367655 +0 -0.0622866 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.107" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.107 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0315134 +0 -0.0674772 0.0262611 +0 -0.0622866 0.0315134 +0 -0.0622866 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.108" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.108 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0262611 +0 -0.0674772 0.0210089 +0 -0.0622866 0.0262611 +0 -0.0622866 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.109" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.109 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0210089 +0 -0.0674772 0.0157567 +0 -0.0622866 0.0210089 +0 -0.0622866 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.110" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.110 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0157567 +0 -0.0674772 0.0105045 +0 -0.0622866 0.0157567 +0 -0.0622866 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.111" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.111 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.0105045 +0 -0.0674772 0.00525225 +0 -0.0622866 0.0105045 +0 -0.0622866 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.112" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.112 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0.00525225 +0 -0.0674772 0 +0 -0.0622866 0.00525225 +0 -0.0622866 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.113" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.113 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 0 +0 -0.0674772 -0.0052522 +0 -0.0622866 0 +0 -0.0622866 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.114" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.114 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0052522 +0 -0.0674772 -0.0105045 +0 -0.0622866 -0.0052522 +0 -0.0622866 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.115" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.115 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0105045 +0 -0.0674772 -0.0157566 +0 -0.0622866 -0.0105045 +0 -0.0622866 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.116" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.116 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0157566 +0 -0.0674772 -0.0210089 +0 -0.0622866 -0.0157566 +0 -0.0622866 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.117" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.117 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0210089 +0 -0.0674772 -0.0262611 +0 -0.0622866 -0.0210089 +0 -0.0622866 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.118" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.118 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0262611 +0 -0.0674772 -0.0315133 +0 -0.0622866 -0.0262611 +0 -0.0622866 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.119" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.119 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0315133 +0 -0.0674772 -0.0367655 +0 -0.0622866 -0.0315133 +0 -0.0622866 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.120" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.120 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0367655 +0 -0.0674772 -0.0420177 +0 -0.0622866 -0.0367655 +0 -0.0622866 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.121" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.121 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0420177 +0 -0.0674772 -0.04727 +0 -0.0622866 -0.0420177 +0 -0.0622866 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.122" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.122 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.04727 +0 -0.0674772 -0.0525221 +0 -0.0622866 -0.04727 +0 -0.0622866 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.123" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.123 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0525221 +0 -0.0674772 -0.0577744 +0 -0.0622866 -0.0525221 +0 -0.0622866 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.124" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.124 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0577744 +0 -0.0674772 -0.0630266 +0 -0.0622866 -0.0577744 +0 -0.0622866 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.125" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.125 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0674772 -0.0630266 +0 -0.0674772 -0.0682789 +0 -0.0622866 -0.0630266 +0 -0.0622866 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.129" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.129 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0840355 +0 -0.0622866 0.0787832 +0 -0.057096 0.0840355 +0 -0.057096 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.130" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.130 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0787832 +0 -0.0622866 0.0735311 +0 -0.057096 0.0787832 +0 -0.057096 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.131" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.131 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0735311 +0 -0.0622866 0.0682789 +0 -0.057096 0.0735311 +0 -0.057096 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.132" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.132 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0682789 +0 -0.0622866 0.0630266 +0 -0.057096 0.0682789 +0 -0.057096 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.133" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.133 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0630266 +0 -0.0622866 0.0577744 +0 -0.057096 0.0630266 +0 -0.057096 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.134" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.134 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0577744 +0 -0.0622866 0.0525222 +0 -0.057096 0.0577744 +0 -0.057096 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.135" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.135 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0525222 +0 -0.0622866 0.04727 +0 -0.057096 0.0525222 +0 -0.057096 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.136" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.136 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.04727 +0 -0.0622866 0.0420177 +0 -0.057096 0.04727 +0 -0.057096 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.137" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.137 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0420177 +0 -0.0622866 0.0367655 +0 -0.057096 0.0420177 +0 -0.057096 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.138" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.138 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0367655 +0 -0.0622866 0.0315134 +0 -0.057096 0.0367655 +0 -0.057096 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.139" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.139 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0315134 +0 -0.0622866 0.0262611 +0 -0.057096 0.0315134 +0 -0.057096 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.140" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.140 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0262611 +0 -0.0622866 0.0210089 +0 -0.057096 0.0262611 +0 -0.057096 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.141" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.141 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0210089 +0 -0.0622866 0.0157567 +0 -0.057096 0.0210089 +0 -0.057096 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.142" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.142 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0157567 +0 -0.0622866 0.0105045 +0 -0.057096 0.0157567 +0 -0.057096 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.143" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.143 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.0105045 +0 -0.0622866 0.00525225 +0 -0.057096 0.0105045 +0 -0.057096 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.144" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.144 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0.00525225 +0 -0.0622866 0 +0 -0.057096 0.00525225 +0 -0.057096 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.145" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.145 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 0 +0 -0.0622866 -0.0052522 +0 -0.057096 0 +0 -0.057096 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.146" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.146 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0052522 +0 -0.0622866 -0.0105045 +0 -0.057096 -0.0052522 +0 -0.057096 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.147" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.147 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0105045 +0 -0.0622866 -0.0157566 +0 -0.057096 -0.0105045 +0 -0.057096 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.148" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.148 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0157566 +0 -0.0622866 -0.0210089 +0 -0.057096 -0.0157566 +0 -0.057096 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.149" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.149 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0210089 +0 -0.0622866 -0.0262611 +0 -0.057096 -0.0210089 +0 -0.057096 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.150" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.150 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0262611 +0 -0.0622866 -0.0315133 +0 -0.057096 -0.0262611 +0 -0.057096 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.151" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.151 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0315133 +0 -0.0622866 -0.0367655 +0 -0.057096 -0.0315133 +0 -0.057096 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.152" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.152 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0367655 +0 -0.0622866 -0.0420177 +0 -0.057096 -0.0367655 +0 -0.057096 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.153" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.153 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0420177 +0 -0.0622866 -0.04727 +0 -0.057096 -0.0420177 +0 -0.057096 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.154" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.154 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.04727 +0 -0.0622866 -0.0525221 +0 -0.057096 -0.04727 +0 -0.057096 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.155" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.155 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0525221 +0 -0.0622866 -0.0577744 +0 -0.057096 -0.0525221 +0 -0.057096 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.156" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.156 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0577744 +0 -0.0622866 -0.0630266 +0 -0.057096 -0.0577744 +0 -0.057096 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.157" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.157 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0622866 -0.0630266 +0 -0.0622866 -0.0682789 +0 -0.057096 -0.0630266 +0 -0.057096 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.161" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.161 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0840355 +0 -0.057096 0.0787832 +0 -0.0519056 0.0840355 +0 -0.0519056 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.162" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.162 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0787832 +0 -0.057096 0.0735311 +0 -0.0519056 0.0787832 +0 -0.0519056 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.163" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.163 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0735311 +0 -0.057096 0.0682789 +0 -0.0519056 0.0735311 +0 -0.0519056 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.164" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.164 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0682789 +0 -0.057096 0.0630266 +0 -0.0519056 0.0682789 +0 -0.0519056 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.165" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.165 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0630266 +0 -0.057096 0.0577744 +0 -0.0519056 0.0630266 +0 -0.0519056 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.166" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.166 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0577744 +0 -0.057096 0.0525222 +0 -0.0519056 0.0577744 +0 -0.0519056 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.167" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.167 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0525222 +0 -0.057096 0.04727 +0 -0.0519056 0.0525222 +0 -0.0519056 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.168" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.168 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.04727 +0 -0.057096 0.0420177 +0 -0.0519056 0.04727 +0 -0.0519056 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.169" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.169 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0420177 +0 -0.057096 0.0367655 +0 -0.0519056 0.0420177 +0 -0.0519056 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.170" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.170 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0367655 +0 -0.057096 0.0315134 +0 -0.0519056 0.0367655 +0 -0.0519056 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.171" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.171 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0315134 +0 -0.057096 0.0262611 +0 -0.0519056 0.0315134 +0 -0.0519056 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.172" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.172 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0262611 +0 -0.057096 0.0210089 +0 -0.0519056 0.0262611 +0 -0.0519056 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.173" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.173 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0210089 +0 -0.057096 0.0157567 +0 -0.0519056 0.0210089 +0 -0.0519056 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.174" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.174 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0157567 +0 -0.057096 0.0105045 +0 -0.0519056 0.0157567 +0 -0.0519056 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.175" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.175 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.0105045 +0 -0.057096 0.00525225 +0 -0.0519056 0.0105045 +0 -0.0519056 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.176" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.176 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0.00525225 +0 -0.057096 0 +0 -0.0519056 0.00525225 +0 -0.0519056 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.177" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.177 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 0 +0 -0.057096 -0.0052522 +0 -0.0519056 0 +0 -0.0519056 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.178" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.178 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0052522 +0 -0.057096 -0.0105045 +0 -0.0519056 -0.0052522 +0 -0.0519056 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.179" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.179 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0105045 +0 -0.057096 -0.0157566 +0 -0.0519056 -0.0105045 +0 -0.0519056 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.180" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.180 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0157566 +0 -0.057096 -0.0210089 +0 -0.0519056 -0.0157566 +0 -0.0519056 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.181" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.181 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0210089 +0 -0.057096 -0.0262611 +0 -0.0519056 -0.0210089 +0 -0.0519056 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.182" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.182 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0262611 +0 -0.057096 -0.0315133 +0 -0.0519056 -0.0262611 +0 -0.0519056 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.183" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.183 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0315133 +0 -0.057096 -0.0367655 +0 -0.0519056 -0.0315133 +0 -0.0519056 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.184" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.184 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0367655 +0 -0.057096 -0.0420177 +0 -0.0519056 -0.0367655 +0 -0.0519056 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.185" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.185 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0420177 +0 -0.057096 -0.04727 +0 -0.0519056 -0.0420177 +0 -0.0519056 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.186" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.186 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.04727 +0 -0.057096 -0.0525221 +0 -0.0519056 -0.04727 +0 -0.0519056 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.187" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.187 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0525221 +0 -0.057096 -0.0577744 +0 -0.0519056 -0.0525221 +0 -0.0519056 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.188" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.188 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0577744 +0 -0.057096 -0.0630266 +0 -0.0519056 -0.0577744 +0 -0.0519056 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.189" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.189 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.057096 -0.0630266 +0 -0.057096 -0.0682789 +0 -0.0519056 -0.0630266 +0 -0.0519056 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.193" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.193 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0840355 +0 -0.0519056 0.0787832 +0 -0.046715 0.0840355 +0 -0.046715 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.194" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.194 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0787832 +0 -0.0519056 0.0735311 +0 -0.046715 0.0787832 +0 -0.046715 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.195" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.195 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0735311 +0 -0.0519056 0.0682789 +0 -0.046715 0.0735311 +0 -0.046715 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.196" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.196 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0682789 +0 -0.0519056 0.0630266 +0 -0.046715 0.0682789 +0 -0.046715 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.197" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.197 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0630266 +0 -0.0519056 0.0577744 +0 -0.046715 0.0630266 +0 -0.046715 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.198" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.198 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0577744 +0 -0.0519056 0.0525222 +0 -0.046715 0.0577744 +0 -0.046715 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.199" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.199 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0525222 +0 -0.0519056 0.04727 +0 -0.046715 0.0525222 +0 -0.046715 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.200" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.200 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.04727 +0 -0.0519056 0.0420177 +0 -0.046715 0.04727 +0 -0.046715 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.201" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.201 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0420177 +0 -0.0519056 0.0367655 +0 -0.046715 0.0420177 +0 -0.046715 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.202" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.202 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0367655 +0 -0.0519056 0.0315134 +0 -0.046715 0.0367655 +0 -0.046715 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.203" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.203 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0315134 +0 -0.0519056 0.0262611 +0 -0.046715 0.0315134 +0 -0.046715 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.204" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.204 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0262611 +0 -0.0519056 0.0210089 +0 -0.046715 0.0262611 +0 -0.046715 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.205" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.205 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0210089 +0 -0.0519056 0.0157567 +0 -0.046715 0.0210089 +0 -0.046715 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.206" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.206 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0157567 +0 -0.0519056 0.0105045 +0 -0.046715 0.0157567 +0 -0.046715 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.207" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.207 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.0105045 +0 -0.0519056 0.00525225 +0 -0.046715 0.0105045 +0 -0.046715 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.208" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.208 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0.00525225 +0 -0.0519056 0 +0 -0.046715 0.00525225 +0 -0.046715 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.209" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.209 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 0 +0 -0.0519056 -0.0052522 +0 -0.046715 0 +0 -0.046715 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.210" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.210 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0052522 +0 -0.0519056 -0.0105045 +0 -0.046715 -0.0052522 +0 -0.046715 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.211" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.211 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0105045 +0 -0.0519056 -0.0157566 +0 -0.046715 -0.0105045 +0 -0.046715 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.212" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.212 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0157566 +0 -0.0519056 -0.0210089 +0 -0.046715 -0.0157566 +0 -0.046715 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.213" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.213 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0210089 +0 -0.0519056 -0.0262611 +0 -0.046715 -0.0210089 +0 -0.046715 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.214" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.214 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0262611 +0 -0.0519056 -0.0315133 +0 -0.046715 -0.0262611 +0 -0.046715 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.215" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.215 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0315133 +0 -0.0519056 -0.0367655 +0 -0.046715 -0.0315133 +0 -0.046715 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.216" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.216 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0367655 +0 -0.0519056 -0.0420177 +0 -0.046715 -0.0367655 +0 -0.046715 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.217" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.217 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0420177 +0 -0.0519056 -0.04727 +0 -0.046715 -0.0420177 +0 -0.046715 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.218" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.218 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.04727 +0 -0.0519056 -0.0525221 +0 -0.046715 -0.04727 +0 -0.046715 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.219" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.219 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0525221 +0 -0.0519056 -0.0577744 +0 -0.046715 -0.0525221 +0 -0.046715 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.220" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.220 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0577744 +0 -0.0519056 -0.0630266 +0 -0.046715 -0.0577744 +0 -0.046715 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.221" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.221 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0519056 -0.0630266 +0 -0.0519056 -0.0682789 +0 -0.046715 -0.0630266 +0 -0.046715 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.225" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.225 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0840355 +0 -0.046715 0.0787832 +0 -0.0415245 0.0840355 +0 -0.0415245 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.226" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.226 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0787832 +0 -0.046715 0.0735311 +0 -0.0415245 0.0787832 +0 -0.0415245 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.227" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.227 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0735311 +0 -0.046715 0.0682789 +0 -0.0415245 0.0735311 +0 -0.0415245 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.228" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.228 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0682789 +0 -0.046715 0.0630266 +0 -0.0415245 0.0682789 +0 -0.0415245 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.229" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.229 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0630266 +0 -0.046715 0.0577744 +0 -0.0415245 0.0630266 +0 -0.0415245 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.230" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.230 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0577744 +0 -0.046715 0.0525222 +0 -0.0415245 0.0577744 +0 -0.0415245 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.231" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.231 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0525222 +0 -0.046715 0.04727 +0 -0.0415245 0.0525222 +0 -0.0415245 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.232" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.232 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.04727 +0 -0.046715 0.0420177 +0 -0.0415245 0.04727 +0 -0.0415245 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.233" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.233 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0420177 +0 -0.046715 0.0367655 +0 -0.0415245 0.0420177 +0 -0.0415245 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.234" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.234 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0367655 +0 -0.046715 0.0315134 +0 -0.0415245 0.0367655 +0 -0.0415245 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.235" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.235 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0315134 +0 -0.046715 0.0262611 +0 -0.0415245 0.0315134 +0 -0.0415245 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.236" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.236 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0262611 +0 -0.046715 0.0210089 +0 -0.0415245 0.0262611 +0 -0.0415245 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.237" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.237 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0210089 +0 -0.046715 0.0157567 +0 -0.0415245 0.0210089 +0 -0.0415245 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.238" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.238 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0157567 +0 -0.046715 0.0105045 +0 -0.0415245 0.0157567 +0 -0.0415245 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.239" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.239 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.0105045 +0 -0.046715 0.00525225 +0 -0.0415245 0.0105045 +0 -0.0415245 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.240" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.240 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0.00525225 +0 -0.046715 0 +0 -0.0415245 0.00525225 +0 -0.0415245 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.241" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.241 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 0 +0 -0.046715 -0.0052522 +0 -0.0415245 0 +0 -0.0415245 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.242" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.242 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0052522 +0 -0.046715 -0.0105045 +0 -0.0415245 -0.0052522 +0 -0.0415245 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.243" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.243 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0105045 +0 -0.046715 -0.0157566 +0 -0.0415245 -0.0105045 +0 -0.0415245 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.244" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.244 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0157566 +0 -0.046715 -0.0210089 +0 -0.0415245 -0.0157566 +0 -0.0415245 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.245" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.245 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0210089 +0 -0.046715 -0.0262611 +0 -0.0415245 -0.0210089 +0 -0.0415245 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.246" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.246 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0262611 +0 -0.046715 -0.0315133 +0 -0.0415245 -0.0262611 +0 -0.0415245 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.247" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.247 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0315133 +0 -0.046715 -0.0367655 +0 -0.0415245 -0.0315133 +0 -0.0415245 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.248" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.248 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0367655 +0 -0.046715 -0.0420177 +0 -0.0415245 -0.0367655 +0 -0.0415245 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.249" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.249 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0420177 +0 -0.046715 -0.04727 +0 -0.0415245 -0.0420177 +0 -0.0415245 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.250" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.250 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.04727 +0 -0.046715 -0.0525221 +0 -0.0415245 -0.04727 +0 -0.0415245 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.251" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.251 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0525221 +0 -0.046715 -0.0577744 +0 -0.0415245 -0.0525221 +0 -0.0415245 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.252" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.252 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0577744 +0 -0.046715 -0.0630266 +0 -0.0415245 -0.0577744 +0 -0.0415245 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.253" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.253 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.046715 -0.0630266 +0 -0.046715 -0.0682789 +0 -0.0415245 -0.0630266 +0 -0.0415245 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.257" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.257 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0840355 +0 -0.0415245 0.0787832 +0 -0.0363339 0.0840355 +0 -0.0363339 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.258" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.258 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0787832 +0 -0.0415245 0.0735311 +0 -0.0363339 0.0787832 +0 -0.0363339 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.259" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.259 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0735311 +0 -0.0415245 0.0682789 +0 -0.0363339 0.0735311 +0 -0.0363339 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.260" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.260 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0682789 +0 -0.0415245 0.0630266 +0 -0.0363339 0.0682789 +0 -0.0363339 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.261" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.261 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0630266 +0 -0.0415245 0.0577744 +0 -0.0363339 0.0630266 +0 -0.0363339 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.262" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.262 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0577744 +0 -0.0415245 0.0525222 +0 -0.0363339 0.0577744 +0 -0.0363339 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.263" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.263 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0525222 +0 -0.0415245 0.04727 +0 -0.0363339 0.0525222 +0 -0.0363339 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.264" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.264 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.04727 +0 -0.0415245 0.0420177 +0 -0.0363339 0.04727 +0 -0.0363339 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.265" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.265 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0420177 +0 -0.0415245 0.0367655 +0 -0.0363339 0.0420177 +0 -0.0363339 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.266" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.266 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0367655 +0 -0.0415245 0.0315134 +0 -0.0363339 0.0367655 +0 -0.0363339 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.267" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.267 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0315134 +0 -0.0415245 0.0262611 +0 -0.0363339 0.0315134 +0 -0.0363339 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.268" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.268 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0262611 +0 -0.0415245 0.0210089 +0 -0.0363339 0.0262611 +0 -0.0363339 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.269" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.269 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0210089 +0 -0.0415245 0.0157567 +0 -0.0363339 0.0210089 +0 -0.0363339 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.270" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.270 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0157567 +0 -0.0415245 0.0105045 +0 -0.0363339 0.0157567 +0 -0.0363339 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.271" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.271 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.0105045 +0 -0.0415245 0.00525225 +0 -0.0363339 0.0105045 +0 -0.0363339 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.272" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.272 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0.00525225 +0 -0.0415245 0 +0 -0.0363339 0.00525225 +0 -0.0363339 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.273" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.273 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 0 +0 -0.0415245 -0.0052522 +0 -0.0363339 0 +0 -0.0363339 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.274" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.274 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0052522 +0 -0.0415245 -0.0105045 +0 -0.0363339 -0.0052522 +0 -0.0363339 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.275" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.275 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0105045 +0 -0.0415245 -0.0157566 +0 -0.0363339 -0.0105045 +0 -0.0363339 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.276" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.276 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0157566 +0 -0.0415245 -0.0210089 +0 -0.0363339 -0.0157566 +0 -0.0363339 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.277" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.277 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0210089 +0 -0.0415245 -0.0262611 +0 -0.0363339 -0.0210089 +0 -0.0363339 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.278" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.278 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0262611 +0 -0.0415245 -0.0315133 +0 -0.0363339 -0.0262611 +0 -0.0363339 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.279" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.279 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0315133 +0 -0.0415245 -0.0367655 +0 -0.0363339 -0.0315133 +0 -0.0363339 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.280" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.280 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0367655 +0 -0.0415245 -0.0420177 +0 -0.0363339 -0.0367655 +0 -0.0363339 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.281" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.281 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0420177 +0 -0.0415245 -0.04727 +0 -0.0363339 -0.0420177 +0 -0.0363339 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.282" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.282 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.04727 +0 -0.0415245 -0.0525221 +0 -0.0363339 -0.04727 +0 -0.0363339 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.283" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.283 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0525221 +0 -0.0415245 -0.0577744 +0 -0.0363339 -0.0525221 +0 -0.0363339 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.284" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.284 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0577744 +0 -0.0415245 -0.0630266 +0 -0.0363339 -0.0577744 +0 -0.0363339 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.285" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.285 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0415245 -0.0630266 +0 -0.0415245 -0.0682789 +0 -0.0363339 -0.0630266 +0 -0.0363339 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.289" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.289 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0840355 +0 -0.0363339 0.0787832 +0 -0.0311434 0.0840355 +0 -0.0311434 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.290" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.290 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0787832 +0 -0.0363339 0.0735311 +0 -0.0311434 0.0787832 +0 -0.0311434 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.291" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.291 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0735311 +0 -0.0363339 0.0682789 +0 -0.0311434 0.0735311 +0 -0.0311434 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.292" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.292 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0682789 +0 -0.0363339 0.0630266 +0 -0.0311434 0.0682789 +0 -0.0311434 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.293" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.293 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0630266 +0 -0.0363339 0.0577744 +0 -0.0311434 0.0630266 +0 -0.0311434 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.294" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.294 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0577744 +0 -0.0363339 0.0525222 +0 -0.0311434 0.0577744 +0 -0.0311434 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.295" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.295 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0525222 +0 -0.0363339 0.04727 +0 -0.0311434 0.0525222 +0 -0.0311434 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.296" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.296 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.04727 +0 -0.0363339 0.0420177 +0 -0.0311434 0.04727 +0 -0.0311434 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.297" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.297 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0420177 +0 -0.0363339 0.0367655 +0 -0.0311434 0.0420177 +0 -0.0311434 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.298" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.298 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0367655 +0 -0.0363339 0.0315134 +0 -0.0311434 0.0367655 +0 -0.0311434 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.299" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.299 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0315134 +0 -0.0363339 0.0262611 +0 -0.0311434 0.0315134 +0 -0.0311434 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.300" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.300 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0262611 +0 -0.0363339 0.0210089 +0 -0.0311434 0.0262611 +0 -0.0311434 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.301" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.301 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0210089 +0 -0.0363339 0.0157567 +0 -0.0311434 0.0210089 +0 -0.0311434 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.302" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.302 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0157567 +0 -0.0363339 0.0105045 +0 -0.0311434 0.0157567 +0 -0.0311434 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.303" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.303 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.0105045 +0 -0.0363339 0.00525225 +0 -0.0311434 0.0105045 +0 -0.0311434 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.304" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.304 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0.00525225 +0 -0.0363339 0 +0 -0.0311434 0.00525225 +0 -0.0311434 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.305" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.305 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 0 +0 -0.0363339 -0.0052522 +0 -0.0311434 0 +0 -0.0311434 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.306" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.306 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0052522 +0 -0.0363339 -0.0105045 +0 -0.0311434 -0.0052522 +0 -0.0311434 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.307" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.307 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0105045 +0 -0.0363339 -0.0157566 +0 -0.0311434 -0.0105045 +0 -0.0311434 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.308" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.308 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0157566 +0 -0.0363339 -0.0210089 +0 -0.0311434 -0.0157566 +0 -0.0311434 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.309" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.309 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0210089 +0 -0.0363339 -0.0262611 +0 -0.0311434 -0.0210089 +0 -0.0311434 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.310" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.310 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0262611 +0 -0.0363339 -0.0315133 +0 -0.0311434 -0.0262611 +0 -0.0311434 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.311" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.311 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0315133 +0 -0.0363339 -0.0367655 +0 -0.0311434 -0.0315133 +0 -0.0311434 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.312" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.312 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0367655 +0 -0.0363339 -0.0420177 +0 -0.0311434 -0.0367655 +0 -0.0311434 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.313" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.313 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0420177 +0 -0.0363339 -0.04727 +0 -0.0311434 -0.0420177 +0 -0.0311434 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.314" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.314 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.04727 +0 -0.0363339 -0.0525221 +0 -0.0311434 -0.04727 +0 -0.0311434 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.315" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.315 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0525221 +0 -0.0363339 -0.0577744 +0 -0.0311434 -0.0525221 +0 -0.0311434 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.316" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.316 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0577744 +0 -0.0363339 -0.0630266 +0 -0.0311434 -0.0577744 +0 -0.0311434 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.317" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.317 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0363339 -0.0630266 +0 -0.0363339 -0.0682789 +0 -0.0311434 -0.0630266 +0 -0.0311434 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.321" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.321 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0840355 +0 -0.0311434 0.0787832 +0 -0.0259528 0.0840355 +0 -0.0259528 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.322" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.322 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0787832 +0 -0.0311434 0.0735311 +0 -0.0259528 0.0787832 +0 -0.0259528 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.323" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.323 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0735311 +0 -0.0311434 0.0682789 +0 -0.0259528 0.0735311 +0 -0.0259528 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.324" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.324 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0682789 +0 -0.0311434 0.0630266 +0 -0.0259528 0.0682789 +0 -0.0259528 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.325" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.325 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0630266 +0 -0.0311434 0.0577744 +0 -0.0259528 0.0630266 +0 -0.0259528 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.326" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.326 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0577744 +0 -0.0311434 0.0525222 +0 -0.0259528 0.0577744 +0 -0.0259528 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.327" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.327 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0525222 +0 -0.0311434 0.04727 +0 -0.0259528 0.0525222 +0 -0.0259528 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.328" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.328 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.04727 +0 -0.0311434 0.0420177 +0 -0.0259528 0.04727 +0 -0.0259528 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.329" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.329 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0420177 +0 -0.0311434 0.0367655 +0 -0.0259528 0.0420177 +0 -0.0259528 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.330" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.330 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0367655 +0 -0.0311434 0.0315134 +0 -0.0259528 0.0367655 +0 -0.0259528 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.331" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.331 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0315134 +0 -0.0311434 0.0262611 +0 -0.0259528 0.0315134 +0 -0.0259528 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.332" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.332 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0262611 +0 -0.0311434 0.0210089 +0 -0.0259528 0.0262611 +0 -0.0259528 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.333" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.333 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0210089 +0 -0.0311434 0.0157567 +0 -0.0259528 0.0210089 +0 -0.0259528 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.334" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.334 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0157567 +0 -0.0311434 0.0105045 +0 -0.0259528 0.0157567 +0 -0.0259528 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.335" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.335 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.0105045 +0 -0.0311434 0.00525225 +0 -0.0259528 0.0105045 +0 -0.0259528 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.336" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.336 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0.00525225 +0 -0.0311434 0 +0 -0.0259528 0.00525225 +0 -0.0259528 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.337" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.337 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 0 +0 -0.0311434 -0.0052522 +0 -0.0259528 0 +0 -0.0259528 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.338" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.338 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0052522 +0 -0.0311434 -0.0105045 +0 -0.0259528 -0.0052522 +0 -0.0259528 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.339" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.339 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0105045 +0 -0.0311434 -0.0157566 +0 -0.0259528 -0.0105045 +0 -0.0259528 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.340" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.340 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0157566 +0 -0.0311434 -0.0210089 +0 -0.0259528 -0.0157566 +0 -0.0259528 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.341" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.341 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0210089 +0 -0.0311434 -0.0262611 +0 -0.0259528 -0.0210089 +0 -0.0259528 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.342" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.342 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0262611 +0 -0.0311434 -0.0315133 +0 -0.0259528 -0.0262611 +0 -0.0259528 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.343" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.343 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0315133 +0 -0.0311434 -0.0367655 +0 -0.0259528 -0.0315133 +0 -0.0259528 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.344" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.344 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0367655 +0 -0.0311434 -0.0420177 +0 -0.0259528 -0.0367655 +0 -0.0259528 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.345" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.345 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0420177 +0 -0.0311434 -0.04727 +0 -0.0259528 -0.0420177 +0 -0.0259528 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.346" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.346 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.04727 +0 -0.0311434 -0.0525221 +0 -0.0259528 -0.04727 +0 -0.0259528 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.347" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.347 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0525221 +0 -0.0311434 -0.0577744 +0 -0.0259528 -0.0525221 +0 -0.0259528 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.348" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.348 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0577744 +0 -0.0311434 -0.0630266 +0 -0.0259528 -0.0577744 +0 -0.0259528 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.349" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.349 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0311434 -0.0630266 +0 -0.0311434 -0.0682789 +0 -0.0259528 -0.0630266 +0 -0.0259528 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.353" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.353 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0840355 +0 -0.0259528 0.0787832 +0 -0.0207622 0.0840355 +0 -0.0207622 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.354" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.354 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0787832 +0 -0.0259528 0.0735311 +0 -0.0207622 0.0787832 +0 -0.0207622 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.355" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.355 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0735311 +0 -0.0259528 0.0682789 +0 -0.0207622 0.0735311 +0 -0.0207622 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.356" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.356 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0682789 +0 -0.0259528 0.0630266 +0 -0.0207622 0.0682789 +0 -0.0207622 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.357" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.357 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0630266 +0 -0.0259528 0.0577744 +0 -0.0207622 0.0630266 +0 -0.0207622 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.358" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.358 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0577744 +0 -0.0259528 0.0525222 +0 -0.0207622 0.0577744 +0 -0.0207622 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.359" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.359 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0525222 +0 -0.0259528 0.04727 +0 -0.0207622 0.0525222 +0 -0.0207622 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.360" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.360 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.04727 +0 -0.0259528 0.0420177 +0 -0.0207622 0.04727 +0 -0.0207622 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.361" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.361 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0420177 +0 -0.0259528 0.0367655 +0 -0.0207622 0.0420177 +0 -0.0207622 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.362" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.362 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0367655 +0 -0.0259528 0.0315134 +0 -0.0207622 0.0367655 +0 -0.0207622 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.363" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.363 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0315134 +0 -0.0259528 0.0262611 +0 -0.0207622 0.0315134 +0 -0.0207622 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.364" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.364 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0262611 +0 -0.0259528 0.0210089 +0 -0.0207622 0.0262611 +0 -0.0207622 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.365" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.365 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0210089 +0 -0.0259528 0.0157567 +0 -0.0207622 0.0210089 +0 -0.0207622 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.366" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.366 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0157567 +0 -0.0259528 0.0105045 +0 -0.0207622 0.0157567 +0 -0.0207622 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.367" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.367 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.0105045 +0 -0.0259528 0.00525225 +0 -0.0207622 0.0105045 +0 -0.0207622 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.368" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.368 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0.00525225 +0 -0.0259528 0 +0 -0.0207622 0.00525225 +0 -0.0207622 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.369" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.369 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 0 +0 -0.0259528 -0.0052522 +0 -0.0207622 0 +0 -0.0207622 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.370" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.370 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0052522 +0 -0.0259528 -0.0105045 +0 -0.0207622 -0.0052522 +0 -0.0207622 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.371" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.371 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0105045 +0 -0.0259528 -0.0157566 +0 -0.0207622 -0.0105045 +0 -0.0207622 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.372" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.372 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0157566 +0 -0.0259528 -0.0210089 +0 -0.0207622 -0.0157566 +0 -0.0207622 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.373" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.373 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0210089 +0 -0.0259528 -0.0262611 +0 -0.0207622 -0.0210089 +0 -0.0207622 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.374" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.374 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0262611 +0 -0.0259528 -0.0315133 +0 -0.0207622 -0.0262611 +0 -0.0207622 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.375" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.375 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0315133 +0 -0.0259528 -0.0367655 +0 -0.0207622 -0.0315133 +0 -0.0207622 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.376" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.376 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0367655 +0 -0.0259528 -0.0420177 +0 -0.0207622 -0.0367655 +0 -0.0207622 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.377" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.377 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0420177 +0 -0.0259528 -0.04727 +0 -0.0207622 -0.0420177 +0 -0.0207622 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.378" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.378 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.04727 +0 -0.0259528 -0.0525221 +0 -0.0207622 -0.04727 +0 -0.0207622 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.379" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.379 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0525221 +0 -0.0259528 -0.0577744 +0 -0.0207622 -0.0525221 +0 -0.0207622 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.380" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.380 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0577744 +0 -0.0259528 -0.0630266 +0 -0.0207622 -0.0577744 +0 -0.0207622 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.381" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.381 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0259528 -0.0630266 +0 -0.0259528 -0.0682789 +0 -0.0207622 -0.0630266 +0 -0.0207622 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.385" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.385 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0840355 +0 -0.0207622 0.0787832 +0 -0.0155717 0.0840355 +0 -0.0155717 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.386" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.386 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0787832 +0 -0.0207622 0.0735311 +0 -0.0155717 0.0787832 +0 -0.0155717 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.387" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.387 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0735311 +0 -0.0207622 0.0682789 +0 -0.0155717 0.0735311 +0 -0.0155717 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.388" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.388 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0682789 +0 -0.0207622 0.0630266 +0 -0.0155717 0.0682789 +0 -0.0155717 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.389" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.389 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0630266 +0 -0.0207622 0.0577744 +0 -0.0155717 0.0630266 +0 -0.0155717 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.390" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.390 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0577744 +0 -0.0207622 0.0525222 +0 -0.0155717 0.0577744 +0 -0.0155717 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.391" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.391 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0525222 +0 -0.0207622 0.04727 +0 -0.0155717 0.0525222 +0 -0.0155717 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.392" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.392 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.04727 +0 -0.0207622 0.0420177 +0 -0.0155717 0.04727 +0 -0.0155717 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.393" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.393 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0420177 +0 -0.0207622 0.0367655 +0 -0.0155717 0.0420177 +0 -0.0155717 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.394" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.394 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0367655 +0 -0.0207622 0.0315134 +0 -0.0155717 0.0367655 +0 -0.0155717 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.395" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.395 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0315134 +0 -0.0207622 0.0262611 +0 -0.0155717 0.0315134 +0 -0.0155717 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.396" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.396 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0262611 +0 -0.0207622 0.0210089 +0 -0.0155717 0.0262611 +0 -0.0155717 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.397" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.397 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0210089 +0 -0.0207622 0.0157567 +0 -0.0155717 0.0210089 +0 -0.0155717 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.398" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.398 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0157567 +0 -0.0207622 0.0105045 +0 -0.0155717 0.0157567 +0 -0.0155717 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.399" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.399 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.0105045 +0 -0.0207622 0.00525225 +0 -0.0155717 0.0105045 +0 -0.0155717 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.400" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.400 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0.00525225 +0 -0.0207622 0 +0 -0.0155717 0.00525225 +0 -0.0155717 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.401" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.401 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 0 +0 -0.0207622 -0.0052522 +0 -0.0155717 0 +0 -0.0155717 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.402" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.402 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0052522 +0 -0.0207622 -0.0105045 +0 -0.0155717 -0.0052522 +0 -0.0155717 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.403" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.403 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0105045 +0 -0.0207622 -0.0157566 +0 -0.0155717 -0.0105045 +0 -0.0155717 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.404" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.404 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0157566 +0 -0.0207622 -0.0210089 +0 -0.0155717 -0.0157566 +0 -0.0155717 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.405" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.405 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0210089 +0 -0.0207622 -0.0262611 +0 -0.0155717 -0.0210089 +0 -0.0155717 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.406" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.406 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0262611 +0 -0.0207622 -0.0315133 +0 -0.0155717 -0.0262611 +0 -0.0155717 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.407" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.407 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0315133 +0 -0.0207622 -0.0367655 +0 -0.0155717 -0.0315133 +0 -0.0155717 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.408" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.408 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0367655 +0 -0.0207622 -0.0420177 +0 -0.0155717 -0.0367655 +0 -0.0155717 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.409" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.409 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0420177 +0 -0.0207622 -0.04727 +0 -0.0155717 -0.0420177 +0 -0.0155717 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.410" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.410 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.04727 +0 -0.0207622 -0.0525221 +0 -0.0155717 -0.04727 +0 -0.0155717 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.411" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.411 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0525221 +0 -0.0207622 -0.0577744 +0 -0.0155717 -0.0525221 +0 -0.0155717 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.412" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.412 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0577744 +0 -0.0207622 -0.0630266 +0 -0.0155717 -0.0577744 +0 -0.0155717 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.413" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.413 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0207622 -0.0630266 +0 -0.0207622 -0.0682789 +0 -0.0155717 -0.0630266 +0 -0.0155717 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.417" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.417 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0840355 +0 -0.0155717 0.0787832 +0 -0.0103811 0.0840355 +0 -0.0103811 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.418" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.418 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0787832 +0 -0.0155717 0.0735311 +0 -0.0103811 0.0787832 +0 -0.0103811 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.419" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.419 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0735311 +0 -0.0155717 0.0682789 +0 -0.0103811 0.0735311 +0 -0.0103811 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.420" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.420 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0682789 +0 -0.0155717 0.0630266 +0 -0.0103811 0.0682789 +0 -0.0103811 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.421" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.421 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0630266 +0 -0.0155717 0.0577744 +0 -0.0103811 0.0630266 +0 -0.0103811 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.422" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.422 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0577744 +0 -0.0155717 0.0525222 +0 -0.0103811 0.0577744 +0 -0.0103811 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.423" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.423 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0525222 +0 -0.0155717 0.04727 +0 -0.0103811 0.0525222 +0 -0.0103811 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.424" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.424 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.04727 +0 -0.0155717 0.0420177 +0 -0.0103811 0.04727 +0 -0.0103811 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.425" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.425 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0420177 +0 -0.0155717 0.0367655 +0 -0.0103811 0.0420177 +0 -0.0103811 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.426" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.426 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0367655 +0 -0.0155717 0.0315134 +0 -0.0103811 0.0367655 +0 -0.0103811 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.427" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.427 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0315134 +0 -0.0155717 0.0262611 +0 -0.0103811 0.0315134 +0 -0.0103811 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.428" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.428 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0262611 +0 -0.0155717 0.0210089 +0 -0.0103811 0.0262611 +0 -0.0103811 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.429" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.429 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0210089 +0 -0.0155717 0.0157567 +0 -0.0103811 0.0210089 +0 -0.0103811 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.430" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.430 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0157567 +0 -0.0155717 0.0105045 +0 -0.0103811 0.0157567 +0 -0.0103811 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.431" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.431 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.0105045 +0 -0.0155717 0.00525225 +0 -0.0103811 0.0105045 +0 -0.0103811 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.432" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.432 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0.00525225 +0 -0.0155717 0 +0 -0.0103811 0.00525225 +0 -0.0103811 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.433" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.433 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 0 +0 -0.0155717 -0.0052522 +0 -0.0103811 0 +0 -0.0103811 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.434" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.434 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0052522 +0 -0.0155717 -0.0105045 +0 -0.0103811 -0.0052522 +0 -0.0103811 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.435" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.435 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0105045 +0 -0.0155717 -0.0157566 +0 -0.0103811 -0.0105045 +0 -0.0103811 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.436" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.436 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0157566 +0 -0.0155717 -0.0210089 +0 -0.0103811 -0.0157566 +0 -0.0103811 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.437" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.437 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0210089 +0 -0.0155717 -0.0262611 +0 -0.0103811 -0.0210089 +0 -0.0103811 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.438" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.438 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0262611 +0 -0.0155717 -0.0315133 +0 -0.0103811 -0.0262611 +0 -0.0103811 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.439" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.439 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0315133 +0 -0.0155717 -0.0367655 +0 -0.0103811 -0.0315133 +0 -0.0103811 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.440" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.440 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0367655 +0 -0.0155717 -0.0420177 +0 -0.0103811 -0.0367655 +0 -0.0103811 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.441" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.441 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0420177 +0 -0.0155717 -0.04727 +0 -0.0103811 -0.0420177 +0 -0.0103811 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.442" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.442 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.04727 +0 -0.0155717 -0.0525221 +0 -0.0103811 -0.04727 +0 -0.0103811 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.443" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.443 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0525221 +0 -0.0155717 -0.0577744 +0 -0.0103811 -0.0525221 +0 -0.0103811 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.444" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.444 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0577744 +0 -0.0155717 -0.0630266 +0 -0.0103811 -0.0577744 +0 -0.0103811 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.445" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.445 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0155717 -0.0630266 +0 -0.0155717 -0.0682789 +0 -0.0103811 -0.0630266 +0 -0.0103811 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.449" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.449 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0840355 +0 -0.0103811 0.0787832 +0 -0.00519056 0.0840355 +0 -0.00519056 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.450" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.450 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0787832 +0 -0.0103811 0.0735311 +0 -0.00519056 0.0787832 +0 -0.00519056 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.451" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.451 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0735311 +0 -0.0103811 0.0682789 +0 -0.00519056 0.0735311 +0 -0.00519056 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.452" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.452 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0682789 +0 -0.0103811 0.0630266 +0 -0.00519056 0.0682789 +0 -0.00519056 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.453" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.453 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0630266 +0 -0.0103811 0.0577744 +0 -0.00519056 0.0630266 +0 -0.00519056 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.454" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.454 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0577744 +0 -0.0103811 0.0525222 +0 -0.00519056 0.0577744 +0 -0.00519056 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.455" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.455 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0525222 +0 -0.0103811 0.04727 +0 -0.00519056 0.0525222 +0 -0.00519056 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.456" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.456 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.04727 +0 -0.0103811 0.0420177 +0 -0.00519056 0.04727 +0 -0.00519056 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.457" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.457 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0420177 +0 -0.0103811 0.0367655 +0 -0.00519056 0.0420177 +0 -0.00519056 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.458" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.458 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0367655 +0 -0.0103811 0.0315134 +0 -0.00519056 0.0367655 +0 -0.00519056 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.459" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.459 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0315134 +0 -0.0103811 0.0262611 +0 -0.00519056 0.0315134 +0 -0.00519056 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.460" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.460 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0262611 +0 -0.0103811 0.0210089 +0 -0.00519056 0.0262611 +0 -0.00519056 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.461" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.461 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0210089 +0 -0.0103811 0.0157567 +0 -0.00519056 0.0210089 +0 -0.00519056 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.462" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.462 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0157567 +0 -0.0103811 0.0105045 +0 -0.00519056 0.0157567 +0 -0.00519056 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.463" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.463 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.0105045 +0 -0.0103811 0.00525225 +0 -0.00519056 0.0105045 +0 -0.00519056 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.464" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.464 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0.00525225 +0 -0.0103811 0 +0 -0.00519056 0.00525225 +0 -0.00519056 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.465" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.465 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 0 +0 -0.0103811 -0.0052522 +0 -0.00519056 0 +0 -0.00519056 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.466" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.466 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0052522 +0 -0.0103811 -0.0105045 +0 -0.00519056 -0.0052522 +0 -0.00519056 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.467" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.467 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0105045 +0 -0.0103811 -0.0157566 +0 -0.00519056 -0.0105045 +0 -0.00519056 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.468" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.468 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0157566 +0 -0.0103811 -0.0210089 +0 -0.00519056 -0.0157566 +0 -0.00519056 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.469" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.469 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0210089 +0 -0.0103811 -0.0262611 +0 -0.00519056 -0.0210089 +0 -0.00519056 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.470" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.470 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0262611 +0 -0.0103811 -0.0315133 +0 -0.00519056 -0.0262611 +0 -0.00519056 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.471" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.471 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0315133 +0 -0.0103811 -0.0367655 +0 -0.00519056 -0.0315133 +0 -0.00519056 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.472" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.472 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0367655 +0 -0.0103811 -0.0420177 +0 -0.00519056 -0.0367655 +0 -0.00519056 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.473" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.473 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0420177 +0 -0.0103811 -0.04727 +0 -0.00519056 -0.0420177 +0 -0.00519056 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.474" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.474 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.04727 +0 -0.0103811 -0.0525221 +0 -0.00519056 -0.04727 +0 -0.00519056 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.475" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.475 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0525221 +0 -0.0103811 -0.0577744 +0 -0.00519056 -0.0525221 +0 -0.00519056 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.476" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.476 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0577744 +0 -0.0103811 -0.0630266 +0 -0.00519056 -0.0577744 +0 -0.00519056 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.477" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.477 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.0103811 -0.0630266 +0 -0.0103811 -0.0682789 +0 -0.00519056 -0.0630266 +0 -0.00519056 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.481" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.481 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0840355 +0 -0.00519056 0.0787832 +0 0 0.0840355 +0 0 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.482" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.482 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0787832 +0 -0.00519056 0.0735311 +0 0 0.0787832 +0 0 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.483" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.483 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0735311 +0 -0.00519056 0.0682789 +0 0 0.0735311 +0 0 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.484" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.484 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0682789 +0 -0.00519056 0.0630266 +0 0 0.0682789 +0 0 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.485" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.485 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0630266 +0 -0.00519056 0.0577744 +0 0 0.0630266 +0 0 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.486" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.486 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0577744 +0 -0.00519056 0.0525222 +0 0 0.0577744 +0 0 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.487" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.487 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0525222 +0 -0.00519056 0.04727 +0 0 0.0525222 +0 0 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.488" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.488 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.04727 +0 -0.00519056 0.0420177 +0 0 0.04727 +0 0 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.489" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.489 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0420177 +0 -0.00519056 0.0367655 +0 0 0.0420177 +0 0 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.490" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.490 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0367655 +0 -0.00519056 0.0315134 +0 0 0.0367655 +0 0 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.491" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.491 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0315134 +0 -0.00519056 0.0262611 +0 0 0.0315134 +0 0 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.492" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.492 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0262611 +0 -0.00519056 0.0210089 +0 0 0.0262611 +0 0 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.493" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.493 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0210089 +0 -0.00519056 0.0157567 +0 0 0.0210089 +0 0 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.494" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.494 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0157567 +0 -0.00519056 0.0105045 +0 0 0.0157567 +0 0 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.495" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.495 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.0105045 +0 -0.00519056 0.00525225 +0 0 0.0105045 +0 0 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.496" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.496 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0.00525225 +0 -0.00519056 0 +0 0 0.00525225 +0 0 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.497" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.497 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 0 +0 -0.00519056 -0.0052522 +0 0 0 +0 0 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.498" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.498 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0052522 +0 -0.00519056 -0.0105045 +0 0 -0.0052522 +0 0 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.499" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.499 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0105045 +0 -0.00519056 -0.0157566 +0 0 -0.0105045 +0 0 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.500" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.500 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0157566 +0 -0.00519056 -0.0210089 +0 0 -0.0157566 +0 0 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.501" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.501 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0210089 +0 -0.00519056 -0.0262611 +0 0 -0.0210089 +0 0 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.502" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.502 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0262611 +0 -0.00519056 -0.0315133 +0 0 -0.0262611 +0 0 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.503" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.503 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0315133 +0 -0.00519056 -0.0367655 +0 0 -0.0315133 +0 0 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.504" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.504 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0367655 +0 -0.00519056 -0.0420177 +0 0 -0.0367655 +0 0 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.505" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.505 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0420177 +0 -0.00519056 -0.04727 +0 0 -0.0420177 +0 0 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.506" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.506 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.04727 +0 -0.00519056 -0.0525221 +0 0 -0.04727 +0 0 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.507" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.507 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0525221 +0 -0.00519056 -0.0577744 +0 0 -0.0525221 +0 0 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.508" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.508 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0577744 +0 -0.00519056 -0.0630266 +0 0 -0.0577744 +0 0 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.509" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.509 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 -0.00519056 -0.0630266 +0 -0.00519056 -0.0682789 +0 0 -0.0630266 +0 0 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.513" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.513 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0840355 +0 0 0.0787832 +0 0.00519056 0.0840355 +0 0.00519056 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.514" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.514 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0787832 +0 0 0.0735311 +0 0.00519056 0.0787832 +0 0.00519056 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.515" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.515 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0735311 +0 0 0.0682789 +0 0.00519056 0.0735311 +0 0.00519056 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.516" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.516 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0682789 +0 0 0.0630266 +0 0.00519056 0.0682789 +0 0.00519056 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.517" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.517 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0630266 +0 0 0.0577744 +0 0.00519056 0.0630266 +0 0.00519056 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.518" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.518 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0577744 +0 0 0.0525222 +0 0.00519056 0.0577744 +0 0.00519056 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.519" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.519 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0525222 +0 0 0.04727 +0 0.00519056 0.0525222 +0 0.00519056 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.520" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.520 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.04727 +0 0 0.0420177 +0 0.00519056 0.04727 +0 0.00519056 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.521" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.521 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0420177 +0 0 0.0367655 +0 0.00519056 0.0420177 +0 0.00519056 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.522" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.522 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0367655 +0 0 0.0315134 +0 0.00519056 0.0367655 +0 0.00519056 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.523" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.523 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0315134 +0 0 0.0262611 +0 0.00519056 0.0315134 +0 0.00519056 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.524" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.524 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0262611 +0 0 0.0210089 +0 0.00519056 0.0262611 +0 0.00519056 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.525" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.525 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0210089 +0 0 0.0157567 +0 0.00519056 0.0210089 +0 0.00519056 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.526" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.526 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0157567 +0 0 0.0105045 +0 0.00519056 0.0157567 +0 0.00519056 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.527" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.527 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.0105045 +0 0 0.00525225 +0 0.00519056 0.0105045 +0 0.00519056 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.528" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.528 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0.00525225 +0 0 0 +0 0.00519056 0.00525225 +0 0.00519056 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.529" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.529 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 0 +0 0 -0.0052522 +0 0.00519056 0 +0 0.00519056 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.530" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.530 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0052522 +0 0 -0.0105045 +0 0.00519056 -0.0052522 +0 0.00519056 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.531" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.531 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0105045 +0 0 -0.0157566 +0 0.00519056 -0.0105045 +0 0.00519056 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.532" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.532 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0157566 +0 0 -0.0210089 +0 0.00519056 -0.0157566 +0 0.00519056 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.533" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.533 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0210089 +0 0 -0.0262611 +0 0.00519056 -0.0210089 +0 0.00519056 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.534" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.534 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0262611 +0 0 -0.0315133 +0 0.00519056 -0.0262611 +0 0.00519056 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.535" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.535 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0315133 +0 0 -0.0367655 +0 0.00519056 -0.0315133 +0 0.00519056 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.536" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.536 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0367655 +0 0 -0.0420177 +0 0.00519056 -0.0367655 +0 0.00519056 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.537" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.537 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0420177 +0 0 -0.04727 +0 0.00519056 -0.0420177 +0 0.00519056 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.538" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.538 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.04727 +0 0 -0.0525221 +0 0.00519056 -0.04727 +0 0.00519056 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.539" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.539 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0525221 +0 0 -0.0577744 +0 0.00519056 -0.0525221 +0 0.00519056 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.540" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.540 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0577744 +0 0 -0.0630266 +0 0.00519056 -0.0577744 +0 0.00519056 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.541" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.541 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0 -0.0630266 +0 0 -0.0682789 +0 0.00519056 -0.0630266 +0 0.00519056 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.545" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.545 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0840355 +0 0.00519056 0.0787832 +0 0.0103811 0.0840355 +0 0.0103811 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.546" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.546 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0787832 +0 0.00519056 0.0735311 +0 0.0103811 0.0787832 +0 0.0103811 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.547" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.547 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0735311 +0 0.00519056 0.0682789 +0 0.0103811 0.0735311 +0 0.0103811 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.548" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.548 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0682789 +0 0.00519056 0.0630266 +0 0.0103811 0.0682789 +0 0.0103811 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.549" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.549 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0630266 +0 0.00519056 0.0577744 +0 0.0103811 0.0630266 +0 0.0103811 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.550" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.550 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0577744 +0 0.00519056 0.0525222 +0 0.0103811 0.0577744 +0 0.0103811 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.551" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.551 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0525222 +0 0.00519056 0.04727 +0 0.0103811 0.0525222 +0 0.0103811 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.552" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.552 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.04727 +0 0.00519056 0.0420177 +0 0.0103811 0.04727 +0 0.0103811 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.553" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.553 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0420177 +0 0.00519056 0.0367655 +0 0.0103811 0.0420177 +0 0.0103811 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.554" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.554 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0367655 +0 0.00519056 0.0315134 +0 0.0103811 0.0367655 +0 0.0103811 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.555" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.555 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0315134 +0 0.00519056 0.0262611 +0 0.0103811 0.0315134 +0 0.0103811 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.556" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.556 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0262611 +0 0.00519056 0.0210089 +0 0.0103811 0.0262611 +0 0.0103811 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.557" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.557 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0210089 +0 0.00519056 0.0157567 +0 0.0103811 0.0210089 +0 0.0103811 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.558" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.558 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0157567 +0 0.00519056 0.0105045 +0 0.0103811 0.0157567 +0 0.0103811 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.559" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.559 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.0105045 +0 0.00519056 0.00525225 +0 0.0103811 0.0105045 +0 0.0103811 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.560" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.560 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0.00525225 +0 0.00519056 0 +0 0.0103811 0.00525225 +0 0.0103811 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.561" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.561 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 0 +0 0.00519056 -0.0052522 +0 0.0103811 0 +0 0.0103811 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.562" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.562 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0052522 +0 0.00519056 -0.0105045 +0 0.0103811 -0.0052522 +0 0.0103811 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.563" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.563 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0105045 +0 0.00519056 -0.0157566 +0 0.0103811 -0.0105045 +0 0.0103811 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.564" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.564 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0157566 +0 0.00519056 -0.0210089 +0 0.0103811 -0.0157566 +0 0.0103811 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.565" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.565 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0210089 +0 0.00519056 -0.0262611 +0 0.0103811 -0.0210089 +0 0.0103811 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.566" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.566 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0262611 +0 0.00519056 -0.0315133 +0 0.0103811 -0.0262611 +0 0.0103811 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.567" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.567 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0315133 +0 0.00519056 -0.0367655 +0 0.0103811 -0.0315133 +0 0.0103811 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.568" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.568 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0367655 +0 0.00519056 -0.0420177 +0 0.0103811 -0.0367655 +0 0.0103811 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.569" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.569 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0420177 +0 0.00519056 -0.04727 +0 0.0103811 -0.0420177 +0 0.0103811 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.570" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.570 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.04727 +0 0.00519056 -0.0525221 +0 0.0103811 -0.04727 +0 0.0103811 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.571" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.571 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0525221 +0 0.00519056 -0.0577744 +0 0.0103811 -0.0525221 +0 0.0103811 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.572" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.572 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0577744 +0 0.00519056 -0.0630266 +0 0.0103811 -0.0577744 +0 0.0103811 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.573" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.573 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.00519056 -0.0630266 +0 0.00519056 -0.0682789 +0 0.0103811 -0.0630266 +0 0.0103811 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.577" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.577 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0840355 +0 0.0103811 0.0787832 +0 0.0155717 0.0840355 +0 0.0155717 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.578" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.578 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0787832 +0 0.0103811 0.0735311 +0 0.0155717 0.0787832 +0 0.0155717 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.579" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.579 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0735311 +0 0.0103811 0.0682789 +0 0.0155717 0.0735311 +0 0.0155717 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.580" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.580 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0682789 +0 0.0103811 0.0630266 +0 0.0155717 0.0682789 +0 0.0155717 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.581" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.581 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0630266 +0 0.0103811 0.0577744 +0 0.0155717 0.0630266 +0 0.0155717 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.582" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.582 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0577744 +0 0.0103811 0.0525222 +0 0.0155717 0.0577744 +0 0.0155717 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.583" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.583 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0525222 +0 0.0103811 0.04727 +0 0.0155717 0.0525222 +0 0.0155717 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.584" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.584 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.04727 +0 0.0103811 0.0420177 +0 0.0155717 0.04727 +0 0.0155717 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.585" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.585 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0420177 +0 0.0103811 0.0367655 +0 0.0155717 0.0420177 +0 0.0155717 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.586" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.586 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0367655 +0 0.0103811 0.0315134 +0 0.0155717 0.0367655 +0 0.0155717 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.587" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.587 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0315134 +0 0.0103811 0.0262611 +0 0.0155717 0.0315134 +0 0.0155717 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.588" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.588 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0262611 +0 0.0103811 0.0210089 +0 0.0155717 0.0262611 +0 0.0155717 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.589" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.589 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0210089 +0 0.0103811 0.0157567 +0 0.0155717 0.0210089 +0 0.0155717 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.590" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.590 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0157567 +0 0.0103811 0.0105045 +0 0.0155717 0.0157567 +0 0.0155717 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.591" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.591 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.0105045 +0 0.0103811 0.00525225 +0 0.0155717 0.0105045 +0 0.0155717 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.592" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.592 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0.00525225 +0 0.0103811 0 +0 0.0155717 0.00525225 +0 0.0155717 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.593" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.593 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 0 +0 0.0103811 -0.0052522 +0 0.0155717 0 +0 0.0155717 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.594" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.594 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0052522 +0 0.0103811 -0.0105045 +0 0.0155717 -0.0052522 +0 0.0155717 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.595" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.595 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0105045 +0 0.0103811 -0.0157566 +0 0.0155717 -0.0105045 +0 0.0155717 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.596" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.596 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0157566 +0 0.0103811 -0.0210089 +0 0.0155717 -0.0157566 +0 0.0155717 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.597" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.597 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0210089 +0 0.0103811 -0.0262611 +0 0.0155717 -0.0210089 +0 0.0155717 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.598" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.598 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0262611 +0 0.0103811 -0.0315133 +0 0.0155717 -0.0262611 +0 0.0155717 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.599" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.599 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0315133 +0 0.0103811 -0.0367655 +0 0.0155717 -0.0315133 +0 0.0155717 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.600" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.600 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0367655 +0 0.0103811 -0.0420177 +0 0.0155717 -0.0367655 +0 0.0155717 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.601" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.601 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0420177 +0 0.0103811 -0.04727 +0 0.0155717 -0.0420177 +0 0.0155717 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.602" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.602 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.04727 +0 0.0103811 -0.0525221 +0 0.0155717 -0.04727 +0 0.0155717 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.603" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.603 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0525221 +0 0.0103811 -0.0577744 +0 0.0155717 -0.0525221 +0 0.0155717 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.604" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.604 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0577744 +0 0.0103811 -0.0630266 +0 0.0155717 -0.0577744 +0 0.0155717 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.605" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.605 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0103811 -0.0630266 +0 0.0103811 -0.0682789 +0 0.0155717 -0.0630266 +0 0.0155717 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.609" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.609 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0840355 +0 0.0155717 0.0787832 +0 0.0207622 0.0840355 +0 0.0207622 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.610" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.610 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0787832 +0 0.0155717 0.0735311 +0 0.0207622 0.0787832 +0 0.0207622 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.611" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.611 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0735311 +0 0.0155717 0.0682789 +0 0.0207622 0.0735311 +0 0.0207622 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.612" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.612 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0682789 +0 0.0155717 0.0630266 +0 0.0207622 0.0682789 +0 0.0207622 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.613" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.613 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0630266 +0 0.0155717 0.0577744 +0 0.0207622 0.0630266 +0 0.0207622 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.614" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.614 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0577744 +0 0.0155717 0.0525222 +0 0.0207622 0.0577744 +0 0.0207622 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.615" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.615 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0525222 +0 0.0155717 0.04727 +0 0.0207622 0.0525222 +0 0.0207622 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.616" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.616 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.04727 +0 0.0155717 0.0420177 +0 0.0207622 0.04727 +0 0.0207622 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.617" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.617 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0420177 +0 0.0155717 0.0367655 +0 0.0207622 0.0420177 +0 0.0207622 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.618" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.618 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0367655 +0 0.0155717 0.0315134 +0 0.0207622 0.0367655 +0 0.0207622 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.619" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.619 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0315134 +0 0.0155717 0.0262611 +0 0.0207622 0.0315134 +0 0.0207622 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.620" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.620 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0262611 +0 0.0155717 0.0210089 +0 0.0207622 0.0262611 +0 0.0207622 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.621" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.621 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0210089 +0 0.0155717 0.0157567 +0 0.0207622 0.0210089 +0 0.0207622 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.622" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.622 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0157567 +0 0.0155717 0.0105045 +0 0.0207622 0.0157567 +0 0.0207622 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.623" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.623 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.0105045 +0 0.0155717 0.00525225 +0 0.0207622 0.0105045 +0 0.0207622 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.624" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.624 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0.00525225 +0 0.0155717 0 +0 0.0207622 0.00525225 +0 0.0207622 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.625" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.625 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 0 +0 0.0155717 -0.0052522 +0 0.0207622 0 +0 0.0207622 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.626" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.626 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0052522 +0 0.0155717 -0.0105045 +0 0.0207622 -0.0052522 +0 0.0207622 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.627" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.627 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0105045 +0 0.0155717 -0.0157566 +0 0.0207622 -0.0105045 +0 0.0207622 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.628" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.628 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0157566 +0 0.0155717 -0.0210089 +0 0.0207622 -0.0157566 +0 0.0207622 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.629" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.629 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0210089 +0 0.0155717 -0.0262611 +0 0.0207622 -0.0210089 +0 0.0207622 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.630" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.630 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0262611 +0 0.0155717 -0.0315133 +0 0.0207622 -0.0262611 +0 0.0207622 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.631" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.631 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0315133 +0 0.0155717 -0.0367655 +0 0.0207622 -0.0315133 +0 0.0207622 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.632" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.632 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0367655 +0 0.0155717 -0.0420177 +0 0.0207622 -0.0367655 +0 0.0207622 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.633" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.633 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0420177 +0 0.0155717 -0.04727 +0 0.0207622 -0.0420177 +0 0.0207622 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.634" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.634 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.04727 +0 0.0155717 -0.0525221 +0 0.0207622 -0.04727 +0 0.0207622 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.635" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.635 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0525221 +0 0.0155717 -0.0577744 +0 0.0207622 -0.0525221 +0 0.0207622 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.636" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.636 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0577744 +0 0.0155717 -0.0630266 +0 0.0207622 -0.0577744 +0 0.0207622 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.637" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.637 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0155717 -0.0630266 +0 0.0155717 -0.0682789 +0 0.0207622 -0.0630266 +0 0.0207622 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.641" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.641 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0840355 +0 0.0207622 0.0787832 +0 0.0259528 0.0840355 +0 0.0259528 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.642" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.642 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0787832 +0 0.0207622 0.0735311 +0 0.0259528 0.0787832 +0 0.0259528 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.643" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.643 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0735311 +0 0.0207622 0.0682789 +0 0.0259528 0.0735311 +0 0.0259528 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.644" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.644 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0682789 +0 0.0207622 0.0630266 +0 0.0259528 0.0682789 +0 0.0259528 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.645" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.645 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0630266 +0 0.0207622 0.0577744 +0 0.0259528 0.0630266 +0 0.0259528 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.646" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.646 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0577744 +0 0.0207622 0.0525222 +0 0.0259528 0.0577744 +0 0.0259528 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.647" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.647 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0525222 +0 0.0207622 0.04727 +0 0.0259528 0.0525222 +0 0.0259528 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.648" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.648 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.04727 +0 0.0207622 0.0420177 +0 0.0259528 0.04727 +0 0.0259528 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.649" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.649 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0420177 +0 0.0207622 0.0367655 +0 0.0259528 0.0420177 +0 0.0259528 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.650" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.650 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0367655 +0 0.0207622 0.0315134 +0 0.0259528 0.0367655 +0 0.0259528 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.651" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.651 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0315134 +0 0.0207622 0.0262611 +0 0.0259528 0.0315134 +0 0.0259528 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.652" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.652 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0262611 +0 0.0207622 0.0210089 +0 0.0259528 0.0262611 +0 0.0259528 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.653" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.653 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0210089 +0 0.0207622 0.0157567 +0 0.0259528 0.0210089 +0 0.0259528 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.654" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.654 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0157567 +0 0.0207622 0.0105045 +0 0.0259528 0.0157567 +0 0.0259528 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.655" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.655 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.0105045 +0 0.0207622 0.00525225 +0 0.0259528 0.0105045 +0 0.0259528 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.656" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.656 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0.00525225 +0 0.0207622 0 +0 0.0259528 0.00525225 +0 0.0259528 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.657" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.657 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 0 +0 0.0207622 -0.0052522 +0 0.0259528 0 +0 0.0259528 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.658" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.658 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0052522 +0 0.0207622 -0.0105045 +0 0.0259528 -0.0052522 +0 0.0259528 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.659" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.659 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0105045 +0 0.0207622 -0.0157566 +0 0.0259528 -0.0105045 +0 0.0259528 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.660" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.660 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0157566 +0 0.0207622 -0.0210089 +0 0.0259528 -0.0157566 +0 0.0259528 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.661" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.661 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0210089 +0 0.0207622 -0.0262611 +0 0.0259528 -0.0210089 +0 0.0259528 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.662" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.662 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0262611 +0 0.0207622 -0.0315133 +0 0.0259528 -0.0262611 +0 0.0259528 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.663" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.663 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0315133 +0 0.0207622 -0.0367655 +0 0.0259528 -0.0315133 +0 0.0259528 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.664" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.664 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0367655 +0 0.0207622 -0.0420177 +0 0.0259528 -0.0367655 +0 0.0259528 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.665" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.665 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0420177 +0 0.0207622 -0.04727 +0 0.0259528 -0.0420177 +0 0.0259528 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.666" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.666 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.04727 +0 0.0207622 -0.0525221 +0 0.0259528 -0.04727 +0 0.0259528 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.667" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.667 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0525221 +0 0.0207622 -0.0577744 +0 0.0259528 -0.0525221 +0 0.0259528 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.668" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.668 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0577744 +0 0.0207622 -0.0630266 +0 0.0259528 -0.0577744 +0 0.0259528 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.669" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.669 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0207622 -0.0630266 +0 0.0207622 -0.0682789 +0 0.0259528 -0.0630266 +0 0.0259528 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.673" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.673 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0840355 +0 0.0259528 0.0787832 +0 0.0311434 0.0840355 +0 0.0311434 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.674" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.674 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0787832 +0 0.0259528 0.0735311 +0 0.0311434 0.0787832 +0 0.0311434 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.675" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.675 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0735311 +0 0.0259528 0.0682789 +0 0.0311434 0.0735311 +0 0.0311434 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.676" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.676 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0682789 +0 0.0259528 0.0630266 +0 0.0311434 0.0682789 +0 0.0311434 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.677" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.677 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0630266 +0 0.0259528 0.0577744 +0 0.0311434 0.0630266 +0 0.0311434 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.678" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.678 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0577744 +0 0.0259528 0.0525222 +0 0.0311434 0.0577744 +0 0.0311434 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.679" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.679 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0525222 +0 0.0259528 0.04727 +0 0.0311434 0.0525222 +0 0.0311434 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.680" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.680 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.04727 +0 0.0259528 0.0420177 +0 0.0311434 0.04727 +0 0.0311434 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.681" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.681 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0420177 +0 0.0259528 0.0367655 +0 0.0311434 0.0420177 +0 0.0311434 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.682" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.682 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0367655 +0 0.0259528 0.0315134 +0 0.0311434 0.0367655 +0 0.0311434 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.683" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.683 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0315134 +0 0.0259528 0.0262611 +0 0.0311434 0.0315134 +0 0.0311434 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.684" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.684 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0262611 +0 0.0259528 0.0210089 +0 0.0311434 0.0262611 +0 0.0311434 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.685" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.685 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0210089 +0 0.0259528 0.0157567 +0 0.0311434 0.0210089 +0 0.0311434 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.686" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.686 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0157567 +0 0.0259528 0.0105045 +0 0.0311434 0.0157567 +0 0.0311434 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.687" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.687 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.0105045 +0 0.0259528 0.00525225 +0 0.0311434 0.0105045 +0 0.0311434 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.688" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.688 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0.00525225 +0 0.0259528 0 +0 0.0311434 0.00525225 +0 0.0311434 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.689" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.689 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 0 +0 0.0259528 -0.0052522 +0 0.0311434 0 +0 0.0311434 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.690" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.690 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0052522 +0 0.0259528 -0.0105045 +0 0.0311434 -0.0052522 +0 0.0311434 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.691" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.691 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0105045 +0 0.0259528 -0.0157566 +0 0.0311434 -0.0105045 +0 0.0311434 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.692" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.692 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0157566 +0 0.0259528 -0.0210089 +0 0.0311434 -0.0157566 +0 0.0311434 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.693" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.693 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0210089 +0 0.0259528 -0.0262611 +0 0.0311434 -0.0210089 +0 0.0311434 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.694" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.694 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0262611 +0 0.0259528 -0.0315133 +0 0.0311434 -0.0262611 +0 0.0311434 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.695" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.695 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0315133 +0 0.0259528 -0.0367655 +0 0.0311434 -0.0315133 +0 0.0311434 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.696" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.696 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0367655 +0 0.0259528 -0.0420177 +0 0.0311434 -0.0367655 +0 0.0311434 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.697" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.697 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0420177 +0 0.0259528 -0.04727 +0 0.0311434 -0.0420177 +0 0.0311434 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.698" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.698 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.04727 +0 0.0259528 -0.0525221 +0 0.0311434 -0.04727 +0 0.0311434 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.699" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.699 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0525221 +0 0.0259528 -0.0577744 +0 0.0311434 -0.0525221 +0 0.0311434 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.700" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.700 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0577744 +0 0.0259528 -0.0630266 +0 0.0311434 -0.0577744 +0 0.0311434 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.701" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.701 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0259528 -0.0630266 +0 0.0259528 -0.0682789 +0 0.0311434 -0.0630266 +0 0.0311434 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.705" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.705 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0840355 +0 0.0311434 0.0787832 +0 0.0363339 0.0840355 +0 0.0363339 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.706" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.706 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0787832 +0 0.0311434 0.0735311 +0 0.0363339 0.0787832 +0 0.0363339 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.707" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.707 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0735311 +0 0.0311434 0.0682789 +0 0.0363339 0.0735311 +0 0.0363339 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.708" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.708 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0682789 +0 0.0311434 0.0630266 +0 0.0363339 0.0682789 +0 0.0363339 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.709" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.709 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0630266 +0 0.0311434 0.0577744 +0 0.0363339 0.0630266 +0 0.0363339 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.710" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.710 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0577744 +0 0.0311434 0.0525222 +0 0.0363339 0.0577744 +0 0.0363339 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.711" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.711 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0525222 +0 0.0311434 0.04727 +0 0.0363339 0.0525222 +0 0.0363339 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.712" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.712 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.04727 +0 0.0311434 0.0420177 +0 0.0363339 0.04727 +0 0.0363339 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.713" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.713 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0420177 +0 0.0311434 0.0367655 +0 0.0363339 0.0420177 +0 0.0363339 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.714" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.714 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0367655 +0 0.0311434 0.0315134 +0 0.0363339 0.0367655 +0 0.0363339 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.715" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.715 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0315134 +0 0.0311434 0.0262611 +0 0.0363339 0.0315134 +0 0.0363339 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.716" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.716 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0262611 +0 0.0311434 0.0210089 +0 0.0363339 0.0262611 +0 0.0363339 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.717" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.717 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0210089 +0 0.0311434 0.0157567 +0 0.0363339 0.0210089 +0 0.0363339 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.718" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.718 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0157567 +0 0.0311434 0.0105045 +0 0.0363339 0.0157567 +0 0.0363339 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.719" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.719 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.0105045 +0 0.0311434 0.00525225 +0 0.0363339 0.0105045 +0 0.0363339 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.720" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.720 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0.00525225 +0 0.0311434 0 +0 0.0363339 0.00525225 +0 0.0363339 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.721" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.721 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 0 +0 0.0311434 -0.0052522 +0 0.0363339 0 +0 0.0363339 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.722" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.722 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0052522 +0 0.0311434 -0.0105045 +0 0.0363339 -0.0052522 +0 0.0363339 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.723" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.723 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0105045 +0 0.0311434 -0.0157566 +0 0.0363339 -0.0105045 +0 0.0363339 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.724" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.724 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0157566 +0 0.0311434 -0.0210089 +0 0.0363339 -0.0157566 +0 0.0363339 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.725" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.725 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0210089 +0 0.0311434 -0.0262611 +0 0.0363339 -0.0210089 +0 0.0363339 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.726" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.726 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0262611 +0 0.0311434 -0.0315133 +0 0.0363339 -0.0262611 +0 0.0363339 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.727" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.727 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0315133 +0 0.0311434 -0.0367655 +0 0.0363339 -0.0315133 +0 0.0363339 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.728" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.728 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0367655 +0 0.0311434 -0.0420177 +0 0.0363339 -0.0367655 +0 0.0363339 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.729" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.729 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0420177 +0 0.0311434 -0.04727 +0 0.0363339 -0.0420177 +0 0.0363339 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.730" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.730 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.04727 +0 0.0311434 -0.0525221 +0 0.0363339 -0.04727 +0 0.0363339 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.731" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.731 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0525221 +0 0.0311434 -0.0577744 +0 0.0363339 -0.0525221 +0 0.0363339 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.732" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.732 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0577744 +0 0.0311434 -0.0630266 +0 0.0363339 -0.0577744 +0 0.0363339 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.733" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.733 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0311434 -0.0630266 +0 0.0311434 -0.0682789 +0 0.0363339 -0.0630266 +0 0.0363339 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.737" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.737 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0840355 +0 0.0363339 0.0787832 +0 0.0415245 0.0840355 +0 0.0415245 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.738" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.738 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0787832 +0 0.0363339 0.0735311 +0 0.0415245 0.0787832 +0 0.0415245 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.739" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.739 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0735311 +0 0.0363339 0.0682789 +0 0.0415245 0.0735311 +0 0.0415245 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.740" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.740 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0682789 +0 0.0363339 0.0630266 +0 0.0415245 0.0682789 +0 0.0415245 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.741" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.741 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0630266 +0 0.0363339 0.0577744 +0 0.0415245 0.0630266 +0 0.0415245 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.742" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.742 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0577744 +0 0.0363339 0.0525222 +0 0.0415245 0.0577744 +0 0.0415245 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.743" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.743 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0525222 +0 0.0363339 0.04727 +0 0.0415245 0.0525222 +0 0.0415245 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.744" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.744 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.04727 +0 0.0363339 0.0420177 +0 0.0415245 0.04727 +0 0.0415245 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.745" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.745 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0420177 +0 0.0363339 0.0367655 +0 0.0415245 0.0420177 +0 0.0415245 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.746" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.746 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0367655 +0 0.0363339 0.0315134 +0 0.0415245 0.0367655 +0 0.0415245 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.747" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.747 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0315134 +0 0.0363339 0.0262611 +0 0.0415245 0.0315134 +0 0.0415245 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.748" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.748 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0262611 +0 0.0363339 0.0210089 +0 0.0415245 0.0262611 +0 0.0415245 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.749" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.749 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0210089 +0 0.0363339 0.0157567 +0 0.0415245 0.0210089 +0 0.0415245 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.750" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.750 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0157567 +0 0.0363339 0.0105045 +0 0.0415245 0.0157567 +0 0.0415245 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.751" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.751 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.0105045 +0 0.0363339 0.00525225 +0 0.0415245 0.0105045 +0 0.0415245 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.752" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.752 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0.00525225 +0 0.0363339 0 +0 0.0415245 0.00525225 +0 0.0415245 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.753" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.753 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 0 +0 0.0363339 -0.0052522 +0 0.0415245 0 +0 0.0415245 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.754" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.754 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0052522 +0 0.0363339 -0.0105045 +0 0.0415245 -0.0052522 +0 0.0415245 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.755" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.755 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0105045 +0 0.0363339 -0.0157566 +0 0.0415245 -0.0105045 +0 0.0415245 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.756" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.756 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0157566 +0 0.0363339 -0.0210089 +0 0.0415245 -0.0157566 +0 0.0415245 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.757" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.757 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0210089 +0 0.0363339 -0.0262611 +0 0.0415245 -0.0210089 +0 0.0415245 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.758" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.758 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0262611 +0 0.0363339 -0.0315133 +0 0.0415245 -0.0262611 +0 0.0415245 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.759" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.759 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0315133 +0 0.0363339 -0.0367655 +0 0.0415245 -0.0315133 +0 0.0415245 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.760" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.760 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0367655 +0 0.0363339 -0.0420177 +0 0.0415245 -0.0367655 +0 0.0415245 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.761" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.761 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0420177 +0 0.0363339 -0.04727 +0 0.0415245 -0.0420177 +0 0.0415245 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.762" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.762 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.04727 +0 0.0363339 -0.0525221 +0 0.0415245 -0.04727 +0 0.0415245 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.763" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.763 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0525221 +0 0.0363339 -0.0577744 +0 0.0415245 -0.0525221 +0 0.0415245 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.764" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.764 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0577744 +0 0.0363339 -0.0630266 +0 0.0415245 -0.0577744 +0 0.0415245 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.765" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.765 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0363339 -0.0630266 +0 0.0363339 -0.0682789 +0 0.0415245 -0.0630266 +0 0.0415245 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.769" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.769 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0840355 +0 0.0415245 0.0787832 +0 0.0467149 0.0840355 +0 0.0467149 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.770" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.770 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0787832 +0 0.0415245 0.0735311 +0 0.0467149 0.0787832 +0 0.0467149 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.771" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.771 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0735311 +0 0.0415245 0.0682789 +0 0.0467149 0.0735311 +0 0.0467149 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.772" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.772 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0682789 +0 0.0415245 0.0630266 +0 0.0467149 0.0682789 +0 0.0467149 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.773" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.773 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0630266 +0 0.0415245 0.0577744 +0 0.0467149 0.0630266 +0 0.0467149 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.774" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.774 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0577744 +0 0.0415245 0.0525222 +0 0.0467149 0.0577744 +0 0.0467149 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.775" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.775 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0525222 +0 0.0415245 0.04727 +0 0.0467149 0.0525222 +0 0.0467149 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.776" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.776 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.04727 +0 0.0415245 0.0420177 +0 0.0467149 0.04727 +0 0.0467149 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.777" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.777 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0420177 +0 0.0415245 0.0367655 +0 0.0467149 0.0420177 +0 0.0467149 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.778" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.778 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0367655 +0 0.0415245 0.0315134 +0 0.0467149 0.0367655 +0 0.0467149 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.779" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.779 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0315134 +0 0.0415245 0.0262611 +0 0.0467149 0.0315134 +0 0.0467149 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.780" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.780 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0262611 +0 0.0415245 0.0210089 +0 0.0467149 0.0262611 +0 0.0467149 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.781" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.781 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0210089 +0 0.0415245 0.0157567 +0 0.0467149 0.0210089 +0 0.0467149 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.782" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.782 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0157567 +0 0.0415245 0.0105045 +0 0.0467149 0.0157567 +0 0.0467149 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.783" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.783 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.0105045 +0 0.0415245 0.00525225 +0 0.0467149 0.0105045 +0 0.0467149 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.784" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.784 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0.00525225 +0 0.0415245 0 +0 0.0467149 0.00525225 +0 0.0467149 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.785" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.785 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 0 +0 0.0415245 -0.0052522 +0 0.0467149 0 +0 0.0467149 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.786" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.786 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0052522 +0 0.0415245 -0.0105045 +0 0.0467149 -0.0052522 +0 0.0467149 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.787" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.787 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0105045 +0 0.0415245 -0.0157566 +0 0.0467149 -0.0105045 +0 0.0467149 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.788" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.788 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0157566 +0 0.0415245 -0.0210089 +0 0.0467149 -0.0157566 +0 0.0467149 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.789" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.789 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0210089 +0 0.0415245 -0.0262611 +0 0.0467149 -0.0210089 +0 0.0467149 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.790" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.790 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0262611 +0 0.0415245 -0.0315133 +0 0.0467149 -0.0262611 +0 0.0467149 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.791" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.791 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0315133 +0 0.0415245 -0.0367655 +0 0.0467149 -0.0315133 +0 0.0467149 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.792" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.792 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0367655 +0 0.0415245 -0.0420177 +0 0.0467149 -0.0367655 +0 0.0467149 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.793" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.793 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0420177 +0 0.0415245 -0.04727 +0 0.0467149 -0.0420177 +0 0.0467149 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.794" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.794 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.04727 +0 0.0415245 -0.0525221 +0 0.0467149 -0.04727 +0 0.0467149 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.795" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.795 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0525221 +0 0.0415245 -0.0577744 +0 0.0467149 -0.0525221 +0 0.0467149 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.796" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.796 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0577744 +0 0.0415245 -0.0630266 +0 0.0467149 -0.0577744 +0 0.0467149 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.797" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.797 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0415245 -0.0630266 +0 0.0415245 -0.0682789 +0 0.0467149 -0.0630266 +0 0.0467149 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.801" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.801 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0840355 +0 0.0467149 0.0787832 +0 0.0519056 0.0840355 +0 0.0519056 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.802" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.802 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0787832 +0 0.0467149 0.0735311 +0 0.0519056 0.0787832 +0 0.0519056 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.803" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.803 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0735311 +0 0.0467149 0.0682789 +0 0.0519056 0.0735311 +0 0.0519056 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.804" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.804 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0682789 +0 0.0467149 0.0630266 +0 0.0519056 0.0682789 +0 0.0519056 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.805" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.805 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0630266 +0 0.0467149 0.0577744 +0 0.0519056 0.0630266 +0 0.0519056 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.806" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.806 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0577744 +0 0.0467149 0.0525222 +0 0.0519056 0.0577744 +0 0.0519056 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.807" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.807 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0525222 +0 0.0467149 0.04727 +0 0.0519056 0.0525222 +0 0.0519056 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.808" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.808 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.04727 +0 0.0467149 0.0420177 +0 0.0519056 0.04727 +0 0.0519056 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.809" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.809 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0420177 +0 0.0467149 0.0367655 +0 0.0519056 0.0420177 +0 0.0519056 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.810" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.810 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0367655 +0 0.0467149 0.0315134 +0 0.0519056 0.0367655 +0 0.0519056 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.811" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.811 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0315134 +0 0.0467149 0.0262611 +0 0.0519056 0.0315134 +0 0.0519056 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.812" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.812 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0262611 +0 0.0467149 0.0210089 +0 0.0519056 0.0262611 +0 0.0519056 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.813" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.813 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0210089 +0 0.0467149 0.0157567 +0 0.0519056 0.0210089 +0 0.0519056 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.814" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.814 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0157567 +0 0.0467149 0.0105045 +0 0.0519056 0.0157567 +0 0.0519056 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.815" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.815 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.0105045 +0 0.0467149 0.00525225 +0 0.0519056 0.0105045 +0 0.0519056 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.816" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.816 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0.00525225 +0 0.0467149 0 +0 0.0519056 0.00525225 +0 0.0519056 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.817" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.817 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 0 +0 0.0467149 -0.0052522 +0 0.0519056 0 +0 0.0519056 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.818" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.818 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0052522 +0 0.0467149 -0.0105045 +0 0.0519056 -0.0052522 +0 0.0519056 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.819" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.819 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0105045 +0 0.0467149 -0.0157566 +0 0.0519056 -0.0105045 +0 0.0519056 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.820" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.820 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0157566 +0 0.0467149 -0.0210089 +0 0.0519056 -0.0157566 +0 0.0519056 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.821" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.821 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0210089 +0 0.0467149 -0.0262611 +0 0.0519056 -0.0210089 +0 0.0519056 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.822" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.822 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0262611 +0 0.0467149 -0.0315133 +0 0.0519056 -0.0262611 +0 0.0519056 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.823" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.823 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0315133 +0 0.0467149 -0.0367655 +0 0.0519056 -0.0315133 +0 0.0519056 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.824" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.824 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0367655 +0 0.0467149 -0.0420177 +0 0.0519056 -0.0367655 +0 0.0519056 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.825" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.825 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0420177 +0 0.0467149 -0.04727 +0 0.0519056 -0.0420177 +0 0.0519056 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.826" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.826 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.04727 +0 0.0467149 -0.0525221 +0 0.0519056 -0.04727 +0 0.0519056 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.827" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.827 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0525221 +0 0.0467149 -0.0577744 +0 0.0519056 -0.0525221 +0 0.0519056 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.828" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.828 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0577744 +0 0.0467149 -0.0630266 +0 0.0519056 -0.0577744 +0 0.0519056 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.829" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.829 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0467149 -0.0630266 +0 0.0467149 -0.0682789 +0 0.0519056 -0.0630266 +0 0.0519056 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.833" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.833 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0840355 +0 0.0519056 0.0787832 +0 0.0570962 0.0840355 +0 0.0570962 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.834" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.834 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0787832 +0 0.0519056 0.0735311 +0 0.0570962 0.0787832 +0 0.0570962 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.835" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.835 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0735311 +0 0.0519056 0.0682789 +0 0.0570962 0.0735311 +0 0.0570962 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.836" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.836 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0682789 +0 0.0519056 0.0630266 +0 0.0570962 0.0682789 +0 0.0570962 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.837" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.837 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0630266 +0 0.0519056 0.0577744 +0 0.0570962 0.0630266 +0 0.0570962 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.838" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.838 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0577744 +0 0.0519056 0.0525222 +0 0.0570962 0.0577744 +0 0.0570962 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.839" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.839 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0525222 +0 0.0519056 0.04727 +0 0.0570962 0.0525222 +0 0.0570962 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.840" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.840 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.04727 +0 0.0519056 0.0420177 +0 0.0570962 0.04727 +0 0.0570962 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.841" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.841 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0420177 +0 0.0519056 0.0367655 +0 0.0570962 0.0420177 +0 0.0570962 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.842" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.842 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0367655 +0 0.0519056 0.0315134 +0 0.0570962 0.0367655 +0 0.0570962 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.843" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.843 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0315134 +0 0.0519056 0.0262611 +0 0.0570962 0.0315134 +0 0.0570962 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.844" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.844 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0262611 +0 0.0519056 0.0210089 +0 0.0570962 0.0262611 +0 0.0570962 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.845" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.845 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0210089 +0 0.0519056 0.0157567 +0 0.0570962 0.0210089 +0 0.0570962 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.846" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.846 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0157567 +0 0.0519056 0.0105045 +0 0.0570962 0.0157567 +0 0.0570962 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.847" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.847 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.0105045 +0 0.0519056 0.00525225 +0 0.0570962 0.0105045 +0 0.0570962 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.848" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.848 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0.00525225 +0 0.0519056 0 +0 0.0570962 0.00525225 +0 0.0570962 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.849" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.849 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 0 +0 0.0519056 -0.0052522 +0 0.0570962 0 +0 0.0570962 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.850" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.850 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0052522 +0 0.0519056 -0.0105045 +0 0.0570962 -0.0052522 +0 0.0570962 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.851" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.851 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0105045 +0 0.0519056 -0.0157566 +0 0.0570962 -0.0105045 +0 0.0570962 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.852" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.852 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0157566 +0 0.0519056 -0.0210089 +0 0.0570962 -0.0157566 +0 0.0570962 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.853" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.853 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0210089 +0 0.0519056 -0.0262611 +0 0.0570962 -0.0210089 +0 0.0570962 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.854" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.854 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0262611 +0 0.0519056 -0.0315133 +0 0.0570962 -0.0262611 +0 0.0570962 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.855" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.855 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0315133 +0 0.0519056 -0.0367655 +0 0.0570962 -0.0315133 +0 0.0570962 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.856" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.856 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0367655 +0 0.0519056 -0.0420177 +0 0.0570962 -0.0367655 +0 0.0570962 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.857" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.857 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0420177 +0 0.0519056 -0.04727 +0 0.0570962 -0.0420177 +0 0.0570962 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.858" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.858 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.04727 +0 0.0519056 -0.0525221 +0 0.0570962 -0.04727 +0 0.0570962 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.859" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.859 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0525221 +0 0.0519056 -0.0577744 +0 0.0570962 -0.0525221 +0 0.0570962 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.860" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.860 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0577744 +0 0.0519056 -0.0630266 +0 0.0570962 -0.0577744 +0 0.0570962 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.861" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.861 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0519056 -0.0630266 +0 0.0519056 -0.0682789 +0 0.0570962 -0.0630266 +0 0.0570962 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.865" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.865 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0840355 +0 0.0570962 0.0787832 +0 0.0622866 0.0840355 +0 0.0622866 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.866" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.866 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0787832 +0 0.0570962 0.0735311 +0 0.0622866 0.0787832 +0 0.0622866 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.867" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.867 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0735311 +0 0.0570962 0.0682789 +0 0.0622866 0.0735311 +0 0.0622866 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.868" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.868 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0682789 +0 0.0570962 0.0630266 +0 0.0622866 0.0682789 +0 0.0622866 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.869" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.869 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0630266 +0 0.0570962 0.0577744 +0 0.0622866 0.0630266 +0 0.0622866 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.870" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.870 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0577744 +0 0.0570962 0.0525222 +0 0.0622866 0.0577744 +0 0.0622866 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.871" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.871 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0525222 +0 0.0570962 0.04727 +0 0.0622866 0.0525222 +0 0.0622866 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.872" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.872 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.04727 +0 0.0570962 0.0420177 +0 0.0622866 0.04727 +0 0.0622866 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.873" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.873 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0420177 +0 0.0570962 0.0367655 +0 0.0622866 0.0420177 +0 0.0622866 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.874" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.874 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0367655 +0 0.0570962 0.0315134 +0 0.0622866 0.0367655 +0 0.0622866 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.875" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.875 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0315134 +0 0.0570962 0.0262611 +0 0.0622866 0.0315134 +0 0.0622866 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.876" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.876 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0262611 +0 0.0570962 0.0210089 +0 0.0622866 0.0262611 +0 0.0622866 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.877" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.877 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0210089 +0 0.0570962 0.0157567 +0 0.0622866 0.0210089 +0 0.0622866 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.878" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.878 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0157567 +0 0.0570962 0.0105045 +0 0.0622866 0.0157567 +0 0.0622866 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.879" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.879 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.0105045 +0 0.0570962 0.00525225 +0 0.0622866 0.0105045 +0 0.0622866 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.880" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.880 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0.00525225 +0 0.0570962 0 +0 0.0622866 0.00525225 +0 0.0622866 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.881" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.881 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 0 +0 0.0570962 -0.0052522 +0 0.0622866 0 +0 0.0622866 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.882" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.882 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0052522 +0 0.0570962 -0.0105045 +0 0.0622866 -0.0052522 +0 0.0622866 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.883" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.883 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0105045 +0 0.0570962 -0.0157566 +0 0.0622866 -0.0105045 +0 0.0622866 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.884" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.884 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0157566 +0 0.0570962 -0.0210089 +0 0.0622866 -0.0157566 +0 0.0622866 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.885" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.885 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0210089 +0 0.0570962 -0.0262611 +0 0.0622866 -0.0210089 +0 0.0622866 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.886" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.886 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0262611 +0 0.0570962 -0.0315133 +0 0.0622866 -0.0262611 +0 0.0622866 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.887" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.887 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0315133 +0 0.0570962 -0.0367655 +0 0.0622866 -0.0315133 +0 0.0622866 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.888" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.888 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0367655 +0 0.0570962 -0.0420177 +0 0.0622866 -0.0367655 +0 0.0622866 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.889" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.889 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0420177 +0 0.0570962 -0.04727 +0 0.0622866 -0.0420177 +0 0.0622866 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.890" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.890 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.04727 +0 0.0570962 -0.0525221 +0 0.0622866 -0.04727 +0 0.0622866 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.891" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.891 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0525221 +0 0.0570962 -0.0577744 +0 0.0622866 -0.0525221 +0 0.0622866 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.892" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.892 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0577744 +0 0.0570962 -0.0630266 +0 0.0622866 -0.0577744 +0 0.0622866 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.893" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.893 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0570962 -0.0630266 +0 0.0570962 -0.0682789 +0 0.0622866 -0.0630266 +0 0.0622866 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.897" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.897 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0840355 +0 0.0622866 0.0787832 +0 0.0674772 0.0840355 +0 0.0674772 0.0787832 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.898" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.898 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0787832 +0 0.0622866 0.0735311 +0 0.0674772 0.0787832 +0 0.0674772 0.0735311 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.899" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.899 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0735311 +0 0.0622866 0.0682789 +0 0.0674772 0.0735311 +0 0.0674772 0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.900" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.900 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0682789 +0 0.0622866 0.0630266 +0 0.0674772 0.0682789 +0 0.0674772 0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.901" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.901 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0630266 +0 0.0622866 0.0577744 +0 0.0674772 0.0630266 +0 0.0674772 0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.902" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.902 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0577744 +0 0.0622866 0.0525222 +0 0.0674772 0.0577744 +0 0.0674772 0.0525222 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.903" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.903 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0525222 +0 0.0622866 0.04727 +0 0.0674772 0.0525222 +0 0.0674772 0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.904" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.904 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.04727 +0 0.0622866 0.0420177 +0 0.0674772 0.04727 +0 0.0674772 0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.905" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.905 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0420177 +0 0.0622866 0.0367655 +0 0.0674772 0.0420177 +0 0.0674772 0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.906" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.906 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0367655 +0 0.0622866 0.0315134 +0 0.0674772 0.0367655 +0 0.0674772 0.0315134 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.907" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.907 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0315134 +0 0.0622866 0.0262611 +0 0.0674772 0.0315134 +0 0.0674772 0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.908" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.908 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0262611 +0 0.0622866 0.0210089 +0 0.0674772 0.0262611 +0 0.0674772 0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.909" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.909 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0210089 +0 0.0622866 0.0157567 +0 0.0674772 0.0210089 +0 0.0674772 0.0157567 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.910" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.910 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0157567 +0 0.0622866 0.0105045 +0 0.0674772 0.0157567 +0 0.0674772 0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.911" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.911 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.0105045 +0 0.0622866 0.00525225 +0 0.0674772 0.0105045 +0 0.0674772 0.00525225 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.912" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.912 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0.00525225 +0 0.0622866 0 +0 0.0674772 0.00525225 +0 0.0674772 0 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.913" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.913 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 0 +0 0.0622866 -0.0052522 +0 0.0674772 0 +0 0.0674772 -0.0052522 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.914" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.914 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0052522 +0 0.0622866 -0.0105045 +0 0.0674772 -0.0052522 +0 0.0674772 -0.0105045 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.915" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.915 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0105045 +0 0.0622866 -0.0157566 +0 0.0674772 -0.0105045 +0 0.0674772 -0.0157566 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.916" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.916 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0157566 +0 0.0622866 -0.0210089 +0 0.0674772 -0.0157566 +0 0.0674772 -0.0210089 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.917" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.917 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0210089 +0 0.0622866 -0.0262611 +0 0.0674772 -0.0210089 +0 0.0674772 -0.0262611 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.918" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.918 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0262611 +0 0.0622866 -0.0315133 +0 0.0674772 -0.0262611 +0 0.0674772 -0.0315133 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.919" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.919 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0315133 +0 0.0622866 -0.0367655 +0 0.0674772 -0.0315133 +0 0.0674772 -0.0367655 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.920" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.920 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0367655 +0 0.0622866 -0.0420177 +0 0.0674772 -0.0367655 +0 0.0674772 -0.0420177 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.921" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.921 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0420177 +0 0.0622866 -0.04727 +0 0.0674772 -0.0420177 +0 0.0674772 -0.04727 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.922" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.922 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.04727 +0 0.0622866 -0.0525221 +0 0.0674772 -0.04727 +0 0.0674772 -0.0525221 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.923" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.923 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0525221 +0 0.0622866 -0.0577744 +0 0.0674772 -0.0525221 +0 0.0674772 -0.0577744 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.924" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.924 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0577744 +0 0.0622866 -0.0630266 +0 0.0674772 -0.0577744 +0 0.0674772 -0.0630266 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 +OBJECT poly +name "Plane.925" +loc 0 0.0286802 -0.00787004 +data 9 +Plane.925 +texture "terrain-gradient.png" +crease 30.000000 +numvert 4 +0 0.0622866 -0.0630266 +0 0.0622866 -0.0682789 +0 0.0674772 -0.0630266 +0 0.0674772 -0.0682789 +numsurf 1 +SURF 0x0 +mat 0 +refs 4 +0 0.00224854 -0.00287813 +1 0.00224854 -0.00287813 +3 0.00224854 0.997122 +2 0.00224854 0.997122 +kids 0 diff --git a/Models/Instruments/ND/res/transparent.png b/Models/Instruments/ND/res/transparent.png new file mode 100644 index 00000000..530b0d36 Binary files /dev/null and b/Models/Instruments/ND/res/transparent.png differ diff --git a/Models/Instruments/ND/res/wxecho.png b/Models/Instruments/ND/res/wxecho.png new file mode 100644 index 00000000..f5f91662 Binary files /dev/null and b/Models/Instruments/ND/res/wxecho.png differ diff --git a/Nasal/efis.nas b/Nasal/efis.nas index 8cffd9b7..46fa9b74 100644 --- a/Nasal/efis.nas +++ b/Nasal/efis.nas @@ -4,6 +4,9 @@ setlistener("sim/signals/fdm-initialized", func { setprop("/instrumentation/efis/nd/display-mode", "NAV"); setprop("/instrumentation/efis/mfd/pnl_mode-num", 2); setprop("/instrumentation/efis/inputs/range-nm", 20); + setprop("/instrumentation/efis[1]/nd/display-mode", "NAV"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 2); + setprop("/instrumentation/efis[1]/inputs/range-nm", 20); setprop("/controls/lighting/ndl-norm", "1"); setprop("/controls/lighting/ndr-norm", "1"); }); @@ -62,3 +65,57 @@ var mode_dec = func { } } +# First Officer + +var ctl2_func = func(md,val) { + if(md == "range") { + var rng = getprop("/instrumentation/efis[1]/inputs/range-nm"); + if(val ==1){ + rng = rng * 2; + if(rng > 640) rng = 640; + } else if(val = -1){ + rng = rng / 2; + if(rng < 10) rng = 10; + } + setprop("/instrumentation/efis[1]/inputs/range-nm", rng); + } +} + +var mode2_inc = func { + var mode = getprop("/instrumentation/efis[1]/nd/display-mode"); + if (mode == "ILS") { + setprop("/instrumentation/efis[1]/nd/display-mode", "VOR"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 1); + } else if (mode == "VOR") { + setprop("/instrumentation/efis[1]/nd/display-mode", "NAV"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 2); + } else if (mode == "NAV") { + setprop("/instrumentation/efis[1]/nd/display-mode", "ARC"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 3); + } else if (mode == "ARC") { + setprop("/instrumentation/efis[1]/nd/display-mode", "PLAN"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 4); + } else { + return 0; + } +} + +var mode2_dec = func { + var mode = getprop("/instrumentation/efis[1]/nd/display-mode"); + if (mode == "PLAN") { + setprop("/instrumentation/efis[1]/nd/display-mode", "ARC"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 3); + } else if (mode == "ARC") { + setprop("/instrumentation/efis[1]/nd/display-mode", "NAV"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 2); + } else if (mode == "NAV") { + setprop("/instrumentation/efis[1]/nd/display-mode", "VOR"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 1); + } else if (mode == "VOR") { + setprop("/instrumentation/efis[1]/nd/display-mode", "ILS"); + setprop("/instrumentation/efis[1]/mfd/pnl_mode-num", 0); + } else { + return 0; + } +} +