IceCube Builder on the NetBeans Platform

DZone 's Guide to

IceCube Builder on the NetBeans Platform

· Java Zone ·
Free Resource

IceCube is a complete integrated environment for the simple authoring and publishing of complex and fully interactive 3D animations enriched by customizable and dynamic 2D interfaces. The sequences can be easily composed with the IceCube Builder, distributed with a standalone IceCube Player and directly projected on the web with IceCube WebView. There is also a multi-touch enabled version of the IceCube Player that let the user navigate the 3D model using multi-finger gesture and interact with the 2D widgets. For more information visit the IceCube website.

All the programs are written in Java and are powered by DDD – in-house libraries for mechanical 3D simulation. The IceCube Player is a standalone player designed to be distributed on CD or USB media and the IceCube WebView is an applet for online distribution: for this reason the size and startup time has been minimized and they both have a minimal interface similar to a movie player. The IceCube Builder, instead, is a complex Swing application that support drag&drop and visual 3D editing.

NetBeans Platform

IceCube Builder is based on the NetBeans Platform: previous versions of the builder application where based on an in-house application framework. Most code of our framework was dedicated to handling the tree view: we found a more powerful and flexible substitute in the Nodes and Explorer & Property Sheet libraries. The MultiView Windows is used for switching between the animation and model editing and, thanks to the Lookup mechanism, the actions are enabled and behave accordingly. We implemented our own Palette and Property Editor components (to customize their behavior and appearance) and easily integrated them in the platform. We found a lot of useful classes and methods (for example the Dialogs, Progress and Utilities libraries) that are a key factor to rich application development.


The following screenshoots show some features of the IceCube Builder: a more detailed description and more screenshoots/videos can be found here.

Animation editing

The main area of the application window is occupied by the 3D view displaying the scene graph. Thanks to the integration between JOGL and Swing, this window is fully integrated in the docking system. On the left of the 3D view there is a tree displaying the instrusctions composing the animation. On the bottom of the tree there is the Property Editor for editing the currently selected node.

IceCube Builder main window

The palette component is used to create new elements using drag&drop: animation, widget animation, show/hide connection line, enable/disable hit sensor, serial/parallel container, create/destroy joint, change appearance, change camera, move joint, move object, delay, pause, execute.

IceCube Builder palette

Model editing

The tree represents the scene graph of objects composing the model. Each object can have a name, a geometry (a primitive shape or a mesh imported from VRML), an optional length unit, and a joint. The supported type of joints are rigid, translational, rotational and screw. The last three type of joints are defined with an axis (that can be picked in the 3D view) and optional limits (upper and lower values).

IceCube Builder model editor


Widgets property can be changed directly on the window using the mouse: they can be moved, resized and rotated and this transformation are automatically animated. The content of the widget is associated to an unique ID to identify it during the transtation (i18n).

IceCube Builder widgets


A separated window is dedicated to the translation of the texts. On the left there is the text in the default language and on the right it is possible to edit the text in the active language, From this window it is also possible to add or remove a language and to select the default language.

IceCube Builder i18n editor


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}