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;
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 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;
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;
default:
break;
}
}
DXFText e = new DXFText(x, y, value, rotation, thickness, height, align, style, c, l, angle, zoomfactor, visibility, lineType);
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);
}
}