001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/graphics/displayelements/GeometryDisplayElement.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042:
043: ---------------------------------------------------------------------------*/
044: package org.deegree.graphics.displayelements;
045:
046: import java.io.Serializable;
047:
048: import org.deegree.graphics.sld.Symbolizer;
049: import org.deegree.model.feature.Feature;
050: import org.deegree.model.spatialschema.Envelope;
051: import org.deegree.model.spatialschema.Geometry;
052: import org.deegree.model.spatialschema.Position;
053:
054: /**
055: * Basic interface of all display elements that are related to a geometry (this is the common case).
056: *
057: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
058: * @author last edited by: $Author: apoth $
059: *
060: * @version $Revision: 9340 $, $Date: 2007-12-27 04:32:12 -0800 (Thu, 27 Dec 2007) $
061: */
062: abstract class GeometryDisplayElement extends AbstractDisplayElement
063: implements Serializable {
064:
065: /** Use serialVersionUID for interoperability. */
066: private final static long serialVersionUID = 465725117946501686L;
067:
068: protected Geometry geometry;
069:
070: protected Symbolizer symbolizer;
071:
072: protected Symbolizer highlightSymbolizer;
073:
074: protected Symbolizer selectedSymbolizer;
075:
076: protected Object placement;
077:
078: /**
079: * Creates a new GeometryDisplayElement object.
080: *
081: * @param feature
082: * @param geometry
083: */
084: GeometryDisplayElement(Feature feature, Geometry geometry) {
085: super (feature);
086: setGeometry(geometry);
087: }
088:
089: /**
090: * Creates a new GeometryDisplayElement object.
091: *
092: * @param feature
093: * @param geometry
094: * @param symbolizer
095: */
096: GeometryDisplayElement(Feature feature, Geometry geometry,
097: Symbolizer symbolizer) {
098: super (feature);
099: setGeometry(geometry);
100: setSymbolizer(symbolizer);
101: setHighlightSymbolizer(symbolizer);
102: setSelectedSymbolizer(symbolizer);
103: }
104:
105: /**
106: * Creates a new GeometryDisplayElement object.
107: *
108: * @param feature
109: * @param geometry
110: * @param symbolizer
111: * @param selectedSymbolizer
112: * @param highlightSymbolizer
113: */
114: GeometryDisplayElement(Feature feature, Geometry geometry,
115: Symbolizer symbolizer, Symbolizer highlightSymbolizer,
116: Symbolizer selectedSymbolizer) {
117: super (feature);
118: setGeometry(geometry);
119: setSymbolizer(symbolizer);
120: setSelectedSymbolizer(selectedSymbolizer);
121: setHighlightSymbolizer(highlightSymbolizer);
122: }
123:
124: /**
125: * Returns a new {@link Envelope} for the given envelope that has a border of percent * (with |
126: * height) on all sides around it (the longer side is used to determine the border size).
127: *
128: * @param env
129: * @param percent
130: * @return envelope with border around it
131: */
132: protected Envelope growEnvelope(Envelope env, float percent) {
133: Position minPos = env.getMin();
134: Position maxPos = env.getMax();
135: double h = maxPos.getX() - minPos.getX();
136: double w = maxPos.getY() - minPos.getY();
137: h = Math.abs(h);
138: w = Math.abs(w);
139: double maxSide = Math.max(w, h);
140: return env.getBuffer(maxSide * percent);
141: }
142:
143: /**
144: * Overwrites the default placement of the <tt>DisplayElement</tt>. This method is used by
145: * the <tt>PlacementOptimizer</tt> to minimize the overlapping of labels, for example.
146: * <p>
147: *
148: * @param o
149: * the placement to be used
150: */
151: public void setPlacement(Object o) {
152: placement = o;
153: }
154:
155: /**
156: * sets the geometry that determines the position the DisplayElement will be rendered to
157: */
158: public void setGeometry(Geometry geometry) {
159: this .geometry = geometry;
160: }
161:
162: /**
163: * returns the geometry that determines the position the DisplayElement will be rendered to
164: */
165: public Geometry getGeometry() {
166: return geometry;
167: }
168:
169: /**
170: * sets the rules that determines how the geometry will be rendered
171: */
172: public void setSymbolizer(Symbolizer symbolizer) {
173: this .symbolizer = symbolizer;
174: }
175:
176: /**
177: * Returns the symbolizer that determines how the geometry will be rendered.
178: */
179: public Symbolizer getSymbolizer() {
180: return symbolizer;
181: }
182:
183: /**
184: * sets the rule that determines how the geometry will be rendered when it's highlighted
185: *
186: * @param rule
187: * symbolizer defining rendering style
188: */
189: public void setHighlightSymbolizer(Symbolizer rule) {
190: this .highlightSymbolizer = rule;
191: }
192:
193: /**
194: * returns the symbolizer that determines how the geometry will be rendered if it's highlighted
195: */
196: public Symbolizer getHighlightSymbolizer() {
197: return highlightSymbolizer;
198: }
199:
200: /**
201: * sets the rule that determines how the geometry will be rendered when it's selected
202: *
203: * @param rule
204: * symbolizer defining rendering style
205: */
206: public void setSelectedSymbolizer(Symbolizer rule) {
207: selectedSymbolizer = rule;
208: }
209:
210: /**
211: * returns the symbolizer that determines how the geometry will be rendered if it's selected
212: */
213: public Symbolizer getSelectedSymbolizer() {
214: return selectedSymbolizer;
215: }
216:
217: /**
218: * Returns if the <tt>DisplayElement</tt> should be painted at the current scale or not.
219: */
220: public boolean doesScaleConstraintApply(double scale) {
221: return symbolizer.getMinScaleDenominator() <= scale
222: && symbolizer.getMaxScaleDenominator() > scale;
223: }
224: }
|