Internal Libraries
From K-3D
Overview
At its heart, K-3D is built on the K-3D SDK library (k3dsdk), which defines interfaces and classes used everywhere, including plugins, plus core internal functionality including plugin loading, application and document objects, undo/redo storage, and the like.
The design allows K-3D to be "embedded" into other apps. What you probably think of as K-3D is just our own example of such an app, one that links k3dsdk into a binary executable to create our "standard" K-3D with its "standard" user interface. The code that ties everything together is in application/main.cpp. If you wanted to create an application that used a different UI toolkit, you could copy application/main.cpp and modify a handful of lines of code to link with your UI of choice.
In newer versions of K-3D (starting with 0.5/0.6), user interfaces are now a type of plugin, so you could implement an alternate user interface without having to touch the main application at all.
Beyond user interface considerations, a person might want to embed K-3D into a scripted environment such as Perl, rather than embedding the Perl interpreter into K-3D as a plugin. There are many interesting possibilities.
Following is an overview of K-3D's internal libraries:
K-3D 0.5/0.6
- k3dsdk - The K-3D SDK - used by plugin authors and embedders alike.
- ngui - The Next Generation User Interface is a single-window user interface plugin based on gtkmm and gtkglext. Depends on k3dsdk.
- nui - The Null User Interface is a do-nothing user interface plugin that can be used to run K-3D in a non-graphical server environment (why, we're not entirely sure).
- qtui - The Qt User Interface layers a minimal, "view only" user interface on top of K-3D. It is mainly there to prove that it can be done (and because Tim needed some experience with Qt for work).
K-3D 0.4
- sdptypes - Wraps std::string with sdpString, which was a terrible idea. Eliminated in 0.6. Don't try this at home, kids!
- sdpxml - Provides a DOM-like model for reading / writing XML documents that is designed to work well with the C++ Standard Library. Cleaned-up extensively and merged into k3dsdk in 0.6.
- sdpsl - Provides parsing and metadata for RenderMan Shading Language shaders. Cleaned-up and merged into k3dsdk in 0.6.
- sdpgl - Provides optional tracing of OpenGL API calls. Merged into k3dsdk in 0.6.
- sdpgtk - Provides C++ wrappers for GTK that have not aged well. Replaced with gtkmm in 0.6.
- k3dsdk - The K-3D SDK - used by plugin authors and embedders alike.
- k3dembed - The K-3D implementation library - used by application embedders.
- k3dui - The multi-window K-3D user interface, built on sdpgtk. Replaced with a single-window Next Generation User Interface (NGUI) in 0.6.
See also External Dependencies.