# HG changeset patch # User Raimund Renkert # Date 1303141893 -7200 # Node ID 34a93dad760433815863bb9d5b17770452c2552b # Parent 90d4de478f15255204cc7ed1e1d5e9d83dbcc70d Added MultiLayerMarkerSymbol(ArrowMarkerSymbol) support. diff -r 90d4de478f15 -r 34a93dad7604 ChangeLog --- a/ChangeLog Mon Apr 18 16:03:07 2011 +0200 +++ b/ChangeLog Mon Apr 18 17:51:33 2011 +0200 @@ -1,3 +1,14 @@ +2011-04-18 Raimund Renkert + + * src/java/de/intevation/mxd/reader/SimpleRendererReader.java: + Added MultiLayerMarkerSymbol support. + + * src/java/de/intevation/mxd/writer/MapScriptWriter.java: + Write ArrowMarker to the map. + + * src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java: + New. Reads multi layer marker symbols. + 2011-04-18 Raimund Renkert * src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java: diff -r 90d4de478f15 -r 34a93dad7604 src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java Mon Apr 18 17:51:33 2011 +0200 @@ -0,0 +1,124 @@ +package de.intevation.mxd.reader; + +import java.io.IOException; + +import java.awt.Color; + +import org.apache.log4j.Logger; + +import com.esri.arcgis.display.ISymbol; +import com.esri.arcgis.display.IMarkerSymbol; +import com.esri.arcgis.display.MultiLayerMarkerSymbol; +import com.esri.arcgis.display.ArrowMarkerSymbol; +import com.esri.arcgis.display.IColor; +import com.esri.arcgis.display.RgbColor; + +import org.w3c.dom.Element; +import de.intevation.mxd.utils.MapToXMLUtils; + +/** + * Reads multi layer marker symbol information. + * + * @author Raimund Renkert + */ +public class MultiLayerMarkerSymbolReader implements ISymbolReader{ + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(MultiLayerMarkerSymbolReader.class); + + /** + * Private member. + */ + private Element renderer; + private MultiLayerMarkerSymbol symbol; + private MapToXMLUtils util; + + + public MultiLayerMarkerSymbolReader(ISymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof MultiLayerMarkerSymbol) { + this.symbol = (MultiLayerMarkerSymbol)symbol; + } + else { + throw new Exception("Not a MultiLayerMarkerSymbol!"); + } + } + + /** + * Setter for the parent XML element. + * + * @param parent The XML parent node. + */ + public void setParent(Element parent) { + this.renderer = parent; + } + + /** + * Setter for XML document helper. + * + * @param util The helper class for storing map information. + */ + public void setUtil(MapToXMLUtils util) { + this.util = util; + } + + /** + * Reads the symbol attributes. + * + * @return The XML node. + */ + public Element read() + throws IOException { + logger.debug("read()"); + Element symbolElement; + try { + symbolElement = util.addSymbol(renderer); + } + catch(Exception e) { + e.printStackTrace(); + return null; + } + + for(int i = 0; i < symbol.getLayerCount(); i++) { + IMarkerSymbol sym = symbol.getLayer(i); + if (sym instanceof ArrowMarkerSymbol) { + ArrowMarkerSymbol arrow = (ArrowMarkerSymbol)sym; + IColor c = arrow.getColor(); + symbolElement.setAttribute( + "name", + arrow.getNameString()); + symbolElement.setAttribute( + "length", + String.valueOf(arrow.getLength())); + symbolElement.setAttribute( + "width", + String.valueOf(arrow.getWidth())); + symbolElement.setAttribute( + "angle", + String.valueOf(arrow.getAngle())); + symbolElement.setAttribute( + "size", + String.valueOf(arrow.getSize())); + symbolElement.setAttribute( + "x_offset", + String.valueOf(arrow.getXOffset())); + symbolElement.setAttribute( + "y_offset", + String.valueOf(arrow.getYOffset())); + symbolElement.setAttribute( + "color", + String.valueOf(c.getRGB())); + symbolElement.setAttribute( + "tranparency", + String.valueOf(c.getTransparency())); + symbolElement.setAttribute("style", "arrow"); + } + } + return symbolElement; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 90d4de478f15 -r 34a93dad7604 src/java/de/intevation/mxd/reader/SimpleRendererReader.java --- a/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Mon Apr 18 16:03:07 2011 +0200 +++ b/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Mon Apr 18 17:51:33 2011 +0200 @@ -8,6 +8,7 @@ import com.esri.arcgis.display.ISymbol; import com.esri.arcgis.display.SimpleMarkerSymbol; import com.esri.arcgis.display.SimpleFillSymbol; +import com.esri.arcgis.display.MultiLayerMarkerSymbol; import com.esri.arcgis.carto.SimpleRenderer; import org.w3c.dom.Element; @@ -93,6 +94,15 @@ isr.setUtil(util); isr.read(); } + else if(symbol instanceof MultiLayerMarkerSymbol) { + ISymbolReader isr = new MultiLayerMarkerSymbolReader(symbol); + isr.setParent(rendererElement); + isr.setUtil(util); + isr.read(); + } + else { + System.out.println("No known Symbol type: " + symbol.getClass().toString()); + } return layer; } catch(Exception e) { diff -r 90d4de478f15 -r 34a93dad7604 src/java/de/intevation/mxd/writer/MapScriptWriter.java --- a/src/java/de/intevation/mxd/writer/MapScriptWriter.java Mon Apr 18 16:03:07 2011 +0200 +++ b/src/java/de/intevation/mxd/writer/MapScriptWriter.java Mon Apr 18 17:51:33 2011 +0200 @@ -215,7 +215,8 @@ for(int j = 0; j < count; j++) { //TODO Find a way to create Expressions. exp = "([" + classElement.getAttribute("expression_field_" + j); - exp += "] = " + classElement.getAttribute("value") + ")"; + exp += "] " + classElement.getAttribute("expression_operator"); + exp += " " + classElement.getAttribute("value") + ")"; } co.setExpression(exp); } @@ -253,17 +254,18 @@ style.setColor(color); style.setSize(Double.parseDouble( symbolElement.getAttribute("size"))); - Color oCol = Color.decode( - symbolElement.getAttribute("outline_color")); - colorObj outlineColor = new colorObj( - oCol.getRed(), - oCol.getGreen(), - oCol.getBlue(), - -4); - style.setOutlinecolor(outlineColor); - style.setOutlinewidth(Double.parseDouble( - symbolElement.getAttribute("outline_size"))); - + if(symbolElement.hasAttribute("outline_color")) { + Color oCol = Color.decode( + symbolElement.getAttribute("outline_color")); + colorObj outlineColor = new colorObj( + oCol.getRed(), + oCol.getGreen(), + oCol.getBlue(), + -4); + style.setOutlinecolor(outlineColor); + style.setOutlinewidth(Double.parseDouble( + symbolElement.getAttribute("outline_size"))); + } String name = symbolElement.getAttribute("name"); style.setSymbolByName(map, name); symbolObj sym = symbolSet.getSymbolByName(name); @@ -276,6 +278,20 @@ sym.setPoints(points); sym.setFilled(1); } + else if (symType.equals("arrow")) { + double len = Double.parseDouble(symbolElement.getAttribute("length")); + double width = Double.parseDouble(symbolElement.getAttribute("width")); + double ratio = len/width; + lineObj points = new lineObj(); + + points.add(new pointObj(0, 0, 0)); + points.add(new pointObj((1*ratio), 0.5, 0)); + points.add(new pointObj(0, 1, 0)); + points.add(new pointObj(0, 0, 0)); + sym.setType(MS_SYMBOL_TYPE.MS_SYMBOL_VECTOR.swigValue()); + sym.setPoints(points); + sym.setFilled(1); + } } saveSymbolSet(symbolSet); }