| | |
| | | * |
| | | * @author Ulysses |
| | | * @version 0.1 |
| | | * @since 2006/5/18 ¤U¤È 02:48:58 |
| | | * @since 2006/5/18 |
| | | */ |
| | | public class LineStringElement extends Element implements GeometryConverter |
| | | { |
| | | public class LineStringElement extends Element implements GeometryConverter { |
| | | private static final Logger logger = Logger.getLogger(LineStringElement.class); |
| | | |
| | | public LineStringElement(byte[] raw) |
| | | { |
| | | LineStringElement(byte[] raw) { |
| | | super(raw); |
| | | } |
| | | |
| | | public Coordinate getCentroid(double dTolerance) |
| | | { |
| | | public Coordinate getCentroid(double dTolerance) { |
| | | return null; |
| | | } |
| | | |
| | | public Coordinate getEndPoint() |
| | | { |
| | | public Coordinate getEndPoint() { |
| | | return new Coordinate(getX(getVerticeSize() - 1), getY(getVerticeSize() - 1)); |
| | | } |
| | | |
| | | public Coordinate getNormal() |
| | | { |
| | | public Coordinate getNormal() { |
| | | return null; |
| | | } |
| | | |
| | | public Coordinate getOrigin() |
| | | { |
| | | public Coordinate getOrigin() { |
| | | return null; |
| | | } |
| | | |
| | | public Coordinate getStartPoint() |
| | | { |
| | | public Coordinate getStartPoint() { |
| | | return new Coordinate(getX(0), getY(0)); |
| | | } |
| | | |
| | | public Coordinate getVertex(int index) |
| | | { |
| | | public Coordinate getVertex(int index) { |
| | | return (index == 0) |
| | | ? getStartPoint() |
| | | : getEndPoint(); |
| | | ? getStartPoint() |
| | | : getEndPoint(); |
| | | } |
| | | |
| | | public int getVerticeSize() |
| | | { |
| | | public int getVerticeSize() { |
| | | return raw[18] & 0x0000ffff; |
| | | } |
| | | |
| | | public double getLength() |
| | | { |
| | | public void setVerticeSize(int size) { |
| | | raw[18] = (short) (size & 0x0000ffff); |
| | | } |
| | | |
| | | public double getLength() { |
| | | double result = 0.0; |
| | | Coordinate[] vset = getVertices(); |
| | | |
| | | for (int i = 1; i < getVerticeSize(); i++) |
| | | { |
| | | for (int i = 1; i < getVerticeSize(); i++) { |
| | | Coordinate p1 = vset[i - 1]; |
| | | Coordinate p2 = vset[i]; |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | public Coordinate pointAtDistance(double dDistance, double dTolerance) |
| | | { |
| | | public Coordinate pointAtDistance(double dDistance, double dTolerance) { |
| | | return null; |
| | | } |
| | | |
| | | public Coordinate[] getVertices() |
| | | { |
| | | public Coordinate[] getVertices() { |
| | | Coordinate[] result = new Coordinate[getVerticeSize()]; |
| | | |
| | | for (int i = 0; i < getVerticeSize(); i++) |
| | | { |
| | | for (int i = 0; i < getVerticeSize(); i++) { |
| | | result[i] = new Coordinate(getX(i), getY(i)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public Geometry toGeometry(GeometryFactory factory) |
| | | { |
| | | public Geometry toGeometry(GeometryFactory factory) { |
| | | return factory.createLineString(getVertices()); |
| | | } |
| | | |
| | | protected double getX(int index) |
| | | { |
| | | if ((index < 0) || (index > getVerticeSize())) |
| | | { |
| | | protected double getX(int index) { |
| | | if ((index < 0) || (index > getVerticeSize())) { |
| | | return -1; |
| | | } |
| | | |
| | |
| | | return DgnUtility.converUnitToCoord(x); |
| | | } |
| | | |
| | | protected void setX(int index, double dx) |
| | | { |
| | | protected void setX(int index, double dx) { |
| | | int newVal = DgnUtility.converCoordToUnit(dx); |
| | | |
| | | raw[19 + (4 * index)] = (short) (newVal >> 16 & 0x0000ffff); |
| | | raw[20 + (4 * index)] = (short) (newVal & 0x0000ffff); |
| | | } |
| | | |
| | | protected double getY(int index) |
| | | { |
| | | if ((index < 0) || (index > getVerticeSize())) |
| | | { |
| | | protected double getY(int index) { |
| | | if ((index < 0) || (index > getVerticeSize())) { |
| | | return -1; |
| | | } |
| | | |
| | |
| | | return DgnUtility.converUnitToCoord(y); |
| | | } |
| | | |
| | | protected void setY(int index, double dy) |
| | | { |
| | | protected void setY(int index, double dy) { |
| | | int newVal = DgnUtility.converCoordToUnit(dy); |
| | | |
| | | raw[21 + (4 * index)] = (short) ((newVal >> 16) & 0x0000ffff); |
| | | raw[22 + (4 * index)] = (short) (newVal & 0x0000ffff); |
| | | } |
| | | |
| | | public static class ElementHandler extends Element.ElementHandler |
| | | { |
| | | public static class ElementHandler extends Element.ElementHandler { |
| | | private static ElementHandler instance = null; |
| | | |
| | | public ElementHandler() |
| | | { |
| | | public ElementHandler() { |
| | | super(ElementType.LINESTRING); |
| | | } |
| | | |
| | | public static IElementHandler getInstance() |
| | | { |
| | | if (instance == null) |
| | | { |
| | | public static IElementHandler getInstance() { |
| | | if (instance == null) { |
| | | instance = new ElementHandler(); |
| | | } |
| | | |
| | | return instance; |
| | | } |
| | | |
| | | protected Element createElement(byte[] raw) |
| | | { |
| | | protected Element createElement(byte[] raw) { |
| | | return new LineStringElement(raw); |
| | | } |
| | | } |