/*
Copyright 2006 by Sean Luke and George Mason University
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package sim.portrayal.grid;
import sim.util.*;
/** Called by Sparse2DPortrayal to determine if all objects
should be drawn or only one. The Bags provided contain objects all sitting in
the same cell location onscreen. */
public interface DrawPolicy
{
/** Specifies objects which should be drawn at a given location, and which objects should not.
The <tt>fromHere</tt> Bag contains, for a given location, all the objects which can be found
at the location. This function places into the bag <tt>addToHere</tt> a subset of those objects
which you wish to actually have drawn. The order in which the objects appear in
<tt>addToHere</tt> Bag is the order in which they will be drawn, so the later objects in
the Bag will be drawn on TOP of the earlier objects in the Bag. Do <b>not modify</b> the
<tt>fromHere</tt> Bag. The <tt>addToHere</tt> bag will be provided to this function in
an empty state; no need to clear() it.
<p>This function should usually return <b>true</b>. However if you wish to use <b>all</b>
the objects in the <tt>fromHere</tt> Bag, in exactly the order in which they appear,
you can be quite a bit more efficient by <i>not bothering</i> to add the objects into the
<tt>addToHere</tt> bag and instead simply returning <b>false</b>, in which case the
<tt>fromHere</tt> bag will be used instead.
*/
public boolean objectToDraw(Bag fromHere, Bag addToHere);
}