From 8713611a01ee773ff9630a0af084422a0765cb90 Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Sat, 17 May 2008 00:29:33 +0800
Subject: [PATCH] update for EOFM-91

---
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java |  219 +++++++++++++++++++++++++++---------------------------
 1 files changed, 110 insertions(+), 109 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 9630737..12093e3 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,11 +1,10 @@
 package com.ximple.io.dgn7;
 
-//~--- non-JDK imports --------------------------------------------------------
+import java.awt.geom.AffineTransform;
 
 import org.apache.log4j.Logger;
 
 import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.GeometryFactory;
 
@@ -30,32 +29,33 @@
     //  Enter data field left justification
     public static final int ED_RIGHTJUSTIFICATION = 0;
 
-    //  Enter data field right justification
-    public static final int TXTJUST_CB = 0;
+    public static final int TXTJUST_LT = 0;    /* Left Top */
+    public static final int TXTJUST_LC = 1;    /* Left Center */
+    public static final int TXTJUST_LB = 2;    /* Left Bottom */
+    public static final int TXTJUST_LMT = 3;   /* Left Margin Top */
+    public static final int TXTJUST_LMC = 4;   /* Left Margin Center */
+    public static final int TXTJUST_LMB = 5;   /* Left Margin Bottom */
+    public static final int TXTJUST_CT = 6;    /* Center Top */
+    public static final int TXTJUST_CC = 7;    /* Center Center */
+    public static final int TXTJUST_CB = 8;    /* Center Bottom */
+    public static final int TXTJUST_RMT = 9;   /* Right Margin Top */
+    public static final int TXTJUST_RMC = 10;  /* Right Margin Center */
+    public static final int TXTJUST_RMB = 11;  /* Right Margin Bottom */
+    public static final int TXTJUST_RT = 12;   /* Right Top */
+    public static final int TXTJUST_RC = 13;   /* Right Center */
+    public static final int TXTJUST_RB = 14;   /* Right Bottom */
 
-    //  Center/bottom text justification.
-    public static final int TXTJUST_CC = 0;
-
-    //  Center/center text justification.
-    public static final int TXTJUST_CT = 0;
-
-    //  Center/top text justification.
-    public static final int TXTJUST_LB = 0;
-
-    //  Left/bottom text justification.
-    public static final int TXTJUST_LC = 0;
-
-    //  Left/center text justification.
-    public static final int TXTJUST_LT = 0;
-
-    //  Left/top text justification.
-    public static final int TXTJUST_RB = 0;
-
-    //  Right/bottom text justification.
-    public static final int TXTJUST_RC = 0;
-
-    //  Right/center text justification.
-    public static final int TXTJUST_RT = 0;
+    public static final int TXTJUST_LU = 15;   /* Left Cap */
+    public static final int TXTJUST_LD = 16;   /* Left Descender */
+    public static final int TXTJUST_LMU = 17;  /* Left Margin Cap */
+    public static final int TXTJUST_LMD = 18;  /* Left Margin Descender */
+    public static final int TXTJUST_CU = 19;   /* Center Cap */
+    public static final int TXTJUST_CD = 20;   /* Center Descender */
+    public static final int TXTJUST_RMU = 21;  /* Right Margin Cap */
+    public static final int TXTJUST_RMD = 22;  /* Right Margin Descender */
+    public static final int TXTJUST_RU = 23;   /* Right Cap */
+    public static final int TXTJUST_RD = 24;   /* Right Descender */
+    public static final int TXTJUST_NONE = 127;/* no justfication */
 
     public TextElement(byte[] raw)
     {
@@ -76,84 +76,6 @@
         double dy = DgnUtility.converUnitToCoord(y);
 
         return new Coordinate(dx, dy);
-    }
-
-    public Coordinate getUserOrigin()
-    {
-        Coordinate origin = getOrigin();
-        double x = origin.x;
-        double weight = getUserSetWeight();
-        double height = getUserSetHeight();
-        double angle = DgnUtility.converRotationToRadian(getRotationAngle());
-
-        x += weight * Math.cos(angle) - height * Math.sin(angle);
-
-        double y = origin.y;
-
-        y += weight * Math.cos(angle) - height * Math.sin(angle);
-
-        return new Coordinate(x, y);
-    }
-
-    private double getUserSetWeight()
-    {
-        int just = getJustification();
-        Envelope range = getRange();
-        double weight = (range.getWidth());
-
-        switch (just)
-        {
-        case 0:
-        case 1:
-        case 2:
-            weight = 0;
-
-            break;
-
-        case 6:
-        case 7:
-        case 8:
-            weight = weight / 2;
-
-            break;
-
-        case 12:
-        case 13:
-        case 14:
-            break;
-        }
-
-        return weight;
-    }
-
-    private double getUserSetHeight()
-    {
-        int just = getJustification();
-        double height = getTextHeight();
-
-        switch (just)
-        {
-        case 2:
-        case 8:
-        case 14:    // bottom
-            height = 0;
-
-            break;
-
-        case 1:
-        case 7:
-        case 13:    // center
-            height = height / 2;
-
-            break;
-
-        case 0:
-        case 6:
-        case 12:    // height
-            break;
-        }
-
-        return height;
     }
 
     public int getFontIndex()
@@ -211,10 +133,7 @@
 
     public double getRotationAngle()
     {
-        int totation = ((raw[23] << 16) & 0xffff0000);
-
-        totation += raw[24] & 0x0000ffff;
-
+        int totation = ((raw[23] & 0x0000ffff) << 16) | (raw[24] & 0x0000ffff);
         return DgnUtility.converIntToRotation(totation);
     }
 
@@ -269,6 +188,88 @@
         return factory.createPoint(getUserOrigin());
     }
 
+    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)
+        {
+        case TXTJUST_LT:
+        case TXTJUST_LC:
+        case TXTJUST_LB:
+            width = 0;
+            break;
+
+        case TXTJUST_CT:
+        case TXTJUST_CC:
+        case TXTJUST_CB:
+            width = width / 2;
+            break;
+
+        case TXTJUST_RT:
+        case TXTJUST_RC:
+        case TXTJUST_RB:
+            break;
+        }
+
+        return width;
+    }
+
+    private double getUserHeight()
+    {
+        int just = getJustification();
+        double height = getTextHeight();
+
+        switch (just)
+        {
+        case TXTJUST_LB:
+        case TXTJUST_CB:
+        case TXTJUST_RB:    // bottom
+            height = 0;
+            break;
+
+        case TXTJUST_LC:
+        case TXTJUST_CC:
+        case TXTJUST_RC:    // center
+            height = height / 2;
+            break;
+
+        case TXTJUST_LT:
+        case TXTJUST_CT:
+        case TXTJUST_RT:    // height
+            break;
+        }
+
+        return height;
+    }
+
+    public Coordinate getUserOrigin()
+    {
+        double width = getUserWidth();
+        double height = getUserHeight();
+        double angle = Math.toRadians(getRotationAngle());
+
+        AffineTransform at = new AffineTransform();
+        at.translate(width, height);
+        Coordinate p = getOrigin();
+        at.setToRotation(angle, p.x, p.y);
+        at.scale(1, 1);
+
+        double[] srcPt = new double[2];
+        double[] dstPt = new double[2];
+
+        srcPt[0] = p.x + width ;
+        srcPt[1] = p.y + height ;
+
+        at.transform(srcPt, 0, dstPt, 0, 1);
+
+        return new Coordinate(dstPt[0], dstPt[1]);
+    }
+
     public static class ElementHandler extends Element.ElementHandler
     {
         private static ElementHandler instance = null;

--
Gitblit v0.0.0-SNAPSHOT