Statistics
| Revision:

svn-gvsig-desktop / branches / v10 / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / objreaders / v1314 / DwgBlockHeaderReader1314.java @ 10539

History | View | Annotate | Download (4.41 KB)

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

    
7
import java.util.List;
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.DwgBlockHeader;
14

    
15
/**
16
 * @author alzabord
17
 *
18
 */
19
public class DwgBlockHeaderReader1314 extends AbstractDwg1314Reader{
20

    
21
        /* (non-Javadoc)
22
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
23
         */
24
        
25
        //TODO REVISAR COMO TRATAR LAS REFERENCIAS EXTERNAS
26
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
27
                 if(! (dwgObj instanceof DwgBlockHeader))
28
                            throw new RuntimeException("ArcReader 14 solo puede leer DwgBlockHeader");
29
                 DwgBlockHeader blk = (DwgBlockHeader) dwgObj;
30
                 int bitPos = offset;
31
                 
32
                 List val = DwgUtil.getBitLong(data, bitPos);
33
                 bitPos = ((Integer) val.get(0)).intValue();
34
                 int numReactors = ((Integer) val.get(1)).intValue();
35
                 blk.setNumReactors(numReactors);
36
                
37
                 val = DwgUtil.getTextString(data, bitPos);
38
                 bitPos = ((Integer) val.get(0)).intValue();
39
                 String name = (String) val.get(1);
40
                 blk.setName(name);
41
                 
42
                 val = DwgUtil.testBit(data, bitPos);
43
                 bitPos = ((Integer) val.get(0)).intValue();
44
                 boolean flag64 = ((Boolean) val.get(1)).booleanValue();
45
                 blk.setFlag64(flag64);
46
                 
47
                 val = DwgUtil.getBitShort(data, bitPos);
48
                 bitPos = ((Integer) val.get(0)).intValue();
49
                 int xRefPlus = ((Integer) val.get(1)).intValue();
50
                 blk.setXRefPlus(xRefPlus);
51
                 
52
                 val = DwgUtil.testBit(data, bitPos);
53
                 bitPos = ((Integer) val.get(0)).intValue();
54
                 boolean xdep = ((Boolean) val.get(1)).booleanValue();
55
                 blk.setXdep(xdep);
56
                 
57
                 val = DwgUtil.testBit(data, bitPos);
58
                 bitPos = ((Integer) val.get(0)).intValue();
59
                 boolean anonymous = ((Boolean) val.get(1)).booleanValue();
60
                 blk.setAnonymous(anonymous);
61
                 
62
                 val = DwgUtil.testBit(data, bitPos);
63
                 bitPos = ((Integer) val.get(0)).intValue();
64
                 boolean hasAttr = ((Boolean) val.get(1)).booleanValue();
65
                 blk.setHasAttrs(hasAttr);
66
                 
67
                 val = DwgUtil.testBit(data, bitPos);
68
                 bitPos = ((Integer) val.get(0)).intValue();
69
                 boolean blkIsXref = ((Boolean) val.get(1)).booleanValue();
70
                 blk.setBlkIsXRef(blkIsXref);
71
                 
72
                 val = DwgUtil.testBit(data, bitPos);
73
                 bitPos = ((Integer) val.get(0)).intValue();
74
                 boolean xOver = ((Boolean) val.get(1)).booleanValue();
75
                 blk.setXRefOverLaid(xOver);
76
                 
77
                 val = DwgUtil.getBitDouble(data, bitPos);
78
                 bitPos = ((Integer) val.get(0)).intValue();
79
                 double x = ((Double) val.get(1)).doubleValue();
80
                 
81
                 val = DwgUtil.getBitDouble(data, bitPos);
82
                 bitPos = ((Integer) val.get(0)).intValue();
83
                 double y = ((Double) val.get(1)).doubleValue();
84
                 
85
                 val = DwgUtil.getBitDouble(data, bitPos);
86
                 bitPos = ((Integer) val.get(0)).intValue();
87
                 double z = ((Double) val.get(1)).doubleValue();
88
                 blk.setBasePoint(new double[]{x, y, z});
89
                 
90
                 val = DwgUtil.getTextString(data, bitPos);
91
                 bitPos = ((Integer) val.get(0)).intValue();
92
                 String xRefPname = (String) val.get(1);
93
                 blk.setXRefPName(xRefPname);
94
                 
95
                 DwgHandleReference handle = new DwgHandleReference();
96
                 bitPos = handle.read(data, bitPos);
97
                 blk.setBlockControlHandle(handle);
98
                 
99
                 for( int i = 0; i < numReactors; i++){
100
                         handle = new DwgHandleReference();
101
                         bitPos = handle.read(data, bitPos);
102
                         blk.addReactorHandle(handle);
103
                 }
104
                 
105
                 handle = new DwgHandleReference();
106
                 bitPos = handle.read(data, bitPos);
107
                 blk.setXDicObjHandle(handle);
108
                 
109
                 handle = new DwgHandleReference();
110
                 bitPos = handle.read(data, bitPos);
111
                 blk.setNullHandle(handle);
112
                 
113
                 //En python no se llama a head ni tailer,
114
                 //luego este debe ser el handle
115
                 handle = new DwgHandleReference();
116
                 bitPos = handle.read(data, bitPos);
117
                 blk.setHandle(handle);
118
                 
119
                 /*
120
                  * Esto aclara algo: un bloque solo mantiene referencias
121
                  * a sus entidades SI NO ES UNA REFERENCIA EXTERNA
122
                  * */
123
                 if(! blkIsXref && ! xOver){
124
                         handle = new DwgHandleReference();
125
                         bitPos = handle.read(data, bitPos);
126
                         blk.setFirstEntityHandle(handle);
127
                         
128
                         handle = new DwgHandleReference();
129
                         bitPos = handle.read(data, bitPos);
130
                         blk.setLastEntityHandle(handle);
131
                 }
132
                 handle = new DwgHandleReference();
133
                 bitPos = handle.read(data, bitPos);
134
                 blk.setEndBlkEntityHandle(handle);
135
        }
136
}