package com.ximple.io.dgn7; //~--- non-JDK imports -------------------------------------------------------- import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; /** * LineElement * * @author Ulysses * @version 0.1 * @since 2006/5/18 上午 11:34:59 */ public class LineElement extends Element implements GeometryConverter { public LineElement(byte[] raw) { super(raw); } public Coordinate getCentroid(double dTolerance) { return null; } public Coordinate getEndPoint() { int endX = ((raw[22] << 16) & 0xffff0000) | (raw[23] & 0x0000ffff); int endY = ((raw[24] << 16) & 0xffff0000) | (raw[25] & 0x0000ffff); double x = Utility.converUnitToCoord(endX); double y = Utility.converUnitToCoord(endY); return new Coordinate(x, y); } public Coordinate getNormal() { return null; } public Coordinate getOrigin() { return null; } public Coordinate getStartPoint() { int startX = ((raw[18] << 16) & 0xffff0000); startX = startX + (raw[19] & 0x0000ffff); double x = Utility.converUnitToCoord(startX); int startY = ((raw[20] << 16) & 0xffff0000); startY = startY + (raw[21] & 0x0000ffff); double y = Utility.converUnitToCoord(startY); return new Coordinate(x, y); } public Coordinate getVertex(int index) { return (index == 0) ? getStartPoint() : getEndPoint(); } public double getLength() { Coordinate p1 = getStartPoint(); Coordinate p2 = getEndPoint(); return Utility.getLength(p1.x, p1.y, p2.x, p2.y); } public Coordinate pointAtDistance(double dDistance, double dTolerance) { return null; } public Coordinate[] getVertices() { Coordinate[] result = new Coordinate[2]; result[0] = getStartPoint(); result[1] = getEndPoint(); return result; } public Geometry toGeometry(GeometryFactory factory) { return factory.createLineString(getVertices()); } public static class ElementHandler extends Element.ElementHandler { private static ElementHandler instance = null; public ElementHandler() { super(ElementType.LINE); } public static IElementHandler getInstance() { if (instance == null) { instance = new ElementHandler(); } return instance; } protected Element createElement(byte[] raw) { return new LineElement(raw); } } }