Added XPlane scenery DSF/TXT to FlightGear scenery STG converter
This commit is contained in:
parent
016d268c07
commit
10ed7fd8d2
@ -18,3 +18,6 @@ Note: this is lost when you close the terminal / console, so you have to run thi
|
|||||||
### Windows
|
### Windows
|
||||||
_I don't have Windows so cannot provide any instructions - contributions by Windows users welcome !_
|
_I don't have Windows so cannot provide any instructions - contributions by Windows users welcome !_
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
* dsftxt2stg-lookup.py taken and modified from https://github.com/mherweg/d-laser-fgtools/library.txt
|
||||||
|
274
dsf2stg_lookup.py
Executable file
274
dsf2stg_lookup.py
Executable file
@ -0,0 +1,274 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#-*- coding:utf-8 -*-
|
||||||
|
|
||||||
|
lookup = {
|
||||||
|
"lib/airport/aircraft/corporate_biz/P180_avanti_ferrari.obj": {'path': 'Models/lib/citation.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/corporate_biz/P180_avanti_white.obj": {'path': 'Models/lib/citation.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/GA/Cessna_172.obj": {'path': 'CESSNA', 'alt-offset': 0, 'hdg-offset': 180},
|
||||||
|
"lib/airport/aircraft/GA/KingAirC90B.obj": {'path': 'Models/Aircraft/Citation-II-Type1.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/GA/Osprey_GP5.obj": {'path': 'Models/Aircraft/Zlin50xl_low_poly.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/heavy_metal/747_United.obj": {'path': 'Models/Aircraft/B747.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/heavy_metal/MD-80_Alitalia.obj": {'path': 'Models/Aircraft/320austrian.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/heavy_metal/MD-80_Delta.obj": {'path': 'Models/Aircraft/737virgin.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/heavy_metal/MD-80_Scandinavian.obj": {'path': 'Models/Aircraft/320volare.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/regional_jet/CRJ100_Air_France.obj": {'path': 'Models/Aircraft/crj100af-obj.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/regional_jet/CRJ100_Austrian_Arrows.obj": {'path': 'Models/Aircraft/crj100af-obj.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/regional_jet/Dornier_328_jet_Cirrus_Airlines.obj": {'path': 'Models/Aircraft/D328_services.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/regional_jet/Dornier_328_jet_Welcome_Air.obj": {'path': 'Models/Aircraft/D328_services.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/regional_prop/ATR42-500_Air_Dolomiti.obj": {'path': 'Models/Aircraft/atr42-iberia.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/regional_prop/ATR42-500_FedEx.obj": {'path': 'Models/Aircraft/bae-ootas-tnt.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/aircraft/regional_prop/ATR72-500_American_Eagle.obj": {'path': 'Models/Aircraft/ATR42.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/aircraft/regional_prop/ATR72-500_Lufthansa_Regional.obj": {'path': 'Models/Aircraft/fokker50_vlm.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/aircraft/regional_prop/Dornier_328_prop_Air_Alps.obj": {'path': 'Models/Aircraft/B1900_services.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Vintage_Airports/Control_Towers/Hangar_Tower.agp": {'path': 'Models/lib/vintage-tower-hangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Classic_Airports/Control_Towers/Classic_Tower_1.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Classic_Airports/Control_Towers/Classic_Tower_2.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Classic_Airports/Control_Towers/Classic_Tower_3.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Classic_Airports/Control_Towers/Classic_Tower_4.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Modern_Airports/Control_Towers/Modern_Tower_1.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Modern_Airports/Control_Towers/Modern_Tower_3.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Modern_Airports/Control_Towers/Modern_Tower_2.agp": {'path': 'Models/Airport/tower_small_airfield.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fueling_Stations/2_horiz_tanks.agp": {'path': 'Models/lib/HorizTanks2.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Fueling_Stations/Covered_Station.agp": {'path': 'Models/Airport/FGRefuel02.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Fueling_Stations/Small_Fuel_Station.obj": {'path': 'Models/Airport/Avgas_Pump.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/3_Tank_Array.agp": {'path': 'Models/Airport/GenericFuelStore3.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/Single_Tank_Large.obj": {'path': 'Models/Industrial/generic_tank_020m_grey.ac', 'alt-offset': -90, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/Single_Vert_Tank.agp": {'path': 'Models/Airport/GenericFuelStore1.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/Sing_Tank_Large.obj": {'path': 'Models/Airport/egkk_oil.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/Sing_Tank_Medium.obj": {'path': 'Models/Industrial/GenericStorageTank30m.ac', 'alt-offset': -92, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Fuel_Storage/Sing_Tank_Small.obj": {'path': 'Models/Industrial/generic_tank_005m_grey.ac', 'alt-offset': -95, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Hangars/FBO_Modern1.agp": {'path': 'Models/lib/fboModern1.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Lg_Maint_Blue.agp": {'path': 'Models/lib/LgMaint.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Lg_Maint_Brown.agp": {'path': 'Models/lib/LgMaint.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Lg_Maint_Gray.agp": {'path': 'Models/lib/LgMaint.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Lg_Maint_Orange.agp": {'path': 'Models/lib/LgMaint.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Long_Row_Beige.agp": {'path': 'Models/lib/LongRow.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Long_Row_Green.agp": {'path': 'Models/lib/LongRow.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Med_Blue_Hangar.agp": {'path': 'Models/lib/MedHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Med_Brown_Hangar.agp": {'path': 'Models/lib/MedHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Med_Gray_Hangar.agp": {'path': 'Models/lib/MedHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Med_Orange_Hangar.agp": {'path': 'Models/lib/MedHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Sm_Blue_Hangar.agp": {'path': 'Models/lib/SmHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Sm_Brown_Hangar.agp": {'path': 'Models/lib/SmHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Sm_Gray_Hangar.agp": {'path': 'Models/lib/SmHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Hangars/Sm_Orange_Hangar.agp": {'path': 'Models/lib/SmHangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/com_DownLight.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/com_Flood_20m.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/com_Flood_36m.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Dir_Flood_Sm.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Dir_Ramp_Lit_Med.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Dir_Ramp_Lit_Short.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Dir_Ramp_Lit_Tall.obj": {'path': 'Models/Airport/Apronlamp16m180deg.xml', 'alt-offset': 0, 'hdg-offset': 45},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Omni_Parking_Lit.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Opposing_Flood_Sm.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Ovrhd_Flood_Med.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Lighting/Ovrhd_Flood_Small.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/com_Office1.obj": {'path': 'Models/Commercial/OfficeBuilding74x18m.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/com_Office2.obj": {'path': 'Models/Commercial/OfficeBuilding74x18m.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Fire_Station_Lg.agp": {'path': 'Models/lib/FireStationLg.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Fire_Station_Sm.agp": {'path': 'Models/lib/cube16x10.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Large_Office_1.agp": {'path': 'Models/lib/office112x50.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Med_Office_1.agp": {'path': 'Models/lib/office65x50.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Small_Office_1.agp": {'path': 'Models/lib/office32x25.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Small_Office_2.agp": {'path': 'Models/lib/office40x25.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Misc_Buildings/Small_Office_3.agp": {'path': 'Models/lib/office32x25n.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Barrel_Trash_Can.obj": {'path': 'Models/StreetFurniture/Litter_Bin.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Blue_Dumpster.obj": {'path': 'Models/StreetFurniture/trash-container.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Blue_Dumpster_w_wall.obj": {'path': 'Models/StreetFurniture/trash-container.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/com_Const_Trailer.obj": {'path': 'Models/lib/office16x4n.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Const_Trailer.agp": {'path': 'Models/lib/office16x4n.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Flagpole.obj": {'path': 'Models/Misc/FlagpoleFG.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/One_Traffic_Cone.obj": {'path': 'Models/lib/cone.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Pad_Tansformer.obj": {'path': 'Models/Airport/switch_control_cabinet.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Picnic_Table.obj": {'path': 'Models/Misc/picnic_table.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Round_Trash_Can.obj": {'path': 'Models/StreetFurniture/Litter_Bin.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Sm_Propane_Tank.obj": {'path': 'Models/lib/propane-tank.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Square_Trash_Can.obj": {'path': 'Models/StreetFurniture/Litter_Bin.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Stack_of_Cones.obj": {'path': 'Models/lib/stack_of_cones.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Tree.obj": {'path': 'Models/Trees/platanus_acerifolia_15m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/TreeTest.obj": {'path': 'Models/Trees/platanus_acerifolia_15m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Miscellaneous/Water_Tank_Elev.obj": {'path': 'Models/lib/watertank3x1.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Parking/1_Space_Dual.obj": {'path': 'Models/lib/1space_dual.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/10_Spaces_dual.obj": {'path': 'Models/lib/10_spaces_dual.ac', 'alt-offset': 0, 'hdg-offset': 180},
|
||||||
|
"lib/airport/Common_Elements/Parking/20_Spaces_dual.obj": {'path': 'Models/lib/20_spaces_dual.ac', 'alt-offset': 0, 'hdg-offset': 180},
|
||||||
|
"lib/airport/Common_Elements/Parking/2_Spaces_Dual.obj": {'path': 'Models/lib/2_spaces_dual.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/2space_wStop.obj": {'path': 'Models/lib/2space_wStop.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/4_Spaces_Dual.obj": {'path': 'Models/lib/4_spaces_dual.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/4space_wStop.obj": {'path': 'Models/lib/4space_wStop.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/6space_wStop.obj": {'path': 'Models/lib/6space_wStop.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/Bollard.obj": {'path': 'Models/StreetFurniture/EDDI-cone.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/14_Single_Spaces.agp": {'path': 'Models/lib/cars14.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/7_Single_Spaces.agp": {'path': 'Models/lib/cars7.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/Row_of_Cars_10.agp": {'path': 'Models/lib/cars10.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/Row_of_Cars_2.agp": {'path': 'Models/lib/cars2.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/Row_of_Cars_4.agp": {'path': 'Models/lib/cars4.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking_Items/Row_of_Cars_6.agp": {'path': 'Models/lib/cars6.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/NoParkStripes.obj": {'path': 'Models/lib/NoParkStripes.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/Yellow_Triangle-1.obj": {'path': 'Models/lib/YellowTriangle1.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/Yellow_Triangle-2.obj": {'path': 'Models/lib/YellowTriangle2.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Vehicles/Cargo_Trailer.obj": {'path': 'Models/lib/trailer-fedex.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Vehicles/Cargo_Truck_Long.agp": {'path': 'Models/lib/trailer-ups.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Vehicles/Cargo_Truck.obj": {'path': 'Models/Transport/Norberttruck.xml', 'alt-offset': 0, 'hdg-offset': 270},
|
||||||
|
"lib/airport/Common_Elements/vehicles/Large_Fuel_Truck.obj": {'path': 'Models/lib/fuel-truck.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/vehicles/Small_Fuel_Truck.obj": {'path': 'Models/lib/fuel-truck.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/1990.obj": {'path': 'Models/Airport/water-tower-150-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/com_WT_1930_fence.obj": {'path': 'Models/Airport/water-tower-150-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/com_WT_1930.obj": {'path': 'Models/Airport/water-tower-90-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/com_WT_1960.obj": {'path': 'Models/Airport/water-tower-90-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/com_WT_fence.obj": {'path': 'Models/Airport/water-tower-90-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/Water_Tower_1930.agp": {'path': 'Models/Airport/water-tower-90-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Common_Elements/Water_Towers/Water_Tower_1960.agp": {'path': 'Models/Airport/water-tower-90-red-white.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/landscape/apron_light.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/lights/slow/helipad_edge.obj": {'path': 'Models/Effects/GreenLight6000.xml', 'alt-offset': 0.5, 'hdg-offset': 0},
|
||||||
|
"lib/airport/lights/slow/taxi_edge.obj": {'path': 'Models/Effects/taxilampblue.xml', 'alt-offset': 0.5, 'hdg-offset': 0},
|
||||||
|
"lib/airport/lights/slow/rway_guard.obj": {'path': 'Models/lib/rw-guard-lights.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/250cm_Jetway_Group.agp": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/400cm_Jetway_2.agp": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/400cm_Jetway_3.agp": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/400cm_Jetway_Group.agp": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/500cm_Jetway_Group.agp": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/Belt_Loader.obj": {'path': 'Models/lib/belt_loader.ac', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Container_1.obj": {'path': 'Models/lib/cargo-container1-HD.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Container_6.obj": {'path': 'Models/lib/container6-HD.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Dolly_1.obj": {'path': 'Models/lib/cargo-dolly1-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Dolly_wPod.obj": {'path': 'Models/lib/CargoDollyWithContainer.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Loader_1.obj": {'path': 'Models/lib/loader.ac', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Palette_1.obj": {'path': 'Models/Airport/cargobox.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Palette_2.obj": {'path': 'Models/Airport/cargoip.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Palette_3.obj": {'path': 'Models/Airport/cargoim.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Pallete_Pkng.agp": {'path': 'Models/lib/cargo-dolly-parking-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Pod_Lot.agp": {'path': 'Models/lib/cargo_pod_lot.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Cargo_Pod_Pkng.obj": {'path': 'Models/lib/CargoPodPkng.ac', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Ramp_Equipment/GPU_1.obj": {'path': 'Models/Airport/Vehicle/generic-trailer-GPU.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Jetway_250cm.obj": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/Jetway_400cm.obj": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/Jetway_500cm.obj": {'path': 'Models/Airport/Jetway/jetway.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayEx_10m.obj": {'path': 'Models/lib/jetway_e10m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayEx_12m.obj": {'path': 'Models/lib/jetway_e12m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayEx_14m.obj": {'path': 'Models/lib/jetway_e14m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayEx_16m.obj": {'path': 'Models/lib/jetway_e16m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayEx_8m.obj": {'path': 'Models/lib/jetway_e8m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayExt_4m.obj": {'path': 'Models/lib/jetway_e4m.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/JetWayWallBase.obj": {'path': 'Models/lib/JetWayWallBase.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Luggage_Cart.obj": {'path': 'Models/lib/luggage-cart-HD.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Luggage_Cart_Pkng.obj": {'path': 'Models/lib/LuggCartPkng.ac', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/airport/Ramp_Equipment/Luggage_Truck.obj": {'path': 'Models/lib/luggage-truck-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Cart_Group.obj": {'path': 'Models/lib/LuggCartGroup.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_3.obj": {'path': 'Models/lib/chariot3curve.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Group.obj": {'path': 'Models/lib/caisses_group.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight1.obj": {'path': 'Models/lib/luggage-truck-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight2.obj": {'path': 'Models/lib/luggage-train-straight2-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight3.obj": {'path': 'Models/lib/luggage-train-straight2-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight4.obj": {'path': 'Models/lib/luggage-train-straight2-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight5.obj": {'path': 'Models/lib/luggage-train-straight2-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Lugg_Train_Straight.obj": {'path': 'Models/lib/luggage-train-straight2-HD.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Ramp_Equipment/Ramp_Group_Medium.agp": {'path': 'Models/lib/RampGroup.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Ramp_Group_Narrow.agp": {'path': 'Models/lib/RampGroup.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Ramp_Group_Wide.agp": {'path': 'Models/lib/RampGroup.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Ramp_Parking.obj": {'path': 'Models/lib/RampParking.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Ramp_Parking_Stripe.obj": {'path': 'Models/lib/RampParkingStripe.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/airport/Ramp_Equipment/Uni_Jetway_250cm.obj": {'path': 'Models/Airport/Jetway/jetway-movable.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/Uni_Jetway_400cm.obj": {'path': 'Models/Airport/Jetway/jetway-movable.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Ramp_Equipment/Uni_Jetway_500cm.obj": {'path': 'Models/Airport/Jetway/jetway-movable.xml', 'alt-offset': 0, 'hdg-offset': 202},
|
||||||
|
"lib/airport/Vintage_Airports/Hangars/Corrugated_Row.agp": {'path': 'Models/lib/hangar81x16.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Vintage_Airports/Terminals/Admin_Bldg.obj": {'path': 'Models/lib/admin31x12.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Vintage_Airports/Terminals/Admin_Bldg.agp": {'path': 'Models/lib/admin-with-cars.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/cars/car.obj": {'path': 'CAR', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/cars/car_or_truck.obj": {'path': 'CAR', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/cars/car_or_truck_static.obj": {'path': 'CAR', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/cars/car_static_invar.obj": {'path': 'CAR', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/cars/car_static.obj": {'path': 'CAR', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/forests/autogen_tree1.obj": {'path': 'Models/lib/deciduous-tree.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/forests/autogen_tree2.obj": {'path': 'Models/lib/deciduous-tree2.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/forests/autogen_tree3.obj": {'path': 'Models/lib/deciduous-tree3.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/forests/autogen_tree4.obj": {'path': 'Models/Trees/billboard-tree.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/forests/autogen_tree_any.obj": {'path': 'Models/Trees/billboard-tree.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/CafeTbls2x2.obj": {'path': 'Models/Misc/picnic_table.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/CafeTbls4x2.obj": {'path': 'Models/Misc/picnic_table.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/DkGrpMed.obj": {'path': 'Models/Misc/picnic_table.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/LawnGrpMed.obj": {'path': 'Models/Misc/picnic_table.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/rubbish_bin.obj": {'path': 'Models/StreetFurniture/Litter_Bin.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/global_objects/vending_machine_X2.obj": {'path': 'Models/lib/vending-machine.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/global_objects/vending_machine.obj": {'path': 'Models/lib/2vending-machines.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/streetlights/AreaFloodHighMast.obj": {'path': 'Models/Airport/Apronlamp16m360deg.xml', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/streetlights/AreaFloodLrg.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/AreaFloodMed.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/AreaFloodShort.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/AreaFloodSml.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/HwyLt1BarMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/HwyLt3BarMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/HwyLt2GndMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/HwyLt1GndMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ParkingLot.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/PrimaryLt1.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt1.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt1V1.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt1V2.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt2Dim.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt2.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResLt3.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/ResShort.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/RmpLt1BarMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/RmpLt1GndMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/RmpLt2BarMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/streetlights/RmpLt2GndMnt.obj": {'path': 'Models/lib/lamp10m.xml', 'alt-offset': 0, 'hdg-offset': -90},
|
||||||
|
"lib/g10/US/commercial/canopy_76.obj": {'path': 'Models/lib/canopy18x8.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/canopy_benzoil.obj": {'path': 'Models/lib/canopy17x14.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/canopy_bp_large.obj": {'path': 'Models/lib/canopy18x8.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/canopy_bp_small.obj": {'path': 'Models/lib/canopy38x8.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/canopy_ozgas.obj": {'path': 'Models/lib/canopy18x10.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/fuel_pump_76.obj": {'path': 'Models/Airport/Avgas_Pump.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/fuel_pump_benzoil.obj": {'path': 'Models/Airport/Avgas_Pump.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/fuel_pump_bp.obj": {'path': 'Models/Airport/Avgas_Pump.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/commercial/fuel_pump_ozgas.obj": {'path': 'Models/Airport/Avgas_Pump.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/TinShed10x30Lt.obj": {'path': 'Models/lib/hangarUL10x30.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/TinShed10x30Dk.obj": {'path': 'Models/lib/hangarUL10x30.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/TinShed10x50.obj": {'path': 'Models/lib/shed10x50.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/FactB10x30D.obj": {'path': 'Models/lib/hangarUL10x30.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/MineralsPile.obj": {'path': 'Models/lib/coal_pile.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/OilDrums.obj": {'path': 'Models/Misc/6barrels.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/SandBunker.obj": {'path': 'Models/lib/coal_pile.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/SiteOffice3x10.obj": {'path': 'Models/lib/office3x10.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/SiteOffice4x14.obj": {'path': 'Models/lib/office4x14.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/SiteOffice6x12.obj": {'path': 'Models/lib/office6x12.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/SiteOffice8x14.obj": {'path': 'Models/lib/office8x14.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/StorHut3x3.obj": {'path': 'Models/lib/transformer3x3.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/GateHut3x3.obj": {'path': 'Models/lib/transformer3x3.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/industrial/light/WoodShed8x10.obj": {'path': 'Models/lib/shed8x10.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/WoodShed8x20.obj": {'path': 'Models/lib/shed8x10.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/SecBarrier.obj": {'path': 'Models/lib/schranke.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/TrailerSnglShrtFlat.obj": {'path': 'Models/lib/office3x10.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/suburban/TrailerSnglShrtPtch.obj": {'path': 'Models/lib/office3x10.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
"lib/g10/US/suburban/B-RnchLH.obj": {'path': 'Models/lib/farm19x12.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/B-RnchLHGry.obj": {'path': 'Models/lib/farm19x12.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/dB-RnchLH.obj": {'path': 'Models/lib/farm19x12.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/dB-RnchLHGry.obj": {'path': 'Models/lib/farm19x12.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/Shed13x24.obj": {'path': 'Models/lib/industrial13x24.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/FactA15x22.obj": {'path': 'Models/lib/industrial15x22.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/Greenhse.obj": {'path': 'Models/lib/dGreenhse.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/dGreenhse.obj": {'path': 'Models/lib/dGreenhse.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/ships/SailBoat.obj": {'path': 'Models/Maritime/Civilian/red-sailing-boat.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/ships/OilRig.obj": {'path': 'Models/lib/OilRig.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/ships/OilPlatform.obj": {'path': 'Models/lib/OilPlatform.xml', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/lights/slow/MIRL_ww.obj": {'path': 'Models/lib/taxilight-HD-ww.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/1_CarStop.obj": {'path': 'Models/lib/1car-stop.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/2_Space_Dual.obj": {'path': 'Models/lib/2_spaces_dual.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/general_aviation/prop_a.obj": {'path': 'Models/lib/prop_a.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/cargo/prop_a.obj": {'path': 'Models/lib/prop_a.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/airliners/prop_a.obj": {'path': 'Models/lib/prop_a.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/TrailerSnglLong.obj": {'path': 'Models/lib/2container-office.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/TrailerDblLong.obj": {'path': 'Models/lib/4container-office.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Common_Elements/Parking/Handicap_Sign.obj": {'path': 'Models/lib/handicap-sign.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/lights/slow/MIRL_yy.obj": {'path': 'Models/lib/taxilight-HD-yy.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/lights/slow/MIRL_ry.obj": {'path': 'Models/lib/taxilight-HD-yy.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/lights/slow/MIRL_yw.obj": {'path': 'Models/lib/taxilight-HD-ww.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/Vintage_Airports/Hangars/Lg_Open_Ends.obj": {'path': 'Models/lib/large-hangar.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/StorSml2p0.obj": {'path': 'Models/lib/garages18x9.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/industrial/light/StorSml2p3.obj": {'path': 'Models/lib/garages22x9.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/GdnShed.obj": {'path': 'Models/lib/garden-shed.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/dGdnShed.obj": {'path': 'Models/lib/garden-shed.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/GrgSmlWht.obj": {'path': 'Models/lib/garage-small-white.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/g10/US/suburban/dGrgSmlWht.obj": {'path': 'Models/lib/garage-small-white.ac', 'alt-offset': 0, 'hdg-offset': 90},
|
||||||
|
"lib/airport/aircraft/military/fighter_a.obj": {'path': 'Models/Aircraft/F-15-lowres.ac', 'alt-offset': 0, 'hdg-offset': 0},
|
||||||
|
}
|
||||||
|
|
66
install.py
66
install.py
@ -1,66 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#-*- coding:utf-8 -*-
|
|
||||||
|
|
||||||
# Installer script for the main scripts and modules of fgtools
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
import shutil
|
|
||||||
import site
|
|
||||||
|
|
||||||
from fgtools.utils import constants
|
|
||||||
|
|
||||||
argp = argparse.ArgumentParser(description="install.py - installs the TerraGear tools so that they can be run like any other executable")
|
|
||||||
|
|
||||||
argp.add_argument(
|
|
||||||
"-p", "--prefix",
|
|
||||||
help="Installation prefix (default: %(default)s)",
|
|
||||||
default=os.environ.get("FGTOOLSPREFIX", os.path.join(constants.HOME, ".local")))
|
|
||||||
)
|
|
||||||
|
|
||||||
argp.add_argument(
|
|
||||||
"--add-to-path",
|
|
||||||
help="whether to modify your $HOME/.profile file to have the folder containing the scripts in your path (default: %(default)s",
|
|
||||||
default="yes",
|
|
||||||
choices=["yes", "no"]
|
|
||||||
)
|
|
||||||
|
|
||||||
args = argp.parse_args()
|
|
||||||
|
|
||||||
SCRIPTDIR = os.path.dirname(os.path.abspath(__name__))
|
|
||||||
BINDIR = os.path.join(args.prefix, "bin")
|
|
||||||
PYLIBDIR = os.path.join(args.prefix, "lib", "python3")
|
|
||||||
|
|
||||||
print(f"Installing to {args.prefix}")
|
|
||||||
|
|
||||||
print("Installing modules …")
|
|
||||||
shutil.copytree(os.path.join(SCRIPTDIR, constants.MODULE), PYLIBDIR)
|
|
||||||
|
|
||||||
print("Installing scripts …")
|
|
||||||
for script in constants.SCRIPTS:
|
|
||||||
shutil.copy2(os.path.join(SCRIPTDIR, script), BINDIR)
|
|
||||||
|
|
||||||
if not BINDIR in os.environ.get("PATH", "").split(os.pathsep):
|
|
||||||
if args.add_to_path:
|
|
||||||
print(f"Adding {BINDIR} to your $PATH …")
|
|
||||||
|
|
||||||
if os.name == "posix": # Linux, MacOS
|
|
||||||
with open(os.path.join(constants.HOME, ".profile"), "a") as f:
|
|
||||||
f.write(f"export PATH=\"$PATH{os.pathsep}{BINDIR}\"")
|
|
||||||
else: # probably Windows
|
|
||||||
os.system(f"setx PATH \"%PATH%{os.pathsep}{BINDIR}\"")
|
|
||||||
else:
|
|
||||||
print(f"WARNING: {BINDIR} was not added to your $PATH - please do that manually")
|
|
||||||
|
|
||||||
if not LIBDIR in os.environ.get("PYTHONPATH", "").split(os.pathsep):
|
|
||||||
print(f"Adding {LIBDIR} to your $PYTHONPATH …")
|
|
||||||
|
|
||||||
if not os.path.isdir(site.USER_SITE):
|
|
||||||
os.mkdirs(site.USER_SITE)
|
|
||||||
|
|
||||||
mode = "a"
|
|
||||||
if not os.path.isfile(os.path.join(site.USER_SITE, "sitecustomize.py")):
|
|
||||||
mode = "w"
|
|
||||||
|
|
||||||
with open(os.path.join(site.USER_SITE, "sitecustomize.py"), mode) as f:
|
|
||||||
f.write(f"import site; site.addsitedir({LIBDIR})")
|
|
190
scenery/dsftxt2stg.py
Executable file
190
scenery/dsftxt2stg.py
Executable file
@ -0,0 +1,190 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#-*- coding:utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
import random
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from fgtools.dsf2stg_lookup import lookup
|
||||||
|
from fgtools import utils
|
||||||
|
|
||||||
|
cars = [
|
||||||
|
"hatchback_red.ac",
|
||||||
|
"hatchback_blue.ac",
|
||||||
|
"hatchback_black.ac",
|
||||||
|
"hatchback_black.ac",
|
||||||
|
"hatchback_silver.ac",
|
||||||
|
"hatchback_silver.ac",
|
||||||
|
"hatchback_green.ac",
|
||||||
|
"van_blue_dirty.ac",
|
||||||
|
"van_red.ac",
|
||||||
|
"van_silver.ac"
|
||||||
|
]
|
||||||
|
|
||||||
|
cessnas = [
|
||||||
|
"Cessna172.ac",
|
||||||
|
"Cessna172_blue.ac",
|
||||||
|
"Cessna172_green.ac",
|
||||||
|
"Cessna172_red.ac",
|
||||||
|
"Cessna172_sky.ac",
|
||||||
|
"Cessna172_yellow.ac",
|
||||||
|
"Cessna150_no_reg.ac"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def find_txt_files(path):
|
||||||
|
found = []
|
||||||
|
for root, folders, files in os.walk(path):
|
||||||
|
for f in files:
|
||||||
|
if f.endswith(".txt"):
|
||||||
|
found.append(os.path.join(root, f))
|
||||||
|
return found
|
||||||
|
|
||||||
|
def parse_txt_file(path):
|
||||||
|
with open(path) as f:
|
||||||
|
content = list(map(str.strip, f.readlines()))
|
||||||
|
|
||||||
|
objpaths = []
|
||||||
|
for line in content:
|
||||||
|
if line.startswith("OBJECT_DEF"):
|
||||||
|
objpaths.append(line.split()[1])
|
||||||
|
|
||||||
|
objects = []
|
||||||
|
for line in content:
|
||||||
|
if line.startswith("OBJECT "):
|
||||||
|
line = line.split()
|
||||||
|
objects.append({"path": objpaths[int(line[1])], "lon": float(line[2]), "lat": float(line[3]), "hdg": float(line[4])})
|
||||||
|
|
||||||
|
return objects
|
||||||
|
|
||||||
|
def parse_txt_files(files):
|
||||||
|
objects = []
|
||||||
|
total = len(files)
|
||||||
|
i = 1
|
||||||
|
for f in files:
|
||||||
|
print(f"\rParsing DSF/TXT files … {i / total * 100:.1f}% ({i} of {total})", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
objects += parse_txt_file(f)
|
||||||
|
i += 1
|
||||||
|
print()
|
||||||
|
return objects
|
||||||
|
|
||||||
|
def calc_object_elevs(objects, fgelev_pipe):
|
||||||
|
total = len(objects)
|
||||||
|
i = 1
|
||||||
|
for o in objects:
|
||||||
|
print(f"\rCalculating object elevations … {i / total * 100:.1f}% ({i} of {total})", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
fgelev_pipe.stdin.write(f"{o['path']} {o['lon']} {o['lat']}\n".encode("utf-8"))
|
||||||
|
fgelev_pipe.stdin.flush()
|
||||||
|
fgelevout = fgelev_pipe.stdout.readline().split()
|
||||||
|
if len(fgelevout) == 2:
|
||||||
|
o["alt"] = float(fgelevout[1])
|
||||||
|
else:
|
||||||
|
print(f"\rReceived unusable output from FGElev: {fgelevout} for longitude {o['lon']} and latitude {o['lat']} - skipping object")
|
||||||
|
print(f"\rCalculating object elevations … {i / total * 100:.1f}% ({i} of {total})", end="")
|
||||||
|
i += 1
|
||||||
|
print()
|
||||||
|
return objects
|
||||||
|
|
||||||
|
def group_objects_by_tile(objects):
|
||||||
|
tiles = {}
|
||||||
|
for o in objects:
|
||||||
|
tile_index = utils.get_fg_tile_index(o["lon"], o["lat"])
|
||||||
|
if not tile_index in tiles:
|
||||||
|
tiles[tile_index] = []
|
||||||
|
tiles[tile_index].append(o)
|
||||||
|
|
||||||
|
return tiles
|
||||||
|
|
||||||
|
def write_stg_files(objects, output):
|
||||||
|
total = len(objects)
|
||||||
|
i = 1
|
||||||
|
not_found_xpaths = []
|
||||||
|
for tile_index in objects:
|
||||||
|
print(f"\rWriting STG files … {i / total * 100:.1f}% ({i} of {total})", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
stgpath = os.path.join(output, utils.get_fg_tile_path(objects[tile_index][0]["lon"], objects[tile_index][0]["lat"]) + ".stg")
|
||||||
|
os.makedirs(os.path.join(*os.path.split(stgpath)[:-1]), exist_ok=True)
|
||||||
|
with open(stgpath, "w") as f:
|
||||||
|
for o in objects[tile_index]:
|
||||||
|
opath = lookup.get(o["path"], None)
|
||||||
|
if not opath:
|
||||||
|
if o["path"] not in not_found_xpaths:
|
||||||
|
print(f"\rNo FlightGear model found for XPlane model {o['path']} - skipping")
|
||||||
|
print(f"\rWriting STG files … {i / total * 100:.1f}% ({i} of {total})", end="")
|
||||||
|
not_found_xpaths.append(o["path"])
|
||||||
|
continue
|
||||||
|
|
||||||
|
opath = opath["path"]
|
||||||
|
|
||||||
|
if opath == "CAR":
|
||||||
|
opath = "Models/Transport/" + random.choice(cars)
|
||||||
|
elif opath == "CESSNA":
|
||||||
|
opath = "Models/Aircraft/" + random.choice(cessnas)
|
||||||
|
|
||||||
|
f.write(f"OBJECT_SHARED {opath} {o['lon']} {o['lat']} {o['alt'] + lookup[o['path']]['alt-offset']} {o['hdg'] + lookup[o['path']]['hdg-offset']}\n")
|
||||||
|
i += 1
|
||||||
|
print()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
argp = argparse.ArgumentParser(description="Convert XPlane scenery DSF/TXT files to FlightGear scenery STG files")
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
"-i", "--input",
|
||||||
|
help="Input DSF/TXT file or directory containing such files",
|
||||||
|
required=True,
|
||||||
|
nargs="+"
|
||||||
|
)
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
"-o", "--output",
|
||||||
|
help="Output directory to put produced STG files into",
|
||||||
|
required=True
|
||||||
|
)
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
"-s", "--fgscenery",
|
||||||
|
help="Path to FlightGear scenery directories containing Terrain, more than one directory can be passed.",
|
||||||
|
nargs="+",
|
||||||
|
default=["~/TerraSync", "~/TerraSync/TerraSync", "TerraSync", "TerraSync/TerraSync"]
|
||||||
|
)
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
"-d", "--fgdata",
|
||||||
|
help="Path to FlightGear data directory.",
|
||||||
|
default="~/fgdata"
|
||||||
|
)
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
"-e", "--fgelev",
|
||||||
|
help="Name of / path to fgelev executable",
|
||||||
|
default="fgelev",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = argp.parse_args()
|
||||||
|
|
||||||
|
print("Searching for DSF/TXT files … ", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
txt_files = []
|
||||||
|
for i in args.input:
|
||||||
|
if os.path.isdir(i):
|
||||||
|
txt_files += find_txt_files(i)
|
||||||
|
elif os.path.isfile(i):
|
||||||
|
txt_files.append(i)
|
||||||
|
else:
|
||||||
|
print(f"\rInput file / directory {i} does not exist - skipping\nSearching for DSF/TXT files … ", end="")
|
||||||
|
print(f"done, found {len(txt_files)} files")
|
||||||
|
|
||||||
|
objects = parse_txt_files(txt_files)
|
||||||
|
print("Connecting to fgelev … ", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
fgelev_pipe = utils.make_fgelev_pipe(args.fgelev, args.fgscenery, args.fgdata)
|
||||||
|
print("done")
|
||||||
|
elev_objects = calc_object_elevs(objects, fgelev_pipe)
|
||||||
|
print("Grouping objects by tile … ", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
stg_groups = group_objects_by_tile(elev_objects)
|
||||||
|
print("done")
|
||||||
|
write_stg_files(stg_groups, args.output)
|
@ -7,22 +7,13 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from fgtools.utils import make_fgelev_pipe
|
||||||
|
|
||||||
class SkipReason:
|
class SkipReason:
|
||||||
NotFound = 0
|
NotFound = 0
|
||||||
DirEmpty = 1
|
DirEmpty = 1
|
||||||
NoSTG = 2
|
NoSTG = 2
|
||||||
|
|
||||||
def make_fgelev_pipe(fgelev, fgscenery, fgdata):
|
|
||||||
env = os.environ.copy()
|
|
||||||
env["FG_SCENERY"] = os.pathsep.join(fgscenery)
|
|
||||||
env["FG_DATA"] = fgdata[0]
|
|
||||||
pipe = subprocess.Popen(args=[fgelev, "--expire", "1"], env={**env, **os.environ}, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
pipe.stdout.flush()
|
|
||||||
pipe.stdout.readline()
|
|
||||||
pipe.stdin.flush()
|
|
||||||
pipe.stdin.flush()
|
|
||||||
return pipe
|
|
||||||
|
|
||||||
def read_stg_file(path):
|
def read_stg_file(path):
|
||||||
result = []
|
result = []
|
||||||
offset = 0
|
offset = 0
|
||||||
@ -191,7 +182,6 @@ def main():
|
|||||||
argp.add_argument(
|
argp.add_argument(
|
||||||
"-d", "--fgdata",
|
"-d", "--fgdata",
|
||||||
help="Path to FlightGear data directory.",
|
help="Path to FlightGear data directory.",
|
||||||
nargs=1,
|
|
||||||
default="~/fgdata"
|
default="~/fgdata"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#-*- coding:utf-8 -*-
|
#-*- coding:utf-8 -*-
|
||||||
|
|
||||||
import math
|
import math
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
def get_fg_tile_span(lat):
|
def get_fg_tile_span(lat):
|
||||||
if lat >= 89:
|
if lat >= 89:
|
||||||
@ -31,9 +33,72 @@ def get_fg_tile_span(lat):
|
|||||||
else:
|
else:
|
||||||
return 12
|
return 12
|
||||||
|
|
||||||
def get_fg_tile_index(lon, lat):
|
def get_fg_tile_index(dlon, dlat):
|
||||||
tile_width = get_fg_tile_span(lat)
|
tile_width = get_fg_tile_span(dlat)
|
||||||
x = math.floor((lon - math.floor(math.floor(lon / tile_width) * tile_width)) / tile_width)
|
lon = math.floor(dlon)
|
||||||
y = trunc((lat - math.floor(lat)) + 8)
|
lat = math.floor(dlat)
|
||||||
|
if tile_width <= 1:
|
||||||
|
x = math.floor((dlon - lon) / tile_width)
|
||||||
|
else:
|
||||||
|
lon = int(math.floor(lon / tile_width) * tile_width)
|
||||||
|
x = 0
|
||||||
|
|
||||||
|
if lat == 90:
|
||||||
|
lat = 89
|
||||||
|
y = 7
|
||||||
|
else:
|
||||||
|
y = math.floor((dlat - math.floor(dlat)) * 8)
|
||||||
|
|
||||||
return ((lon + 180) << 14) + ((lat + 90) << 6) + (y << 3) + x
|
return ((lon + 180) << 14) + ((lat + 90) << 6) + (y << 3) + x
|
||||||
|
|
||||||
|
def get_fg_tile_coords(index):
|
||||||
|
lon = index >> 14;
|
||||||
|
index -= lon << 14;
|
||||||
|
lon -= 180;
|
||||||
|
|
||||||
|
lat = index >> 6;
|
||||||
|
index -= lat << 6;
|
||||||
|
lat -= 90;
|
||||||
|
|
||||||
|
return lon, lat
|
||||||
|
|
||||||
|
def get_fg_tile_path(lon, lat):
|
||||||
|
top_lon = int(lon / 10);
|
||||||
|
main_lon = int(lon);
|
||||||
|
if (lon < 0) and (top_lon * 10 != lon):
|
||||||
|
top_lon -= 1;
|
||||||
|
top_lon *= 10
|
||||||
|
if top_lon >= 0:
|
||||||
|
hem = "e"
|
||||||
|
else:
|
||||||
|
hem = "w"
|
||||||
|
top_lon *= -1;
|
||||||
|
if main_lon < 0:
|
||||||
|
main_lon *= -1
|
||||||
|
|
||||||
|
top_lat = int(lat / 10)
|
||||||
|
main_lat = int(lat)
|
||||||
|
if (lat < 0) and (top_lat * 10 != lat):
|
||||||
|
top_lat -= 1
|
||||||
|
top_lat *= 10
|
||||||
|
if top_lat >= 0:
|
||||||
|
pole = "n"
|
||||||
|
else:
|
||||||
|
pole = "s"
|
||||||
|
top_lat *= -1
|
||||||
|
if main_lat < 0:
|
||||||
|
main_lat *= -1
|
||||||
|
|
||||||
|
return f"{hem}{int(top_lon):03d}{pole}{int(top_lat):02d}/{hem}{int(main_lon):03d}{pole}{int(main_lat):02d}/{get_fg_tile_index(lon, lat)}"
|
||||||
|
|
||||||
|
def make_fgelev_pipe(fgelev, fgscenery, fgdata):
|
||||||
|
env = os.environ.copy()
|
||||||
|
env["FG_SCENERY"] = os.pathsep.join(fgscenery)
|
||||||
|
env["FG_ROOT"] = fgdata
|
||||||
|
pipe = subprocess.Popen(args=[fgelev, "--expire", "1"], env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
pipe.stdout.flush()
|
||||||
|
pipe.stdout.readline()
|
||||||
|
pipe.stdin.flush()
|
||||||
|
pipe.stdin.flush()
|
||||||
|
return pipe
|
||||||
|
|
||||||
|
@ -5,8 +5,6 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
HOME = os.environ.get("HOME", os.path.expanduser("~"))
|
HOME = os.environ.get("HOME", os.path.expanduser("~"))
|
||||||
SCRIPTS = ["process-shapefiles.py", "process-elevations.py"]
|
|
||||||
MODULE = "tgtools"
|
|
||||||
__version__ = (1, 0, 0)
|
__version__ = (1, 0, 0)
|
||||||
__versionstr__ = ".".join(map(str, __version__))
|
__versionstr__ = ".".join(map(str, __version__))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user