Statistics
| Revision:

root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / objreaders / v2004 / DwgTextReader2004.java @ 23942

History | View | Annotate | Download (4.67 KB)

1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

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

    
10
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgText;
14
import com.iver.cit.jdwglib.util.TextToUnicodeConverter;
15

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

    
24
        /* (non-Javadoc)
25
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
26
         */
27
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
28
                if(! (dwgObj instanceof DwgText))
29
                        throw new RuntimeException("TextReader 2004 solo puede leer DwgText");
30
                DwgText txt = (DwgText) dwgObj;
31
                int bitPos = offset;
32
                bitPos = readObjectHeader(data, bitPos, txt);
33

    
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

    
39
                if ((dflag & 0x1)==0) {
40
                        v = DwgUtil.getRawDouble(data, bitPos);
41
                        bitPos = ((Integer)v.get(0)).intValue();
42
                        double elev = ((Double)v.get(1)).doubleValue();
43
                        txt.setElevation(elev);
44
                }
45

    
46
                v = DwgUtil.getRawDouble(data, bitPos);
47
                bitPos = ((Integer)v.get(0)).intValue();
48
                double x1 = ((Double)v.get(1)).doubleValue();
49
                v = DwgUtil.getRawDouble(data, bitPos);
50
                bitPos = ((Integer)v.get(0)).intValue();
51
                double y1 = ((Double)v.get(1)).doubleValue();
52
                txt.setInsertionPoint(new Point2D.Double(x1, y1));
53

    
54
                if ((dflag & 0x2)==0) {
55
                        v = DwgUtil.getDefaultDouble(data, bitPos, x1);
56
                        bitPos = ((Integer)v.get(0)).intValue();
57
                        double xa = ((Double)v.get(1)).doubleValue();
58
                        v = DwgUtil.getDefaultDouble(data, bitPos, y1);
59
                        bitPos = ((Integer)v.get(0)).intValue();
60
                        double ya = ((Double)v.get(1)).doubleValue();
61
                        txt.setAlignmentPoint(new Point2D.Double(xa, ya));
62
                }
63

    
64
                v = DwgUtil.testBit(data, bitPos);
65
                bitPos = ((Integer)v.get(0)).intValue();
66
                boolean flag = ((Boolean)v.get(1)).booleanValue();
67
                double x, y, z;
68
                if (flag) {
69
                        x = 0.0;
70
                        y = 0.0;
71
                        z = 1.0;
72
                } else {
73
                        v = DwgUtil.getBitDouble(data, bitPos);
74
                        bitPos = ((Integer)v.get(0)).intValue();
75
                        x = ((Double)v.get(1)).doubleValue();
76
                        v = DwgUtil.getBitDouble(data, bitPos);
77
                        bitPos = ((Integer)v.get(0)).intValue();
78
                        y = ((Double)v.get(1)).doubleValue();
79
                        v = DwgUtil.getBitDouble(data, bitPos);
80
                        bitPos = ((Integer)v.get(0)).intValue();
81
                        z = ((Double)v.get(1)).doubleValue();
82
                }
83
                txt.setExtrusion(new double[]{x, y, z});
84

    
85
                v = DwgUtil.testBit(data, bitPos);
86
                bitPos = ((Integer)v.get(0)).intValue();
87
                flag = ((Boolean)v.get(1)).booleanValue();
88
            double th;
89
                if (flag) {
90
                        th=0.0;
91
                } else {
92
                        v = DwgUtil.getBitDouble(data, bitPos);
93
                        bitPos = ((Integer)v.get(0)).intValue();
94
                        th = ((Double)v.get(1)).doubleValue();
95
                }
96
                txt.setThickness(th);
97

    
98
                if ((dflag & 0x4) == 0) {
99
                        v = DwgUtil.getRawDouble(data, bitPos);
100
                        bitPos = ((Integer)v.get(0)).intValue();
101
                        double oblique = ((Double)v.get(1)).doubleValue();
102
                        txt.setObliqueAngle(oblique);
103
                }
104

    
105
                if ((dflag & 0x8) == 0) {
106
                        v = DwgUtil.getRawDouble(data, bitPos);
107
                        bitPos = ((Integer)v.get(0)).intValue();
108
                        double rot = ((Double)v.get(1)).doubleValue();
109
                        txt.setRotationAngle(rot);
110
                }
111

    
112
                v = DwgUtil.getRawDouble(data, bitPos);
113
                bitPos = ((Integer)v.get(0)).intValue();
114
                double height = ((Double)v.get(1)).doubleValue();
115
                txt.setHeight(height);
116

    
117
                if ((dflag & 0x10) == 0) {
118
                        v = DwgUtil.getRawDouble(data, bitPos);
119
                        bitPos = ((Integer)v.get(0)).intValue();
120
                        double width = ((Double)v.get(1)).doubleValue();
121
                        txt.setWidthFactor(width);
122
                }
123

    
124
                v = DwgUtil.getTextString(data, bitPos);
125
                bitPos = ((Integer)v.get(0)).intValue();
126
                String text = (String)v.get(1);
127
                text = TextToUnicodeConverter.convertText(text);
128
                txt.setText(text);
129

    
130
                if ((dflag & 0x20) == 0) {
131
                        v = DwgUtil.getBitShort(data, bitPos);
132
                        bitPos = ((Integer)v.get(0)).intValue();
133
                        int gen = ((Integer)v.get(1)).intValue();
134
                        txt.setGeneration(gen);
135
                }
136

    
137
                if ((dflag & 0x40) == 0) {
138
                        v = DwgUtil.getBitShort(data, bitPos);
139
                        bitPos = ((Integer)v.get(0)).intValue();
140
                        int halign = ((Integer)v.get(1)).intValue();
141
                        txt.setHalign(halign);
142
                }
143

    
144
                if ((dflag & 0x80) == 0) {
145
                        v = DwgUtil.getBitShort(data, bitPos);
146
                        bitPos = ((Integer)v.get(0)).intValue();
147
                        int valign = ((Integer)v.get(1)).intValue();
148
                        txt.setValign(valign);
149
                }
150
                txt.inserta();
151
                bitPos = readObjectTailer(data, bitPos, txt);
152
        }
153

    
154
}