| | |
| | | package com.ximple.io.dgn7; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | |
| | | import com.vividsolutions.jts.geom.Geometry; |
| | | import com.vividsolutions.jts.geom.GeometryFactory; |
| | | import com.vividsolutions.jts.geom.LineString; |
| | | import com.vividsolutions.jts.geom.LinearRing; |
| | | |
| | | /** |
| | | * ComplexChainElement |
| | | * |
| | | * @author Ulysses |
| | | * @version 0.1 |
| | | * @since 2006/5/18 ¤U¤È 03:44:56 |
| | | * @since 2006/5/18 |
| | | */ |
| | | public class ComplexChainElement extends Element implements ComplexElement, GeometryConverter |
| | | { |
| | | public class ComplexChainElement extends Element implements ComplexElement, GeometryConverter { |
| | | private static final Logger logger = Logger.getLogger(ComplexChainElement.class); |
| | | |
| | | protected ArrayList<Element> list = new ArrayList<Element>(); |
| | | |
| | | public ComplexChainElement(byte[] raw) |
| | | { |
| | | ComplexChainElement(byte[] raw) { |
| | | super(raw); |
| | | attrOffset = 4; |
| | | } |
| | | |
| | | public int size() |
| | | { |
| | | public int size() { |
| | | return list.size(); |
| | | } |
| | | |
| | | public boolean isEmpty() |
| | | { |
| | | public boolean isEmpty() { |
| | | return list.isEmpty(); |
| | | } |
| | | |
| | | public boolean contains(Object o) |
| | | { |
| | | public boolean contains(Object o) { |
| | | return list.contains(o); |
| | | } |
| | | |
| | | public Iterator iterator() |
| | | { |
| | | public Iterator iterator() { |
| | | return list.iterator(); |
| | | } |
| | | |
| | | public Object[] toArray() |
| | | { |
| | | public Object[] toArray() { |
| | | return list.toArray(); |
| | | } |
| | | |
| | | public <T> T[] toArray(T[] ts) |
| | | { |
| | | public <T> T[] toArray(T[] ts) { |
| | | return list.toArray(ts); |
| | | } |
| | | |
| | | public boolean add(Element element) |
| | | { |
| | | public boolean add(Element element) { |
| | | return list.add(element); |
| | | } |
| | | |
| | | public boolean remove(Object o) |
| | | { |
| | | public boolean remove(Object o) { |
| | | return list.remove(o); |
| | | } |
| | | |
| | | public boolean containsAll(Collection<?> objects) |
| | | { |
| | | public boolean containsAll(Collection<?> objects) { |
| | | return list.containsAll(objects); |
| | | } |
| | | |
| | | public boolean addAll(Collection<? extends Element> elements) |
| | | { |
| | | public boolean addAll(Collection<? extends Element> elements) { |
| | | return list.addAll(elements); |
| | | } |
| | | |
| | | public boolean addAll(int i, Collection<? extends Element> elements) |
| | | { |
| | | public boolean addAll(int i, Collection<? extends Element> elements) { |
| | | return list.addAll(i, elements); |
| | | } |
| | | |
| | | public boolean removeAll(Collection<?> objects) |
| | | { |
| | | public boolean removeAll(Collection<?> objects) { |
| | | return list.removeAll(objects); |
| | | } |
| | | |
| | | public boolean retainAll(Collection<?> objects) |
| | | { |
| | | public boolean retainAll(Collection<?> objects) { |
| | | return list.retainAll(objects); |
| | | } |
| | | |
| | | public void clear() |
| | | { |
| | | public void clear() { |
| | | list.clear(); |
| | | } |
| | | |
| | | public Element get(int index) |
| | | { |
| | | public Element get(int index) { |
| | | return list.get(index); |
| | | } |
| | | |
| | | public Element set(int i, Element element) |
| | | { |
| | | public Element set(int i, Element element) { |
| | | return list.set(i, element); |
| | | } |
| | | |
| | | public void add(int i, Element element) |
| | | { |
| | | public void add(int i, Element element) { |
| | | list.add(i, element); |
| | | } |
| | | |
| | | public Element remove(int index) |
| | | { |
| | | public Element remove(int index) { |
| | | return list.remove(index); |
| | | } |
| | | |
| | | public int indexOf(Object o) |
| | | { |
| | | public int indexOf(Object o) { |
| | | return list.indexOf(o); |
| | | } |
| | | |
| | | public int lastIndexOf(Object o) |
| | | { |
| | | public int lastIndexOf(Object o) { |
| | | return list.lastIndexOf(o); |
| | | } |
| | | |
| | | public ListIterator listIterator() |
| | | { |
| | | public ListIterator listIterator() { |
| | | return list.listIterator(); |
| | | } |
| | | |
| | | public ListIterator listIterator(int index) |
| | | { |
| | | public ListIterator listIterator(int index) { |
| | | return list.listIterator(index); |
| | | } |
| | | |
| | | public List subList(int fromIndex, int toIndex) |
| | | { |
| | | public List subList(int fromIndex, int toIndex) { |
| | | return list.subList(fromIndex, toIndex); |
| | | } |
| | | |
| | | public Geometry toGeometry(GeometryFactory factory) |
| | | { |
| | | public Geometry toGeometry(GeometryFactory factory) { |
| | | ArrayList<LineString> lineStrings = new ArrayList<LineString>(); |
| | | |
| | | for (ListIterator it = listIterator(); it.hasNext();) |
| | | { |
| | | for (ListIterator it = listIterator(); it.hasNext();) { |
| | | Element element = (Element) it.next(); |
| | | |
| | | if (element instanceof LineStringElement) |
| | | { |
| | | if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1) |
| | | { |
| | | if (element instanceof ShapeElement) { |
| | | if (((ShapeElement) element).getVerticeSize() == 0 || ((ShapeElement) element).getVerticeSize() > 1) { |
| | | lineStrings.add((LinearRing) ((ShapeElement) element).toGeometry(factory)); |
| | | } |
| | | } else if (element instanceof LineStringElement) { |
| | | if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1) { |
| | | lineStrings.add((LineString) ((LineStringElement) element).toGeometry(factory)); |
| | | } |
| | | |
| | | } else if (element instanceof LineElement) |
| | | { |
| | | } else if (element instanceof LineElement) { |
| | | |
| | | if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1) |
| | | { |
| | | if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1) { |
| | | lineStrings.add((LineString) ((LineElement) element).toGeometry(factory)); |
| | | } |
| | | } else if (element instanceof ArcElement) |
| | | { |
| | | } else if (element instanceof ArcElement) { |
| | | lineStrings.add((LineString) ((ArcElement) element).toGeometry(factory)); |
| | | } else { |
| | | logger.warn("Unknown sub-element in ComplexChain Element-" + element.getElementType()); |
| | |
| | | return factory.createMultiLineString(lines); |
| | | } |
| | | |
| | | public double getElementSize() |
| | | { |
| | | public short getTotalLength() { |
| | | return raw[18]; |
| | | } |
| | | |
| | | public boolean isClosed() |
| | | { |
| | | if (isEmpty()) |
| | | { |
| | | protected void setTotalLength(short value) { |
| | | raw[18] = value; |
| | | } |
| | | |
| | | public short getNumOfElement() { |
| | | return raw[19]; |
| | | } |
| | | |
| | | protected void setNumOfElement(short value) { |
| | | raw[19] = value; |
| | | } |
| | | |
| | | |
| | | public short[] getAttributes() { |
| | | return Arrays.copyOfRange(raw, 20, 23); |
| | | } |
| | | |
| | | protected void setAttributes(short[] values) { |
| | | if (values.length < 4) return; |
| | | System.arraycopy(values, 0, raw, 20, 24 - 20); |
| | | } |
| | | |
| | | public boolean isClosed() { |
| | | if (isEmpty()) { |
| | | return false; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | 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.COMPLEXCHAIN); |
| | | } |
| | | |
| | | 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 ComplexChainElement(raw); |
| | | } |
| | | } |