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/TextElement.java | 159 ++++++++++++++++++++-------------------------------- 1 files changed, 62 insertions(+), 97 deletions(-) diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java index 6cf8570..08afe39 100644 --- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java +++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java @@ -1,5 +1,12 @@ package com.ximple.io.dgn7; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateList; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryFactory; +import com.ximple.util.DgnUtility; +import org.apache.log4j.Logger; + import java.awt.geom.AffineTransform; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -7,24 +14,14 @@ import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; -import org.apache.log4j.Logger; - -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.CoordinateList; - -import com.ximple.util.DgnUtility; - /** * TextElement * * @author Ulysses * @version 0.1 - * @since 2006/5/18 �W�� 11:45:29 + * @since 2006/5/18 */ -public class TextElement extends Element implements GeometryConverter -{ +public class TextElement extends Element implements GeometryConverter { private static final Logger logger = Logger.getLogger(TextElement.class); public static final int ED_CENTERJUSTIFICATION = 0; @@ -63,13 +60,11 @@ public static final int TXTJUST_RD = 24; /* Right Descender */ public static final int TXTJUST_NONE = 127;/* no justfication */ - public TextElement(byte[] raw) - { + TextElement(byte[] raw) { super(raw); } - public Coordinate getOrigin() - { + public Coordinate getOrigin() { int x = (raw[25] << 16 & 0xffff0000); x += raw[26] & 0x0000ffff; @@ -84,38 +79,31 @@ return new Coordinate(dx, dy); } - public int getFontIndex() - { + public int getFontIndex() { return (int) raw[18] & 0x00000000ff; } - public boolean hasSlant() - { + public boolean hasSlant() { return true; } - public boolean hasUnderline() - { + public boolean hasUnderline() { return true; } - public boolean isFixedWidthSpacing() - { + public boolean isFixedWidthSpacing() { return true; } - public boolean isPlanar() - { + public boolean isPlanar() { return true; } - public boolean isVertical() - { + public boolean isVertical() { return true; } - public double getTextHeight() - { + public double getTextHeight() { int height = ((raw[21] << 16) & 0xffff0000); height += raw[22] & 0x0000ffff; @@ -123,8 +111,7 @@ return DgnUtility.converIntToDouble(height); } - public double getTextWidth() - { + public double getTextWidth() { int length = (raw[19] << 16 & 0xffff0000); length += raw[20] & 0x0000ffff; @@ -132,63 +119,61 @@ return DgnUtility.converIntToDouble(length); } - public int getJustification() - { + public int getJustification() { return ((raw[18] >>> 8) & 0x00000000ff); } - public double getRotationAngle() - { + public double getRotationAngle() { int totation = ((raw[23] & 0x0000ffff) << 16) | (raw[24] & 0x0000ffff); return DgnUtility.converIntToRotation(totation); } - public boolean isChinese() - { + public boolean isChinese() { + if (raw.length < 31) return false; int isChinese = raw[30] & 0x0000ffff; return (isChinese == 0xfdff); } - public int getTextLength() - { + public int getTextLength() { int num = raw[29]; - if (isChinese()) - { + if (isChinese()) { num = (num / 2) - 1; } return num; } - public String getText() - { + public String getText() { StringBuilder val = new StringBuilder(); char[] temp; int num = getTextLength(); + if (num < 0) { + logger.warn("getTextLength() return Negative Value."); + return ""; + } - if (!isChinese()) - { + if (30 + num / 2 > raw.length) { + logger.warn("getTextLength() too long."); + return ""; + } + + if (!isChinese()) { temp = new char[num]; - for (int i = 0; i < temp.length; i++) - { - if ((i % 2) == 0) - { + for (int i = 0; i < temp.length; i++) { + if ((i % 2) == 0) { temp[i] = (char) (raw[30 + (int) (i / 2)] & (short) 0x00ff); - } else - { + } else { temp[i] = (char) ((raw[30 + (int) (i / 2)] >> 8) & (short) 0x00ff); } val.append(temp[i]); } - } else - { + } else { byte[] strRaw = new byte[num * 2]; - for (int i = 0; i < num; i++) - { + for (int i = 0; i < num; i++) { short charValue = raw[i + 31]; byte hi = (byte) (charValue >>> 8); byte lo = (byte) charValue; @@ -196,18 +181,15 @@ strRaw[i * 2 + 1] = lo; } - try - { + try { Charset charsetBig5 = Charset.forName("Big5"); CharsetDecoder decoder = charsetBig5.newDecoder(); CharBuffer cb = decoder.decode(ByteBuffer.wrap(strRaw)); val.append(cb); - } catch (CharacterCodingException e) - { + } catch (CharacterCodingException e) { logger.warn(e.getMessage(), e); return val.toString(); - } finally - { + } finally { // rawBuffer.position(pos); // rawBuffer.order(order); } @@ -216,8 +198,7 @@ return val.toString(); } - protected byte[] convertDBCSToUnicode(byte[] buffer) - { + protected byte[] convertDBCSToUnicode(byte[] buffer) { byte[] charBuffer = new byte[4]; charBuffer[0] = (byte) ((byte) ((buffer[1] & 0xc0) >>> 6) | 0xc0); charBuffer[1] = (byte) (buffer[1] & 0x3f | 0x80); @@ -226,23 +207,19 @@ return charBuffer; } - public Geometry toGeometry(GeometryFactory factory) - { + public Geometry toGeometry(GeometryFactory factory) { return factory.createPoint(getUserOrigin()); } - public Geometry toAnchorGeometry(GeometryFactory factory) - { - if (getText() == null) - { - return factory.createMultiPoint(new Coordinate[] {}); + public Geometry toAnchorGeometry(GeometryFactory factory) { + if (getText() == null) { + return factory.createMultiPoint(new Coordinate[]{}); } return factory.createMultiPoint(toAnchorCoordinates()); } - public Coordinate[] toAnchorCoordinates() - { + public Coordinate[] toAnchorCoordinates() { CoordinateList result = new CoordinateList(); int len = getText().trim().length(); if (len == 0) return result.toCoordinateArray(); @@ -257,8 +234,7 @@ at.setToRotation(angle, p.x, p.y); at.scale(1, 1); - for (int i = 0; i < len; i++) - { + for (int i = 0; i < len; i++) { double[] srcPt = new double[2]; double[] dstPt = new double[2]; @@ -272,16 +248,14 @@ return result.toCoordinateArray(); } - private double getUserWidth() - { + private double getUserWidth() { int just = getJustification(); // Envelope range = getRange(); // case -1 // double width = (range.getWidth()); // case -1 // double width = this.getTextWidth() * this.getTextLength() * 1000.0; // case -2 double width = (this.getTextWidth() * this.getTextLength()); - switch (just) - { + switch (just) { case TXTJUST_LT: case TXTJUST_LC: case TXTJUST_LB: @@ -303,13 +277,11 @@ return width; } - private double getUserHeight() - { + private double getUserHeight() { int just = getJustification(); double height = getTextHeight(); - switch (just) - { + switch (just) { case TXTJUST_LB: case TXTJUST_CB: case TXTJUST_RB: // bottom @@ -331,8 +303,7 @@ return height; } - public Coordinate getUserOrigin() - { + public Coordinate getUserOrigin() { double width = getUserWidth(); double height = getUserHeight(); double angle = Math.toRadians(getRotationAngle()); @@ -354,8 +325,7 @@ return new Coordinate(dstPt[0], dstPt[1]); } - public Object clone() throws CloneNotSupportedException - { + public Object clone() throws CloneNotSupportedException { int pos = this.rawBuffer.position(); this.rawBuffer.position(0); byte[] rawBytes = this.rawBuffer.array(); @@ -367,27 +337,22 @@ return other; } - 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.TEXT); } - 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 TextElement(raw); } } -- Gitblit v0.0.0-SNAPSHOT