shout3d
Class Shout3DPanel

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--java.awt.Panel
                    |
                    +--shout3d.Shout3DPanel

public class Shout3DPanel
extends java.awt.Panel
implements Shout3DViewer, java.lang.Runnable, Clock, DeviceListener, RenderObserver

Shout3D Panel - a Panel containing a Shout3DViewer

See Also:
Serialized Form

Field Summary
 Shout3DApplet applet
          The Shout3DApplet in which this panel is contained.
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Constructor Summary
Shout3DPanel(Shout3DApplet applet)
          Constructs a Shout3DPanel
Shout3DPanel(Shout3DApplet applet, int width, int height)
          Constructs a Shout3DPanel
Shout3DPanel(Shout3DApplet applet, int x, int y, int width, int height)
          Constructs a Shout3DPanel
 
Method Summary
 void addDeviceObserver(DeviceObserver devo, java.lang.String typeName, java.lang.Object userData)
          Adds the given DeviceObserver to the list of observers for which this DeviceObserver will invoke methods.
 boolean addRoute(Field fromField, Field toField)
          Adds a route that copies values from 'fromField' to 'toField' each time that fromField's value changes.
 void clearResourceCaches()
          Clears the cache of loaded resources, freeing the memory that holds them.
 void customInitialize()
          Subclasses should override to perform custom initialization tasks.
 boolean deleteRoute(Field fromField, Field toField)
          Removes any existing route from fromField to toField Returns true if a route existed and was removed, false otherwise Note: Routes of ArrayFields copy by reference, not by value.
 double getAbsoluteTime()
          this method gets the number of seconds since midnight GMT January 1, 1970, as of the last call to tick().
 Clock getClock()
          Returns a reference to the Clock
 Bindable getCurrentBindableNode(java.lang.String typeName)
          Returns a reference to the currently bound node of the given type.
 DeviceListener getDeviceListener()
          Gets this panel's DeviceListener
 float getFramesPerSecond()
          Returns the rendering frame rate
 Picker getNewPicker()
          Gets a new Shout3DPicker
 Searcher getNewSearcher()
          Gets a new Searcher
 Node getNodeByName(java.lang.String nodeName)
          Gets a Node by DEF name.
 java.lang.String getProfile()
          Gets a string denoting the profile of the current scene.
 Renderer getRenderer()
          Gets the renderer
 ResourceListener getResourceListener()
          Returns a reference to the ResourceListener
 Group getScene()
          Gets the scene in the panel
 java.lang.String getVersion()
          Gets a string denoting the version of this viewer.
 boolean handleEvent(java.awt.Event event)
           
 boolean isAntiAliased()
          Returns whether antialiasing is enabled
 boolean isBilinearFiltering()
          Returns whether bilinear filtering is enabled on textures
 boolean isLoadResourcesInSeparateThread()
          Returns whether resources should are being loaded in a separate thread.
 boolean isRouted(Field fromField, Field toField)
          Checks if a route currently exists from fromField to toField
 void loadURL(java.lang.String[] url, Node root)
          Loads an URL into the node root.
 void onPostRender(Renderer r, java.lang.Object userData)
          Called immediately following rendering.
 void onPreRender(Renderer r, java.lang.Object userData)
          Called immediately prior to rendering.
 void removeDeviceObserver(DeviceObserver devo, java.lang.String typeName)
          Removes the given ResourceObserver from the list of observers for which this ResrourceObserver will invoke methods.
 void run()
          Runnable's run method
 void setAntiAliased(boolean newVal)
          Sets whether antialiasing is enabled.
 void setBilinearFiltering(boolean newVal)
          Sets whether bilinear filtering is enabled on textures.
 void setLoadResourcesInSeparateThread(boolean newVal)
          Sets whether resources (textures and sounds) should be loaded in a separate thread from the main thread.
 void setScene(Group root)
          Replaces the scene in the panel This includes applying all of the applet parameters (headlight, anti-aliasing, etc) to the newly loaded scene.
 void setSceneFromURL(java.lang.String[] url)
          Loads an URL into the panel's scene This includes applying all of the applet parameters (headlight, anti-aliasing, etc) to the newly loaded scene.
 void tick()
          This method updates the Clock and sets a new absolute time.
 void update(java.awt.Graphics g)
          Inherited Applet update method
 
Methods inherited from class java.awt.Panel
addNotify
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, remove, remove, removeAll, removeContainerListener, removeNotify, setFont, setLayout, validate
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, contains, contains, createImage, createImage, disable, dispatchEvent, enable, enable, enableInputMethods, getBackground, getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getInputContext, getInputMethodRequests, getLocale, getLocation, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, hasFocus, hide, imageUpdate, inside, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, remove, removeComponentListener, removeFocusListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, show, size, toString, transferFocus
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

applet

public Shout3DApplet applet
The Shout3DApplet in which this panel is contained.
Constructor Detail

Shout3DPanel

public Shout3DPanel(Shout3DApplet applet)
Constructs a Shout3DPanel
Parameters:
applet - the Shout3DApplet in which this panel is to be drawn

Shout3DPanel

public Shout3DPanel(Shout3DApplet applet,
                    int width,
                    int height)
Constructs a Shout3DPanel
Parameters:
applet - the Shout3DApplet in which this panel is to be drawn
width - the width of the panel in pixels
height - the height of the panel in pixels

Shout3DPanel

public Shout3DPanel(Shout3DApplet applet,
                    int x,
                    int y,
                    int width,
                    int height)
Constructs a Shout3DPanel
Parameters:
applet - the Shout3DApplet in which this panel is to be drawn
x - the x position of the panel in pixels
y - the x position of the panel in pixels
width - the width of the panel in pixels
height - the height of the panel in pixels
Method Detail

getRenderer

public final Renderer getRenderer()
Gets the renderer
Returns:
the renderer

getDeviceListener

public final DeviceListener getDeviceListener()
Gets this panel's DeviceListener
Returns:
the deviceListener

getNewPicker

public final Picker getNewPicker()
Gets a new Shout3DPicker
Returns:
a new Picker

getNewSearcher

public final Searcher getNewSearcher()
Gets a new Searcher
Returns:
a new Searcher

setScene

public final void setScene(Group root)
                    throws Shout3DException
Replaces the scene in the panel This includes applying all of the applet parameters (headlight, anti-aliasing, etc) to the newly loaded scene.
Parameters:
root - the root of the new Scene

getScene

public final Group getScene()
Gets the scene in the panel
Returns:
root the root of the Scene

setSceneFromURL

public final void setSceneFromURL(java.lang.String[] url)
                           throws Shout3DException
Loads an URL into the panel's scene This includes applying all of the applet parameters (headlight, anti-aliasing, etc) to the newly loaded scene. This is always done in the same thread as the main thread.
Parameters:
url - a String representation of the URL

loadURL

public final void loadURL(java.lang.String[] url,
                          Node root)
                   throws Shout3DException
Loads an URL into the node root. If isLoadResourcesInSeparateThread() is true, then this is done in a separate thread from the main thread. Otherwise, it is done in the same thread.
Parameters:
url - the URL to load
root - the scene, once loaded

getNodeByName

public final Node getNodeByName(java.lang.String nodeName)
Gets a Node by DEF name. Returns null if no node is found with the given name
Parameters:
nodeName - the name of the node to find
Returns:
the node matching the given name

getProfile

public final java.lang.String getProfile()
Gets a string denoting the profile of the current scene. The format of the returned string is yet to be specified.
Returns:
the profile string

getVersion

public final java.lang.String getVersion()
Gets a string denoting the version of this viewer.
Returns:
the version string

getCurrentBindableNode

public final Bindable getCurrentBindableNode(java.lang.String typeName)
                                      throws Shout3DException
Returns a reference to the currently bound node of the given type. Takes a string specifying a subclass of Bindable node as input. Throws an exception if the input type is not a bindable class of node
Returns:
the currently bound node of the specified type

getClock

public final Clock getClock()
Returns a reference to the Clock
Returns:
the clock

addRoute

public boolean addRoute(Field fromField,
                        Field toField)
                 throws Shout3DException
Adds a route that copies values from 'fromField' to 'toField' each time that fromField's value changes. 'toField' will, in turn, notify any listeners or routed fields of this change. Also copies value from fromField to toField, so the values will match after this call. Note: Routes of ArrayFields copy by reference, not by value. This makes routing of ArrayFields efficient, since a value change does not cause a copy of the array contents. However, deleting the route does not undo the fact that both fields refer to the array in memory. (See deleteRoute for more info). Throws a Shout3DException if the two fields are not of the same type. Will not add a second route if a route already exists. Returns true if a route was added, false otherwise
Specified by:
addRoute in interface Shout3DViewer
Parameters:
fromField - the field from which values will be copied
toField - the field to which values will be copied
Returns:
true if the route was added, false otherwise

deleteRoute

public boolean deleteRoute(Field fromField,
                           Field toField)
Removes any existing route from fromField to toField Returns true if a route existed and was removed, false otherwise Note: Routes of ArrayFields copy by reference, not by value. (see addRoute) Deleting a route does not undo the fact that both fields refer to the array in memory. If you want to insure that the toField refers to unique memory, you should allocate a new value array of the same size as the source field, copy the values into the new array, and set this new array as the toField's value.
Specified by:
deleteRoute in interface Shout3DViewer
Parameters:
fromField - the field from which values will be copied
toField - the field to which values will be copied
Returns:
true if the route was removed, false otherwise

isRouted

public boolean isRouted(Field fromField,
                        Field toField)
Checks if a route currently exists from fromField to toField
Specified by:
isRouted in interface Shout3DViewer
Returns:
true if the route exists, false otherwise

getResourceListener

public final ResourceListener getResourceListener()
Returns a reference to the ResourceListener
Returns:
the the resourceListener

getAbsoluteTime

public final double getAbsoluteTime()
this method gets the number of seconds since midnight GMT January 1, 1970, as of the last call to tick().
Specified by:
getAbsoluteTime in interface Clock
Returns:
the time

tick

public final void tick()
This method updates the Clock and sets a new absolute time. This method must be automatically invoked once per call to Renderer.render(). This method may also be invoked by a programmer whenever a new simulation tick is desired.
Specified by:
tick in interface Clock

addDeviceObserver

public final void addDeviceObserver(DeviceObserver devo,
                                    java.lang.String typeName,
                                    java.lang.Object userData)
Adds the given DeviceObserver to the list of observers for which this DeviceObserver will invoke methods.
Specified by:
addDeviceObserver in interface DeviceListener
Parameters:
devo - the observer to add
userData - the data given by the observer

removeDeviceObserver

public final void removeDeviceObserver(DeviceObserver devo,
                                       java.lang.String typeName)
Removes the given ResourceObserver from the list of observers for which this ResrourceObserver will invoke methods.
Specified by:
removeDeviceObserver in interface DeviceListener
Parameters:
devo - the observer to remove

onPreRender

public void onPreRender(Renderer r,
                        java.lang.Object userData)
Called immediately prior to rendering.
Specified by:
onPreRender in interface RenderObserver
Parameters:
r - the renderer that is about to render
userData - the userdata that was passed by this panel to the renderer

onPostRender

public void onPostRender(Renderer r,
                         java.lang.Object userData)
Called immediately following rendering.
Specified by:
onPostRender in interface RenderObserver
Parameters:
r - the renderer that just finished rendering
userData - the userdata that was passed by this panel to the renderer

getFramesPerSecond

public final float getFramesPerSecond()
Returns the rendering frame rate
Returns:
the frame rate, in frames per second

customInitialize

public void customInitialize()
Subclasses should override to perform custom initialization tasks. The regular initialize() method may not be overriden, but calls this method at a point where it is safe to do so.

run

public final void run()
Runnable's run method
Specified by:
run in interface java.lang.Runnable

update

public final void update(java.awt.Graphics g)
Inherited Applet update method
Overrides:
update in class java.awt.Container

handleEvent

public final boolean handleEvent(java.awt.Event event)
Overrides:
handleEvent in class java.awt.Component

clearResourceCaches

public final void clearResourceCaches()
Clears the cache of loaded resources, freeing the memory that holds them. Normally, a texture, sound or Shout3d scene that is loaded by the applet is stored in a cache, so that if the resource is needed again, it does not need to be fetched by the server repeatedly. This method frees those caches, which frees memory while making it so that all resources will be fetched if they are requested anew. Note: Nodes (such as ImageTexture and JavaSound) store separate references to their resources. The caches are a second reference. So calling clearResourceCaches() will not cause any errors in the way those nodes function.
Specified by:
clearResourceCaches in interface Shout3DViewer

setAntiAliased

public final void setAntiAliased(boolean newVal)
Sets whether antialiasing is enabled. (Default is false) This performs antialiasing of all geometry against the background.
Specified by:
setAntiAliased in interface Shout3DViewer
Parameters:
newVal - whether antialiasing should be enabled

isAntiAliased

public final boolean isAntiAliased()
Returns whether antialiasing is enabled
Specified by:
isAntiAliased in interface Shout3DViewer
Returns:
whether antialiasing is currently enabled

setBilinearFiltering

public final void setBilinearFiltering(boolean newVal)
Sets whether bilinear filtering is enabled on textures. (Default is false) This results in higher quality, but slower rendering of the textures
Specified by:
setBilinearFiltering in interface Shout3DViewer
Parameters:
newVal - whether bilinear filtering should be enabled

isBilinearFiltering

public final boolean isBilinearFiltering()
Returns whether bilinear filtering is enabled on textures
Specified by:
isBilinearFiltering in interface Shout3DViewer
Returns:
whether bilinear filtering is currently enabled

setLoadResourcesInSeparateThread

public final void setLoadResourcesInSeparateThread(boolean newVal)
Sets whether resources (textures and sounds) should be loaded in a separate thread from the main thread. (Default is true)
Specified by:
setLoadResourcesInSeparateThread in interface Shout3DViewer
Parameters:
newVal - whether resources should be loaded in a separate thread.

isLoadResourcesInSeparateThread

public final boolean isLoadResourcesInSeparateThread()
Returns whether resources should are being loaded in a separate thread.
Specified by:
isLoadResourcesInSeparateThread in interface Shout3DViewer
Returns:
whether resources should are being loaded in a separate thread.