package aimax.osm.viewer;
import aimax.osm.data.EntityVisitor;
import aimax.osm.data.WayNodeProvider;
import aimax.osm.data.entities.MapNode;
import aimax.osm.data.entities.MapWay;
import aimax.osm.data.entities.Track;
/**
* Provides a base for defining renderers for the OSM viewer. A renderer knows
* how to display entities and how to transform world into view coordinates. If
* the order in which the entities are provided shall not be identical to the
* order of drawing, the renderer should use entity buffers and sort them before
* printing.
*
* @author Ruediger Lunde
*
*/
public abstract class AbstractEntityRenderer implements EntityVisitor {
protected UnifiedImageBuilder<?> imageBdr;
/** Is responsible for world to view coordinate transformations. */
protected CoordTransformer transformer;
protected WayNodeProvider wnProvider;
private UColor backgroundColor = UColor.WHITE;
protected boolean debugMode;
/**
* Controls the size of symbols, line widths, and texts. Value two doubles
* the original size.
*/
protected float displayFactor = 1.0f;
public CoordTransformer getTransformer() {
return transformer;
}
public UColor getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(UColor color) {
backgroundColor = color;
}
public void enableDebugMode(boolean state) {
debugMode = state;
}
public boolean isDebugModeEnabled() {
return debugMode;
}
public float getDisplayFactor() {
return displayFactor;
}
public void setDisplayFactor(float factor) {
displayFactor = factor;
}
/** Resets the renderer. */
public void initForRendering(UnifiedImageBuilder<?> imageBdr, CoordTransformer transformer,
WayNodeProvider wnProvider) {
this.imageBdr = imageBdr;
this.transformer = transformer;
this.wnProvider = wnProvider;
imageBdr.setColor(backgroundColor);
imageBdr.setAreaFilled(true);
imageBdr.drawRect(0, 0, imageBdr.getWidth(), imageBdr.getHeight());
}
/**
* Abstract method, returns a visible map entity in the vicinity of the
* specified view coordinates.
*/
public abstract MapNode getNextNode(int x, int y);
/** Abstract method, responsible for completing the rendering task. */
public abstract void printBufferedObjects();
/** Abstract method, responsible for rendering a map node (especially POIs). */
@Override
public abstract void visitMapNode(MapNode node);
/** Abstract method, responsible for rendering a map way. */
@Override
public abstract void visitMapWay(MapWay way);
/** Abstract method, responsible for rendering a track. */
@Override
public abstract void visitTrack(Track track);
}