public class Display3D extends javax.swing.JPanel implements Steppable
Display3D's constructor takes a height and width, which is the height and width of the underlying display area (not including the button bar at-top). Display3D can be placed in a JFrame; indeed it provides a convenience function to sprout its own JFrame with the method createFrame(). You can put Display3D in your own JFrame if you like, but you should try to call Display3D.quit() when the frame is disposed.
The viewing area is by default set to roughly encapsulate a 2 by 2 by 2 cube centered at the origin. The user's eye is on the positive Z axis outside of the cube area and is looking down the negative Z axis.
Display3D can have both SimplePortrayal3Ds and FieldPortrayal3Ds attached. Once the Portrayals are attached, the you can transform them (rotate, scale, translate, etc.) all together as one scene via a Global Model Transform. Various Display3D functions are provided to manipulate this Transform (such as rotate(...)). Java3Ders in-the-know can also provide the actual Transform3D if they're feeling lucky.
Display3D provides the optional ability for the user to show axes and a backdrop. Axes are in the X, Y, and Z directions for one unit in length, and are added to the scene after the Global Model Transform has been applied. Thus if you've used the Global Model Transform to scale down your simulation into the space of a 2 by 2 by 2 cube centered at the origin, for example, the axes will just touch the edges of the cube. The backdrop is an optional feature that the programmer must add. You can provide either a spherical backdrop which rotates with the world (like a star field) or a flat backdrop which is always behind the environment and which fills the window exactly. Spherical backdrops can be wrapped with images (use a spherical projection) or -- for the daring Java3Ders -- Apperance objects. Flat backdrops can have images or flat colors.
Display3D uses Java3D to do its magic. Java3D is a sophisticated scene graph library, but we have done our best to hide this from you if you don't wish to know anything about how Java3D works. For those experienced in Java3D, we describe here the top-level scene graph used by the Display3D.
The Unverse is a SimpleUnverse called universe, the top BranchGraph is root, and the Canvas3D is a special subclass (CapturingCanvas3D) called canvas. A CapturingCanvas3D contains some additional machinery to make possible snapshots and movies. If you wish to add some scene graph material outside of Portrayal3Ds, and you don't want it to be transformed by the Global Model Transform, nor do you want it to be auto-spinnable, hanging it off of root is a good location. Note that even so, the user will be able to rotate, zoom, magnify, and translate the world with the mouse, and that includes this extra scene graph material.
Hanging off of root are two pairs of TransformGroups and RotationInterpolators responsible for auto-spinning the scene graph and a spherical backdrop (a Background object, if one exists), respectively. Auto-spinning happens in concert in these two TransformGroups, so the backdrop will always appear to be auto-spinning with the scene graph.
One of these TransformGroups (autoSpinTransformGroup) is public and holds the scene graph. The other TransformGroup is private. autoSpinTransformGroup is a good place to hang extra scene graph stuff you wish to add, if you don't want that stuff to be transformed along with the Portrayal3Ds, but you'd like it to be auto-spun along with the Portrayal3Ds.
Hanging off of autoSpinTransformGroup are two items: a private Switch which turns on and off the optional axes and backdrop; and globalModelTransformGroup, the TransformGroup responsible for transforming all of the Portrayals in the scene according to the global model transform. Additionally, globalModelTransformGroup is a good place to hang extra scene graph stuff you wish to add that you want to be transformed by the global model transform along with the rest of the Portrayal3Ds.
The globalModelTransformGroup in turn holds a private Switch which in turn holds the scene graph material supplied by each of the Portrayal3Ds in the scene. This Switch turns the Portrayals on and off according the layers menu choice the user makes on the button bar.
The LightSwitch, which resides in a BranchGrouop hanging of the ViewPlatform's TransformGroup node (where the camera is), holds two lights, a PointLight and an AmbientLight, which may be turned on or off by the user. You can change these lights if you like.
The right place to add scene graph material, or make other changes to the Java3D environment, is in the sceneGraphCreated() hook. This function is called for your benefit after the Display3D has created its scene graph material but just before the renderer has been started -- thus the graph is not yet online and is still modifiable.
If you add extra scene graph material to the Display3D outside of a Portrayal3D context, you should set it to be unpickable, or otherwise you will get errors when the user tries to select it from the scene (Display3D uses geometry-based picking for its object selection). The easiest way for you to do this to a given node is to call the utility function sim.display3d.SimpleDisplay3D.clearPickableFlags(node)
Modifier and Type | Class and Description |
---|---|
class |
Display3D.OptionPane3D |
javax.swing.JPanel.AccessibleJPanel
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
javax.media.j3d.TransformGroup |
autoSpinTransformGroup
The TransformGroup which used to spin the underlying model.
|
CapturingCanvas3D |
canvas
The Java3D canvas holding the universe.
|
java.lang.String |
DEFAULT_PREFERENCES_KEY |
javax.media.j3d.TransformGroup |
globalModelTransformGroup
The TransformGroup which holds the switch holding the portrayal's scene graph models.
|
javax.swing.Box |
header
The component bar at the top of the Display3D.
|
javax.swing.JToggleButton |
layersbutton
The button which pops up the layers menu
|
javax.swing.JButton |
movieButton
The button which starts or stops a movie
|
javax.swing.JButton |
optionButton
The button which pops up the option pane
|
Display3D.OptionPane3D |
optionPane |
javax.swing.JPopupMenu |
popup
The popup layers menu
|
javax.swing.JToggleButton |
refreshbutton
The button which pops up the refresh menu
|
javax.swing.JPopupMenu |
refreshPopup
The field for scaling values
|
javax.media.j3d.BranchGroup |
root
The root scene graph node in the Java3D universe.
|
NumberTextField |
scaleField
The button which starts or stops a movie
|
javax.swing.JComboBox |
skipBox
The combo box for skipping frames
|
NumberTextField |
skipField
The field for skipping frames
|
javax.swing.JFrame |
skipFrame
The frame which holds the skip controls
|
javax.swing.JButton |
snapshotButton
The button which snaps a screenshot
|
protected long |
stepInterval |
protected double |
timeInterval |
com.sun.j3d.utils.universe.SimpleUniverse |
universe
The Java3D universe.
|
protected int |
updateRule |
javax.media.j3d.BranchGroup |
viewRoot
An additional root scene graph node which is attached to the viewing transform of the universe, and thus
stays in the same location regardless of the placement of the camera.
|
protected long |
wallInterval |
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Constructor and Description |
---|
Display3D(double width,
double height,
GUIState simulation)
Creates a Display3D with the provided width and height for its portrayal region,
attached to the provided simulation.
|
Display3D(double width,
double height,
GUIState simulation,
long interval)
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
void |
attach(Inspector inspector,
java.lang.String name)
A convenience function: creates a popup menu item of the given name which, when selected, will display the
given inspector in the Console.
|
void |
attach(Portrayal3D portrayal,
java.lang.String name)
Attaches a portrayal to the Display3D, along with the provided human-readable name for the portrayal.
|
void |
attach(Portrayal3D portrayal,
java.lang.String name,
boolean visible)
Attaches a portrayal to the Display3D, along with the provided human-readable name for the portrayal.
|
void |
clearBackdrop()
Clears any backdrop presently being used in the scene, turns off the backdrop checkbox, and disables the backdrop checkbox.
|
void |
clearSelections() |
javax.swing.JFrame |
createFrame()
Creates a frame holding the Display3D.
|
void |
createSceneGraph()
Recreates the entire scene graph, including the universe, root, and canvas3d.
|
void |
destroySceneGraph()
Eliminates the existing scene graph.
|
java.util.ArrayList |
detatchAll()
Detatches all portrayals from the Display3D.
|
protected void |
finalize()
Quits the Display3D.
|
java.awt.Frame |
getFrame()
Returns the frame holding this Component.
|
java.lang.String |
getPreferencesKey() |
double |
getScale()
Returns the value of the scale (magnification).
|
LocationWrapper[] |
getSelectedWrappers()
Returns as LocationWrappers all the currently selected objects in the
display.
|
SelectionBehavior |
getSelectionBehavior() |
GUIState |
getSimulation() |
ToolTipBehavior |
getToolTipBehavior() |
javax.media.j3d.Transform3D |
getTransform()
Returns a copy of the current global model transform.
|
void |
paintComponent(java.awt.Graphics g)
Updates the scene graph
|
void |
performSelection(Bag locationWrappers) |
void |
performSelection(LocationWrapper wrapper) |
void |
quit()
Quits the Display3D.
|
protected void |
rebuildRefreshPopup() |
protected void |
rebuildSkipFrame() |
void |
requestUpdate()
Asks Display3D to update itself next iteration regardless of the current redrawing/updating rule.
|
void |
reset()
Resets the Display3D so it reschedules itself.
|
void |
resetTransform()
Resets the global model transform to its default value (identity).
|
void |
rotateX(double degrees)
Modifies the global model transform by rotating along the current X axis the provided number of degrees.
|
void |
rotateY(double degrees)
Modifies the global model transform by rotating along the current Y axis the provided number of degrees.
|
void |
rotateZ(double degrees)
Modifies the global model transform by rotating along the current Z axis the provided number of degrees.
|
void |
scale(double value)
Modifies the global model transform by uniformly scaling it in all directions by the provided amount.
|
void |
scale(double sx,
double sy,
double sz)
Modifies the internal transform by scaling it in a nonuniform fashion.
|
protected void |
sceneGraphCreated()
A hook for people who want to modify the scene graph just after it's been created (when the
user pressed the start button usually; or if the user dynamicallly attaches or detaches
portrayals) but before the root has been attached to the universe and before the
canvas has started rendering.
|
void |
setBackdrop(javax.media.j3d.Appearance appearance)
Sets a general appearance for a spherical backdrop, turns on the backdrop checkbox, and enables the backdrop checkbox.
|
void |
setBackdrop(java.awt.Color color)
Sets the color for a flat backdrop, turns on the backdrop checkbox, and enables the backdrop checkbox.
|
void |
setBackdrop(java.awt.Image image,
boolean spherical)
Sets the image for a backdrop (spherical or flat), turns on the backdrop checkbox, and enables the backdrop checkbox
|
void |
setCullingMode(int mode) |
void |
setPreferencesKey(java.lang.String s)
If you have more than one Display3D in your simulation and you want them to have
different preferences, set each to a different key value.
|
void |
setRasterizationMode(int mode) |
void |
setScale(double val)
Changes the value of the scale (magnification).
|
void |
setSelectsAll(boolean selection,
boolean inspection)
Sets whether mouse-clicking results in selecting all picked elements (true) or just the closest one (false).
|
void |
setShowsAmbientLight(boolean value) |
void |
setShowsAxes(boolean value) |
void |
setShowsBackdrop(boolean value) |
void |
setShowsSpotlight(boolean value) |
void |
setTransform(javax.media.j3d.Transform3D transform)
Sets the Display3D's global model transform.
|
boolean |
shouldUpdate()
Returns whether it's time to update.
|
void |
startMovie()
Starts a Quicktime movie on the given Display3D.
|
void |
step(SimState state)
Steps the Display3D in the GUIState schedule.
|
void |
stopMovie()
Stops a Quicktime movie and cleans up, flushing the remaining frames out to disk.
|
void |
takeSnapshot()
Takes a snapshot of the Display3D's currently displayed simulation.
|
void |
takeSnapshot(java.io.File file)
Takes a snapshot of the Display3D's currently displayed simulation.
|
void |
transform(javax.media.j3d.Transform3D transform)
Changes the global model transform of the FieldPortrayal3D by
appending to it the provided transform operation.
|
void |
translate(double dx,
double dy,
double dz)
Modifies the global model transform by translating in the provided x, y, and z amounts.
|
void |
updateSceneGraph(boolean waitForRenderer)
Updates the scene graph to reflect changes in the simulation.
|
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public java.lang.String DEFAULT_PREFERENCES_KEY
public javax.swing.Box header
public javax.swing.JButton movieButton
public javax.swing.JButton snapshotButton
public javax.swing.JButton optionButton
public javax.swing.JPopupMenu refreshPopup
public javax.swing.JToggleButton refreshbutton
public NumberTextField scaleField
public NumberTextField skipField
public javax.swing.JComboBox skipBox
public javax.swing.JFrame skipFrame
public CapturingCanvas3D canvas
public com.sun.j3d.utils.universe.SimpleUniverse universe
public javax.media.j3d.BranchGroup root
public javax.media.j3d.BranchGroup viewRoot
public javax.swing.JPopupMenu popup
public javax.swing.JToggleButton layersbutton
public javax.media.j3d.TransformGroup globalModelTransformGroup
public javax.media.j3d.TransformGroup autoSpinTransformGroup
protected int updateRule
protected long stepInterval
protected double timeInterval
protected long wallInterval
public Display3D.OptionPane3D optionPane
public Display3D(double width, double height, GUIState simulation, long interval)
public Display3D(double width, double height, GUIState simulation)
public void setPreferencesKey(java.lang.String s)
public java.lang.String getPreferencesKey()
public javax.swing.JFrame createFrame()
public java.awt.Frame getFrame()
public void reset()
public void attach(Portrayal3D portrayal, java.lang.String name)
public void attach(Portrayal3D portrayal, java.lang.String name, boolean visible)
public void attach(Inspector inspector, java.lang.String name)
public java.util.ArrayList detatchAll()
public GUIState getSimulation()
public void clearBackdrop()
public void setBackdrop(javax.media.j3d.Appearance appearance)
public void setBackdrop(java.awt.Color color)
public void setBackdrop(java.awt.Image image, boolean spherical)
public void setShowsAxes(boolean value)
public void setShowsBackdrop(boolean value)
public void setShowsSpotlight(boolean value)
public void setShowsAmbientLight(boolean value)
public javax.media.j3d.Transform3D getTransform()
public void setTransform(javax.media.j3d.Transform3D transform)
public void transform(javax.media.j3d.Transform3D transform)
public void resetTransform()
public void rotateX(double degrees)
public void rotateY(double degrees)
public void rotateZ(double degrees)
public void translate(double dx, double dy, double dz)
public void scale(double value)
public void scale(double sx, double sy, double sz)
public void destroySceneGraph()
public void createSceneGraph()
protected void sceneGraphCreated()
public void setScale(double val)
public double getScale()
public SelectionBehavior getSelectionBehavior()
public ToolTipBehavior getToolTipBehavior()
public void setSelectsAll(boolean selection, boolean inspection)
public void paintComponent(java.awt.Graphics g)
paintComponent
in class javax.swing.JComponent
public void requestUpdate()
public boolean shouldUpdate()
public void step(SimState state)
public void updateSceneGraph(boolean waitForRenderer)
public void takeSnapshot(java.io.File file) throws java.io.IOException
java.io.IOException
public void takeSnapshot()
public void startMovie()
public void stopMovie()
public void quit()
protected void finalize() throws java.lang.Throwable
finalize
in class java.lang.Object
java.lang.Throwable
public void setRasterizationMode(int mode)
public void setCullingMode(int mode)
public LocationWrapper[] getSelectedWrappers()
public void performSelection(LocationWrapper wrapper)
public void clearSelections()
public void performSelection(Bag locationWrappers)
protected void rebuildSkipFrame()
protected void rebuildRefreshPopup()