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