Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libDwg / src / org / gvsig / dwg / lib / readers / v15 / DwgTextReader15.java @ 28969

History | View | Annotate | Download (4.61 KB)

1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.readers.v15;
6

    
7
import java.awt.geom.Point2D;
8
import java.util.ArrayList;
9

    
10
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
11
import org.gvsig.dwg.lib.DwgObject;
12
import org.gvsig.dwg.lib.DwgUtil;
13
import org.gvsig.dwg.lib.objects.DwgText;
14
import org.gvsig.dwg.lib.util.TextToUnicodeConverter;
15

    
16

    
17
/**
18
 * @author alzabord
19
 *
20
 * TODO To change the template for this generated type comment go to
21
 * Window - Preferences - Java - Code Style - Code Templates
22
 */
23
public class DwgTextReader15 extends AbstractDwg15Reader {
24

    
25
        /* (non-Javadoc)
26
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
27
         */
28
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
29
                if(! (dwgObj instanceof DwgText))
30
                        throw new RuntimeException("ArcReader 15 solo puede leer DwgText");
31
                DwgText txt = (DwgText) dwgObj;
32
                int bitPos = offset;
33
                bitPos = headTailReader.readObjectHeader(data, bitPos, txt);
34
                ArrayList v = DwgUtil.getRawChar(data, bitPos);
35
                bitPos = ((Integer)v.get(0)).intValue();
36
                int dflag = ((Integer)v.get(1)).intValue();
37
                txt.setDataFlag(dflag);
38
                if ((dflag & 0x1)==0) {
39
                        v = DwgUtil.getRawDouble(data, bitPos);
40
                        bitPos = ((Integer)v.get(0)).intValue();
41
                        double elev = ((Double)v.get(1)).doubleValue();
42
                        txt.setElevation(elev);
43
                }
44
                v = DwgUtil.getRawDouble(data, bitPos);
45
                bitPos = ((Integer)v.get(0)).intValue();
46
                double x1 = ((Double)v.get(1)).doubleValue();
47
                v = DwgUtil.getRawDouble(data, bitPos);
48
                bitPos = ((Integer)v.get(0)).intValue();
49
                double y1 = ((Double)v.get(1)).doubleValue();
50
                txt.setInsertionPoint(new Point2D.Double(x1, y1));
51
                if ((dflag & 0x2)==0) {
52
                        v = DwgUtil.getDefaultDouble(data, bitPos, x1);
53
                        bitPos = ((Integer)v.get(0)).intValue();
54
                        double xa = ((Double)v.get(1)).doubleValue();
55
                        v = DwgUtil.getDefaultDouble(data, bitPos, y1);
56
                        bitPos = ((Integer)v.get(0)).intValue();
57
                        double ya = ((Double)v.get(1)).doubleValue();
58
                        txt.setAlignmentPoint(new Point2D.Double(xa, ya));
59
                }
60
                v = DwgUtil.testBit(data, bitPos);
61
                bitPos = ((Integer)v.get(0)).intValue();
62
                boolean flag = ((Boolean)v.get(1)).booleanValue();
63
                double x, y, z;
64
                if (flag) {
65
                        x = 0.0;
66
                        y = 0.0;
67
                        z = 1.0;
68
                } else {
69
                        v = DwgUtil.getBitDouble(data, bitPos);
70
                        bitPos = ((Integer)v.get(0)).intValue();
71
                        x = ((Double)v.get(1)).doubleValue();
72
                        v = DwgUtil.getBitDouble(data, bitPos);
73
                        bitPos = ((Integer)v.get(0)).intValue();
74
                        y = ((Double)v.get(1)).doubleValue();
75
                        v = DwgUtil.getBitDouble(data, bitPos);
76
                        bitPos = ((Integer)v.get(0)).intValue();
77
                        z = ((Double)v.get(1)).doubleValue();
78
                }
79
                txt.setExtrusion(new double[]{x, y, z});
80
                v = DwgUtil.testBit(data, bitPos);
81
                bitPos = ((Integer)v.get(0)).intValue();
82
                flag = ((Boolean)v.get(1)).booleanValue();
83
            double th;
84
                if (flag) {
85
                        th=0.0;
86
                } else {
87
                        v = DwgUtil.getBitDouble(data, bitPos);
88
                        bitPos = ((Integer)v.get(0)).intValue();
89
                        th = ((Double)v.get(1)).doubleValue();
90
                }
91
                txt.setThickness(th);
92
                if ((dflag & 0x4) == 0) {
93
                        v = DwgUtil.getRawDouble(data, bitPos);
94
                        bitPos = ((Integer)v.get(0)).intValue();
95
                        double oblique = ((Double)v.get(1)).doubleValue();
96
                        txt.setObliqueAngle(oblique);
97
                }
98
                if ((dflag & 0x8) == 0) {
99
                        v = DwgUtil.getRawDouble(data, bitPos);
100
                        bitPos = ((Integer)v.get(0)).intValue();
101
                        double rot = ((Double)v.get(1)).doubleValue();
102
                        txt.setRotationAngle(rot);
103
                }
104
                v = DwgUtil.getRawDouble(data, bitPos);
105
                bitPos = ((Integer)v.get(0)).intValue();
106
                double height = ((Double)v.get(1)).doubleValue();
107
                txt.setHeight(height);
108
                if ((dflag & 0x10) == 0) {
109
                        v = DwgUtil.getRawDouble(data, bitPos);
110
                        bitPos = ((Integer)v.get(0)).intValue();
111
                        double width = ((Double)v.get(1)).doubleValue();
112
                        txt.setWidthFactor(width);
113
                }
114
                v = DwgUtil.getTextString(data, bitPos);
115
                bitPos = ((Integer)v.get(0)).intValue();
116
                String text = (String)v.get(1);
117
                text = TextToUnicodeConverter.convertText(text);
118
                txt.setText(text);
119
                if ((dflag & 0x20) == 0) {
120
                        v = DwgUtil.getBitShort(data, bitPos);
121
                        bitPos = ((Integer)v.get(0)).intValue();
122
                        int gen = ((Integer)v.get(1)).intValue();
123
                        txt.setGeneration(gen);
124
                }
125
                if ((dflag & 0x40) == 0) {
126
                        v = DwgUtil.getBitShort(data, bitPos);
127
                        bitPos = ((Integer)v.get(0)).intValue();
128
                        int halign = ((Integer)v.get(1)).intValue();
129
                        txt.setHalign(halign);
130
                }
131
                if ((dflag & 0x80) == 0) {
132
                        v = DwgUtil.getBitShort(data, bitPos);
133
                        bitPos = ((Integer)v.get(0)).intValue();
134
                        int valign = ((Integer)v.get(1)).intValue();
135
                        txt.setValign(valign);
136
                }
137
                bitPos = headTailReader.readObjectTailer(data, bitPos, txt);
138
        }
139

    
140
}