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