sim.portrayal
Class FieldPortrayal2D
java.lang.Object
sim.portrayal.FieldPortrayal
sim.portrayal.FieldPortrayal2D
- All Implemented Interfaces:
- Portrayal, Portrayal2D, java.io.Serializable
- Direct Known Subclasses:
- Continuous2DPortrayal, Network2DPortrayal, ObjectGrid2DPortrayal, SparseGrid2DPortrayal, ValueGrid2DPortrayal
- public abstract class FieldPortrayal2D
- extends FieldPortrayal
- implements Portrayal2D
Superclass of all Field Portrayals in 2D. Implements default versions of the
necessary methods, which you should feel free to override (especially portray,
hit, and draw!).
The default versions of hitObjects and draw call a protected but empty method
called hitOrDraw. It's very common that a field's hitObjects and draw methods will
be identical save for a single line which calls hitObjects or draw on an underlying
SimplePortrayal. So most fields unify both methods into this single method
and unify the line as something like this:
if (graphics == null)
{
if (portrayal.hitObject(portrayedObject, newinfo))
putInHere.add(getWrapper(portrayedObject, portrayedObjectLocation));
}
else
portrayal.draw(portrayedObject, graphics, newinfo);
...where getWrapper(...) returns a LocationWrapper appropriate to the Field.
- See Also:
- Serialized Form
Method Summary |
void |
draw(java.lang.Object object,
java.awt.Graphics2D graphics,
DrawInfo2D info)
Draws the field with its origin at [info.draw.x,info.draw.y], relative to the
scaled coordinate system defined by [info.draw.width,info.draw.height]. |
void |
hitObjects(DrawInfo2D range,
Bag putInHere)
Adds to the provided Bag LocationWrappers for any objects which
overlap the provided hit range. |
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. |
Methods inherited from class sim.portrayal.FieldPortrayal |
getDefaultNullPortrayal, getDefaultPortrayal, getField, getInspector, getName, getPortrayalForAll, getPortrayalForNull, getPortrayalForObject, getPortrayalForRemainder, setField, setPortrayalForAll, setPortrayalForClass, setPortrayalForNull, setPortrayalForObject, setPortrayalForRemainder, setSelected |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
FieldPortrayal2D
public FieldPortrayal2D()
draw
public void draw(java.lang.Object object,
java.awt.Graphics2D graphics,
DrawInfo2D info)
- Draws the field with its origin at [info.draw.x,info.draw.y], relative to the
scaled coordinate system defined by [info.draw.width,info.draw.height]. The
only parts that need be drawn are those which fall within the [info.clip] rectangle.
Since your draw and hitObjects methods are likely to be nearly identical, you can choose
instead to override the hitOrDraw method to handle both of them. By default this
method simply calls hitOrDraw. FieldPortrayals will receive null for the object;
they should just draw their own fields.
- Specified by:
draw
in interface Portrayal2D
hitObjects
public void hitObjects(DrawInfo2D range,
Bag putInHere)
- Adds to the provided Bag LocationWrappers for any objects which
overlap the provided hit range. The hit range will usually
define a single point, but COULD be a range. The object
should perceive itself as located at the (range.draw.x,range.draw.y) origin and drawn
relative to the (range.draw.width,range.draw.height) scale.
hitOrDraw
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. 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).