NASA created WorldWind, an open source virtual globe technology providing the means to visualize, manipulate and analyze data in a real world virtual representation. NASA World Wind was created by NASA's Learning Technologies project, and released in mid 2004. It is now developed by NASA staff and open source community developers.
WorldWind is implemented in Java for maximum platform portability. While this makes it available on many different operating systems, it leaves developers who use Microsoft's .NET framework out in the cold, and .NET on Windows is a popular choice for GUI applications.
WorldWind.NET solves this problem and allows .NET developers to take full advantage of WorldWind. The image below shows a .NET Forms-based demo application with an embedded WorldWindCanvas.
How It Works
We used our JuggerNET product to generate .NET proxy types for the complete WorldWind API and some
assorted Java support types. JuggerNET also generates a special type that—as far as Java Swing components
are concerned—is a top level
Frame, but—as far as .NET is concerned—is an
embeddable GUI component. Your developers embed that component in their .NET form window and use the
generated WorldWind proxy types to customize and control the displayed WorldWind globe.
Just to stress this fact: our code generators generate .NET bindings for Java types, they do not translate the Java types to .NET. As the proxy types delegate to Java, you still need to deploy all the WorldWind jar files and of course the maps. We just provide you with the thinnest and fastest possible .NET shim over them.
Is Anything Missing?
We provide almost the entire public WorldWind API to you. The only things that are missing are a few nested types that cause compilation issues when translated to .NET. None of our users have missed them so far. In fact, you could argue that we provide too many proxy types. We don't know which Java types you are interested in using, so we provide proxy types for all of them. This results in a pretty large .NET proxy type assembly.
You could optimize the size of this assembly by using JuggerNET to generate only the proxy types for the WorldWind types you really want to code to in .NET. JuggerNET's powerful features make it very easy to customize the set of types that are exposed to .NET.
Reliability, Reliability, Reliability...
The fact that the overwhelming majority of the code you will use as part of WorldWind.NET is computer-generated has some fairly dramatic consequences: while it does not guarantee the absence of bugs, it guarantees that there are only three kinds of bugs:
- Systematic Bugs in the Generated Code
The chance that someone already stumbled over this kind of bug in the past is very large. We have a fairly large and active user base for all our products, so chances are that if there were a bug at all, it would be a fairly obscure one. To provide a now fixed code generator problem from the past as an example of such a systematic bug, here's a bug description: "two-deep nested inner interfaces don't generate correctly."
- Bugs in the Runtime Library
We've had our share of these over the years, but the majority tended to be relatively trivial and the last one was encountered in 2016. You will benefit from not just the WorldWind.NET user base filing bugs against this module but from all JunC++ion and JuggerNET users as well! The runtime library is a shared component between all three products.
- Bugs in the Underlying WorldWind Implementation (at Runtime)
You will be using the regular WorldWind Java distro at runtime, and that implementation will undoubtedly have some bugs. Your .NET code will encounter exactly the same bugs that your Java code encounters because it will be using the same Java implementation.
Why do we spend so much time talking about bugs? WorldWind is used in all kinds of environments, but we know that it features heavily in C3 applications. We would never have dared publishing WorldWind.NET if we had had to handwrite or even just manually touch the generated types.
By virtue of being generated, WorldWind.NET has a pretty stellar track record when it comes to reliability!