Samples and Demos

When you first loaded XPPython3, we automatically downloaded the current set of sample programs to the samples directory under PythonPlugins. The full set is located on github xppython3-demos/.

You can download a full set of sample plugins by selecting Download Samples from the XPPython3 menu. (The files will be copied into PythonPlugins/samples).

To use any sample, copy or move it from PythonPlugins/samples to PythonPlugins/ (because XPPython3 doesn’t look for plugins in subdirectories!) You may have to copy one or two other files from samples to get the plugin working.

PI_3dLabel.py

Demonstrates how to use a 2-d drawing callback to draw to the screen in a way that matches the 3-d coordinate system. Add-ons that need to add 3-d labels, coach marks, or other non-3d graphics that “match” the real world can use this technique to draw on with Metal and Vulkan. Ported from C version on developer.x-plane.com “Drawing 2-D That Matches the 3-D world”.

PI_Arduino1.py

Finds and connects with Arduino device and polls device for information using a separate python Thread in order to not slow down X-Plane.

Includes example Arduino program (which you’ll need to download to your device).

PI_Bounds.py

Displays monitor number, size and if you’re running VR using getWindowGeometry, getMonitorBounds and related. See also More about Window Positioning.

PI_Camera1.py

Ported from python2 example. Registers a new view and orbits the aircraft, using controlCamera.

PI_CommandSim1.py

Ported from python2 example. Simple sending of XP commmands using menu items. appendMenuItemWithCommand and findCommand.

PI_Control1.py

Ported from python2. Demonstrates how to move aircraft control surfaces. Should be used with the Override1 plugin. Original by Sandy Barbour include with PythonInterface.

PI_ExampleGauge.py

Ported from Sandy Barbour’s Example Gauge example.

Draws a floating panel, with gauge tied to ENGN_N1_ dataref. Press F8 to toggle display, drag panel by selecting top ~20 pixels of panel.

Copy ExampleGauge/*.bmp bitmaps from sample direcctory into Resource/plugins/PythonPlugins/ExampleGauge/ so this plugin can find them.

Uses OpenGL, textures, registerHotKey.

PI_FMSUtility1.py

Ported from python2 example. Demonstrates access to the FMS. getDisplayFMSEntry, setDisplayFMSEntry, getDestinationFMSEntry, setDestinationFMSEntry, getFMSEntryInfo, setFMSEntryInfo, findNavAid, setFMSEntryLatLon.

PI_HelloWidget.py

Displays simple widget-based window, and logs messages. Described more fully in Hello Widget. Uses createWidget, addWidgetCallback.

PI_HelloWorld1.py

Ported from python2 example. Described more fully in Hello World. Uses createWindowEx and window callbacks.

PI_HotKey1.py

Ported from python2 example. Maps a hotkey to a command. Uses registerHotKey and speakString.

PI_imgui.py

Simple popup window with imgui-based widgets. See Using imgui.

PI_InputOutput1.py

Ported from python2 example. Demonstrates input / output of data from X-Plane, (changing engine throttle and obtaining resulting N1). Should be used with the Override1 plugin Original by Sandy Barbour included with PythonInterface.

PI_KeySniffer1.py

Ported from python2 example. Intercepts key strokes and displays result. Uses registerKeySniffer.

PI_ListBox.py

Demonstrates the use of a listbox widget (requires XPListBox.py.) XPListBox was modelled after a version on xsquawkbox.net.

PI_ManagePlugins1.py

Ported from python2 example. Demonstrates finding, enabling and disabling plugins. Uses countPlugins, getNthPlugin, getMyID, disablePlugin

PI_Map.py

Ported from C version on developer.x-plane.com. Draws on the X-Plane map using RegisterMapCreationHook, OpenGL, drawMapLabel, mapProject, mapUnProject, mapScaleMeter.

To use, you’ll also need to copy map-sample-image.png from PythonPlugins/samples into Resources/plugins folder.

PI_MiniPython.py

In-game python interpreter. Allows you to execute most python within context of running X-Plane. Great way to test SDK APIs and see what happens. Requires XPListBox.py to be copied also.

PI_MultiProcess.py

Demostrates use of python multiprocessing module. Uses xp.pythonExecutable.

PI_Navigation1.py

Ported from python2 example. Demonstrates use of FMC and the navigation databases. Uses findNavAid, getNavAidInfo, setFMSEntry, clearFMSEntry.

PI_OpenGL.py

Demonstrates use of OpenGL, and tests the installation for correct set up of OpenGL. Note Mac Big Sur will not run OpenGL without a minor one-time change. This plugin may be useful to plugin developers who require clients to install OpenGL (or imgui).

PI_Override1.py

Ported from python2. Demonstrates how to change various override datarefs. Original by Sandy Barbour included with PythonInterface.

PI_Position1.py

Ported from python2. Demonstrates how to change aircraft attitude. Original by Sandy Barbour included with PythonInterface. Uses localToWorld, worldToLocal, getWidgetProperty, setWidgetPropoerty, setDataf.

PI_SharedData1.py, PI_SharedData2.py

Ported from python2. Demonstrates sharing data between to different plugins. Using findDataRef, shareData, registerDataAccessor.

PI_SimData1.py

Ported from python2. Demonstrates how to interact with X-Plane by reading and writing data. Uses createMenu, appendMenuItem, findDataRef, getDatai and setDatai.

PI_TCASOverride.py

This plugin creates four traffic targets that will fly circles around the users’ plane. These traffic targets exist purely as TCAS targets, not as 3D objects, as such would usually be placed by XPLMInstance. Ported from C version on developer.x-plane.com “Overriding TCAS” and discussed in “Overriding TCAS and providing traffice information” Uses getDatad, getDataf, getDatavi, setDatavf, setDatai, setDatavi, setDatab, getDatab setActiveAircraftCount, acquirePlanes, releasePlanes, countAircraft, getPluginInfo.

PI_TextureDraw.py

Ported from C vesion on devevlper.x-plane.com “TextureDraw” Uses bindTexture2d, setGraphicsState , and generateTextureNumbers, with OpenGL glTexSubImage2D.

PI_TimedProcessing.py

Ported from python2. Demonstrates how to use timed processing callback to continuously record data to disk. Uses getSystemPath, findDataRef, getDataf registerFlightLoopCallback, getElapsedTime.