001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2004-2006, Geotools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.renderer.lite;
017:
018: import java.awt.Graphics2D;
019: import java.awt.Rectangle;
020: import java.util.List;
021:
022: import javax.media.jai.util.Range;
023:
024: import org.geotools.feature.Feature;
025: import org.geotools.geometry.jts.LiteShape2;
026: import org.geotools.styling.TextSymbolizer;
027:
028: /**
029: * An interface for a label cache.
030: *
031: * @author jeichar
032: * @since 0.9.0
033: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/render/src/main/java/org/geotools/renderer/lite/LabelCache.java $
034: */
035: public interface LabelCache {
036: /**
037: * Called by renderer to indicate that the rendering process is starting.
038: */
039: void start();
040:
041: /**
042: * Called by renderer to indication the start of rendering a layer. Will add the layer to the
043: * set of active layers.
044: *
045: * @param layerId an id for the layer
046: */
047: void startLayer(String layerId);
048:
049: /**
050: * Puts a Label in the cache.
051: *
052: * @param layerId id indicating the layer the feature is part of
053: * @param symbolizer The symbolizer containing the style information
054: * @param feature the feature that has the information required for the symbolizer to
055: * calculate the required render information.
056: * @param shape the shape to be labeled. This is in screen coordinates.
057: * @param scaleRange the scaleRange that the symbolizer is legal
058: */
059: void put(String layerId, TextSymbolizer symbolizer,
060: Feature feature, LiteShape2 shape, Range scaleRange);
061:
062: /**
063: * Called to indicate that a layer is done rendering. The method may draw labels if appropriate
064: * for the labeling algorithm
065: *
066: * @param graphics the graphics to draw on.
067: * @param displayArea The size of the display area
068: * @param layerId an id for the layer
069: */
070: void endLayer(String layerId, Graphics2D graphics,
071: Rectangle displayArea);
072:
073: /**
074: * Called to indicate that the map is done rendering. The method may draw labels if appropriate
075: * for the labeling algorithm
076: *
077: * @param graphics the graphics to draw on.
078: * @param displayArea The size of the display area.
079: */
080: void end(Graphics2D graphics, Rectangle displayArea);
081:
082: /**
083: * Tells the cache to stop labelling.
084: */
085: void stop();
086:
087: /**
088: * Clears the cache completely
089: */
090: public void clear();
091:
092: /**
093: * Clears the cache of all information relating to the layer identified.
094: * @param layerId id of the layer
095: */
096: public void clear(String layerId);
097:
098: /**
099: * Leaves the label information in the cache but ignores it when calculating what labels are drawn.
100: *
101: * @param layerId id of the layer to disable.
102: */
103: public void disableLayer(String layerId);
104:
105: /**
106: * Enable a layer after being disabled. If startLayer is called this does not need to be called
107: * as start layer implicitely activates the layer.
108: *
109: * @param layerId layer to activate.
110: */
111: public void enableLayer(String layerId);
112:
113: /**
114: * return a list with all the values in priority order. Both grouped and non-grouped
115: * @param labelCache
116: * @return
117: */
118: public List orderedLabels();
119: }
|