/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.renderer.lite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.List;
import org.geotools.styling.Rule;
/**
* This is a simple class that contains the information needed to
* render a layer.
*
* Basically, for a SLD, you create one of these for each of the
* FeatureTypeStyles inside it. LiteRenderer uses this to do the
* actual renderering.
*
* It contains:
* a. a BufferedImage so lite knows where to do the drawing
* b. a list of rules (minimal # -- ie. remove the ones that dont apply to this scale)
* c. "else" rule list
*
* To process this, you would
* a) foreach FEATURE
* b) foreach LiteFeatureTypeStyle
* c) <process rules and draw to the appropriate image>
* d) combine the images
*
* This was setup so you can "parallelize" literenderer in the simple
* way -- only read data once. The old implementation would re-read
* the data for each one FeatureTypeStyle.
*
* NOTE: a) the SLD spec says that each FeatureTypeStyle is rendered in order & independently
* b) If you have a request like LAYERS=a,a&STYLES=a_style1,a_styel2 then you could optimize
* to something like this (!!)
*
* NOTE: a) this also sets up the image -- clears it et al.
*
* @author dblasby
* @source $URL$
*/
public final class LiteFeatureTypeStyle {
public BufferedImage myImage;
public Rule[] ruleList;
public Rule[] elseRules;
public Graphics2D graphics;
public LiteFeatureTypeStyle (BufferedImage image,AffineTransform at, List ruleList, List elseRule,RenderingHints hints )
{
this.myImage = image;
this.ruleList = (Rule[])ruleList.toArray( new Rule[ruleList.size()] );
this.elseRules = (Rule[])elseRule.toArray( new Rule[elseRule.size()] );;
this.graphics = image.createGraphics();
if ( hints != null )
graphics.setRenderingHints(hints);
// graphics.setTransform(at);
graphics.setColor(new Color(255,255,255,0));
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
// int type = AlphaComposite.SRC_OVER;
// graphics.setComposite(AlphaComposite.getInstance(type, 0));
}
/**
* use this for only the 1st FTS.
* We dont actually create an image for it -- we just use the graphics.
* WATCH OUT FOR THIS.
* NOTE: image=null in this case
*
* @param graphics
* @param ruleList
* @param elseRuleList
*/
public LiteFeatureTypeStyle(Graphics2D graphics, List ruleList, List elseRuleList)
{
this.myImage = null;
this.graphics = graphics;
this.ruleList = (Rule[])ruleList.toArray( new Rule[ruleList.size()] );
this.elseRules = (Rule[])elseRuleList.toArray( new Rule[elseRuleList.size()] );
}
}