From 6523c1f6534042d89ff8a07d4e7c06050276521e Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Thu, 22 Apr 2010 16:31:12 +0800
Subject: [PATCH] dgn7 write function for complex chain

---
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ElementFactory.java |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ElementFactory.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ElementFactory.java
index dc52e46..34dda57 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ElementFactory.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ElementFactory.java
@@ -9,11 +9,11 @@
 import java.util.LinkedList;
 
 public class ElementFactory {
-    private static final int DEFAULT_ELMHEAD_LENGTH = 28;
-    private static final int DEFAULT_DISPHEAD_LENGTH = 8;
-    private static final int MINIMAL_ELEMLENGTH = 18 * 2;
+    static final int DEFAULT_ELMHEAD_LENGTH = 28;
+    static final int DEFAULT_DISPHEAD_LENGTH = 8;
+    static final int MINIMAL_ELEMLENGTH = 18 * 2;
 
-    private static final int MAXINUM_LINESTRING_PTLEN = 100;
+    static final int MAXINUM_LINESTRING_PTLEN = 100;
 
     private static ElementFactory elementFactory = new ElementFactory();
     private static GeometryFactory factory = new GeometryFactory();
@@ -35,6 +35,7 @@
         }
         element.setVerticeSize(pts.length);
         element.setType(ElementType.SHAPE.id);
+        element.setFollowLength((short) ((elmsize / 2) - 2));
         element.setRange(ring.getEnvelopeInternal());
         element.setLevelIndex(0);
         element.setColorIndex(0);
@@ -52,6 +53,7 @@
         }
         element.setVerticeSize(pts.length);
         element.setType(ElementType.LINESTRING.id);
+        element.setFollowLength((short) ((elmsize / 2) - 2));
         element.setLevelIndex(0);
         element.setColorIndex(0);
         element.setWeight(0);
@@ -68,6 +70,7 @@
         }
         element.setVerticeSize(pts.length);
         element.setType(ElementType.SHAPE.id);
+        element.setFollowLength((short) ((elmsize / 2) - 2));
         element.setLevelIndex(0);
         element.setColorIndex(0);
         element.setWeight(0);
@@ -80,13 +83,16 @@
         Coordinate[] allpts = linestring.getCoordinates();
         int segsize = allpts.length / MAXINUM_LINESTRING_PTLEN;
         int currentpos = 0;
+        int totalLength = 0;
         for (int seg = 0; seg < segsize; seg++) {
             Coordinate[] pts = Arrays.copyOfRange(allpts,
-                    currentpos, currentpos + MAXINUM_LINESTRING_PTLEN, Coordinate[].class);
+                    currentpos, currentpos + MAXINUM_LINESTRING_PTLEN + 1, Coordinate[].class);
             LineStringElement element = elementFactory.createLineStringElement(pts);
             currentpos += MAXINUM_LINESTRING_PTLEN;
             element.setRange(element.toGeometry(factory).getEnvelopeInternal());
             element.setComponentElement(true);
+            element.setLevelIndex(0);
+            totalLength += element.raw.length;
             elms.add(element);
         }
         int remain = allpts.length % MAXINUM_LINESTRING_PTLEN;
@@ -95,12 +101,19 @@
         LineStringElement element = elementFactory.createLineStringElement(pts);
         element.setRange(element.toGeometry(factory).getEnvelopeInternal());
         element.setComponentElement(true);
+        element.setLevelIndex(0);
         elms.add(element);
+        totalLength += element.raw.length;
 
         ComplexChainElement result = new ComplexChainElement(new byte[MINIMAL_ELEMLENGTH + 12]);
         result.addAll(elms);
         result.setRange(linestring.getEnvelopeInternal());
         result.setType(ElementType.COMPLEXCHAIN.id);
+        result.setFollowLength((short) (((MINIMAL_ELEMLENGTH + 12) / 2) - 2));
+        result.setNumOfElement((short) elms.size());
+        totalLength += result.raw.length;
+        totalLength -= 19;
+        result.setTotalLength((short) totalLength);
         result.setLevelIndex(0);
         result.setColorIndex(0);
         result.setWeight(0);

--
Gitblit v0.0.0-SNAPSHOT