Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / objreaders / v2004 / DwgInsertReader2004.java @ 23641

History | View | Annotate | Download (4.13 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.util.ArrayList;
8

    
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgInsert;
14

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

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

    
33
                ArrayList v = DwgUtil.getBitDouble(data, bitPos);
34
                bitPos = ((Integer)v.get(0)).intValue();
35
                double x = ((Double)v.get(1)).doubleValue();
36
                v = DwgUtil.getBitDouble(data, bitPos);
37
                bitPos = ((Integer)v.get(0)).intValue();
38
                double y = ((Double)v.get(1)).doubleValue();
39
                v = DwgUtil.getBitDouble(data, bitPos);
40
                bitPos = ((Integer)v.get(0)).intValue();
41
                double z = ((Double)v.get(1)).doubleValue();
42
                double[] coord = new double[]{x, y, z};
43
                ins.setInsertionPoint(coord);
44

    
45
                int dflag = ((Integer)DwgUtil.getBits(data, 2, bitPos)).intValue();
46
                bitPos = bitPos + 2;
47
                if (dflag==0x0) {
48
                        v = DwgUtil.getRawDouble(data, bitPos);
49
                        bitPos = ((Integer)v.get(0)).intValue();
50
                        x = ((Double)v.get(1)).doubleValue();
51
                        v = DwgUtil.getDefaultDouble(data, bitPos, x);
52
                        bitPos = ((Integer)v.get(0)).intValue();
53
                        y = ((Double)v.get(1)).doubleValue();
54
                        v = DwgUtil.getDefaultDouble(data, bitPos, x);
55
                        bitPos = ((Integer)v.get(0)).intValue();
56
                        z = ((Double)v.get(1)).doubleValue();
57
                } else if (dflag==0x1) {
58
                        x = 1.0;
59
                        v = DwgUtil.getDefaultDouble(data, bitPos, x);
60
                        bitPos = ((Integer)v.get(0)).intValue();
61
                        y = ((Double)v.get(1)).doubleValue();
62
                        v = DwgUtil.getDefaultDouble(data, bitPos, x);
63
                        bitPos = ((Integer)v.get(0)).intValue();
64
                        z = ((Double)v.get(1)).doubleValue();
65
                } else if (dflag==0x2) {
66
                        v = DwgUtil.getRawDouble(data, bitPos);
67
                        bitPos = ((Integer)v.get(0)).intValue();
68
                        x = y = z = ((Double)v.get(1)).doubleValue();
69
                } else {
70
                        x = y = z = 1.0;
71
                }
72
                coord = new double[]{x, y, z};
73
                ins.setScale(coord);
74

    
75
                v = DwgUtil.getBitDouble(data, bitPos);
76
                bitPos = ((Integer)v.get(0)).intValue();
77
                double rot = ((Double)v.get(1)).doubleValue();
78
                ins.setRotation(rot);
79

    
80
                v = DwgUtil.getBitDouble(data, bitPos);
81
                bitPos = ((Integer)v.get(0)).intValue();
82
                x = ((Double)v.get(1)).doubleValue();
83
                v = DwgUtil.getBitDouble(data, bitPos);
84
                bitPos = ((Integer)v.get(0)).intValue();
85
                y = ((Double)v.get(1)).doubleValue();
86
                v = DwgUtil.getBitDouble(data, bitPos);
87
                bitPos = ((Integer)v.get(0)).intValue();
88
                z = ((Double)v.get(1)).doubleValue();
89
                coord = new double[]{x, y, z};
90
                ins.setExtrusion(coord);
91

    
92
                v = DwgUtil.testBit(data, bitPos);
93
                bitPos = ((Integer)v.get(0)).intValue();
94
                boolean hasattr = ((Boolean)v.get(1)).booleanValue();
95

    
96
//                FIXME: Aunque est? en las especificaciones, parece que esto no se lee
97
//                v = DwgUtil.getBitLong(data, bitPos); //OWNED OBJECT COUNT
98
//                bitPos = ((Integer)v.get(0)).intValue();
99
//                int ownedObj = ((Integer)v.get(1)).intValue();
100

    
101
//                System.out.println("ownedObj = "+ownedObj);
102

    
103

    
104
                bitPos = readObjectTailer(data, bitPos, ins);
105

    
106
                DwgHandleReference hr = new DwgHandleReference();
107
                bitPos = hr.read(data, bitPos);
108
                ins.setBlockHeaderHandle(hr);
109

    
110
//                FIXME: Aunque est? en las especificaciones, parece que esto no se lee
111
//                if (ownedObj>0) {
112
//                        for (int i=0;i<ownedObj;i++) {
113
//                                hr = new DwgHandleReference();
114
//                                bitPos = hr.read(data, bitPos);
115
//                                ins.addOwnedObjectHandle(hr);
116
//                        }
117
//                }
118

    
119
                if (hasattr) {
120
                        hr = new DwgHandleReference();
121
                        bitPos = hr.read(data, bitPos);
122
                        ins.setSeqendHandle(hr);
123
                }
124
        }
125

    
126

    
127

    
128
}