rrenkert@87: package de.intevation.mxd.writer; rrenkert@87: rrenkert@87: import org.apache.log4j.Logger; rrenkert@87: rrenkert@87: import org.w3c.dom.Element; rrenkert@87: rrenkert@87: import edu.umn.gis.mapscript.mapObj; rrenkert@87: import edu.umn.gis.mapscript.classObj; rrenkert@87: import edu.umn.gis.mapscript.styleObj; rrenkert@87: import edu.umn.gis.mapscript.symbolObj; rrenkert@87: import edu.umn.gis.mapscript.symbolSetObj; rrenkert@87: import edu.umn.gis.mapscript.lineObj; rrenkert@87: import edu.umn.gis.mapscript.pointObj; rrenkert@87: import edu.umn.gis.mapscript.MS_SYMBOL_TYPE; rrenkert@87: rrenkert@87: rrenkert@87: /** rrenkert@87: * The interface to the mapfile writer. rrenkert@87: * rrenkert@87: * @author Raimund Renkert rrenkert@87: */ rrenkert@87: public class SymbolWriter { rrenkert@87: rrenkert@87: /** rrenkert@87: * The Logger. rrenkert@87: */ rrenkert@87: private static final Logger logger = Logger.getLogger(SymbolWriter.class); rrenkert@87: rrenkert@87: private mapObj map; rrenkert@87: private classObj cl; rrenkert@87: private styleObj style; rrenkert@87: rrenkert@87: public SymbolWriter (mapObj map, classObj cl) { rrenkert@87: this.map = map; rrenkert@87: this.cl = cl; rrenkert@87: this.style = new styleObj(cl); rrenkert@87: } rrenkert@87: rrenkert@87: /** rrenkert@87: * Write the content. rrenkert@87: */ rrenkert@87: public boolean write(Element symbolElement) rrenkert@87: throws Exception { rrenkert@87: logger.debug("write(Element)"); rrenkert@87: symbolSetObj symbolSet = map.getSymbolset(); rrenkert@87: rrenkert@87: String name = symbolElement.getAttribute("name"); rrenkert@87: symbolObj sym = symbolSet.getSymbolByName(name); rrenkert@87: rrenkert@87: String symType = symbolElement.getAttribute("style"); rrenkert@87: if(symType.equals("point")) { rrenkert@87: writeSimple(sym); rrenkert@87: } rrenkert@87: else if (symType.equals("arrow")) { rrenkert@87: writeArrow(sym, symbolElement); rrenkert@87: } rrenkert@87: else if (symType.equals("char")) { rrenkert@87: //TODO Does not work at all... waiting for fix. rrenkert@87: writeCharacter(sym, symbolElement); rrenkert@87: } rrenkert@87: else { rrenkert@87: return false; rrenkert@87: } rrenkert@87: return true; rrenkert@87: } rrenkert@87: rrenkert@87: private void writeSimple(symbolObj symbol) { rrenkert@87: logger.debug("writeSimple(symbolObj)"); rrenkert@87: lineObj points = new lineObj(); rrenkert@87: points.add(new pointObj(1,1,0)); rrenkert@87: symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_ELLIPSE.swigValue()); rrenkert@87: symbol.setPoints(points); rrenkert@87: symbol.setFilled(1); rrenkert@87: } rrenkert@87: rrenkert@87: private void writeArrow(symbolObj symbol, Element symbolElement) { rrenkert@87: logger.debug("writeArrow(symbolObj, Element)"); rrenkert@87: double len = Double.parseDouble(symbolElement.getAttribute("length")); rrenkert@87: double width = Double.parseDouble(symbolElement.getAttribute("width")); rrenkert@87: double ratio = len/width; rrenkert@87: lineObj points = new lineObj(); rrenkert@87: rrenkert@87: points.add(new pointObj(0, 0, 0)); rrenkert@87: points.add(new pointObj((1*ratio), 0.5, 0)); rrenkert@87: points.add(new pointObj(0, 1, 0)); rrenkert@87: points.add(new pointObj(0, 0, 0)); rrenkert@87: symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_VECTOR.swigValue()); rrenkert@87: symbol.setPoints(points); rrenkert@87: symbol.setFilled(1); rrenkert@87: } rrenkert@87: rrenkert@87: private void writeCharacter(symbolObj symbol, Element symbolElement) { rrenkert@87: logger.debug("writeCharacter(symbolObj, Element)"); rrenkert@87: //TODO Write the symbol correctly. See Issue 3885 on trac.osgeo.org rrenkert@87: symbol.setFont(symbolElement.getAttribute("font")); rrenkert@87: symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_TRUETYPE.swigValue()); rrenkert@87: symbol.setAntialias(1); rrenkert@87: symbol.setCharacter("#&" + symbolElement.getAttribute("char") + ";"); rrenkert@87: } rrenkert@87: rrenkert@87: public boolean canWrite(String type) { rrenkert@87: if (type.equals("point") || rrenkert@87: type.equals("arrow") || rrenkert@87: type.equals("char")) { rrenkert@87: return true; rrenkert@87: } rrenkert@87: else { rrenkert@87: return false; rrenkert@87: } rrenkert@87: } rrenkert@87: } rrenkert@87: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :