Revision: 6285 http://sourceforge.net/p/jump-pilot/code/6285 Author: ma15569 Date: 2020-06-02 10:22:14 +0000 (Tue, 02 Jun 2020) Log Message: ----------- update source for new realize
Modified Paths: -------------- plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/MapImagePrinter.java Modified: plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/MapImagePrinter.java =================================================================== --- plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/MapImagePrinter.java 2020-06-02 10:19:54 UTC (rev 6284) +++ plug-ins/CadPlan_JumpPrinter/trunk/src/com/cadplan/jump/MapImagePrinter.java 2020-06-02 10:22:14 UTC (rev 6285) @@ -1,35 +1,68 @@ package com.cadplan.jump; -import com.vividsolutions.jump.workbench.plugin.PlugInContext; -import com.vividsolutions.jump.workbench.model.*; -import com.vividsolutions.jump.workbench.ui.renderer.style.*; -import com.vividsolutions.jump.workbench.ui.Viewport; -import com.vividsolutions.jump.workbench.JUMPWorkbench; -import com.vividsolutions.jump.workbench.imagery.ReferencedImage; -import com.vividsolutions.jump.feature.FeatureCollectionWrapper; -import com.vividsolutions.jump.feature.Feature; -import com.vividsolutions.jump.feature.FeatureSchema; -import com.vividsolutions.jump.geom.EnvelopeUtil; -import com.vividsolutions.jump.util.Range; -import com.vividsolutions.jts.geom.*; -import com.vividsolutions.jts.geom.Point; - -import javax.swing.*; -import java.awt.image.BufferedImage; -import java.awt.*; -import java.awt.Polygon; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.MediaTracker; +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.Stroke; +import java.awt.Toolkit; +import java.awt.geom.Area; import java.awt.geom.GeneralPath; -import java.awt.geom.Area; -import java.awt.geom.Rectangle2D; import java.awt.geom.Point2D; -import java.util.*; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; import java.util.List; -import java.text.DecimalFormat; -import java.net.URL; -import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; import org.openjump.core.ui.style.decoration.ArrowLineStringMiddlepointStyle; +import com.cadplan.vertices.renderer.style.AnyShapeVertexStyle; +import com.cadplan.vertices.renderer.style.ExternalSymbolsImplType; +import com.cadplan.vertices.renderer.style.ExternalSymbolsType; +import com.cadplan.vertices.renderer.style.ImageVertexStyle; +import com.cadplan.vertices.renderer.style.PolygonVertexStyle; +import com.cadplan.vertices.renderer.style.StarVertexStyle; +import com.cadplan.vertices.renderer.style.WKTVertexStyle; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jump.feature.Feature; +import com.vividsolutions.jump.feature.FeatureCollectionWrapper; +import com.vividsolutions.jump.feature.FeatureSchema; +import com.vividsolutions.jump.geom.EnvelopeUtil; +import com.vividsolutions.jump.workbench.model.AbstractLayerable; +import com.vividsolutions.jump.workbench.model.Category; +import com.vividsolutions.jump.workbench.model.Layer; +import com.vividsolutions.jump.workbench.model.Layerable; +import com.vividsolutions.jump.workbench.model.WMSLayer; +import com.vividsolutions.jump.workbench.plugin.PlugInContext; +import com.vividsolutions.jump.workbench.ui.Viewport; +import com.vividsolutions.jump.workbench.ui.renderer.style.ArrowLineStringEndpointStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.ArrowLineStringSegmentStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.BasicStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.CircleLineStringEndpointStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.ColorThemingStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.LabelStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.MetricsLineStringSegmentStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.Style; +import com.vividsolutions.jump.workbench.ui.renderer.style.VertexIndexLineSegmentStyle; +import com.vividsolutions.jump.workbench.ui.renderer.style.VertexXYLineSegmentStyle; + /** * User: geoff * Date: 9/03/2007 @@ -38,1509 +71,1509 @@ */ public class MapImagePrinter extends Component { - boolean debug = false; - PlugInContext context; - int xsize, ysize; - BufferedImage image = null; - Color noColor = Color.WHITE; - Envelope envelope; - Geometry envelopeGeometry; - Rectangle visRect; - Graphics2D graphics; - double scale; - Viewport viewPort; - int xoff; - int yoff; - boolean includeImages = true; - static double drawFactor = 0.667; // scale fonts for printed page - int START = 0; // decoration locations - int END = 1; - int SEGMENT = 2; - int VERTEX = 3; - int MIDDLE = 4; - Font vertexFont = new Font("SansSerif",Font.PLAIN,7); - Color vertexFontColor = Color.BLACK; - //Point2D vertexPoint; - //Point2D lastVertexPoint; - DecimalFormat df; - //String VERSION = JUMPWorkbench.VERSION_TEXT; - Color lineColor; - RendererData rd; - MediaTracker tracker; + boolean debug = false; + PlugInContext context; + int xsize, ysize; + BufferedImage image = null; + Color noColor = Color.WHITE; + Envelope envelope; + Geometry envelopeGeometry; + Rectangle visRect; + Graphics2D graphics; + double scale; + Viewport viewPort; + int xoff; + int yoff; + boolean includeImages = true; + static double drawFactor = 0.667; // scale fonts for printed page + int START = 0; // decoration locations + int END = 1; + int SEGMENT = 2; + int VERTEX = 3; + int MIDDLE = 4; + Font vertexFont = new Font("SansSerif",Font.PLAIN,7); + Color vertexFontColor = Color.BLACK; + //Point2D vertexPoint; + //Point2D lastVertexPoint; + DecimalFormat df; + //String VERSION = JUMPWorkbench.VERSION_TEXT; + Color lineColor; + RendererData rd; + MediaTracker tracker; - public MapImagePrinter(PlugInContext context, int extentInPixelsX, int extentInPixelsY, double scale) - { - this.context = context; - xsize = extentInPixelsX; - this.scale = scale; + public MapImagePrinter(PlugInContext context, int extentInPixelsX, int extentInPixelsY, double scale) + { + this.context = context; + xsize = extentInPixelsX; + this.scale = scale; - viewPort = context.getLayerViewPanel().getViewport(); - envelope = viewPort.getEnvelopeInModelCoordinates(); - visRect = context.getLayerViewPanel().getVisibleRect(); + viewPort = context.getLayerViewPanel().getViewport(); + envelope = viewPort.getEnvelopeInModelCoordinates(); + visRect = context.getLayerViewPanel().getVisibleRect(); - envelopeGeometry = EnvelopeUtil.toGeometry(envelope); + envelopeGeometry = EnvelopeUtil.toGeometry(envelope); - ysize = extentInPixelsY; - image = new BufferedImage(extentInPixelsX, extentInPixelsY, BufferedImage.TYPE_INT_ARGB); + ysize = extentInPixelsY; + image = new BufferedImage(extentInPixelsX, extentInPixelsY, BufferedImage.TYPE_INT_ARGB); - if(debug) System.out.println("xsize="+xsize+ " ysize="+ysize+" scale="+scale); - rd = new RendererData(); - tracker = new MediaTracker(this); + if(debug) System.out.println("xsize="+xsize+ " ysize="+ysize+" scale="+scale); + rd = new RendererData(); + tracker = new MediaTracker(this); - } + } - public void createImage(Graphics2D graphics, int xoff, int yoff) - { - //boolean debug = true; - this.graphics = graphics; - this.xoff = xoff; - this.yoff = yoff; - if(debug) System.out.println("xsize="+xsize+ " ysize="+ysize+" scale="+scale); - - java.util.List allLayers = context.getLayerViewPanel().getLayerManager().getLayers(); - java.util.List allCategories = context.getLayerViewPanel().getLayerManager().getCategories(); - if(debug) System.out.println("Number of layers: "+allLayers.size()+" categories:"+allCategories.size()); - ArrayList<Layerable> rasterLayers = new ArrayList<Layerable>(); - - if(includeImages) - { - Iterator j = allCategories.iterator(); - while (j.hasNext()) - { - Category cat = (Category) j.next(); - java.util.List allLayerables =cat.getLayerables(); - if(debug) System.out.println("Cataegory: "+ cat.getName()+ " size="+allLayerables.size()); + public void createImage(Graphics2D graphics, int xoff, int yoff) + { + //boolean debug = true; + this.graphics = graphics; + this.xoff = xoff; + this.yoff = yoff; + if(debug) System.out.println("xsize="+xsize+ " ysize="+ysize+" scale="+scale); - Iterator ijj = allLayerables.iterator(); + java.util.List allLayers = context.getLayerViewPanel().getLayerManager().getLayers(); + java.util.List allCategories = context.getLayerViewPanel().getLayerManager().getCategories(); + if(debug) System.out.println("Number of layers: "+allLayers.size()+" categories:"+allCategories.size()); + ArrayList<Layerable> rasterLayers = new ArrayList<Layerable>(); - while(ijj.hasNext()) // extract all visible raster layers - { - Layerable layer = (Layerable) ijj.next(); - try - { - Class dummy = Class.forName("org.openjump.core.rasterimage.RasterImageLayer"); - if((AbstractLayerable) layer instanceof org.openjump.core.rasterimage.RasterImageLayer) - { - boolean isVisible = ((org.openjump.core.rasterimage.RasterImageLayer)layer).isVisible(); - if(isVisible) rasterLayers.add(layer); - if(debug) System.out.println("Layer:"+layer.getName()+" Layer is Raster*********** visible:"+isVisible); - } - } - catch(ClassNotFoundException ex) - { - // ignore if image is not Pirol type + if(includeImages) + { + Iterator j = allCategories.iterator(); + while (j.hasNext()) + { + Category cat = (Category) j.next(); + java.util.List allLayerables =cat.getLayerables(); + if(debug) System.out.println("Cataegory: "+ cat.getName()+ " size="+allLayerables.size()); - } - if(!(layer instanceof Layer)) - { - if(debug) System.out.println("External Rendering image layer: "+layer.getName()+" type:"+layer.getClass().toString()); - if(layer.isVisible()) rasterLayers.add(layer); - } - } - } - for(int jj = rasterLayers.size()-1; jj >= 0; jj--) // scan in reverse order - { - Layerable layer = rasterLayers.get(jj); - BufferedImage bimage = null; - double transparencyLevel = 0.0; - Envelope imageEnvelope = null; - int imageX = 0; - int imageY = 0; + Iterator ijj = allLayerables.iterator(); - if((layer instanceof WMSLayer)) - { - try - { - Image image = ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).createImage(context.getLayerViewPanel()); - bimage = new BufferedImage(image.getWidth(null), image.getHeight(null),BufferedImage.TYPE_INT_ARGB); - Graphics ig = bimage.createGraphics(); - ig.setColor(Color.WHITE); - ig.fillRect(0,0,image.getWidth(null), image.getHeight(null)); - ig.drawImage(image,0,0,null); - imageEnvelope = envelope; - transparencyLevel = 1.0 - ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).getAlpha()/255.0; - if(debug) System.out.println("transp = "+transparencyLevel); - //Renderer renderer = ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).getRenderer(); - //graphics.drawImage(image,0,0,null); - } - catch (IOException ex) - { + while(ijj.hasNext()) // extract all visible raster layers + { + Layerable layer = (Layerable) ijj.next(); + try + { + Class dummy = Class.forName("org.openjump.core.rasterimage.RasterImageLayer"); + if((AbstractLayerable) layer instanceof org.openjump.core.rasterimage.RasterImageLayer) + { + boolean isVisible = ((org.openjump.core.rasterimage.RasterImageLayer)layer).isVisible(); + if(isVisible) rasterLayers.add(layer); + if(debug) System.out.println("Layer:"+layer.getName()+" Layer is Raster*********** visible:"+isVisible); + } + } + catch(ClassNotFoundException ex) + { + // ignore if image is not Pirol type - } - } - else - { - bimage = ((org.openjump.core.rasterimage.RasterImageLayer)layer).createImage(context.getLayerViewPanel()); - imageEnvelope = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getWholeImageEnvelope(); - transparencyLevel = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getTransparencyLevel(); - imageX = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getXOffset(); - imageY = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getYOffset(); - } + } + if(!(layer instanceof Layer)) + { + if(debug) System.out.println("External Rendering image layer: "+layer.getName()+" type:"+layer.getClass().toString()); + if(layer.isVisible()) rasterLayers.add(layer); + } + } + } + for(int jj = rasterLayers.size()-1; jj >= 0; jj--) // scan in reverse order + { + Layerable layer = rasterLayers.get(jj); + BufferedImage bimage = null; + double transparencyLevel = 0.0; + Envelope imageEnvelope = null; + int imageX = 0; + int imageY = 0; - if(debug) System.out.println("View envelope: "+envelope.getMinX()+","+envelope.getMinY()+":"+envelope.getWidth()+","+envelope.getHeight()); - if(debug) System.out.println("VisRect: "+visRect.getMinX()+","+visRect.getMinY()+":"+visRect.getWidth()+","+visRect.getHeight()); + if((layer instanceof WMSLayer)) + { + try + { + Image image = ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).createImage(context.getLayerViewPanel()); + bimage = new BufferedImage(image.getWidth(null), image.getHeight(null),BufferedImage.TYPE_INT_ARGB); + Graphics ig = bimage.createGraphics(); + ig.setColor(Color.WHITE); + ig.fillRect(0,0,image.getWidth(null), image.getHeight(null)); + ig.drawImage(image,0,0,null); + imageEnvelope = envelope; + transparencyLevel = 1.0 - ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).getAlpha()/255.0; + if(debug) System.out.println("transp = "+transparencyLevel); + //Renderer renderer = ((com.vividsolutions.jump.workbench.model.WMSLayer)layer).getRenderer(); + //graphics.drawImage(image,0,0,null); + } + catch (IOException ex) + { - if(debug) System.out.println("Image size: "+bimage.getWidth()+","+bimage.getHeight()); - if(debug) System.out.println("Image envelope: "+imageEnvelope.getMinX()+","+imageEnvelope.getMinY()+","+imageEnvelope.getWidth()+","+imageEnvelope.getHeight()); - if(debug) System.out.println("offsets: "+xoff+","+yoff); + } + } + else + { + bimage = ((org.openjump.core.rasterimage.RasterImageLayer)layer).createImage(context.getLayerViewPanel()); + imageEnvelope = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getWholeImageEnvelope(); + transparencyLevel = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getTransparencyLevel(); + imageX = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getXOffset(); + imageY = ((org.openjump.core.rasterimage.RasterImageLayer)layer).getYOffset(); + } + if(debug) System.out.println("View envelope: "+envelope.getMinX()+","+envelope.getMinY()+":"+envelope.getWidth()+","+envelope.getHeight()); + if(debug) System.out.println("VisRect: "+visRect.getMinX()+","+visRect.getMinY()+":"+visRect.getWidth()+","+visRect.getHeight()); - int x = (int) (imageEnvelope.getMinX()*scale); - int y = (int) (imageEnvelope.getMinY()*scale); - int width = (int) (imageEnvelope.getWidth()*scale); - int height = (int) (imageEnvelope.getHeight()*scale); - if(debug) System.out.println("Scaled Image envelope: "+x+","+y+":"+width+","+height); + if(debug) System.out.println("Image size: "+bimage.getWidth()+","+bimage.getHeight()); + if(debug) System.out.println("Image envelope: "+imageEnvelope.getMinX()+","+imageEnvelope.getMinY()+","+imageEnvelope.getWidth()+","+imageEnvelope.getHeight()); + if(debug) System.out.println("offsets: "+xoff+","+yoff); - double ascale = (double) envelope.getWidth()/ (double)visRect.getWidth(); - double imageOffX = (imageEnvelope.getMinX()-envelope.getMinX())/ ascale; - double imageOffY = (envelope.getHeight()-imageEnvelope.getHeight()-(imageEnvelope.getMinY()-envelope.getMinY()))/ascale; - if(debug) System.out.println("Image offsets: "+imageOffX+","+imageOffY); + int x = (int) (imageEnvelope.getMinX()*scale); + int y = (int) (imageEnvelope.getMinY()*scale); + int width = (int) (imageEnvelope.getWidth()*scale); + int height = (int) (imageEnvelope.getHeight()*scale); + if(debug) System.out.println("Scaled Image envelope: "+x+","+y+":"+width+","+height); + double ascale = envelope.getWidth()/ visRect.getWidth(); + double imageOffX = (imageEnvelope.getMinX()-envelope.getMinX())/ ascale; + double imageOffY = (envelope.getHeight()-imageEnvelope.getHeight()-(imageEnvelope.getMinY()-envelope.getMinY()))/ascale; + if(debug) System.out.println("Image offsets: "+imageOffX+","+imageOffY); - int scaledWidth = (int) visRect.getWidth(); - int scaledHeight = (int) visRect.getHeight(); - if(debug) System.out.println("visRect: "+scaledWidth+","+scaledHeight); - double x0 = envelope.getMinX(); - double y0 = envelope.getMaxY(); - double w0 = envelope.getWidth(); - double h0 = envelope.getHeight(); - if(debug) System.out.println("View Envelope: "+x0+","+y0+":"+w0+","+h0); + int scaledWidth = (int) visRect.getWidth(); + int scaledHeight = (int) visRect.getHeight(); + if(debug) System.out.println("visRect: "+scaledWidth+","+scaledHeight); - double x1 = imageEnvelope.getMinX(); - double y1 = imageEnvelope.getMaxY(); + double x0 = envelope.getMinX(); + double y0 = envelope.getMaxY(); - double w1 = imageEnvelope.getWidth(); - double h1 = imageEnvelope.getHeight(); - if(debug) System.out.println("Image Envelope: "+x1+","+y1+":"+w1+","+h1); - if(debug) System.out.println("ImageX="+imageX+" imageY="+imageY); + double w0 = envelope.getWidth(); + double h0 = envelope.getHeight(); + if(debug) System.out.println("View Envelope: "+x0+","+y0+":"+w0+","+h0); + double x1 = imageEnvelope.getMinX(); + double y1 = imageEnvelope.getMaxY(); - int dx0 = pX(imageEnvelope.getMinX()); - if(dx0 < pX(envelope.getMinX())) dx0 = pX(envelope.getMinX()); - int dy0 = pY(imageEnvelope.getMaxY()); - if(dy0 < pY(envelope.getMaxY())) dy0 = pY(envelope.getMaxY()); - int dx1 = pX(imageEnvelope.getMaxX()); - if(dx1 > pX(envelope.getMaxX())) dx1 = pX(envelope.getMaxX()); - int dy1 = pY(imageEnvelope.getMinY()); - if(dy1 > pY(envelope.getMinY())) dy1 = pY(envelope.getMinY()); + double w1 = imageEnvelope.getWidth(); + double h1 = imageEnvelope.getHeight(); + if(debug) System.out.println("Image Envelope: "+x1+","+y1+":"+w1+","+h1); + if(debug) System.out.println("ImageX="+imageX+" imageY="+imageY); - int sx0 = 0; - int sy0 = 0; - int sx1 = bimage.getWidth(); - int sy1 = bimage.getHeight(); - if(debug) System.out.println("dest: "+dx0+","+dy0+":"+dx1+","+dy1+" source: "+sx0+","+sy0+":"+sx1+","+sy1); - int currentColor; - int [] argb = new int[4]; - int fullTransparentAlpha = 255; - if(debug) System.out.println("Transparency: "+transparencyLevel); - for (int w=0; w < bimage.getWidth(); w++) - { - for (int h=0; h < bimage.getHeight(); h++) - { - currentColor = bimage.getRGB(w,h); - Color cc = new Color(currentColor); + int dx0 = pX(imageEnvelope.getMinX()); + if(dx0 < pX(envelope.getMinX())) dx0 = pX(envelope.getMinX()); + int dy0 = pY(imageEnvelope.getMaxY()); + if(dy0 < pY(envelope.getMaxY())) dy0 = pY(envelope.getMaxY()); + int dx1 = pX(imageEnvelope.getMaxX()); + if(dx1 > pX(envelope.getMaxX())) dx1 = pX(envelope.getMaxX()); + int dy1 = pY(imageEnvelope.getMinY()); + if(dy1 > pY(envelope.getMinY())) dy1 = pY(envelope.getMinY()); - argb[0] = (int) (transparencyLevel*255.0); - argb[1] = cc.getRed(); - argb[2] = cc.getGreen(); - argb[3] = cc.getBlue(); + int sx0 = 0; + int sy0 = 0; + int sx1 = bimage.getWidth(); + int sy1 = bimage.getHeight(); + if(debug) System.out.println("dest: "+dx0+","+dy0+":"+dx1+","+dy1+" source: "+sx0+","+sy0+":"+sx1+","+sy1); - Color newColor = new Color(cc.getRed(), cc.getGreen(), cc.getBlue(), (int) (transparencyLevel*255.0)); - bimage.setRGB(w,h,newColor.getRGB()); - } - } - graphics.drawImage(bimage,dx0,dy0,dx1,dy1,sx0,sy0,sx1,sy1,null); + int currentColor; + int [] argb = new int[4]; + int fullTransparentAlpha = 255; + if(debug) System.out.println("Transparency: "+transparencyLevel); + for (int w=0; w < bimage.getWidth(); w++) + { + for (int h=0; h < bimage.getHeight(); h++) + { + currentColor = bimage.getRGB(w,h); + Color cc = new Color(currentColor); - } - } + argb[0] = (int) (transparencyLevel*255.0); + argb[1] = cc.getRed(); + argb[2] = cc.getGreen(); + argb[3] = cc.getBlue(); + Color newColor = new Color(cc.getRed(), cc.getGreen(), cc.getBlue(), (int) (transparencyLevel*255.0)); + bimage.setRGB(w,h,newColor.getRGB()); + } + } + graphics.drawImage(bimage,dx0,dy0,dx1,dy1,sx0,sy0,sx1,sy1,null); - //debug = false; + } + } - java.util.List layerCollection = context.getLayerViewPanel().getLayerManager().getVisibleLayers(true); - - - int count = 0; - Object [] layerArray = layerCollection.toArray(); - for (int i= layerArray.length-1; i >= 0; i--) - { - Layer layer = (Layer) layerArray[i]; //i.next(); - if(debug) System.out.println("Normal layer: name:"+layer.getName()); - rd.layer = layer; - - String name = clean(layer.getName()); - String desc = layer.getDescription(); - int vertexSize = layer.getVertexStyle().getSize(); - rd.vertexSize = vertexSize; - rd.vertexStyle = layer.getVertexStyle(); - boolean showVertex = layer.getVertexStyle().isEnabled(); - rd.showVertex = showVertex; - Color labelColor = layer.getLabelStyle().getColor(); - rd.labelColor = labelColor; - Font labelFont = layer.getLabelStyle().getFont(); - rd.labelFont = labelFont; - double labelSize = layer.getLabelStyle().getHeight()*drawFactor; // seems to be necessary to match screen sizes + //debug = false; - boolean isScaled = layer.getLabelStyle().isScaling(); - if(isScaled && labelSize > 8) labelSize = 8; - rd.lableSize = labelSize; - labelFont = new Font(labelFont.getName(),labelFont.getStyle(), (int) labelSize); - rd.labelFont = labelFont; - String labelAngle = layer.getLabelStyle().getAngleAttribute(); - String labelHeight = layer.getLabelStyle().getHeightAttribute(); + java.util.List layerCollection = context.getLayerViewPanel().getLayerManager().getVisibleLayers(true); - String labelAlignment = layer.getLabelStyle().getVerticalAlignment(); - rd.labelAlignment = labelAlignment; - if(debug) System.out.println("Layer:"+name+ " LabelAngle="+labelAngle+" Height="+labelHeight+" alignment="+labelAlignment); - String labelName = null; - if(layer.getLabelStyle().isEnabled()) - { - labelName = layer.getLabelStyle().getAttribute(); - } - rd.labelName = labelName; - String labelValue; - if(debug) System.out.println("\n========================================"); - if(debug) System.out.println("layer "+count+":"+name+","+desc); - BasicStyle basicStyle = layer.getBasicStyle(); - Collection themeStyles = null; - Map themeMap = null; - Set mapKeys = null; - ColorThemingStyle themeStyle = (ColorThemingStyle) layer.getStyle(ColorThemingStyle.class); - if(debug) System.out.println(" Theming enabled: "+ themeStyle.isEnabled()); - if(themeStyle.isEnabled()) - { - themeMap = themeStyle.getAttributeValueToBasicStyleMap(); - if(debug) System.out.println("Theme Map:"+themeMap.toString()); - themeStyles = themeMap.values(); -// Iterator is = themeStyles.iterator(); -// while(is.hasNext()) -// { -// BasicStyle istyle = (BasicStyle) is.next(); -// System.out.println("Style fill color:"+istyle.getFillColor()); -// } + int count = 0; + Object [] layerArray = layerCollection.toArray(); + for (int i= layerArray.length-1; i >= 0; i--) + { + Layer layer = (Layer) layerArray[i]; //i.next(); + if(debug) System.out.println("Normal layer: name:"+layer.getName()); + rd.layer = layer; - mapKeys = themeMap.keySet(); - if(debug) System.out.println("mapKeys:"+mapKeys.toString()); - } + String name = clean(layer.getName()); + String desc = layer.getDescription(); + int vertexSize = layer.getVertexStyle().getSize(); + rd.vertexSize = vertexSize; + rd.vertexStyle = layer.getVertexStyle(); + boolean showVertex = layer.getVertexStyle().isEnabled(); + rd.showVertex = showVertex; + Color labelColor = layer.getLabelStyle().getColor(); + rd.labelColor = labelColor; + Font labelFont = layer.getLabelStyle().getFont(); + rd.labelFont = labelFont; + double labelSize = layer.getLabelStyle().getHeight()*drawFactor; // seems to be necessary to match screen sizes - int alpha = basicStyle.getAlpha(); - lineColor = basicStyle.getLineColor(); - double lineWidth = basicStyle.getLineWidth(); - lineColor = new Color(lineColor.getRed(), lineColor.getGreen(), lineColor.getBlue(), alpha); - rd.lineColor = lineColor; - rd.baseLineColor = lineColor; - if(!basicStyle.isRenderingLine())lineColor = noColor; + boolean isScaled = layer.getLabelStyle().isScaling(); + if(isScaled && labelSize > 8) labelSize = 8; + rd.lableSize = labelSize; + labelFont = new Font(labelFont.getName(),labelFont.getStyle(), (int) labelSize); + rd.labelFont = labelFont; + String labelAngle = layer.getLabelStyle().getAngleAttribute(); - Color fillColor = basicStyle.getFillColor(); - fillColor = new Color(fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue(), alpha); - if(!basicStyle.isRenderingFill()) fillColor = noColor; - rd.fillColor = fillColor; - rd.baseFillColor = fillColor; - String linePattern = basicStyle.getLinePattern(); - Stroke lineStroke = basicStyle.getLineStroke(); - rd.lineWidth = ((BasicStroke)lineStroke).getLineWidth() * drawFactor; - float [] dash = ((BasicStroke)lineStroke).getDashArray(); - try - { - for (int id=0; id < dash.length; id++) dash[id] = dash[id]*(float)drawFactor; - } - catch (NullPointerException ex) - { - - } - float dashPhase = ((BasicStroke)lineStroke).getDashPhase() * (float)drawFactor; - float miterLimit = ((BasicStroke)lineStroke).getMiterLimit(); - int endCap = ((BasicStroke)lineStroke).getEndCap(); - int lineJoin = ((BasicStroke)lineStroke).getLineJoin(); - rd.lineStroke = new BasicStroke((float)(rd.lineWidth),endCap, lineJoin, - miterLimit, dash, dashPhase); + String labelHeight = layer.getLabelStyle().getHeightAttribute(); - Paint fillPattern =basicStyle.getFillPattern(); - if(!basicStyle.isRenderingFillPattern()) fillPattern = null; - rd.fillPattern = fillPattern; - FeatureCollectionWrapper fcw = layer.getFeatureCollectionWrapper(); - java.util.List featureCollection = fcw.getFeatures(); - Iterator k = featureCollection.iterator(); + String labelAlignment = layer.getLabelStyle().getVerticalAlignment(); + rd.labelAlignment = labelAlignment; + if(debug) System.out.println("Layer:"+name+ " LabelAngle="+labelAngle+" Height="+labelHeight+" alignment="+labelAlignment); + String labelName = null; + if(layer.getLabelStyle().isEnabled()) + { + labelName = layer.getLabelStyle().getAttribute(); + } + rd.labelName = labelName; + String labelValue; + if(debug) System.out.println("\n========================================"); + if(debug) System.out.println("layer "+count+":"+name+","+desc); + BasicStyle basicStyle = layer.getBasicStyle(); + Collection themeStyles = null; + Map themeMap = null; + Set mapKeys = null; - if(debug) System.out.println("\n**** Number of features in layer: "+featureCollection.size()); - int count2 = 0; - while(k.hasNext()) - { - Feature feature = (Feature) k.next(); - if(debug) System.out.println("***Feature ID: "+feature.getID()+" type:"+feature.getClass().toString()); + ColorThemingStyle themeStyle = (ColorThemingStyle) layer.getStyle(ColorThemingStyle.class); + if(debug) System.out.println(" Theming enabled: "+ themeStyle.isEnabled()); + if(themeStyle.isEnabled()) + { + themeMap = themeStyle.getAttributeValueToBasicStyleMap(); + if(debug) System.out.println("Theme Map:"+themeMap.toString()); + themeStyles = themeMap.values(); + // Iterator is = themeStyles.iterator(); + // while(is.hasNext()) + // { + // BasicStyle istyle = (BasicStyle) is.next(); + // System.out.println("Style fill color:"+istyle.getFillColor()); + // } - // handle images - boolean featureIsImage = false; - Image featureImage = null; - FeatureSchema featureSchema = fcw.getFeatureSchema(); - try - { - int imageFormatIndex = featureSchema.getAttributeIndex("IMAGEFORMAT"); - int imageFactoryIndex = featureSchema.getAttributeIndex("IMAGEFACT"); - int imageFileIndex = featureSchema.getAttributeIndex("IMAGEFILE"); - String imageFactoryName = (String) feature.getAttribute(imageFactoryIndex); - if(debug) System.out.println("***IMAGEFILE index = "+imageFileIndex); - String filePath = (String) feature.getAttribute(imageFileIndex); -// com.vividsolutions.jump.workbench.imagery.graphic.GraphicImageFactory imf = (com.vividsolutions.jump.workbench.imagery.graphic.GraphicImageFactory)feature.getAttribute(imageFactoryIndex); -// ReferencedImage rImage = imf.createImage(filePath); + mapKeys = themeMap.keySet(); + if(debug) System.out.println("mapKeys:"+mapKeys.toString()); + } - if(debug) System.out.println("** File: "+ filePath); - //URL url = new URL((String) feature.getAttribute(imageFileIndex)); + int alpha = basicStyle.getAlpha(); + lineColor = basicStyle.getLineColor(); + double lineWidth = basicStyle.getLineWidth(); + lineColor = new Color(lineColor.getRed(), lineColor.getGreen(), lineColor.getBlue(), alpha); + rd.lineColor = lineColor; + rd.baseLineColor = lineColor; + if(!basicStyle.isRenderingLine())lineColor = noColor; - featureImage = Toolkit.getDefaultToolkit().getImage(filePath); - try - { - tracker.addImage(featureImage, 1); - tracker.waitForID(1); - } - catch (InterruptedException e) - { - } - if(debug) System.out.println("Image size:"+featureImage.getWidth(null)+","+featureImage.getHeight(null)); - featureIsImage = true; - } - catch(Exception ex) - { + Color fillColor = basicStyle.getFillColor(); + fillColor = new Color(fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue(), alpha); + if(!basicStyle.isRenderingFill()) fillColor = noColor; + rd.fillColor = fillColor; + rd.baseFillColor = fillColor; + String linePattern = basicStyle.getLinePattern(); + Stroke lineStroke = basicStyle.getLineStroke(); + rd.lineWidth = ((BasicStroke)lineStroke).getLineWidth() * drawFactor; + float [] dash = ((BasicStroke)lineStroke).getDashArray(); + try + { + for (int id=0; id < dash.length; id++) dash[id] = dash[id]*(float)drawFactor; + } + catch (NullPointerException ex) + { - } + } + float dashPhase = ((BasicStroke)lineStroke).getDashPhase() * (float)drawFactor; + float miterLimit = ((BasicStroke)lineStroke).getMiterLimit(); + int endCap = ((BasicStroke)lineStroke).getEndCap(); + int lineJoin = ((BasicStroke)lineStroke).getLineJoin(); + rd.lineStroke = new BasicStroke((float)(rd.lineWidth),endCap, lineJoin, + miterLimit, dash, dashPhase); + Paint fillPattern =basicStyle.getFillPattern(); + if(!basicStyle.isRenderingFillPattern()) fillPattern = null; + rd.fillPattern = fillPattern; + FeatureCollectionWrapper fcw = layer.getFeatureCollectionWrapper(); + java.util.List featureCollection = fcw.getFeatures(); + Iterator k = featureCollection.iterator(); + if(debug) System.out.println("\n**** Number of features in layer: "+featureCollection.size()); + int count2 = 0; + while(k.hasNext()) + { + Feature feature = (Feature) k.next(); + if(debug) System.out.println("***Feature ID: "+feature.getID()+" type:"+feature.getClass().toString()); - rd.feature = feature; - labelValue = null; - if(labelName != null) - { - try - { - labelValue = String.valueOf(feature.getAttribute(labelName)); - } - catch(Exception ex) - { - labelValue = String.valueOf(feature.getID()); - } - } - rd.labelValue = labelValue; - Geometry geometry = feature.getGeometry(); - if(debug) System.out.println("Geometry: "+geometry.toString()); + // handle images + boolean featureIsImage = false; + Image featureImage = null; + FeatureSchema featureSchema = fcw.getFeatureSchema(); + try + { + int imageFormatIndex = featureSchema.getAttributeIndex("IMAGEFORMAT"); + int imageFactoryIndex = featureSchema.getAttributeIndex("IMAGEFACT"); + int imageFileIndex = featureSchema.getAttributeIndex("IMAGEFILE"); + String imageFactoryName = (String) feature.getAttribute(imageFactoryIndex); + if(debug) System.out.println("***IMAGEFILE index = "+imageFileIndex); + String filePath = (String) feature.getAttribute(imageFileIndex); + // com.vividsolutions.jump.workbench.imagery.graphic.GraphicImageFactory imf = (com.vividsolutions.jump.workbench.imagery.graphic.GraphicImageFactory)feature.getAttribute(imageFactoryIndex); + // ReferencedImage rImage = imf.createImage(filePath); - if(featureIsImage) - { - Coordinate[] coords = geometry.getEnvelope().getCoordinates(); - int x = pX(coords[0].x); - int y = pY(coords[2].y); - int w = pX(coords[2].x) - x; - int h = pY(coords[0].y) - y; - if(debug) System.out.println("Image x="+x+" y="+y+" w="+w+" h="+h); - graphics.drawImage(featureImage, x, y, w, h, null); - } - else if(!geometry.isEmpty()) - { - //boolean debug = true; - if(debug) System.out.println("feature "+count2+":"+geometry); - String type = geometry.getGeometryType(); - if(debug) System.out.println("type="+type); - Coordinate[] coords = geometry.getCoordinates(); - if(themeStyles != null) - { - if(debug) System.out.println("Using theme style"); - String themeAttribute = themeStyle.getAttributeName(); - Object themeAttributeValue = feature.getAttribute(themeAttribute); - if(debug) System.out.println("Attribute name:"+themeAttribute+" value:"+themeAttributeValue); - rd.fillPattern = null; // muts be if themeing is on + if(debug) System.out.println("** File: "+ filePath); + //URL url = new URL((String) feature.getAttribute(imageFileIndex)); - Iterator ki = mapKeys.iterator(); - int index = -1; // the theme index - int kk = 0; - while(ki.hasNext()) - { - String key = ki.next().toString(); - //check for valid range - boolean isRange = true; - if(key.indexOf("-") < 0) isRange = false; - else - { - StringTokenizer st = new StringTokenizer(key,"-"); // test if range is numeric - try - { - Double v = Double.parseDouble(st.nextToken()); - isRange = true; - } - catch(NumberFormatException ex) - { - isRange = false; - } + featureImage = Toolkit.getDefaultToolkit().getImage(filePath); + try + { + tracker.addImage(featureImage, 1); + tracker.waitForID(1); + } + catch (InterruptedException e) + { + } + if(debug) System.out.println("Image size:"+featureImage.getWidth(null)+","+featureImage.getHeight(null)); + featureIsImage = true; + } + catch(Exception ex) + { - } - if(!isRange) - { + } - String themeAttributeValueString= null; - try - { - themeAttributeValueString = (String) themeAttributeValue; - } - catch (Exception ex) - { - try - { - themeAttributeValueString = String.valueOf((Integer) themeAttributeValue); - } - catch (Exception ex1) - { - themeAttributeValueString = String.valueOf((Double) themeAttributeValue); - } - } - try - { - if(debug) System.out.println("key="+key); - if(debug) System.out.println("attValue="+themeAttributeValueString); - if(key.trim().equals(themeAttributeValueString.trim())) index = kk; - } - catch (Exception ex) - { - //ex.printStackTrace(); - //index = -1; - //kk= -1; - } - if(debug) System.out.println("themeAttribute:<"+themeAttributeValue+">"); - if(debug) System.out.println("keyString: <"+key+"> index="+index+" kk="+kk); - } - else // have a range - { - StringTokenizer st = new StringTokenizer(key,"-"); - double v0 = Double.MIN_VALUE; - double v1 = Double.MAX_VALUE; + rd.feature = feature; + labelValue = null; + if(labelName != null) + { + try + { + labelValue = String.valueOf(feature.getAttribute(labelName)); + } + catch(Exception ex) + { + labelValue = String.valueOf(feature.getID()); + } + } + rd.labelValue = labelValue; + Geometry geometry = feature.getGeometry(); + if(debug) System.out.println("Geometry: "+geometry.toString()); - try - { - v0 = Double.parseDouble(st.nextToken()); - try - { - if(st.hasMoreTokens()) v1 = Double.parseDouble(st.nextToken()); - } - catch(NumberFormatException ex2) - { - - } - } - catch(Exception ex) - { - System.out.println("ERROR - in extacting them style for: "+key); - } - double v; - try - { - v = (Double) themeAttributeValue; - } - catch(Exception ex) - { - v = (double) ((Integer) themeAttributeValue); - } - if(v >= v0 && v < v1) index = kk; - if(debug) System.out.println("key: "+key+" index="+index+" kk="+kk); - } - kk++; - } + if(featureIsImage) + { + Coordinate[] coords = geometry.getEnvelope().getCoordinates(); + int x = pX(coords[0].x); + int y = pY(coords[2].y); + int w = pX(coords[2].x) - x; + int h = pY(coords[0].y) - y; + if(debug) System.out.println("Image x="+x+" y="+y+" w="+w+" h="+h); + graphics.drawImage(featureImage, x, y, w, h, null); + } + else if(!geometry.isEmpty()) + { + //boolean debug = true; + if(debug) System.out.println("feature "+count2+":"+geometry); + String type = geometry.getGeometryType(); + if(debug) System.out.println("type="+type); + Coordinate[] coords = geometry.getCoordinates(); + if(themeStyles != null) + { + if(debug) System.out.println("Using theme style"); + String themeAttribute = themeStyle.getAttributeName(); + Object themeAttributeValue = feature.getAttribute(themeAttribute); + if(debug) System.out.println("Attribute name:"+themeAttribute+" value:"+themeAttributeValue); + rd.fillPattern = null; // muts be if themeing is on - Iterator si = themeStyles.iterator(); - kk = 0; - boolean found = false; - while(si.hasNext() && !found) - { - BasicStyle style = (BasicStyle) si.next(); - if(debug) System.out.println("style color: "+style.getFillColor()); - if(kk == index) - { - fillColor = style.getFillColor(); - alpha = style.getAlpha(); - fillColor = new Color(fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue(), alpha); - lineColor = new Color(fillColor.getRed()/2, fillColor.getGreen()/2, fillColor.getBlue()/2, alpha); - rd.fillColor = fillColor; - rd.lineColor = lineColor; - if(debug) System.out.println("Theme color: "+fillColor); - found = true; - } - kk++; - } - if(!found) - { - rd.fillColor = themeStyle.getDefaultStyle().getFillColor(); - rd.lineColor = themeStyle.getDefaultStyle().getLineColor(); - if(debug) System.out.println("Themeing style not found for index:"+index); - } - else - { - if(debug) System.out.println("found: index="+index+" fillColor="+rd.fillColor); + Iterator ki = mapKeys.iterator(); + int index = -1; // the theme index + int kk = 0; + while(ki.hasNext()) + { + String key = ki.next().toString(); + //check for valid range + boolean isRange = true; + if(key.indexOf("-") < 0) isRange = false; + else + { + StringTokenizer st = new StringTokenizer(key,"-"); // test if range is numeric + try + { + Double v = Double.parseDouble(st.nextToken()); + isRange = true; + } + catch(NumberFormatException ex) + { + isRange = false; + } - } + } + if(!isRange) + { - } - List styleList = layer.getStyles(); + String themeAttributeValueString= null; + try + { + themeAttributeValueString = (String) themeAttributeValue; + } + catch (Exception ex) + { + try + { + themeAttributeValueString = String.valueOf(themeAttributeValue); + } + catch (Exception ex1) + { + themeAttributeValueString = String.valueOf(themeAttributeValue); + } + } + try + { + if(debug) System.out.println("key="+key); + if(debug) System.out.println("attValue="+themeAttributeValueString); + if(key.trim().equals(themeAttributeValueString.trim())) index = kk; + } + catch (Exception ex) + { + //ex.printStackTrace(); + //index = -1; + //kk= -1; + } - if(debug) System.out.println("No of styles in layer: "+styleList.size()); - rd.styleList = styleList; - //System.out.println("Feature type:"+type); + if(debug) System.out.println("themeAttribute:<"+themeAttributeValue+">"); + if(debug) System.out.println("keyString: <"+key+"> index="+index+" kk="+kk); - if(type.equals("MultiPoint") || type.equals("Point")) - { - try - { - Geometry inter = geometry.intersection(envelopeGeometry); - int numGeom = 1; - try - { - numGeom = ((GeometryCollection) inter).getNumGeometries(); - } - catch (Exception ex) - { + } + else // have a range + { + StringTokenizer st = new StringTokenizer(key,"-"); + double v0 = Double.MIN_VALUE; + double v1 = Double.MAX_VALUE; - } - Geometry interp; - if(inter != null && numGeom > 0) - { - for(int n=0; n < numGeom; n++) - { - try - { - interp = ((GeometryCollection) inter).getGeometryN(n); - } - catch(Exception ex) - { - interp = inter; - } - coords = interp.getCoordinates(); - rd.previousVertex = new Point2D.Double(coords[0].x, coords[0].y); - rd.thisVertex = new Point2D.Double(coords[0].x, coords[0].y); - drawPoint(graphics); - if(labelValue != null) - { - double actualHeight = getAttribute(feature, labelHeight); - rd.labelHeight = actualHeight; - double actualAngle = getAttribute(feature, labelAngle); - rd.labelAngle = actualAngle; - rd.lineAngle = 0.0; - rd.x = coords[0].x; - rd.y = coords[0].y; - drawLabel(graphics); - } - } - } - } - catch (Exception ex) - { - System.out.println("Point ERROR in JTS Geometry: "+ex); - ex.printStackTrace(); - } - } - else if(type.equals("LineString") || type.equals("MultiLineString")) - { - try - { - Geometry inter = geometry.intersection(envelopeGeometry); - int numGeom = 1; - try - { - numGeom = ((GeometryCollection) inter).getNumGeometries(); - } - catch (Exception ex) - { + try + { + v0 = Double.parseDouble(st.nextToken()); + try + { + if(st.hasMoreTokens()) v1 = Double.parseDouble(st.nextToken()); + } + catch(NumberFormatException ex2) + { - } - Geometry interp; - if(inter != null && numGeom > 0) - { - for(int n=0; n < numGeom; n++) - { - try - { - interp = ((GeometryCollection) inter).getGeometryN(n); - } - catch(Exception ex) - { - interp = inter; - } - coords = interp.getCoordinates(); - Coordinate [] linec = interp.getCoordinates(); - rd.cline = linec; - drawLine(graphics); - if(linec.length > 0) - { - double longest = 0; - double x0 = linec[0].x; - double y0 = linec[0].y; - double x1 = linec[1].x; - double y1 = linec[1].y; - for (int ic = 0; ic < linec.length-1; ic++) // find longest segment - { - double len = Math.sqrt((linec[ic].x - linec[ic+1].x)*(linec[ic].x - linec[ic+1].x) + - (linec[ic].y - linec[ic+1].y)*(linec[ic].y - linec[ic+1].y)); - if(len > longest ) - { - longest = len; - x0 = linec[ic].x; - y0 = linec[ic].y; - x1 = linec[ic+1].x; - y1 = linec[ic+1].y; - } - } - if(labelValue != null) - { - double angle = Math.atan2(y1-y0,x1-x0); - double actualHeight = getAttribute(feature, labelHeight); - double actualAngle = getAttribute(feature, labelAngle); - rd.labelHeight = actualHeight; - rd.labelAngle = actualAngle; - Font newFont = null; - if(actualHeight > 0.0) - { - newFont = new Font(labelFont.getName(), labelFont.getStyle(), (int) (actualHeight*drawFactor)); - } - else newFont = labelFont; - FontMetrics fm = graphics.getFontMetrics(newFont); - double strlen = (fm.stringWidth(labelValue.trim()))/scale; - double seglen = Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); - double labstart = seglen/2-strlen/2; - //System.out.println("strlen="+strlen+" seglen="+seglen+" labstart="+labstart+" angle="+angle); - rd.x = x0 + labstart*Math.cos(angle); - rd.y = y0 + labstart*Math.sin(angle); - if(angle < -Math.PI/2.0 || angle > Math.PI/2.0) - { - angle = angle + Math.PI; - rd.x = x1 + labstart*Math.cos(angle); - rd.y = y1 + labstart*Math.sin(angle); - } - rd.lineAngle = angle; + } + } + catch(Exception ex) + { + System.out.println("ERROR - in extacting them style for: "+key); + } + double v; + try + { + v = (Double) themeAttributeValue; + } + catch(Exception ex) + { + v = ((Integer) themeAttributeValue); + } + if(v >= v0 && v < v1) index = kk; + if(debug) System.out.println("key: "+key+" index="+index+" kk="+kk); + } + kk++; + } - lineWidth = ((BasicStroke)lineStroke).getLineWidth(); - //System.out.println("rd.x="+rd.x+" rd.y="+rd.y+ " name="+rd.labelValue +"("+x0+","+x1+")"); - drawLabel(graphics); - } - } - } - } - } - catch (Exception ex) - { - System.out.println("Line ERROR in JTS Geometry: "+ex); - ex.printStackTrace(); - } - } - else if(type.equals("Polygon") || type.equals("MultiPolygon")) - { - try - { - Geometry inter = geometry.intersection(envelopeGeometry); - int numGeom = 1; - try - { - numGeom = ((GeometryCollection) inter).getNumGeometries(); - } - catch(Exception ex) - { + Iterator si = themeStyles.iterator(); + kk = 0; + boolean found = false; + while(si.hasNext() && !found) + { + BasicStyle style = (BasicStyle) si.next(); + if(debug) System.out.println("style color: "+style.getFillColor()); + if(kk == index) + { + fillColor = style.getFillColor(); + alpha = style.getAlpha(); + fillColor = new Color(fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue(), alpha); + lineColor = new Color(fillColor.getRed()/2, fillColor.getGreen()/2, fillColor.getBlue()/2, alpha); + rd.fillColor = fillColor; + rd.lineColor = lineColor; + if(debug) System.out.println("Theme color: "+fillColor); + found = true; + } + kk++; + } + if(!found) + { + rd.fillColor = themeStyle.getDefaultStyle().getFillColor(); + rd.lineColor = themeStyle.getDefaultStyle().getLineColor(); + if(debug) System.out.println("Themeing style not found for index:"+index); + } + else + { + if(debug) System.out.println("found: index="+index+" fillColor="+rd.fillColor); - } - Geometry interp; - if(inter != null && numGeom > 0) - { - for(int n = 0; n < numGeom; n++) - { - try - { - interp = ((GeometryCollection) inter).getGeometryN(n); - } - catch(Exception ex) - { - interp = inter; - } - coords = interp.getCoordinates(); - rd.polygon = interp; - drawPolygon(graphics); - Point centroid = interp.getInteriorPoint(); //.getCentroid(); - if(centroid == null) centroid = interp.getCentroid(); - if(centroid != null) - { - double actualHeight = getAttribute(feature, labelHeight); - double actualAngle = getAttribute(feature, labelAngle); - rd.labelHeight = actualHeight; - rd.labelAngle = actualAngle; - Font newFont = null; - if(actualHeight > 0.0) - { - newFont = new Font(labelFont.getName(), labelFont.getStyle(), (int) actualHeight); - } - else newFont = labelFont; - FontMetrics fm = graphics.getFontMetrics(newFont); - if(labelValue != null) - { - int slen = fm.stringWidth(labelValue); - int sheight = (int) actualHeight; - try - { - Coordinate coord = new Coordinate(centroid.getX()-(slen/2)/scale,centroid.getY(),0.0); + } - rd.lineAngle = 0.0; - rd.labelAlignment = LabelStyle.ON_LINE; - rd.x = coord.x; - rd.y = coord.y; - drawLabel(graphics); - } - catch (Exception ex) - { + } + List styleList = layer.getStyles(); - } - } - } - } - } - } - catch (Exception ex) - { - System.out.println("Polygon ERROR in JTS Geometry: "); - ex.printStackTrace(); - } - } - count2++; - } - count++; - } - } - } + if(debug) System.out.println("No of styles in layer: "+styleList.size()); + rd.styleList = styleList; + //System.out.println("Feature type:"+type); -//================================================================ -// scale coords to pixels -//================================================================ - private int pX(double x) - { - int px = xoff + (int) Math.round((x - envelope.getMinX())*scale); - return px; - } + if(type.equals("MultiPoint") || type.equals("Point")) + { + try + { + Geometry inter = geometry.intersection(envelopeGeometry); + int numGeom = 1; + try + { + numGeom = ((GeometryCollection) inter).getNumGeometries(); + } + catch (Exception ex) + { - private int pY(double y) - { - int py = yoff + ysize -(int) Math.round((y - envelope.getMinY())*scale); - return py; - } + } + Geometry interp; + if(inter != null && numGeom > 0) + { + for(int n=0; n < numGeom; n++) + { + try + { + interp = ((GeometryCollection) inter).getGeometryN(n); + } + catch(Exception ex) + { + interp = inter; + } + coords = interp.getCoordinates(); + rd.previousVertex = new Point2D.Double(coords[0].x, coords[0].y); + rd.thisVertex = new Point2D.Double(coords[0].x, coords[0].y); + drawPoint(graphics); + if(labelValue != null) + { + double actualHeight = getAttribute(feature, labelHeight); + rd.labelHeight = actualHeight; + double actualAngle = getAttribute(feature, labelAngle); + rd.labelAngle = actualAngle; + rd.lineAngle = 0.0; + rd.x = coords[0].x; + rd.y = coords[0].y; + drawLabel(graphics); + } + } + } + } + catch (Exception ex) + { + System.out.println("Point ERROR in JTS Geometry: "+ex); + ex.printStackTrace(); + } + } + else if(type.equals("LineString") || type.equals("MultiLineString")) + { + try + { + Geometry inter = geometry.intersection(envelopeGeometry); + int numGeom = 1; + try + { + numGeom = ((GeometryCollection) inter).getNumGeometries(); + } + catch (Exception ex) + { - private void drawLabel(Graphics2D g) - { - //System.out.println("labelAngle="+labelAngle+" height="+labelHeight); - //System.out.println("angle="+angle+" Font:"+labelFont); - double labelAngle = Math.toRadians(rd.labelAngle); - double actualAngle = rd.lineAngle + labelAngle; - double actualHeight = rd.labelFont.getSize(); - if(rd.labelHeight > 0.0) actualHeight = rd.labelHeight*drawFactor; - double xoff = 0.0, yoff = 0.0; - double adjust = 0.0; - if(rd.labelAlignment.equals(LabelStyle.ABOVE_LINE)) - { - yoff = - adjust; - } - if(rd.labelAlignment.equals(LabelStyle.BELOW_LINE)) - { - yoff = actualHeight - adjust; - } - if(rd.labelAlignment.equals(LabelStyle.ON_LINE)) - { - yoff = actualHeight/2.0 - adjust; - } - //System.out.println("Label at: x="+pX(rd.x)+" y="+pY(rd.y)+ " xoff="+xoff+" yoff="+yoff); - if(rd.labelName != null) - { - g.setColor(rd.labelColor); - Font newFont = new Font(rd.labelFont.getName(), rd.labelFont.getStyle(), (int) actualHeight); - //System.out.println("actualFont: "+newFont); - g.setFont(newFont); - // System.out.println("label font:"+labelFont); - g.translate(pX(rd.x),pY(rd.y)); - g.rotate(-actualAngle); - g.drawString(rd.labelValue, (int)xoff, (int)yoff); - g.rotate(actualAngle); - g.translate(-pX(rd.x),-pY(rd.y)); - } - } - - private void drawPoint(Graphics2D g) - { - if(!rd.showVertex) return; - int x = pX(rd.thisVertex.getX()) - rd.vertexSize/2; - int y = pY(rd.thisVertex.getY()) - rd.vertexSize/2; - if(debug) System.out.println("Drawing point: "+rd.previousVertex+ " at "+x+","+y); - rd.lineWidth = ((BasicStroke)rd.lineStroke).getLineWidth(); - Stroke stroke = new BasicStroke((float)(rd.lineWidth/2.0),BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); - g.setStroke(stroke); + } + Geometry interp; + if(inter != null && numGeom > 0) + { + for(int n=0; n < numGeom; n++) + { + try + { + interp = ((GeometryCollection) inter).getGeometryN(n); + } + catch(Exception ex) + { + interp = inter; + } + coords = interp.getCoordinates(); + Coordinate [] linec = interp.getCoordinates(); + rd.cline = linec; + drawLine(graphics); + if(linec.length > 0) + { + double longest = 0; + double x0 = linec[0].x; + double y0 = linec[0].y; + double x1 = linec[1].x; + double y1 = linec[1].y; + for (int ic = 0; ic < linec.length-1; ic++) // find longest segment + { + double len = Math.sqrt((linec[ic].x - linec[ic+1].x)*(linec[ic].x - linec[ic+1].x) + + (linec[ic].y - linec[ic+1].y)*(linec[ic].y - linec[ic+1].y)); + if(len > longest ) + { + longest = len; + x0 = linec[ic].x; + y0 = linec[ic].y; + x1 = linec[ic+1].x; + y1 = linec[ic+1].y; + } + } + if(labelValue != null) + { + double angle = Math.atan2(y1-y0,x1-x0); + double actualHeight = getAttribute(feature, labelHeight); + double actualAngle = getAttribute(feature, labelAngle); + rd.labelHeight = actualHeight; + rd.labelAngle = actualAngle; + Font newFont = null; + if(actualHeight > 0.0) + { + newFont = new Font(labelFont.getName(), labelFont.getStyle(), (int) (actualHeight*drawFactor)); + } + else newFont = labelFont; + FontMetrics fm = graphics.getFontMetrics(newFont); + double strlen = (fm.stringWidth(labelValue.trim()))/scale; + double seglen = Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); + double labstart = seglen/2-strlen/2; + //System.out.println("strlen="+strlen+" seglen="+seglen+" labstart="+labstart+" angle="+angle); + rd.x = x0 + labstart*Math.cos(angle); + rd.y = y0 + labstart*Math.sin(angle); + if(angle < -Math.PI/2.0 || angle > Math.PI/2.0) + { + angle = angle + Math.PI; + rd.x = x1 + labstart*Math.cos(angle); + rd.y = y1 + labstart*Math.sin(angle); + } + rd.lineAngle = angle; - g.setColor(rd.baseFillColor); - boolean symbols = false; - if(rd.vertexStyle.isEnabled()) - { - try - { - Class dummy = Class.forName("com.cadplan.jump.VertexSymbols"); // test if VertexSymbols pluign is installed + lineWidth = ((BasicStroke)lineStroke).getLineWidth(); + //System.out.println("rd.x="+rd.x+" rd.y="+rd.y+ " name="+rd.labelValue +"("+x0+","+x1+")"); + drawLabel(graphics); + } + } + } + } + } + catch (Exception ex) + { + System.out.println("Line ERROR in JTS Geometry: "+ex); + ex.printStackTrace(); + } + } + else if(type.equals("Polygon") || type.equals("MultiPolygon")) + { + try + { + Geometry inter = geometry.intersection(envelopeGeometry); + int numGeom = 1; + try + { + numGeom = ((GeometryCollection) inter).getNumGeometries(); + } + catch(Exception ex) + { - if(rd.vertexStyle instanceof ExternalSymbolsImplType) - { - ExternalSymbolsImplType vertex = new ExternalSymbolsImplType(); - vertex.setNumSides(((ExternalSymbolsImplType)rd.vertexStyle).getNumSides()); - vertex.setOrientation(((ExternalSymbolsImplType)rd.vertexStyle).getOrientation()); - vertex.setDotted(((ExternalSymbolsImplType)rd.vertexStyle).getDotted()); - vertex.setShowLine(((ExternalSymbolsImplType)rd.vertexStyle).getShowLine()); - vertex.setShowFill(((ExternalSymbolsImplType)rd.vertexStyle).getShowFill()); - vertex.setSize((int)(((ExternalSymbolsImplType)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((ExternalSymbolsImplType)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((ExternalSymbolsImplType)rd.vertexStyle).getAttributeName()); - vertex.setSymbolName(((ExternalSymbolsImplType)rd.vertexStyle).getSymbolName()); - vertex.setSymbolType(((ExternalSymbolsImplType)rd.vertexStyle).getSymbolType()); + } + Geometry interp; + if(inter != null && numGeom > 0) + { + for(int n = 0; n < numGeom; n++) + { + try + { + interp = ((GeometryCollection) inter).getGeometryN(n); + } + catch(Exception ex) + { + interp = inter; + } + coords = interp.getCoordinates(); + rd.polygon = interp; + drawPolygon(graphics); + Point centroid = interp.getInteriorPoint(); //.getCentroid(); + if(centroid == null) centroid = interp.getCentroid(); + if(centroid != null) + { + double actualHeight = getAttribute(feature, labelHeight); + double actualAngle = getAttribute(feature, labelAngle); + rd.labelHeight = actualHeight; + rd.labelAngle = actualAngle; + Font newFont = null; + if(actualHeight > 0.0) + { + newFont = new Font(labelFont.getName(), labelFont.getStyle(), (int) actualHeight); + } + else newFont = labelFont; + FontMetrics fm = graphics.getFontMetrics(newFont); + if(labelValue != null) + { + int slen = fm.stringWidth(labelValue); + int sheight = (int) actualHeight; + try + { + Coordinate coord = new Coordinate(centroid.getX()-(slen/2)/scale,centroid.getY(),0.0); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - } - else if(rd.vertexStyle instanceof com.cadplan.jump.PolygonVertexStyle) - { - PolygonVertexStyle vertex = new PolygonVertexStyle(); - vertex.setNumSides(((PolygonVertexStyle)rd.vertexStyle).getNumSides()); - vertex.setOrientation(((PolygonVertexStyle)rd.vertexStyle).getOrientation()); - vertex.setDotted(((PolygonVertexStyle)rd.vertexStyle).getDotted()); - vertex.setShowLine(((PolygonVertexStyle)rd.vertexStyle).getShowLine()); - vertex.setShowFill(((PolygonVertexStyle)rd.vertexStyle).getShowFill()); - vertex.setSize((int)(((PolygonVertexStyle)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((PolygonVertexStyle)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((PolygonVertexStyle)rd.vertexStyle).getAttributeName()); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - } - else if(rd.vertexStyle instanceof com.cadplan.jump.StarVertexStyle) - { - StarVertexStyle vertex = new StarVertexStyle(); - vertex.setNumSides(((StarVertexStyle)rd.vertexStyle).getNumSides()); - vertex.setOrientation(((StarVertexStyle)rd.vertexStyle).getOrientation()); - vertex.setDotted(((StarVertexStyle)rd.vertexStyle).getDotted()); - vertex.setShowLine(((StarVertexStyle)rd.vertexStyle).getShowLine()); - vertex.setShowFill(((StarVertexStyle)rd.vertexStyle).getShowFill()); - vertex.setSize((int)(((StarVertexStyle)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((StarVertexStyle)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((StarVertexStyle)rd.vertexStyle).getAttributeName()); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); + rd.lineAngle = 0.0; + rd.labelAlignment = LabelStyle.ON_LINE; + rd.x = coord.x; + rd.y = coord.y; + drawLabel(graphics); + } + catch (Exception ex) + { - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - } - else if(rd.vertexStyle instanceof com.cadplan.jump.AnyShapeVertexStyle) - { - AnyShapeVertexStyle vertex = new AnyShapeVertexStyle(); - vertex.setType(((AnyShapeVertexStyle)rd.vertexStyle).getType()); - vertex.setOrientation(((AnyShapeVertexStyle)rd.vertexStyle).getOrientation()); - vertex.setDotted(((AnyShapeVertexStyle)rd.vertexStyle).getDotted()); - vertex.setShowLine(((AnyShapeVertexStyle)rd.vertexStyle).getShowLine()); - vertex.setShowFill(((AnyShapeVertexStyle)rd.vertexStyle).getShowFill()); - vertex.setSize((int)(((AnyShapeVertexStyle)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((AnyShapeVertexStyle)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((AnyShapeVertexStyle)rd.vertexStyle).getAttributeName()); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); + } + } + } + } + } + } + catch (Exception ex) + { + System.out.println("Polygon ERROR in JTS Geometry: "); + ex.printStackTrace(); + } + } + count2++; + } + count++; + } + } + } - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - } - else if(rd.vertexStyle instanceof com.cadplan.jump.ImageVertexStyle) - { - ImageVertexStyle vertex = new ImageVertexStyle(); - vertex.setName(((ImageVertexStyle)rd.vertexStyle).getName()); - vertex.setOrientation(((ImageVertexStyle)rd.vertexStyle).getOrientation()); - vertex.setScale((((ImageVertexStyle)rd.vertexStyle).getScale()/drawFactor)); - vertex.setSize((int)(((ImageVertexStyle)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((ImageVertexStyle)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((ImageVertexStyle)rd.vertexStyle).getAttributeName()); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); + //================================================================ + // scale coords to pixels + //================================================================ + private int pX(double x) + { + int px = xoff + (int) Math.round((x - envelope.getMinX())*scale); + return px; + } - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - //System.out.println("byValue="+vertex.getByValue()+" attname="+vertex.getAttributeName()); - } - else if(rd.vertexStyle instanceof com.cadplan.jump.WKTVertexStyle) - { - WKTVertexStyle vertex = new WKTVertexStyle(); - vertex.setName(((WKTVertexStyle)rd.vertexStyle).getName()); - vertex.setOrientation(((WKTVertexStyle)rd.vertexStyle).getOrientation()); - vertex.setShowLine(((WKTVertexStyle)rd.vertexStyle).getShowLine()); - vertex.setScale((((WKTVertexStyle)rd.vertexStyle).getScale()/drawFactor)); - vertex.setSize((int)(((WKTVertexStyle)rd.vertexStyle).getSize()*drawFactor)); - vertex.setByValue(((WKTVertexStyle)rd.vertexStyle).getByValue()); - vertex.setAttributeName(((WKTVertexStyle)rd.vertexStyle).getAttributeName()); - vertex.initialize(rd.layer); - vertex.copyText((ExternalSymbolsType)rd.vertexStyle); - vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); - vertex.setDrawFactor(drawFactor); - - x = pX(rd.thisVertex.getX()); - y = pY(rd.thisVertex.getY()); - vertex.paint(rd.feature,g,new Point2D.Double(x,y)); - symbols = true; - //System.out.println("byValue="+vertex.getByValue()+" attname="+vertex.getAttributeName()); - } + private int pY(double y) + { + int py = yoff + ysize -(int) Math.round((y - envelope.getMinY())*scale); + return py; + } - } - catch(ClassNotFoundException ex) // VertexSymbols plugin not installed - { + private void drawLabel(Graphics2D g) + { + //System.out.println("labelAngle="+labelAngle+" height="+labelHeight); + //System.out.println("angle="+angle+" Font:"+labelFont); + double labelAngle = Math.toRadians(rd.labelAngle); + double actualAngle = rd.lineAngle + labelAngle; + double actualHeight = rd.labelFont.getSize(); + if(rd.labelHeight > 0.0) actualHeight = rd.labelHeight*drawFactor; + double xoff = 0.0, yoff = 0.0; + double adjust = 0.0; + if(rd.labelAlignment.equals(LabelStyle.ABOVE_LINE)) + { + yoff = - adjust; + } + if(rd.labelAlignment.equals(LabelStyle.BELOW_LINE)) + { + yoff = actualHeight - adjust; + } + if(rd.labelAlignment.equals(LabelStyle.ON_LINE)) + { + yoff = actualHeight/2.0 - adjust; + } + //System.out.println("Label at: x="+pX(rd.x)+" y="+pY(rd.y)+ " xoff="+xoff+" yoff="+yoff); + if(rd.labelName != null) + { + g.setColor(rd.labelColor); + Font newFont = new Font(rd.labelFont.getName(), rd.labelFont.getStyle(), (int) actualHeight); + //System.out.println("actualFont: "+newFont); + g.setFont(newFont); + // System.out.println("label font:"+labelFont); + g.translate(pX(rd.x),pY(rd.y)); + g.rotate(-actualAngle); + g.drawString(rd.labelValue, (int)xoff, (int)yoff); + g.rotate(actualAngle); + g.translate(-pX(rd.x),-pY(rd.y)); + } + } - } - catch (Exception ex) // any other error - { - System.out.println("ERROR: showing vertex symbols\n"+ex); - ex.printStackTrace(); - } - } + private void drawPoint(Graphics2D g) + { + if(!rd.showVertex) return; + int x = pX(rd.thisVertex.getX()) - rd.vertexSize/2; + int y = pY(rd.thisVertex.getY()) - rd.vertexSize/2; + if(debug) System.out.println("Drawing point: "+rd.previousVertex+ " at "+x+","+y); + rd.lineWidth = ((BasicStroke)rd.lineStroke).getLineWidth(); + Stroke stroke = new BasicStroke((float)(rd.lineWidth/2.0),BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + g.setStroke(stroke); + g.setColor(rd.baseFillColor); + boolean symbols = false; + if(rd.vertexStyle.isEnabled()) + { + try + { + Class dummy = Class.forName("com.cadplan.jump.utils.VertexStyler"); // test if VertexSymbols plugin is installed - if(!symbols && rd.vertexStyle.isEnabled()) // paint default vertex shape - { - GeneralPath path = new GeneralPath(); - path.moveTo(x,y); - path.lineTo(x+rd.vertexSize,y); - path.lineTo(x+rd.vertexSize,y+rd.vertexSize); - path.lineTo(x,y+rd.vertexSize); - path.lineTo(x,y); - g.fill(path); - g.setColor(rd.baseLineColor); - g.draw(path); - } + if(rd.vertexStyle instanceof ExternalSymbolsImplType) + { + ExternalSymbolsImplType vertex = new ExternalSymbolsImplType(); + vertex.setNumSides(((ExternalSymbolsImplType)rd.vertexStyle).getNumSides()); + vertex.setOrientation(((ExternalSymbolsImplType)rd.vertexStyle).getOrientation()); + vertex.setDotted(((ExternalSymbolsImplType)rd.vertexStyle).getDotted()); + vertex.setShowLine(((ExternalSymbolsImplType)rd.vertexStyle).getShowLine()); + vertex.setShowFill(((ExternalSymbolsImplType)rd.vertexStyle).getShowFill()); + vertex.setSize((int)(((ExternalSymbolsImplType)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((ExternalSymbolsImplType)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((ExternalSymbolsImplType)rd.vertexStyle).getAttributeName()); + vertex.setSymbolName(((ExternalSymbolsImplType)rd.vertexStyle).getSymbolName()); + vertex.setSymbolType(((ExternalSymbolsImplType)rd.vertexStyle).getSymbolType()); - } + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + } + else if(rd.vertexStyle instanceof PolygonVertexStyle) + { + PolygonVertexStyle vertex = new PolygonVertexStyle(); + vertex.setNumSides(((PolygonVertexStyle)rd.vertexStyle).getNumSides()); + vertex.setOrientation(((PolygonVertexStyle)rd.vertexStyle).getOrientation()); + vertex.setDotted(((PolygonVertexStyle)rd.vertexStyle).getDotted()); + vertex.setShowLine(((PolygonVertexStyle)rd.vertexStyle).getShowLine()); + vertex.setShowFill(((PolygonVertexStyle)rd.vertexStyle).getShowFill()); + vertex.setSize((int)(((PolygonVertexStyle)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((PolygonVertexStyle)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((PolygonVertexStyle)rd.vertexStyle).getAttributeName()); + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + } + else if(rd.vertexStyle instanceof StarVertexStyle) + { + StarVertexStyle vertex = new StarVertexStyle(); + vertex.setNumSides(((StarVertexStyle)rd.vertexStyle).getNumSides()); + vertex.setOrientation(((StarVertexStyle)rd.vertexStyle).getOrientation()); + vertex.setDotted(((StarVertexStyle)rd.vertexStyle).getDotted()); + vertex.setShowLine(((StarVertexStyle)rd.vertexStyle).getShowLine()); + vertex.setShowFill(((StarVertexStyle)rd.vertexStyle).getShowFill()); + vertex.setSize((int)(((StarVertexStyle)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((StarVertexStyle)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((StarVertexStyle)rd.vertexStyle).getAttributeName()); + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); - private void drawLine(Graphics2D g) - { - //boolean debug = true; - float x0 = 0f, x1 = 0f; - float y0 = 0f, y1 = 0f; - float xp = 0f, yp = 0f; - float xpp = 0f, ypp = 0f; - double startAngle = 0.0, endAngle= 0.0, segmentAngle = 0.0; - rd.lineWidth = ((BasicStroke)rd.lineStroke).getLineWidth(); - int index = 0; - Coordinate [] coords = rd.cline; - GeneralPath path = new GeneralPath(); - for (int i=0; i < coords.length; i++) - { - rd.index = index; - g.setColor(rd.lineColor); - g.setStroke(rd.lineStroke); - x0 = (float) pX(coords[i].x); - y0 = (float) pY(coords[i].y); - rd.thisVertex = new Point2D.Double(coords[i].x, coords[i].y); - if(rd.showVertex) drawPoint(g); - if(i == 0) - { - path.moveTo(x0,y0); - x1 = x0; - y1 = y0; - rd.px = pX(x0); - rd.py = pY(y0); - rd.firstVertex = new Point2D.Double(coords[i].x, coords[i].y); - drawDecorations(g, VERTEX); - } - else - { - path.lineTo(x0,y0); - segmentAngle = Math.atan2((y0-yp),(x0-xp)); - rd.lineAngle = segmentAngle; - rd.px = pX(x0); - rd.py = pY(y0); - drawDecorations(g, SEGMENT); - drawDecorations(g, VERTEX); + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + } + else if(rd.vertexStyle instanceof AnyShapeVertexStyle) + { + AnyShapeVertexStyle vertex = new AnyShapeVertexStyle(); + vertex.setType(((AnyShapeVertexStyle)rd.vertexStyle).getType()); + vertex.setOrientation(((AnyShapeVertexStyle)rd.vertexStyle).getOrientation()); + vertex.setDotted(((AnyShapeVertexStyle)rd.vertexStyle).getDotted()); + vertex.setShowLine(((AnyShapeVertexStyle)rd.vertexStyle).getShowLine()); + vertex.setShowFill(((AnyShapeVertexStyle)rd.vertexStyle).getShowFill()); + vertex.setSize((int)(((AnyShapeVertexStyle)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((AnyShapeVertexStyle)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((AnyShapeVertexStyle)rd.vertexStyle).getAttributeName()); + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); - } - if(i == 1) - { - startAngle = Math.atan2((y0-y1),(x0-x1)); - rd.startAngle = startAngle; - } - if( i == coords.length-1) - { - endAngle = Math.atan2((y0-yp),(x0-xp)); - rd.endAngle = endAngle; - xpp = xp; - ypp = yp; - rd.lastVertex = new Point2D.Double(coords[i].x, coords[i].y); - } - xp = x0; - yp = y0; + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + } + else if(rd.vertexStyle instanceof ImageVertexStyle) + { + ImageVertexStyle vertex = new ImageVertexStyle(); + vertex.setName(((ImageVertexStyle)rd.vertexStyle).getName()); + vertex.setOrientation(((ImageVertexStyle)rd.vertexStyle).getOrientation()); + vertex.setScale((((ImageVertexStyle)rd.vertexStyle).getScale()/drawFactor)); + vertex.setSize((int)(((ImageVertexStyle)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((ImageVertexStyle)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((ImageVertexStyle)rd.vertexStyle).getAttributeName()); + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); - if(debug) System.out.println("Drawing Line: "+coords+ " at "+x0+","+y0); - index++; - // lastVertexPoint = (Point2D.Double)vertexPoint.clone(); - rd.previousVertex = new Point2D.Double(coords[i].x, coords[i].y); + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + //System.out.println("byValue="+vertex.getByValue()+" attname="+vertex.getAttributeName()); + } + else if(rd.vertexStyle instanceof WKTVertexStyle) + { + WKTVertexStyle vertex = new WKTVertexStyle(); + vertex.setName(((WKTVertexStyle)rd.vertexStyle).getName()); + vertex.setOrientation(((WKTVertexStyle)rd.vertexStyle).getOrientation()); + vertex.setShowLine(((WKTVertexStyle)rd.vertexStyle).getShowLine()); + vertex.setScale((((WKTVertexStyle)rd.vertexStyle).getScale()/drawFactor)); + vertex.setSize((int)(((WKTVertexStyle)rd.vertexStyle).getSize()*drawFactor)); + vertex.setByValue(((WKTVertexStyle)rd.vertexStyle).getByValue()); + vertex.setAttributeName(((WKTVertexStyle)rd.vertexStyle).getAttributeName()); + vertex.initialize(rd.layer); + vertex.copyText((ExternalSymbolsType)rd.vertexStyle); + vertex.setTextFontSize((int)(vertex.getTextFontSize()*drawFactor)); + vertex.setDrawFactor(drawFactor); - } - rd.previousVertex = new Point2D.Double(coords[coords.length-2].x, coords[coords.length-2].y); - g.setColor(rd.lineColor); - g.setStroke(rd.lineStroke); - g.draw(path); - drawDecorations(g, START); - drawDecorations(g, END); - drawDecorations(g, MIDDLE); - } + x = pX(rd.thisVertex.getX()); + y = pY(rd.thisVertex.getY()); + vertex.paint(rd.feature,g,new Point2D.Double(x,y)); + symbols = true; + //System.out.println("byValue="+vertex.getByValue()+" attname="+vertex.getAttributeName()); + } - private void drawPolygon(Graphics2D g) - { - if(debug) System.out.println("Drawing Polygon"); - float x0=0.0f, x=0.0f, xp = 0.0f; - float y0=0.0f, y=0.0f, yp = 0.0f; - double startAngle = 0.0, endAngle = 0.0, segmentAngle=0.0; - rd.lineWidth = ((BasicStroke)rd.lineStroke).getLineWidth(); - int index = 0; - Coordinate [] coords = ((com.vividsolutions.jts.geom.Polygon)rd.polygon).getExteriorRing().getCoordinates(); - int numberHoles = ((com.vividsolutions.jts.geom.Polygon)rd.polygon).getNumInteriorRing(); - GeneralPath path = new GeneralPath(); - float xs = 0.0f; - float ys = 0.0f; - for (int i=0; i < coords.length-1; i++) - { - g.setColor(this.lineColor); - g.setStroke(rd.lineStroke); - x = (float) pX(coords[i].x); - y = (float) pY(coords[i].y); - rd.thisVertex = new Point2D.Double(coords[i].x, coords[i].y); - if(rd.showVertex) drawPoint(g); - rd.index = index; - if( i == 0) - { - path.moveTo(x,y); - x0 = x; - y0 = y; - //if(coords.length > 500) System.out.println("Line start i="+i+" "+x+","+y); - x0 = x; - y0 = y; - drawDecorations(g, VERTEX); - rd.firstVertex = new Point2D.Double(coords[i].x, coords[i].y); + } + catch(ClassNotFoundException ex) // VertexSymbols plugin not installed + { - } - else - { - path.lineTo(x,y); - //if(coords.length > 500) System.out.println("Line i="+i+" "+x+","+y); - segmentAngle = Math.atan2((y-yp),(x-xp)); - rd.lineAngle = segmentAngle; - drawDecorations(g, SEGMENT); - drawDecorations(g, VERTEX); + } + catch (Exception ex) // any other error + { + System.out.println("ERROR: showing vertex symbols\n"+ex); + ex.printStackTrace(); + } + } - } - - index++; - if(i == 1) - { - startAngle = Math.atan2((y-y0),(x-x0)); - rd.startAngle = startAngle; - } - xp = x; - yp = y; - rd.previousVertex = new Point2D.Double(coords[i].x, coords[i].y); - } - //close polygon - //if(x != x0 || y != y0) - //{ - // path.lineTo(x0,y0); - // System.out.println("Closing polygon: "+x0+","+y0); - //} - - xp = pX(coords[coords.length-2].x); - yp = pY(coords[coords.length-2].y); - x = pX(coords[coords.length-1].x); - y = pY(coords[coords.length-1].y); - rd.previousVertex = new Point2D.Double(coords[coords.length-2].x,coords[coords.length-2].y); - rd.thisVertex =new Point2D.Double(coords[coords.length-1].x,coords[coords.length-1].y); - rd.lastVertex = new Point2D.Double(coords[coords.length-1].x,coords[coords.length-1].y); + if(!symbols && rd.vertexStyle.isEnabled()) // paint default vertex shape + { + GeneralPath path = new GeneralPath(); + path.moveTo(x,y); + path.lineTo(x+rd.vertexSize,y); + path.lineTo(x+rd.vertexSize,y+rd.vertexSize); + path.lineTo(x,y+rd.vertexSize); + path.lineTo(x,y); + g.fill(path); + g.setColor(rd.baseLineColor); + g.draw(path); + } - endAngle = Math.atan2((y-yp),(x-xp)); - rd.endAngle = endAngle; - rd.lineAngle = endAngle; @@ Diff output truncated at 100000 characters. @@ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel