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);
|
}
|
}
|
}
|