From 94ae08701bbd7585a0b7e5a92d1975965a503c03 Mon Sep 17 00:00:00 2001 From: Dennis Kao <ulysseskao@gmail.com> Date: Wed, 15 Jan 2014 11:28:52 +0800 Subject: [PATCH] Merge branch 'origin/2.1.x' --- xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java | 150 +++++++++++++++++++++++--------------------------- 1 files changed, 69 insertions(+), 81 deletions(-) diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java index 95a0758..ef07d30 100644 --- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java +++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java @@ -1,6 +1,7 @@ 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; @@ -11,165 +12,138 @@ 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()); @@ -182,42 +156,56 @@ 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); } } -- Gitblit v0.0.0-SNAPSHOT