sim.portrayal.grid
Class ValueGridPortrayal2D
java.lang.Object
sim.portrayal.FieldPortrayal
sim.portrayal.FieldPortrayal2D
sim.portrayal.grid.ValueGridPortrayal2D
- All Implemented Interfaces:
- Portrayal, Portrayal2D, java.io.Serializable
- Direct Known Subclasses:
- FastValueGridPortrayal2D, HexaValueGridPortrayal2D
- public class ValueGridPortrayal2D
- extends FieldPortrayal2D
This class is capable of portraying the DoubleGrid2D and IntGrid2D fields (and only those two fields -- or subclasses).
It is fairly customizable, and this flexibility
comes at a cost in drawing speed. If you just need to draw your field as a grid of squares, you might look into
the much simpler, and faster (and aptly named) FastValueGridPortrayal2D instead.
Like other FieldPortrayal2Ds, this class uses an underlying SimplePortrayal2D to draw each separate element
in the grid. A default SimplePortrayal2D is provided which draws squares. In the default, the color for the square is
determined by looking up the value of the square in a user-provided color-table, or if there is none, by
interpolating it between two user-provided colors. See the setColorTable() and setLevels() methods.
Here's a trick you might consider in specifying interpolations. Rather than draw from white to red (for example),
you might consider setting the backdrop of the display to white, and then instead draw from FULLY TRANSPARENT white to
FULLY OPAQUE red. That is, from Color(0,0,0,0) to Color(255,0,0,255). Fully transparent colors are not drawn; and not drawing
at all is significantly faster than drawing for no reason! Plus you can stack multiple ValueGridPortrayal2Ds on top
of one another and let the transparency bleed through for a nice effect. The alpha channel is your friend.
By default the min Level and the max Level are the same (1.0), and the alpha values for both are 0 (totally transparent).
Thus if you want a range, you must specify it. This is intentional, because this way if you want to use a color
table instead (say, to specify three colors for the integers 0, 1, and 2), you can specify them, and ALL other grid values
will be automatically transparent.
If you would like more control over the color of your values (perhaps to implement a nonlinear function of the colors),
you can override the getColor() function to define your own custom color.
You can also provide your own custom SimplePortrayal2D (use setPortrayalForAll(...) ) to draw elements as you
see fit rather than as rectangles. Your SimplePortrayal2D should expect objects passed to its draw method
to be of type MutableDouble. Do not hold onto this array -- it will be reused.
- See Also:
- Serialized Form
Method Summary |
Portrayal |
getDefaultPortrayal()
Should return a portrayal which can portray any object regardless of
whether it's valid or not |
ColorMap |
getMap()
|
java.lang.String |
getValueName()
|
LocationWrapper |
getWrapper(double val,
int x,
int y)
|
protected void |
hitOrDraw(java.awt.Graphics2D graphics,
DrawInfo2D info,
Bag putInHere)
Instead of overriding the draw and hitObjects methods, you can optionally override
this method to provide both the draw(...) and hitObjects(...)
functionality in a single method, as it's common that these two methods have nearly
identical code. |
double |
newValue(int x,
int y,
double value)
This method is called by the default inspector to filter new values set by the user. |
void |
setField(java.lang.Object field)
Sets the field. |
void |
setMap(ColorMap m)
|
Methods inherited from class sim.portrayal.FieldPortrayal |
getDefaultNullPortrayal, getField, getInspector, getName, getPortrayalForAll, getPortrayalForNull, getPortrayalForObject, getPortrayalForRemainder, isImmutableField, setImmutableField, setPortrayalForAll, setPortrayalForClass, setPortrayalForNull, setPortrayalForObject, setPortrayalForRemainder, setSelected |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
map
public ColorMap map
valueName
public java.lang.String valueName
ValueGridPortrayal2D
public ValueGridPortrayal2D()
ValueGridPortrayal2D
public ValueGridPortrayal2D(java.lang.String valueName)
getMap
public ColorMap getMap()
setMap
public void setMap(ColorMap m)
setField
public void setField(java.lang.Object field)
- Description copied from class:
FieldPortrayal
- Sets the field. Also sets dirtyField = true. May throw an exception if the field is inappropriate.
- Specified by:
setField
in class FieldPortrayal
getValueName
public java.lang.String getValueName()
newValue
public double newValue(int x,
int y,
double value)
- This method is called by the default inspector to filter new values set by the user.
You should return the "corrected" value if the given value is invalid. The default version
of this method bases values on the values passed into the setLevels() and setColorTable() methods.
getDefaultPortrayal
public Portrayal getDefaultPortrayal()
- Description copied from class:
FieldPortrayal
- Should return a portrayal which can portray any object regardless of
whether it's valid or not
- Specified by:
getDefaultPortrayal
in class FieldPortrayal
hitOrDraw
protected void hitOrDraw(java.awt.Graphics2D graphics,
DrawInfo2D info,
Bag putInHere)
- Description copied from class:
FieldPortrayal2D
- Instead of overriding the draw and hitObjects methods, you can optionally override
this method to provide both the draw(...) and hitObjects(...)
functionality in a single method, as it's common that these two methods have nearly
identical code. You should test which operation to do
based on whether or not graphics is null (if it is, you're hitting, else you're drawing).
- Overrides:
hitOrDraw
in class FieldPortrayal2D
getWrapper
public LocationWrapper getWrapper(double val,
int x,
int y)