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

Reply via email to