ICE Geometry Editor
The ICE Geometry Editor provides users of ICEClient a method for viewing and editing application-specific input data in the form of 3D volume meshes. Editing is performed by means of constructive solid geometry, as is used in many CAD and drafting tools. The Geometry Editor integrates with ICE to enable users to build geometry data inside the ICEClient environment, as well as to generate output formats to be served as input data for processes launched with ICECore.
The user must be able to perform the following from the Geometry Editor's interface.
- Add shapes from a predefined list to the viewport (spheres, cubes, cylinders, cones, Platonic solids, and imported custom meshes).
- Apply set operations to two or more objects (union, intersection, complement).
- Edit each shape's matrix transformations (position, size, scale, rotation, shear).
- Select multiple groups of objects as well as their constituent primitive shapes. Once selected, the user may delete, duplicate, or reorder its role in the CSG tree.
- Optionally rename instances of primitives and groups.
In order to integrate with ICECore, ICEClient, and third-party applications, the geometry engine must have the following capabilities:
- Initialize, import, and modify a CSG tree
- Generate a triangle surface mesh for the jMonkeyEngine Mesh format in order to display an interactive preview for the user in the Geometry Editor's viewport
- Generate a tetrahedral volume mesh to be used by a third-party application
- Build a ICE Component with the CSG tree, including all information required to persist and restore a geometry model
- Export to standard and application-specific geometry and volume mesh formats (BREP, etc.)
Graphical User Interface
The Geometry Editor GUI is opened from within the ICEClient environment. Within this environment are three dockable panels—the Viewport panel, the Object List panel, and the Transform panel. Each of these are used to manipulate the CSG tree, i.e. create shapes, relate them with set operations, and edit their transformation matrix.
A variable-quality rendering of the CSG tree is displayed in the Viewport panel, along with a Mini-Axis Widget for determining the orientation of the virtual camera. With the mouse, the user can pan and rotate the camera's perspective and select certain types of primitives and groups. Right-clicking will display a context menu with additional features for quick access.
Object List Panel
The Object List panel features a representation of the current CSG tree as an SWT Tree or JFace TreeViewer. Leaf nodes in this tree list correspond to primitive shapes, while parent branches represent set operations applied to their child nodes. The user may select multiple objects from this tree to delete, duplicate, or rename them.
Users can manipulate the transformation matrix of a selected object with the Transform panel. This panel contains a text box for position, size, scale, rotation, and shear for each of the needed coordinates. A child will inherit its parents' transformations, but its own transformation parameters will be preserved. This is achieved by applying the dot product to each of its corresponding transformations matrices.
The Mini-Axis Widget is shown in the center of the Viewport panel and reveals the orientation of the camera by labeling each of the three axes. Clicking and dragging one of the arrowheads will transpose the selected object. By holding down modifier keys, the user may instead scale, size, or rotate the object.
"I hate meshes. I cannot believe how hard this is. Geometry is hard."
—David Baraff, Senior Research Scientist, Pixar Animation Studios