package org.geotools.data.dxf.entities; import java.io.EOFException; import org.geotools.data.dxf.parser.DXFLineNumberReader; import java.io.IOException; import org.geotools.data.GeometryType; import org.geotools.data.dxf.parser.DXFUnivers; import org.geotools.data.dxf.header.DXFBlock; import org.geotools.data.dxf.header.DXFBlockReference; import org.geotools.data.dxf.header.DXFLayer; import org.geotools.data.dxf.header.DXFLineType; 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 DXFInsert extends DXFBlockReference { private static final Log log = LogFactory.getLog(DXFInsert.class); public DXFPoint _point = new DXFPoint(); public double _angle = 0.0; public DXFInsert(DXFInsert newInsert) { this(newInsert._point._point.x, newInsert._point._point.y, newInsert._blockName, newInsert._refBlock, newInsert.getRefLayer(), 0, newInsert.getColor(), newInsert.getLineType(), newInsert._angle); setType(newInsert.getType()); setStartingLineNumber(newInsert.getStartingLineNumber()); setUnivers(newInsert.getUnivers()); } public DXFInsert(double x, double y, String nomBlock, DXFBlock refBlock, DXFLayer l, int visibility, int c, DXFLineType lineType, double angle) { super(c, l, visibility, lineType, nomBlock, refBlock); _point = new DXFPoint(x, y, c, null, visibility, 1); _angle = angle; setName("DXFInsert"); } public static DXFInsert read(DXFLineNumberReader br, DXFUnivers univers) throws IOException { String nomBlock = ""; DXFInsert m = null; DXFLayer l = null; double x = 0, y = 0; int visibility = 0, c = -1; DXFBlock refBlock = null; DXFLineType lineType = null; double angle = 0.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(); br.reset(); doLoop = false; break; case LAYER_NAME: //"8" l = univers.findLayer(cvp.getStringValue()); break; case NAME: //"2" nomBlock = cvp.getStringValue(); break; case X_1: //"10" x = cvp.getDoubleValue(); break; case Y_1: //"20" y = cvp.getDoubleValue(); break; case ANGLE_1: //"20" angle = cvp.getDoubleValue(); break; case COLOR: //"62" c = cvp.getShortValue(); break; case VISIBILITY: //"60" visibility = cvp.getShortValue(); break; case LINETYPE_NAME: //"6" lineType = univers.findLType(cvp.getStringValue()); break; default: break; } } m = new DXFInsert(x, y, nomBlock, refBlock, l, visibility, c, lineType, angle); m.setType(GeometryType.POINT); m.setStartingLineNumber(sln); m.setUnivers(univers); univers.addRefBlockForUpdate(m); log.debug(m.toString(x, y, visibility, c, lineType)); log.debug(">>Exit at line: " + br.getLineNumber()); return m; } public String toString(double x, double y, int visibility, int c, DXFLineType lineType) { StringBuffer s = new StringBuffer(); s.append("DXFInsert ["); s.append("x: "); s.append(x + ", "); s.append("y: "); s.append(y + ", "); s.append("visibility: "); s.append(visibility + ", "); s.append("color: "); s.append(c + ", "); s.append("line type: "); if (lineType != null) { s.append(lineType._name); } 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 DXFInsert(this); } }