/*
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.simple;
import sim.portrayal.*;
import java.awt.*;
import java.awt.geom.*;
import sim.display.*;
/**
A wrapper for other Portrayal2Ds which transforms the graphics space before drawing them. */
public class TransformedPortrayal2D extends SimplePortrayal2D
{
public SimplePortrayal2D child;
public AffineTransform transform;
public TransformedPortrayal2D(SimplePortrayal2D child, AffineTransform transform)
{
this.child = child; this.transform = transform;
}
public SimplePortrayal2D getChild(Object object)
{
if (child!=null) return child;
else
{
if (!(object instanceof SimplePortrayal2D))
throw new RuntimeException("Object provided to TransformedPortrayal2D is not a SimplePortrayal2D: " + object);
return (SimplePortrayal2D) object;
}
}
public void draw(Object object, Graphics2D graphics, DrawInfo2D info)
{
final double theta = ((Oriented2D)object).orientation2D();
transform.setToRotation(theta);
AffineTransform old = graphics.getTransform();
AffineTransform translationTransform = new AffineTransform();
translationTransform.setToTranslation(info.draw.x,info.draw.y);
graphics.transform(translationTransform);
graphics.transform(transform);
getChild(object).draw(object,graphics,new DrawInfo2D(info,-info.draw.x,-info.draw.y));
// restore
graphics.setTransform(old);
}
public boolean hitObject(Object object, DrawInfo2D range)
{
/* To-do */
return false;
}
public boolean setSelected(LocationWrapper wrapper, boolean selected)
{
return getChild(wrapper.getObject()).setSelected(wrapper, selected);
}
public Inspector getInspector(LocationWrapper wrapper, GUIState state)
{
return getChild(wrapper.getObject()).getInspector(wrapper,state);
}
public String getName(LocationWrapper wrapper)
{
return getChild(wrapper.getObject()).getName(wrapper);
}
}