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.DXFLayer; 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 DXFVertex extends DXFPoint { private static final Log log = LogFactory.getLog(DXFVertex.class); protected double _bulge = 0; public DXFVertex(DXFVertex newVertex) { this(newVertex._point.x, newVertex._point.y, newVertex._bulge, newVertex.getColor(), newVertex.getRefLayer(), 0); setType(newVertex.getType()); setStartingLineNumber(newVertex.getStartingLineNumber()); setUnivers(newVertex.getUnivers()); } public DXFVertex(double x, double y, double b, int c, DXFLayer l, int visibility) { super(x, y, c, l, visibility, 1); setName("DXFVertex"); _bulge = b; } public static DXFVertex read(DXFLineNumberReader br, DXFUnivers univers) throws IOException { DXFLayer l = null; int visibility = 0, c = -1; double x = 0, y = 0, b = 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 LAYER_NAME: //"8" l = univers.findLayer(cvp.getStringValue()); break; case DOUBLE_3: //"42" b = cvp.getDoubleValue(); break; case X_1: //"10" x = cvp.getDoubleValue(); break; case Y_1: //"20" y = cvp.getDoubleValue(); break; case COLOR: //"62" c = cvp.getShortValue(); break; case VISIBILITY: //"60" visibility = cvp.getShortValue(); break; default: break; } } DXFVertex e = new DXFVertex(x, y, b, c, l, visibility); e.setType(GeometryType.POINT); e.setStartingLineNumber(sln); e.setUnivers(univers); log.debug(e.toString(b, x, y, c, visibility)); log.debug(">Exit at line: " + br.getLineNumber()); return e; } public String toString(double b, double x, double y, int c, int visibility) { StringBuffer s = new StringBuffer(); s.append("DXFVertex ["); s.append("bulge: "); s.append(b + ", "); s.append("x: "); s.append(x + ", "); s.append("y: "); s.append(y + ", "); s.append("c: "); s.append(c + ", "); s.append("visibility: "); s.append(visibility); s.append("]"); return s.toString(); } }