In addition to loading source code plugins World Wind also probes for .dll files inside the Plugins directory that implement the plugin interface. If found they will be displayed in the Plugin Dialog.
Currently, VB.net, C# and JScript.net in addition to pre-compiled binary plugins.
It is the responsibilty of the plugin to restore World Wind to the original state when the plugin is unloaded. For example if the plugin adds menu items, the plugin must remove those menu items when unloading.
In World Wind 1.4 or newer, a change was made to the rendering code to try to reduce the camera jitter caused by precision error when zoomed in close to the terrain. In your overridden Render method you need to modify the 3d device to work relative to the camera’s reference center before doing any rendering, then reset it afterwards. See this page for an example.
Check WorldWindow.RenderPositionInfo for ideas on how to draw text on screen.
Currently events aren’t used in World Wind. If you are writing a layer you can instead in the Update method store the current vertical exaggeration value. Next time your update method is called (by the background worker thread) you check if it has changed.
ParentApplication.WorldWindow.CurrentWorld.RenderableObjects
This RenderableObjectList contains a collection of RenderableObjects and RenderableObjectLists making it a tree.
MainApplication.DirectoryPath
Use the REFERENCES keyword in the Plugin Header.
Override OnPropertiesClick for example like this:
/// <summary>
/// Layer properties context menu item
/// </summary>
protected virtual void OnPropertiesClick(object sender, System.EventArgs e)
{
if(m_propertyBrowser!=null)
m_propertyBrowser.Dispose();
m_propertyBrowser = new MyFancyPropertyDialog(this);
m_propertyBrowser.Show();
}
ParentApplication.WorldWindow.GotoLatLonAltitude(50.94299, 6.96291, 10000) for Latitude, Longitude, Altitude input
ParentApplication.WorldWindow.GotoLatLon(double latitude, double longitude) for Latitude, Longitude input
ParentApplication.WorldWindow.GotoLatLonHeadingAltitude(double latitude, double longitude, double heading, double altitude) for Latitude, Longitude, Heanding, Altitude input
ParentApplication.WorldWindow.GotoLatLon(double latitude, double longitude, double heading, double altitude, double perpendicularViewRange, double tilt) for Latitude, Longitude, Heanding, Altitude, FOV, Tilt input
For URI Input first add in the class:
public static WorldWindUri worldWindUri;
ParentApplication.WorldWindow.ParentApplication.WorldWindow.Goto(WorldWindUri.Parse("worldwind://
goto/world=Earth&lat="+Latitude + "&lon=" + Longitude + "&alt=" + Altitude+ "&dir=" + Heading +
"&tilt=" + Tilt));
ParentApplication.WorldWindow.DrawArgs.WorldCamera.Latitude ParentApplication.WorldWindow.DrawArgs.WorldCamera.Longitude
The Plugin base class has a property PluginDirectory that contains the path from which the plugin was loaded. This path may be used to find any additional files you may want to load.
this.PluginDirectory
Plugins in WorldWind can also be DLL files as well as raw *.cs code. Like the *.cs plugins, they also have to be placed under the ‘Plugins’ folder so that WW can find them. A DLL plugin will show up in the Plugins–>Load box.
mkdir $(SolutionDir)bin\Release\Plugins\”mypro ject” copy $(TargetFileName) $(SolutionDir)\bin\Release\Plugins\”mypr oject”\
…replace what’s in the quotes with the name of your plugin, eg: “AccessDemo” (make sure to leave out the quotes). This will place a copy of the dll (on successful build) where it needs to be relative to the Worldwind master tree for execution. Save your new project properties. You would put ‘Debug’ instead of ‘Release’ for a Debug build.
If you had the plugin.cs file under the ‘WorldWind’ project while you were developing it, and you have moved it to it’s own new project, make sure that a copy didn’t stay under the ‘WorldWind’ project…if it did, delete the duplicate copy from under the ‘WorldWind’ project.
Don’t know if these instructions are flawless, but they’ll get you most of the way