Kdyz jsme u toho Sandyho... Command Line je sice pekne udelatko, ale jeho stezejni pocin je samozrejme
PYTHON INTERFACE PLUGIN:
http://www.xpluginsdk.org/python_interface.htm
Tedy X-Plane rozhrani pro psani modulu zpristupnene v programovacim jazyku Python. Na rozdil od Lua skriptu, kde vselijake velke pluginy obsahuji vzdy svuj vlastni interpretr (vy jste si mysleli, ze si drahy pocitac kupujete kvuli simulaci? :-), Python rozhrani je jen jedno. A budete jej potrebovat, i kdyz budete chtit jen pouzivat pluginy v Pythonu napsane (napriklad zminovane fseconomy, noaa weather, a dalsi).
Instalace python interface dela nekterym lidem bohuzel problemy. Ale neni to nic tezkeho.
- na zacatek potrebujete vedet jen 2 veci:
1) Spoustite 64-bitovy X-Plane (a mate tedy 64bit OS a CPU) nebo 32-bit? (Dnes obvykle odpoved: 64)
2) Chcete interface pro Python 2.6 nebo Python 2.7? Pokud nevite, pak je odpoved 2.7!
A je to.
- pokud nemate Python, z
https://www.python.org/downloads/ stahnete instalator pro svuj operacni system, patricne bitovy (otazka 1) a v patricne verzi (otazka 2) -- pozor nejnovejsi Python je 3.neco; vy chcete posledni 2.7.neco -- a nainstalujete
- stahnete patricny Python Interface a rozbalite do
Resources/plugins/PythonInterface (to je umisteni vlastniho modulu)
- do
Resources/plugins/PythonScripts pak umistujete python pluginy, ktere chcete (soubory zacinaji na PI_ a konci na .py :-)
A je to!
A kdyz uz mate Python Interface nainstalovany, co si tak zkusit napsat nejaky plugin? Tady
http://www.xpluginsdk.org/downloads/PythonScripts.zip najdete spoustu zajimavych prikladu.
Mimochodem, Python Interface je opravdu jenom tenky wrapper kolem C rozhrani. Sice pisete v Pythonu, ale pripravte se na vsechna uskali low-level jazyka. Napr. vystupni hodnoty nedostavate jako navratovou hodnotu funkce, ale jsou vam doplneny do promenne, kterou predhodite jako argument. Netrefite spravny typ a tedy velikost? Spravne: segfault a crash celeho X-Plane. Not funny.
Python Interface je tedy alespon stejne rychla, jako C. Vypada to alespon trochu jako Python. A nemusite resit kompilaci pro pet-sest(!) ruznych architektur. A muzete v podstate pouzivat puvodni dokumentaci X-Plane SDK.
Ale pojdme uz na ten PI_Hello_world.py:
Kód: Vybrat všefrom XPLMDefs import *
from XPLMDisplay import *
from XPLMGraphics import *
class PythonInterface:
def XPluginStart(self):
self.Name = "HelloWorld1"
self.Sig = "SandyBarbour.Python.HelloWorld1"
self.Desc = "A test plugin for the Python Interface."
self.Clicked = 0
self.DrawWindowCB = self.DrawWindowCallback
self.KeyCB = self.KeyCallback
self.MouseClickCB = self.MouseClickCallback
self.WindowId = XPLMCreateWindow(self, 50, 600, 300, 400, 1, self.DrawWindowCB, self.KeyCB, self.MouseClickCB, 0)
return self.Name, self.Sig, self.Desc
def XPluginStop(self):
XPLMDestroyWindow(self, self.WindowId)
def XPluginEnable(self):
return 1
def XPluginDisable(self):
pass
def XPluginReceiveMessage(self, inFromWho, inMessage, inParam):
pass
def DrawWindowCallback(self, inWindowID, inRefcon):
lLeft = []; lTop = []; lRight = []; lBottom = []
XPLMGetWindowGeometry(inWindowID, lLeft, lTop, lRight, lBottom)
left = int(lLeft[0]); top = int(lTop[0]); right = int(lRight[0]); bottom = int(lBottom[0])
gResult = XPLMDrawTranslucentDarkBox(left, top, right, bottom)
color = 1.0, 1.0, 1.0
if self.Clicked :
Desc = "I'm a plugin 1"
else:
Desc = "Hello World 1"
gResult = XPLMDrawString(color, left + 5, top - 20, Desc, 0, xplmFont_Basic)
def KeyCallback(self, inWindowID, inKey, inFlags, inVirtualKey, inRefcon, losingFocus):
pass
def MouseClickCallback(self, inWindowID, x, y, inMouse, inRefcon):
if ((inMouse == xplm_MouseDown) or (inMouse == xplm_MouseUp)):
self.Clicked = 1 - self.Clicked
return 1
Vidite? Neni to nic tezkeho. Ty prvni metody (start, stop, enable, disable, message) jsou povinne, protoze je X-Plane zavola v patricne situaci.
Tady se v metode start vytvori okno a nastavi callback pro jeho prekresleni a pro kliknuti mysi. A v tech callbacich se okno spravne prekresli, resp. se aktualizuje informaci o stisku tlacitka.
Za domaci ukol kouknete na ostatni examply!