Tools - openantz/antz GitHub Wiki
Tools & Modes to Create, Select, Edit and Modify
This page details tool usage and operation modes for various user interface devices (keyboard, mouse, 6DOF, etc.) You may want to first look at the general overview of User Commands.
Input Devices & Tool Mode
The tool mode determines what type of nodes are created, selected and modified. Each indicator works a little differently and independently. Currently, there are (*up to) 4 HUD items in the toolbar that display the tool mode:
- Keyboard & Mouse
- [mode: (node type) ] - Type of nodes to operate on (Camera, Grid, Glyph...)
- [tool: (tool type) ] - Tool type to use (described below).
- Note that the keyboard (Game Mode) can directly access many tools, but certain tools change it's behavior (see below for details).
- [3Dmouse: (tool) ] - Used for modifying glyphs and navigation:
- Camera - (Blue) Fly or Orbit (XYZ) the currently selected camera.
- Glyph - (Red) Modify the actively selected glyphs (and grids).
- [zStylus: (tool) ] - Similar to the regular mouse tools with additional 6DOF interation.
*Note that the [3Dmouse: (tool) ] and [zStylus: (tool) ] are only visible when a SpaceMouse or zSpace device is installed.
The [mode: (node type) ] determines which node types to operate on:
- Camera - Navigates the scene (Fly, Orbit (XY/XZ), Look (XY)) .
- Grid - Allows selecting, modifying and creating new grids.
- Changing to 'mode: Grid' does NOT select a grid, however if in Grid mode, pressing G key will select the next grid.
- Note that grids are ONLY clickable in 'mode: Grid', though it is also possible to select a sub-grid by using the Arrow Keys to traverse hyperglyphs.
- Glyph - Allows selecting, modifying and creating new glyphs.
- 3 fundamental glyph types:
- Standard Glyph or just plain Glyph has a variety of topo types (solo or part of a hyperglyph tree), but excluding the special glyph types Link and Grid.
- Link glyphs allow bridging across (hyperglyph) tree hierarchies, allowing any two glyphs in the scene to be connected.
- Grid glyphs topo = grid, and it interacts differently with the user interface and also resets the branch level of it's child glyphs, starting with root glyphs level = 1.
- 3 fundamental glyph types:
- *We plan to add a mode for Lights & HUD (custom user interface).
Create
- Create - Tool (N key) will generate a new node based on the current mode and selection.
- mode: Camera - Will generate a new camera attached to the root camera.
- *Future feature - Camera's can be attached to sub-grids.
- mode: Grid - Will generate a new sub-grid attached to the currently selected node (the parent can be either a glyph or grid).
- mode: Glyph - If a root glyph is currently selected (or no glyphs at all) then a new root glyph (pin) with sub-torus is created and auto-distributed (based on number of siblings) onto the current (root or sub) grid. Otherwise a new glyph is attached as a child, with distribution and topo type based on the parent glyphs topo.
- Note that if you wish to attach a child to a root glyph you need to press Shift+N key combo.
- mode: Camera - Will generate a new camera attached to the root camera.
Select
-
Allows you to select glyphs (or grids) by picking individual items, branches or selecting a region (with filters).
-
[Link]
- L-Click on the 'A' link end and then select the 'B' link end.
- R-Click cancels and resets for picking the 'A' link end.
-
[Combo]
- L-Hold drags selected objects in XY (L-R & Forward-Back).
- R-Hold scale objects up/down.
-
[Move]
- L-Hold moves objects in XY (L-R & Forward-Back).
- R-Hold moves objects in XZ (L-R & Up-Down).
-
[Rotate]
- L-Hold rotates objects on X & Y axes (Heading, Tilt).
- R-Hold rotates objects on Z axes (Roll)
-
[Hide]
- R-Click to Hide all sub-branches of selected node.
- L-Click to un-Hide sub-branches.
- See Keyboard Game Mode commands below for hiding per branch level, etc.
-
[Topo], [Geometry], [Color], [Texture]
- L-Click for next (topo type, index color, texture map, etc...).
- R-Click for previous type.
-
[Text Tag]
- L-Click to select a glyph, and then use keyboard to modify or enter a new tag.
- Repeating L-Click on the same glyph will change it's draw style (color, size).
- R-Click will hide the tag (but the text will be retained).
- You can exit Tag Console and return keyboard to Game Mode by pressing 'Esc'.
- In Game Mode (with Text Tag tool) you can hide all tags with ` (left single quote).
- Enter - will return you back to the Tag Console.
- L-Click to select a glyph, and then use keyboard to modify or enter a new tag.
-
Hidden Tools - accessible via scrollwheel
- [Alpha] - Changes glyph opacity (transparency).
- [Channel] - An animation channel subscribes selected nodes to tracks. Each node (glyph, camera, grid, etc.) can be subscribed to an input channel and a seperate *output channel. The channels are defined in the 'np_ch' table and map columns from the 'np_track' table directly to any node attribute. Multiple nodes can use the same input channel (*but only one node can write to an output channel.)
- *Feature feature will support output channel ('ch_out' field in the 'np_node' table).
- [Freeze] - Freezes animation and editing.
- [Set High] - Restricts the max position of a glyph to current location.
- [Set Low] - Restricts the minimum position (is specific to active axes X key).
Future Feature - Save Selected Sub-Nodes & Branches with World Positions.
Implementing a basic 'Save Selected Branches' feature. Which when saving sub-nodes (without root parent) will use their local coordinates (not world position).
However, in the future... Would like to be able to save (sub)nodes such that they appear in the scene in the same position(translate/rotate) & scale. This brings up some (conceptually and technically) difficult coordinate issues:
Translate (easiest) & Rotate (medium difficult) - local to (global) world is straight forward. But, perhaps (when applicable or by user preference) we want the coordinates to be relative to their sub-grid-world rather than the root-grid-world.
Scale (difficult/tricky) - the challenge is (currently) we allow inherited non-uniform scale which results in an arbitrary non-uniform scale orientation. Possible solutions: 1) We ignore inherited scale when saving sub-nodes. 2) Approximate inherited scale and apply it as a uniform scale. 3) We store the node hierarchy as hidden glyphs. 4) We deprecate non-uniform scale inheritance: - allow ONLY uniform scale to be inherited. - yet still allow node to have a local non-uniform scale. - inherit just one axis and/or a sum of scale axes. 5) Add parameters for (non-uniform) scale orientation.
Each of these has trade-offs (complexity, backwards compatibility, etc). And I don't plan to implement this today, however it is worth plotting a route (as this is the start of such an implementation).