sim.portrayal3d.simple
Class SwitchedPortrayal3D

java.lang.Object
  extended by sim.portrayal3d.SimplePortrayal3D
      extended by sim.portrayal3d.simple.SwitchedPortrayal3D
All Implemented Interfaces:
java.io.Serializable, Portrayal, Portrayal3D

public class SwitchedPortrayal3D
extends SimplePortrayal3D

See Also:
Serialized Form

Field Summary
 
Fields inherited from class sim.portrayal3d.SimplePortrayal3D
DEFAULT_APPEARANCE
 
Constructor Summary
SwitchedPortrayal3D(SimplePortrayal3D child)
           
 
Method Summary
 SimplePortrayal3D getChild(java.lang.Object object)
           
 Inspector getInspector(LocationWrapper wrapper, GUIState state)
          Provide an inspector for an object.
 javax.media.j3d.TransformGroup getModel(java.lang.Object obj, javax.media.j3d.TransformGroup previousTransformGroup)
          Provides a TransformGroup which defines the node(s) to place in the scenegraph.
 java.lang.String getName(LocationWrapper wrapper)
          Returns a static, one-line name for the given object that is useful for a human to distinguish it from other objects.
 boolean getShowsChild(java.lang.Object obj)
           
 javax.media.j3d.PolygonAttributes polygonAttributes()
          Provides a PolygonAttributes which can be modified to change the underlying model's attributes (culling, vertex versus point versus fill).
 void setCurrentDisplay(Display3D display)
          Sets the current display both here and in the child.
 void setCurrentFieldPortrayal(FieldPortrayal3D p)
          Sets the current field portrayal both here and in the child.
 boolean setSelected(LocationWrapper wrapper, boolean selected)
          If the object is selected, adds it to a hash table of selected objects for which this SimplePortrayal3D's isSelected() method will return TRUE.
 
Methods inherited from class sim.portrayal3d.SimplePortrayal3D
appearanceForColor, appearanceForColors, appearanceForImage, clearPickableFlags, getCurrentDisplay, getCurrentFieldPortrayal, getCurrentGUIState, getStatus, isSelected, setAppearanceFlags, setPickableFlags, setPickableFlags
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SwitchedPortrayal3D

public SwitchedPortrayal3D(SimplePortrayal3D child)
Method Detail

polygonAttributes

public javax.media.j3d.PolygonAttributes polygonAttributes()
Description copied from interface: Portrayal3D
Provides a PolygonAttributes which can be modified to change the underlying model's attributes (culling, vertex versus point versus fill). This is an optional function: you are free to return null

Specified by:
polygonAttributes in interface Portrayal3D
Overrides:
polygonAttributes in class SimplePortrayal3D

getInspector

public Inspector getInspector(LocationWrapper wrapper,
                              GUIState state)
Description copied from interface: Portrayal
Provide an inspector for an object.

Specified by:
getInspector in interface Portrayal
Overrides:
getInspector in class SimplePortrayal3D

getName

public java.lang.String getName(LocationWrapper wrapper)
Description copied from interface: Portrayal
Returns a static, one-line name for the given object that is useful for a human to distinguish it from other objects. A simple default would be just to return "" + object.

Specified by:
getName in interface Portrayal
Overrides:
getName in class SimplePortrayal3D

setCurrentDisplay

public void setCurrentDisplay(Display3D display)
Sets the current display both here and in the child.

Specified by:
setCurrentDisplay in interface Portrayal3D
Overrides:
setCurrentDisplay in class SimplePortrayal3D

setCurrentFieldPortrayal

public void setCurrentFieldPortrayal(FieldPortrayal3D p)
Sets the current field portrayal both here and in the child.

Overrides:
setCurrentFieldPortrayal in class SimplePortrayal3D

setSelected

public boolean setSelected(LocationWrapper wrapper,
                           boolean selected)
Description copied from class: SimplePortrayal3D
If the object is selected, adds it to a hash table of selected objects for which this SimplePortrayal3D's isSelected() method will return TRUE. If the object is deselected, removes it from the hash table. Always returns TRUE. The hash table doesn't exist until this method is first called.

There are two implications to this approach. First, it means that after you've selected an object, there's a hash table attached to its portrayal. If you're using the same portrayal for lots of stuff, that's no big deal. But if you've got per-object portrayals and a lot of objects (or if the objects are themselves SimplePortrayal3D subclasses) then that's a fair number of hash tables. This is a minor memory issue but if you don't care about testing for whether you've been selected or not, you could just override this method to always return TRUE (and don't call super.selected(...) ) and the hash table will never be created. Note that isSelected will always return FALSE for your portrayal in this situation.

Second, though you can test for selection with the isSelected() method, if you want to, say, change the look of your portrayal based on whether or not it's selected, you will need to test isSelected() each time getModel() is called and modify the model accordingly. This could be a bit expensive. We're working on an approach for you to be able to test if the object was RECENTLY selected or deselected so you could only test then, but it's nontrivial to do without using up a lot of memory.

Specified by:
setSelected in interface Portrayal
Overrides:
setSelected in class SimplePortrayal3D

getChild

public SimplePortrayal3D getChild(java.lang.Object object)

getShowsChild

public boolean getShowsChild(java.lang.Object obj)

getModel

public javax.media.j3d.TransformGroup getModel(java.lang.Object obj,
                                               javax.media.j3d.TransformGroup previousTransformGroup)
Description copied from interface: Portrayal3D
Provides a TransformGroup which defines the node(s) to place in the scenegraph. This is the Portrayal3D equivalent of Portrayal2D's draw(object, graphics, drawinfo) method.

You should hang your model off of the TransformGroup provided. You should not transform that TransformGroup in any way -- it is used elsewhere. Instead if you wish to transform your model (rotate it etc.) you should add your own additional TransformGroup as necessary.

The provided TransformGroup can be null; in this case you need to create and return the outer TransformGroup for the object. If the provided TransformGroup is non-null, you should modify it and return the same.

SimplePortrayals should assume the following contract: at the point that getModel(...) is called, the field portrayal and display will have already been set if it exists, else it will be null.

Specified by:
getModel in interface Portrayal3D
Overrides:
getModel in class SimplePortrayal3D