Package org.geotools.data.dxf.entities

Source Code of org.geotools.data.dxf.entities.DXFText

package org.geotools.data.dxf.entities;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import org.geotools.data.dxf.parser.DXFLineNumberReader;
import java.awt.geom.Rectangle2D;
import java.io.EOFException;
import java.io.IOException;

import org.geotools.data.GeometryType;
import org.geotools.data.dxf.parser.DXFUnivers;
import org.geotools.data.dxf.header.DXFLayer;
import org.geotools.data.dxf.header.DXFLineType;
import org.geotools.data.dxf.header.DXFTables;
import org.geotools.data.dxf.parser.DXFCodeValuePair;
import org.geotools.data.dxf.parser.DXFGroupCode;
import org.geotools.data.dxf.parser.DXFParseException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
*
*
* @source $URL$
*/
public class DXFText extends DXFEntity {

    private static final Log log = LogFactory.getLog(DXFText.class);
    public DXFPoint _point = new DXFPoint(); // 10 ,20
    public String _value = ""; // 1
    public double _height = 0; // 40
    public double _rotation = 0; // 50
    public int _align = 0; // 72
    public String _style = ""; // 7
    public double _angle = 0; // 51
    public double _zoomfactor = 1; // 41
    public Rectangle2D.Double _r = new Rectangle2D.Double();

    public DXFText(DXFText newText) {
        this(newText._point._point.x, newText._point._point.y, newText._value, newText._rotation, newText.getThickness(), newText._height,
                newText._align, newText._style, newText.getColor(), newText.getRefLayer(), newText._angle, newText._zoomfactor, 0, newText.getLineType());

        setType(newText.getType());
        setStartingLineNumber(newText.getStartingLineNumber());
        setUnivers(newText.getUnivers());

        // Hack voor label
        setKey(newText._value);
    }

    public DXFText(double x, double y, String value, double rotation, double thickness, double height, int align, String style, int c, DXFLayer l, double angle, double zoomFactor, int visibility, DXFLineType lineType) {
        super(c, l, visibility, lineType, thickness);
        _point = new DXFPoint(x, y, c, l, visibility, thickness);
        _value = value;
        _rotation = rotation;
        _height = height;
        _align = align;
        _style = style;
        _angle = angle;
        _zoomfactor = zoomFactor;
        setName("DXFText");
    }
    public DXFText(double x, double y, String value, double rotation, double thickness, double height, int align, String style, int c, DXFLayer l, double angle, double zoomFactor, int visibility, DXFLineType lineType, DXFExtendedData extData) {
      super(c, l, visibility, lineType, thickness);
      _point = new DXFPoint(x, y, c, l, visibility, thickness);
      _value = value;
      _rotation = rotation;
      _height = height;
      _align = align;
      _style = style;
      _angle = angle;
      _zoomfactor = zoomFactor;
      _extendedData = extData;
      setName("DXFText");
    }

    public static DXFText read(DXFLineNumberReader br, DXFUnivers univers) throws IOException {
        DXFLayer l = null;
        String value = "", style = "STANDARD";
        int visibility = 0, align = 0, c = -1;
        DXFLineType lineType = null;
        double x = 0,
                y = 0,
                angle = 0,
                rotation = 0,
                zoomfactor = 1,
                thickness = DXFTables.defaultThickness,
                height = 0;

        int sln = br.getLineNumber();
        log.debug(">>Enter at line: " + sln);

        DXFCodeValuePair cvp = null;
        DXFGroupCode gc = null;
        DXFExtendedData _extData = null;

        boolean doLoop = true;
        while (doLoop) {
            cvp = new DXFCodeValuePair();
            try {
                gc = cvp.read(br);
            } catch (DXFParseException ex) {
                throw new IOException("DXF parse error" + ex.getLocalizedMessage());
            } catch (EOFException e) {
                doLoop = false;
                break;
            }

            switch (gc) {
                case TYPE:
                    String type = cvp.getStringValue();
                    // geldt voor alle waarden van type
                    br.reset();
                    doLoop = false;
                    break;
                case X_1: //"10"
                    x = cvp.getDoubleValue();
                    break;
                case Y_1: //"20"
                    y = cvp.getDoubleValue();
                    break;
                case TEXT: //"1"
                    value = cvp.getStringValue();
                    break;
                case ANGLE_1: //"50"
                    rotation = cvp.getDoubleValue();
                    break;
                case THICKNESS: //"39"
                    thickness = cvp.getDoubleValue();
                    break;
                case DOUBLE_1: //"40"
                    height = cvp.getDoubleValue();
                    break;
                case ANGLE_2: //"51"
                    angle = cvp.getDoubleValue();
                    break;
                case DOUBLE_2: //"41"
                    zoomfactor = cvp.getDoubleValue();
                    break;
                case INT_3: //"72"
                    align = cvp.getShortValue();
                    break;
                case LAYER_NAME: //"8"
                    l = univers.findLayer(cvp.getStringValue());
                    break;
                case COLOR: //"62"
                    c = cvp.getShortValue();
                    break;
                case TEXT_STYLE_NAME: //"7"
                    style = cvp.getStringValue();
                    break;
                case VISIBILITY: //"60"
                    visibility = cvp.getShortValue();
                    break;
                case LINETYPE_NAME: //"6"
                    lineType = univers.findLType(cvp.getStringValue());
                    break;
                case XDATA_APPLICATION_NAME:
                  String appName = cvp.getStringValue();
                _extData = DXFExtendedData.getExtendedData(br);
                _extData.setAppName(appName);
                    break;
                default:
                    break;
            }

        }

        DXFText e = new DXFText(x, y, value, rotation, thickness, height, align, style, c, l, angle, zoomfactor, visibility, lineType, _extData);
        e.setType(GeometryType.POINT);
        e.setStartingLineNumber(sln);
        e.setUnivers(univers);
        // Hack voor label
        e.setKey(value);
        log.debug(e.toString(x, y, value, rotation, thickness, height, align, style, c, angle, zoomfactor, visibility));
        log.debug(">Exit at line: " + br.getLineNumber());
        return e;
    }

    @Override
    public Geometry getGeometry() {
        if (geometry == null) {
        }
        return super.getGeometry();
    }

    public void updateGeometry() {
        geometry = getUnivers().getGeometryFactory().createPoint(toCoordinate());
    }

    public Coordinate toCoordinate() {
        if (_point == null || _point._point == null) {
            addError("coordinate can not be created.");
            return null;
        }
        return rotateAndPlace(new Coordinate(_point._point.getX(), _point._point.getY()));
    }

    public String toString(double x, double y, String value, double rotation, double thickness, double height, double align, String style, int c, double angle, double zoomfactor, int visibility) {
        StringBuffer s = new StringBuffer();
        s.append("DXFText [");
        s.append("x: ");
        s.append(x + ", ");
        s.append("y: ");
        s.append(y + ", ");
        s.append("value: ");
        s.append(value + ", ");
        s.append("rotation: ");
        s.append(rotation + ", ");
        s.append("thickness: ");
        s.append(thickness + ", ");
        s.append("height: ");
        s.append(height + ", ");
        s.append("align: ");
        s.append(align + ", ");
        s.append("style: ");
        s.append(style + ", ");
        s.append("color: ");
        s.append(c + ", ");
        s.append("angle: ");
        s.append(angle + ", ");
        s.append("zoomfactor: ");
        s.append(zoomfactor + ", ");
        s.append("visibility: ");
        s.append(visibility);
        s.append("]");
        return s.toString();
    }

    @Override
    public DXFEntity translate(double x, double y) {
        _point._point.x += x;
        _point._point.y += y;
        return this;
    }

    @Override
    public DXFEntity clone() {
        return new DXFText(this);
    }
}
TOP

Related Classes of org.geotools.data.dxf.entities.DXFText

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.