Statistics
| Revision:

root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / DwgFileV15Reader.java @ 10820

History | View | Annotate | Download (76.5 KB)

1
/* jdwglib. Java Library for reading Dwg files.
2
 * 
3
 * Author: Jose Morell Rama (jose.morell@gmail.com).
4
 * Port from the Pythoncad Dwg library by Art Haas.
5
 *
6
 * Copyright (C) 2005 Jose Morell, IVER TI S.A. and Generalitat Valenciana
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 * Jose Morell (jose.morell@gmail.com)
25
 * 
26
 * or
27
 *
28
 * IVER TI S.A.
29
 *  C/Salamanca, 50
30
 *  46005 Valencia
31
 *  Spain
32
 *  +34 963163400
33
 *  dac@iver.es
34
 */
35
package com.iver.cit.jdwglib.dwg.readers;
36

    
37
import java.io.IOException;
38
import java.nio.ByteBuffer;
39
import java.nio.ByteOrder;
40
import java.util.ArrayList;
41
import java.util.List;
42

    
43
import org.apache.log4j.Logger;
44

    
45
import com.iver.cit.gvsig.fmap.drivers.dgn.ByteUtils;
46
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
47
import com.iver.cit.jdwglib.dwg.DwgClass;
48
import com.iver.cit.jdwglib.dwg.DwgFile;
49
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
50
import com.iver.cit.jdwglib.dwg.DwgObject;
51
import com.iver.cit.jdwglib.dwg.DwgObjectFactory;
52
import com.iver.cit.jdwglib.dwg.DwgObjectOffset;
53
import com.iver.cit.jdwglib.dwg.DwgUtil;
54

    
55
import freenet.support.HexUtil;
56

    
57
/**
58
 * The DwgFileV15Reader reads the DWG version 15 format
59
 * 
60
 * @author jmorell
61
 */
62
public class DwgFileV15Reader implements IDwgFileReader {
63
        protected DwgFile dwgFile;
64

    
65
        protected ByteBuffer bb;
66
        
67
        private static Logger logger = Logger.getLogger(DwgFileV14Reader.class
68
                        .getName());
69

    
70

    
71
        /**
72
         * Reads the DWG version 15 format
73
         * 
74
         * @param dwgFile
75
         *            Represents the DWG file that we want to read
76
         * @throws IOException
77
         *             When DWG file path is wrong
78
         */
79
        public void read(DwgFile dwgFile, ByteBuffer bb) throws IOException {
80
                this.dwgFile = dwgFile;
81
                this.bb = bb;
82
                try {
83
                        readDwgSectionOffsets();
84
                        readHeaders();
85
                        readDwgClasses();
86
                        readDwgObjectOffsets();
87
                        readDwgObjects();
88
                        //checkSuperentities();
89
                } catch (Exception e) {
90
                        e.printStackTrace();
91
                        logger.error(e);
92
                }
93
                
94
        }
95
        
96
        /*
97
         *TODO: Eliminar esto cuando terminemos con el testeo
98
         */
99
        protected void checkSuperentities(){
100
                logger.info("***** CHEQUEANDO LAS SUPERENTIDADES *****");
101
                List objects = dwgFile.getDwgObjects();
102
                DwgObject obj;
103
                DwgObject superEnt;
104
                boolean buscado=false;
105
                boolean perdidos=false;
106
                int j=0;
107
                for (int i=0; i<objects.size(); i++){
108
                        obj = (DwgObject)objects.get(i);
109
                        if (obj.hasSubEntityHandle()){
110
                                buscado = true;
111
                                superEnt = dwgFile.getDwgSuperEntity(obj);
112
                                if (superEnt == null){
113
                                        j++;
114
                                }
115
                        }
116
                }
117
                if(j!=0) {
118
                        logger.warn("+++++ SE HAN PERDIDO LAS SUPERENTIDADES DE "+ j+" OBJETOS +++++");
119
                }
120
                logger.info("***** FIN DEL CHEQUEO DE LAS SUPERENTIDADES *****");
121
                
122
        }
123
        
124

    
125
        /**
126
         * It read the SECTIONS from the header of the DWG file
127
         */
128
        protected void readDwgSectionOffsets() {
129
                bb.position(19);
130
                bb.order(ByteOrder.LITTLE_ENDIAN);
131
                short codePage = bb.getShort();
132
                int count = bb.getInt();
133
                for (int i = 0; i < count; i++) {
134
                        byte rec = bb.get();
135
                        int seek = bb.getInt();
136
                        int size = bb.getInt();
137
                        if (rec == 0) {
138
                                dwgFile.addDwgSectionOffset("HEADERS", seek, size);
139
                        } else if (rec == 1) {
140
                                dwgFile.addDwgSectionOffset("CLASSES", seek, size);
141
                        } else if (rec == 2) {
142
                                dwgFile.addDwgSectionOffset("OBJECTS", seek, size);
143
                        } else if (rec == 3) {
144
                                dwgFile.addDwgSectionOffset("UNKNOWN", seek, size);
145
                        } else if (rec == 4) {
146
                                dwgFile.addDwgSectionOffset("R14DATA", seek, size);
147
                        } else if (rec == 5) {
148
                                dwgFile.addDwgSectionOffset("R14REC5", seek, size);
149
                        } else {
150
                                //                                System.out.println("ERROR: C?digo de n?mero de registro
151
                                // no soportado: " + rec);
152
                        }
153
                }
154
        }
155

    
156
        /**
157
         * OpenDWG spec says: This section -object map- is a table which gives the
158
         * location of each object in the DWG file. This table is broken into
159
         * sections. It is basically a list of handle/file loc pairs. It could be
160
         * readed with this pseudocode:
161
         * 
162
         * Set lastHandle to all 0 and last loc to 0L. Repeat until section size ==
163
         * 2 section size = read short (in bigendian order) Repeat until out of data
164
         * for this section offset of this handle form last handle as modular char
165
         * offset of location in file from last location as modular char End repeat
166
         * End repeat
167
         *  
168
         */
169
        protected void readDwgObjectOffsets() throws Exception {
170
                int offset = dwgFile.getDwgSectionOffset("OBJECTS");
171
                bb.position(offset);
172
                while (true) {
173
                        bb.order(ByteOrder.BIG_ENDIAN);
174
                        /*
175
                         * We read the size of the next section. If size == 2, break (it is
176
                         * the last empty -except crc- section)
177
                         */
178
                        short size = bb.getShort();
179
                        if (size == 2)
180
                                break;
181
                        bb.order(ByteOrder.LITTLE_ENDIAN);
182
                        byte[] dataBytes = new byte[size];
183
                        for (int i = 0; i < dataBytes.length; i++) {
184
                                dataBytes[i] = bb.get();
185
                        }
186
                        int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
187
                        int lastHandle = 0;
188
                        int lastLoc = 0;
189
                        int bitPos = 0;
190
                        int bitMax = (size - 2) * 8;
191
                        while (bitPos < bitMax) {
192
                                ArrayList v = DwgUtil.getModularChar(data, bitPos);
193
                                bitPos = ((Integer) v.get(0)).intValue();
194
                                lastHandle = lastHandle + ((Integer) v.get(1)).intValue();
195
                                v = DwgUtil.getModularChar(data, bitPos);
196
                                bitPos = ((Integer) v.get(0)).intValue();
197
                                lastLoc = lastLoc + ((Integer) v.get(1)).intValue();
198
                                dwgFile.addDwgObjectOffset(lastHandle, lastLoc);
199
                        }//while
200
                }//while
201
        }
202

    
203
        protected void readDwgClasses() throws Exception {
204
                int offset = dwgFile.getDwgSectionOffset("CLASSES");
205
                bb.position(offset);
206
                //1? leemos el sentinnel inicial
207
                bb.order(ByteOrder.nativeOrder());
208
                byte[] sentinel = new byte[16];
209
                bb.get(sentinel);
210
                if (sentinel[0] != 0x8d)
211
                        logger.warn("sentinel[0] != 0x8d");
212
                if (sentinel[1] != 0xa1)
213
                        logger.warn("sentinel[1] != 0xa1");
214
                if (sentinel[2] != 0xc4)
215
                        logger.warn("sentinel[2] != 0xc4");
216
                if (sentinel[3] != 0xb8)
217
                        logger.warn("sentinel[3] != 0xb8");
218
                if (sentinel[4] != 0xc4)
219
                        logger.warn("sentinel[4] != 0xc4");
220
                if (sentinel[5] != 0xa9)
221
                        logger.warn("sentinel[5] != 0xa9");
222
                if (sentinel[6] != 0xf8)
223
                        logger.warn("sentinel[6] != 0xf8");
224
                if (sentinel[7] != 0xc5)
225
                        logger.warn("sentinel[7] != 0xc5");
226
                if (sentinel[8] != 0xc0)
227
                        logger.warn("sentinel[8] != 0xc0");
228
                if (sentinel[9] != 0xdc)
229
                        logger.warn("sentinel[9] != 0xdc");
230
                if (sentinel[10] != 0xf4)
231
                        logger.warn("sentinel[10] != 0xf4");
232
                if (sentinel[11] != 0x5f)
233
                        logger.warn("sentinel[11] != 0x5f");
234
                if (sentinel[12] != 0xe7)
235
                        logger.warn("sentinel[12] != 0xe7");
236
                if (sentinel[13] != 0xcf)
237
                        logger.warn("sentinel[13] != 0xcf");
238
                if (sentinel[14] != 0xb6)
239
                        logger.warn("sentinel[14] != 0xb6");
240
                if (sentinel[15] != 0x8a)
241
                        logger.warn("sentinel[15] != 0x8a");
242

    
243
                bb.order(ByteOrder.LITTLE_ENDIAN);
244
                int size = bb.getInt();
245
                byte[] data = new byte[size];
246
                bb.get(data);
247
                int[] intData = DwgUtil.toIntArray(data);
248
                short crc = bb.getShort();
249

    
250
                int maxBit = size * 8;
251
                int bitPos = 0;
252
                List val = null;
253
                while ((bitPos + 8) < maxBit) {
254
                        val = DwgUtil.getBitShort(intData, bitPos);
255
                        bitPos = ((Integer) val.get(0)).intValue();
256
                        int classNum = ((Integer) val.get(1)).intValue();
257

    
258
                        val = DwgUtil.getBitShort(intData, bitPos);
259
                        bitPos = ((Integer) val.get(0)).intValue();
260
                        int version = ((Integer) val.get(1)).intValue();
261

    
262
                        val = DwgUtil.getTextString(intData, bitPos);
263
                        bitPos = ((Integer) val.get(0)).intValue();
264
                        String appName = (String) val.get(1);
265

    
266
                        val = DwgUtil.getTextString(intData, bitPos);
267
                        bitPos = ((Integer) val.get(0)).intValue();
268
                        String cPlusPlusName = (String) val.get(1);
269

    
270
                        val = DwgUtil.getTextString(intData, bitPos);
271
                        bitPos = ((Integer) val.get(0)).intValue();
272
                        String dxfName = (String) val.get(1);
273

    
274
                        val = DwgUtil.testBit(intData, bitPos);
275
                        bitPos = ((Integer) val.get(0)).intValue();
276
                        boolean isZombie = ((Boolean) val.get(1)).booleanValue();
277

    
278
                        val = DwgUtil.getBitShort(intData, bitPos);
279
                        bitPos = ((Integer) val.get(0)).intValue();
280
                        int id = ((Integer) val.get(1)).intValue();
281

    
282
                        DwgClass dwgClass = new DwgClass(classNum, version, appName,
283
                                        cPlusPlusName, dxfName, isZombie, id);
284
                        dwgFile.addDwgClass(dwgClass);
285

    
286
                }//while
287
                //                Por ultimo, el sentinnel final
288
                bb.order(ByteOrder.nativeOrder());
289
                byte[] lastSentinnel = new byte[16];
290
                bb.get(lastSentinnel);
291
                if (lastSentinnel[0] != 0x72)
292
                        logger.warn("lastSentinnel[0] != 0x72");
293
                if (lastSentinnel[1] != 0x5e)
294
                        logger.warn("lastSentinnel[1] != 0x5e");
295
                if (lastSentinnel[2] != 0x3b)
296
                        logger.warn("lastSentinnel[2] != 0x3b");
297
                if (lastSentinnel[3] != 0x47)
298
                        logger.warn("lastSentinnel[3] != 0x47");
299
                if (lastSentinnel[4] != 0x3b)
300
                        logger.warn("lastSentinnel[4] != 0x3b");
301
                if (lastSentinnel[5] != 0x56)
302
                        logger.warn("lastSentinnel[5] != 0x56");
303
                if (lastSentinnel[6] != 0x07)
304
                        logger.warn("lastSentinnel[6] != 0x07");
305
                if (lastSentinnel[7] != 0x3a)
306
                        logger.warn("lastSentinnel[7] != 0x3a");
307
                if (lastSentinnel[8] != 0x3f)
308
                        logger.warn("lastSentinnel[8] != 0x3f");
309
                if (lastSentinnel[9] != 0x23)
310
                        logger.warn("lastSentinnel[9] != 0x23");
311
                if (lastSentinnel[10] != 0x0b)
312
                        logger.warn("lastSentinnel[10] != 0x0b");
313
                if (lastSentinnel[11] != 0xa0)
314
                        logger.warn("lastSentinnel[11] != 0xa0");
315
                if (lastSentinnel[12] != 0x18)
316
                        logger.warn("lastSentinnel[12] != 0x18");
317
                if (lastSentinnel[13] != 0x30)
318
                        logger.warn("lastSentinnel[13] != 0x30");
319
                if (lastSentinnel[14] != 0x49)
320
                        logger.warn("lastSentinnel[14] != 0x49");
321
                if (lastSentinnel[15] != 0x75)
322
                        logger.warn("lastSentinnel[15] != 0x75");
323
        }
324
        
325
        protected void readDwgClasses2() throws Exception {
326
                int offset = dwgFile.getDwgSectionOffset("CLASSES");
327
                // Por ahora nos saltamos los 16 bytes de control
328
                bb.position(offset + 16);
329
                bb.order(ByteOrder.LITTLE_ENDIAN);
330
                int size = bb.getInt();
331
                byte[] dataBytes = new byte[size];
332
                for (int i = 0; i < dataBytes.length; i++) {
333
                        dataBytes[i] = bb.get();
334
                }
335
                int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
336
                for (int i = 0; i < data.length; i++) {
337
                        data[i] = (byte) ByteUtils.getUnsigned((byte) data[i]);
338
                }
339
                bb.position(bb.position() + 2 + 16);
340
                int maxbit = size * 8;
341
                int bitPos = 0;
342
                while ((bitPos + 8) < maxbit) {
343
                        ArrayList v = DwgUtil.getBitShort(data, bitPos);
344
                        bitPos = ((Integer) v.get(0)).intValue();
345
                        v = DwgUtil.getBitShort(data, bitPos);
346
                        bitPos = ((Integer) v.get(0)).intValue();
347
                        v = DwgUtil.getTextString(data, bitPos);
348
                        bitPos = ((Integer) v.get(0)).intValue();
349
                        v = DwgUtil.getTextString(data, bitPos);
350
                        bitPos = ((Integer) v.get(0)).intValue();
351
                        v = DwgUtil.getTextString(data, bitPos);
352
                        bitPos = ((Integer) v.get(0)).intValue();
353
                        v = DwgUtil.testBit(data, bitPos);
354
                        bitPos = ((Integer) v.get(0)).intValue();
355
                        v = DwgUtil.getBitShort(data, bitPos);
356
                        bitPos = ((Integer) v.get(0)).intValue();
357
                }
358
        }
359

    
360
        /**
361
         * Reads all the object referenced in the object map section of the DWG file
362
         * (using their object file obsets)
363
         */
364
        protected void readDwgObjects() {
365
                for (int i = 0; i < dwgFile.getDwgObjectOffsets().size(); i++) {
366
                        DwgObjectOffset doo = (DwgObjectOffset) dwgFile
367
                                        .getDwgObjectOffsets().get(i);
368
                        
369
                        DwgObject obj = readDwgObject(doo.getOffset(), i);
370
                        /*
371
                         * azabala: las entidades DWG no implementadas no nos aportan nada
372
                         * (aunque la sigo leyendo por si aparecen problemas de puntero de
373
                         * fichero) No considero por tanto los DwgObject if (obj != null) {
374
                         * dwgFile.addDwgObject(obj); }
375
                         *        
376
                         * paco: propongo reconsiderar esto. Si no cargamos todos los objetos
377
                         * podemos tener problemas con las subentities.
378
                         */
379
                        if (obj != null && obj.getClass() != DwgObject.class) {
380
                                dwgFile.addDwgObject(obj);
381
//                            DwgObject superEnt = dwgFile.getDwgSuperEntity(obj);
382
//                            if(superEnt != null){
383
//                              System.out.println(superEnt.getClass().getName() + "(TIPO " +Integer.toHexString(superEnt.getType())+") ES SUPERENTITY DE "+obj.getClass().getName());
384
                            } 
385

    
386
//                        }
387
                }
388
        }
389
        
390

    
391

    
392
        /**
393
         * Reads the header of an object in a DWG file Version 15
394
         * 
395
         * @param data
396
         *            Array of unsigned bytes obtained from the DWG binary file
397
         * @param offset
398
         *            The current bit offset where the value begins
399
         * @return int New offset
400
         */
401
        public int readObjectHeader(int[] data, int offset, DwgObject dwgObject) {
402
                int bitPos = offset;
403
                Integer mode = (Integer) DwgUtil.getBits(data, 2, bitPos);
404
                bitPos = bitPos + 2;
405
                dwgObject.setMode(mode.intValue());
406

    
407
                /*
408
                ArrayList v = DwgUtil.getBitLong(data, bitPos);
409
                bitPos = ((Integer) v.get(0)).intValue();
410
                int rnum = ((Integer) v.get(1)).intValue();
411
                dwgObject.setNumReactors(rnum);
412
                */
413
                ArrayList v = DwgUtil.getBitShort(data, bitPos);
414
                bitPos = ((Integer) v.get(0)).intValue();
415
                int rnum = ((Integer) v.get(1)).intValue();
416
                dwgObject.setNumReactors(rnum);
417
                
418
                v = DwgUtil.testBit(data, bitPos);
419
                bitPos = ((Integer) v.get(0)).intValue();
420
                boolean nolinks = ((Boolean) v.get(1)).booleanValue();
421
                dwgObject.setNoLinks(nolinks);
422

    
423
                v = DwgUtil.getBitShort(data, bitPos);
424
                bitPos = ((Integer) v.get(0)).intValue();
425
                int color = ((Integer) v.get(1)).intValue();
426
                dwgObject.setColor(color);
427

    
428
                v = DwgUtil.getBitDouble(data, bitPos);
429
                bitPos = ((Integer) v.get(0)).intValue();
430
                float ltscale = ((Double) v.get(1)).floatValue();
431

    
432
                Integer ltflag = (Integer) DwgUtil.getBits(data, 2, bitPos);
433
                bitPos = bitPos + 2;
434

    
435
                Integer psflag = (Integer) DwgUtil.getBits(data, 2, bitPos);
436
                bitPos = bitPos + 2;
437

    
438
                v = DwgUtil.getBitShort(data, bitPos);
439
                bitPos = ((Integer) v.get(0)).intValue();
440
                int invis = ((Integer) v.get(1)).intValue();
441

    
442
                v = DwgUtil.getRawChar(data, bitPos);
443
                bitPos = ((Integer) v.get(0)).intValue();
444
                int weight = ((Integer) v.get(1)).intValue();
445

    
446
                return bitPos;
447
        }
448

    
449
        /**
450
         * Reads the tail of an object in a DWG file Version 15
451
         * 
452
         * @param data
453
         *            Array of bytes obtained from the DWG binary file
454
         * @param offset
455
         *            Offset for this array of bytes
456
         * @return int New offset
457
         * @throws CorruptedDwgEntityException 
458
         * @throws RuntimeException 
459
         */
460
        public int readObjectTailer(int[] data, int offset, DwgObject dwgObject) throws RuntimeException, CorruptedDwgEntityException {
461
                int bitPos = offset;
462
                /*
463
                 * Subentity ref handle. Esto se aplica sobre VERTEX, ATTRIB, SEQEND
464
                 */
465
                if (dwgObject.getMode() == 0x0) {
466
                        DwgHandleReference subEntityHandle = new DwgHandleReference();
467
                        bitPos = subEntityHandle.read(data, bitPos);
468
                        dwgObject.setSubEntityHandle(subEntityHandle);
469
//                        System.out.println("subEntityHandle: code = "+subEntityHandle.getCode()+" offset = "+subEntityHandle.getOffset());
470
                }
471

    
472
                /*
473
                 * Reactors handles TODO No se est?n usando para setear nada en
474
                 * DwgObject
475
                 */
476
                DwgHandleReference reactorHandle;
477
                for (int i = 0; i < dwgObject.getNumReactors(); i++) {
478
                        reactorHandle = new DwgHandleReference();
479
                        bitPos = reactorHandle.read(data, bitPos);
480
                        dwgObject.addReactorHandle(reactorHandle);
481
//                        System.out.println("reactorHandle "+i+": code = "+reactorHandle.getCode()+" offset = "+reactorHandle.getOffset());
482
                }
483

    
484
                /*
485
                 * XDICOBJHANDLE
486
                 */
487
                DwgHandleReference xDicObjHandle = new DwgHandleReference();
488
                bitPos = xDicObjHandle.read(data, bitPos);
489
                dwgObject.setXDicObjHandle(xDicObjHandle);
490
//                System.out.println("xDicObjHandle: code = "+xDicObjHandle.getCode()+" offset = "+xDicObjHandle.getOffset());
491
                
492
                /*
493
                 * Layer Handle code
494
                 */
495
                
496
                DwgHandleReference handle = new DwgHandleReference();
497
                bitPos = handle.read(data, bitPos);
498
                dwgObject.setLayerHandle(handle);
499
//                System.out.println("layerHandle: code = "+handle.getCode()+" offset = "+handle.getOffset());
500
                
501
                if (!dwgObject.isNoLinks()) {
502

    
503
                        DwgHandleReference previousHandle = new DwgHandleReference();
504
                        bitPos = previousHandle.read(data, bitPos);
505
                        dwgObject.setPreviousHandle(previousHandle);
506
//                        System.out.println("previousHandle: code = "+previousHandle.getCode()+" offset = "+previousHandle.getOffset());
507
        
508
                        DwgHandleReference nextHandle = new DwgHandleReference();
509
                        bitPos = nextHandle.read(data, bitPos);
510
                        dwgObject.setNextHandle(nextHandle);
511
//                        System.out.println("nextHandle: code = "+nextHandle.getCode()+" offset = "+nextHandle.getOffset());
512

    
513
                }
514

    
515
                if (dwgObject.getLinetypeFlags() == 0x3) {
516
                        DwgHandleReference lineTypeHandle = new DwgHandleReference();
517
                        bitPos = lineTypeHandle.read(data, bitPos);
518
                        dwgObject.setLineTypeHandle(lineTypeHandle);
519
//                        System.out.println("lineTypeHandle: code = "+lineTypeHandle.getCode()+" offset = "+lineTypeHandle.getOffset());
520

    
521
                }
522

    
523
                if (dwgObject.getPlotstyleFlags() == 0x3) {
524
                        DwgHandleReference plotStyleHandle = new DwgHandleReference();
525
                        bitPos = plotStyleHandle.read(data, bitPos);
526
                        dwgObject.setPlotStyleHandle(plotStyleHandle);
527
//                        System.out.println("plotStyleHandle: code = "+plotStyleHandle.getCode()+" offset = "+plotStyleHandle.getOffset());
528

    
529
                }
530
                return bitPos;
531
        }
532

    
533
        /**
534
         * Return a dwg object from its index in the dwg file
535
         * 
536
         * @param index
537
         *            of the requested dwg object in the dwg file
538
         *  
539
         */
540
        public DwgObject getDwgObjectByIndex(int index) {
541
                DwgObjectOffset doo = (DwgObjectOffset) dwgFile.getDwgObjectOffsets()
542
                                .get(index);
543
                return readDwgObject(doo.getOffset(), index);
544
        }
545

    
546
        
547
        /**
548
         * Reads a dwg drawing entity (dwg object) given its offset in the file
549
         */
550

    
551
        protected DwgObject readDwgObject(int offset, int index) {
552
                DwgObject obj = null;
553
                try {
554
                        bb.position(offset);
555
                        int size = DwgUtil.getModularShort(bb);
556

    
557
                        bb.order(ByteOrder.LITTLE_ENDIAN);
558
                        byte[] dataBytes = new byte[size];
559
                        String[] dataMachValString = new String[size];
560
                        int[] data = new int[size];
561
                        for (int i = 0; i < size; i++) {
562
                                dataBytes[i] = bb.get();
563
                                dataMachValString[i] = HexUtil
564
                                                .bytesToHex(new byte[] { dataBytes[i] });
565
                                Integer dataMachValShort = Integer.decode("0x"
566
                                                + dataMachValString[i]);
567
                                data[i] = dataMachValShort.byteValue();
568
                                data[i] = ByteUtils.getUnsigned((byte) data[i]);
569
                        }
570

    
571
                        int bitPos = 0;
572
                        ArrayList v = DwgUtil.getBitShort(data, bitPos);
573
                        bitPos = ((Integer) v.get(0)).intValue();
574
                        int type = ((Integer) v.get(1)).intValue();
575
                        obj = DwgObjectFactory.getInstance().create(type, index);
576
                        if (obj == null) {
577
                                if (type >= 500) {
578
                                        int newIndex = type - 500;
579
                                        if (newIndex < (dwgFile.getDwgClasses().size() - 1)) {
580
                                                DwgClass dwgClass = (DwgClass) dwgFile.getDwgClasses()
581
                                                                .get(newIndex);
582
                                                String dxfEntityName = dwgClass.getDxfName();
583
                                                obj = DwgObjectFactory.getInstance().create(
584
                                                                dxfEntityName, index);
585
                                                if (obj == null) {
586
                                                        logger.info(dxfEntityName
587
                                                                        + " todavia no est? implementado");
588
                                                        return null;
589
                                                }//if
590
                                        }//if newIndex
591
                                        else{
592
                                                return null;
593
                                        }
594
                                }else {
595
                                        logger.info("Encontrado tipo " + type);
596
                                        return null;
597
                                }
598
                        }//if obj == null
599
                        
600
                        
601
                        v = DwgUtil.getRawLong(data, bitPos);
602
                        bitPos = ((Integer) v.get(0)).intValue();
603
                        int objBSize = ((Integer) v.get(1)).intValue();
604
                        obj.setSizeInBits(objBSize);
605

    
606
                        DwgHandleReference entityHandle = new DwgHandleReference();
607
                        bitPos = entityHandle.read(data, bitPos);
608
                        obj.setHandle(entityHandle);
609
//                        System.out.println("entityHandle:code = " + entityHandle.getCode() +" offset = "+entityHandle.getOffset());
610

    
611
                        v = DwgUtil.readExtendedData(data, bitPos);
612
                        bitPos = ((Integer) v.get(0)).intValue();
613
                        ArrayList extData = (ArrayList) v.get(1);
614
                        obj.setExtendedData(extData);
615

    
616
                        boolean gflag = false;
617
                        gflag = obj.isGraphicsFlag();
618
                        if (gflag) {
619
                                //lee un flag boolean
620
                                v = DwgUtil.testBit(data, bitPos);
621
                                bitPos = ((Integer) v.get(0)).intValue();
622
                                boolean val = ((Boolean) v.get(1)).booleanValue();
623
                                //si hay imagen asociada, se lee por completo
624
                                if (val) {
625
                                        v = DwgUtil.getRawLong(data, bitPos);
626
                                        bitPos = ((Integer) v.get(0)).intValue();
627
                                        size = ((Integer) v.get(1)).intValue();
628
                                        int bgSize = size * 8;
629
                                        Integer giData = (Integer) DwgUtil.getBits(data, bgSize,
630
                                                        bitPos);
631
                                        obj.setGraphicData(giData.intValue());
632
                                        bitPos = bitPos + bgSize;
633
                                }
634
                        }
635
                                if(obj.getClass() != DwgObject.class)
636
                                        readSpecificObject(obj, data, bitPos);
637
//                                else
638
//                                        System.out.println("Dwg Object desconocido:"+obj.getType());
639
                } catch (RuntimeException e) {
640
                        e.printStackTrace();
641
                } catch (CorruptedDwgEntityException e) {
642
                        // TODO Auto-generated catch block
643
                        e.printStackTrace();
644
                        return null;        
645
                }
646
                return obj;
647
        }
648

    
649
        /*
650
         * TODO Esto est? pesimamente dise?ado. Cada objeto DwgObject debe tener un
651
         * metodo readSpecificObject(data,bitPos)
652
         *  
653
         */
654
        protected void readSpecificObject(DwgObject obj, int[] data, int bitPos)
655
                        throws RuntimeException, CorruptedDwgEntityException {
656
                        DwgObjectReaderPool pool = DwgObjectReaderPool.getInstance();
657
                        IDwgObjectReader reader = pool.get(obj, "15");
658
                        if(reader != null){
659
                                reader.setFileReader(this);
660
                                reader.readSpecificObj(data, bitPos, obj);
661
                        }else{
662
                                logger.warn("No se ha implementado la lectura de "+obj.getClass().getName()+", code="+obj.getType());
663
                        }
664
        }
665
        
666
        
667
        //TODO PROBAR, ESTA COPIADO A PELO DE DWG13-14. SI VALE, LLEVAR A UNA
668
        //CLASE ABSTRACTA
669
        protected void readHeaders() {
670

    
671
                int offset = dwgFile.getDwgSectionOffset("HEADERS");
672
                bb.position(offset);
673

    
674
                //1? leemos el sentinnel inicial
675
                bb.order(ByteOrder.nativeOrder());
676
                byte[] sentinel = new byte[16];
677
                bb.get(sentinel);
678

    
679
                if (sentinel[0] != 0xcf)
680
                        logger.warn("sentinel[0] != 0xcf");
681
                if (sentinel[1] != 0x7b)
682
                        logger.warn("sentinel[1] != 0x7b");
683
                if (sentinel[2] != 0x1f)
684
                        logger.warn("sentinel[2] != 0x1f");
685
                if (sentinel[3] != 0x23)
686
                        logger.warn("sentinel[3] != 0x23");
687
                if (sentinel[4] != 0xfd)
688
                        logger.warn("sentinel[4] != 0xfd");
689
                if (sentinel[5] != 0xde)
690
                        logger.warn("sentinel[5] != 0xde");
691
                if (sentinel[6] != 0x38)
692
                        logger.warn("sentinel[6] != 0x38");
693
                if (sentinel[7] != 0xa9)
694
                        logger.warn("sentinel[7] != 0xa9");
695
                if (sentinel[8] != 0x5f)
696
                        logger.warn("sentinel[8] != 0x5f");
697
                if (sentinel[9] != 0x7c)
698
                        logger.warn("sentinel[9] != 0x7c");
699
                if (sentinel[10] != 0x68)
700
                        logger.warn("sentinel[10] != 0x68");
701
                if (sentinel[11] != 0xb8)
702
                        logger.warn("sentinel[11] != 0xb8");
703
                if (sentinel[12] != 0x4e)
704
                        logger.warn("sentinel[12] != 0x4e");
705
                if (sentinel[13] != 0x6d)
706
                        logger.warn("sentinel[13] != 0x6d");
707
                if (sentinel[14] != 0x33)
708
                        logger.warn("sentinel[14] != 0x33");
709
                if (sentinel[15] != 0x5f)
710
                        logger.warn("sentinel[15] != 0x5f");
711

    
712
                //2? seguidamente leemos los datos
713
                bb.order(ByteOrder.LITTLE_ENDIAN);
714
                int size = bb.getInt();
715

    
716
                bb.order(ByteOrder.nativeOrder());
717
                byte[] data = new byte[size];
718
                bb.get(data);
719

    
720
                int[] intData = DwgUtil.toIntArray(data);
721

    
722
                //3? a continuacion el CRC de la seccion HEADER
723
                bb.order(ByteOrder.LITTLE_ENDIAN);
724
                short crc = bb.getShort();
725

    
726
                //Por ultimo, el sentinnel final
727
                bb.order(ByteOrder.nativeOrder());
728
                byte[] lastSentinnel = new byte[16];
729
                bb.get(lastSentinnel);
730
                if (lastSentinnel[0] != 0x30)
731
                        logger.warn("lastSentinnel[0] != 0x30");
732
                if (lastSentinnel[1] != 0x84)
733
                        logger.warn("lastSentinnel[1] != 0x84");
734
                if (lastSentinnel[2] != 0xe0)
735
                        logger.warn("lastSentinnel[2] != 0xe0");
736
                if (lastSentinnel[3] != 0xdc)
737
                        logger.warn("lastSentinnel[3] != 0xdc");
738
                if (lastSentinnel[4] != 0x02)
739
                        logger.warn("lastSentinnel[4] != 0x02");
740
                if (lastSentinnel[5] != 0x21)
741
                        logger.warn("lastSentinnel[5] != 0x21");
742
                if (lastSentinnel[6] != 0xc7)
743
                        logger.warn("lastSentinnel[6] != 0xc7");
744
                if (lastSentinnel[7] != 0x56)
745
                        logger.warn("lastSentinnel[7] != 0x56");
746
                if (lastSentinnel[8] != 0xa0)
747
                        logger.warn("lastSentinnel[8] != 0xa0");
748
                if (lastSentinnel[9] != 0x83)
749
                        logger.warn("lastSentinnel[9] != 0x83");
750
                if (lastSentinnel[10] != 0x97)
751
                        logger.warn("lastSentinnel[10] != 0x97");
752
                if (lastSentinnel[11] != 0x47)
753
                        logger.warn("lastSentinnel[11] != 0x47");
754
                if (lastSentinnel[12] != 0xb1)
755
                        logger.warn("lastSentinnel[12] != 0xb1");
756
                if (lastSentinnel[13] != 0x92)
757
                        logger.warn("lastSentinnel[13] != 0x92");
758
                if (lastSentinnel[14] != 0xcc)
759
                        logger.warn("lastSentinnel[14] != 0xcc");
760
                if (lastSentinnel[15] != 0xa0)
761
                        logger.warn("lastSentinnel[15] != 0xa0");
762

    
763
                //Ahora interpretamos los datos en bruto
764
                int bitPos = 0;
765
                try {
766
                        List val = DwgUtil.getBitDouble(intData, bitPos);
767
                        bitPos = ((Integer) val.get(0)).intValue();
768
                        dwgFile.setHeader("VAL1", val.get(1));
769

    
770
                        val = DwgUtil.getBitDouble(intData, bitPos);
771
                        bitPos = ((Integer) val.get(0)).intValue();
772
                        dwgFile.setHeader("VAL2", val.get(1));
773

    
774
                        val = DwgUtil.getBitDouble(intData, bitPos);
775
                        bitPos = ((Integer) val.get(0)).intValue();
776
                        dwgFile.setHeader("VAL3", val.get(1));
777

    
778
                        val = DwgUtil.getBitDouble(intData, bitPos);
779
                        bitPos = ((Integer) val.get(0)).intValue();
780
                        dwgFile.setHeader("VAL4", val.get(1));
781

    
782
                        val = DwgUtil.getTextString(intData, bitPos);
783
                        bitPos = ((Integer) val.get(0)).intValue();
784
                        dwgFile.setHeader("STRING1", val.get(1));
785

    
786
                        val = DwgUtil.getTextString(intData, bitPos);
787
                        bitPos = ((Integer) val.get(0)).intValue();
788
                        dwgFile.setHeader("STRING2", val.get(1));
789

    
790
                        val = DwgUtil.getTextString(intData, bitPos);
791
                        bitPos = ((Integer) val.get(0)).intValue();
792
                        dwgFile.setHeader("STRING3", val.get(1));
793

    
794
                        val = DwgUtil.getTextString(intData, bitPos);
795
                        bitPos = ((Integer) val.get(0)).intValue();
796
                        dwgFile.setHeader("STRING4", val.get(1));
797

    
798
                        val = DwgUtil.getBitLong(intData, bitPos);
799
                        bitPos = ((Integer) val.get(0)).intValue();
800
                        dwgFile.setHeader("LONG1", val.get(1));
801

    
802
                        val = DwgUtil.getBitLong(intData, bitPos);
803
                        bitPos = ((Integer) val.get(0)).intValue();
804
                        dwgFile.setHeader("LONG2", val.get(1));
805

    
806
//                        val = DwgUtil.getBitShort(intData, bitPos);
807
//                        bitPos = ((Integer) val.get(0)).intValue();
808
//                        dwgFile.setHeader("SHORT1", val.get(1));
809

    
810
                        //TODO REFACTORIZAR ESTO PARA USAR DWGHANDLEREFERENCE
811

    
812
                        //TODO Los handle se leen asi??
813
                        val = DwgUtil.getHandle(intData, bitPos);
814
                        bitPos = ((Integer) val.get(0)).intValue();
815
                        dwgFile.setHeader("HANDLE1", val.get(1));
816

    
817
                        val = DwgUtil.testBit(intData, bitPos);
818
                        bitPos = ((Integer) val.get(0)).intValue();
819
                        dwgFile.setHeader("DIMASO", val.get(1));
820

    
821
                        val = DwgUtil.testBit(intData, bitPos);
822
                        bitPos = ((Integer) val.get(0)).intValue();
823
                        dwgFile.setHeader("DIMSHO", val.get(1));
824

    
825
//                        val = DwgUtil.testBit(intData, bitPos);
826
//                        bitPos = ((Integer) val.get(0)).intValue();
827
//                        dwgFile.setHeader("DIMSAV", val.get(1));
828

    
829
                        val = DwgUtil.testBit(intData, bitPos);
830
                        bitPos = ((Integer) val.get(0)).intValue();
831
                        dwgFile.setHeader("PLINEGEN", val.get(1));
832

    
833
                        val = DwgUtil.testBit(intData, bitPos);
834
                        bitPos = ((Integer) val.get(0)).intValue();
835
                        dwgFile.setHeader("ORTHOMODE", val.get(1));
836

    
837
                        val = DwgUtil.testBit(intData, bitPos);
838
                        bitPos = ((Integer) val.get(0)).intValue();
839
                        dwgFile.setHeader("REGENMODE", val.get(1));
840

    
841
                        val = DwgUtil.testBit(intData, bitPos);
842
                        bitPos = ((Integer) val.get(0)).intValue();
843
                        dwgFile.setHeader("FILLMODE", val.get(1));
844

    
845
                        val = DwgUtil.testBit(intData, bitPos);
846
                        bitPos = ((Integer) val.get(0)).intValue();
847
                        dwgFile.setHeader("QTEXTMODE", val.get(1));
848

    
849
                        val = DwgUtil.testBit(intData, bitPos);
850
                        bitPos = ((Integer) val.get(0)).intValue();
851
                        dwgFile.setHeader("PSLTSCALE", val.get(1));
852

    
853
                        val = DwgUtil.testBit(intData, bitPos);
854
                        bitPos = ((Integer) val.get(0)).intValue();
855
                        dwgFile.setHeader("LIMCHECK", val.get(1));
856

    
857
//                        val = DwgUtil.testBit(intData, bitPos);
858
//                        bitPos = ((Integer) val.get(0)).intValue();
859
//                        dwgFile.setHeader("BLIPMODE", val.get(1));
860

    
861
                        val = DwgUtil.testBit(intData, bitPos);
862
                        bitPos = ((Integer) val.get(0)).intValue();
863
                        dwgFile.setHeader("USER_TIMER", val.get(1));
864

    
865
                        val = DwgUtil.testBit(intData, bitPos);
866
                        bitPos = ((Integer) val.get(0)).intValue();
867
                        dwgFile.setHeader("SKPOLY", val.get(1));
868

    
869
                        val = DwgUtil.testBit(intData, bitPos);
870
                        bitPos = ((Integer) val.get(0)).intValue();
871
                        dwgFile.setHeader("ANGDIR", val.get(1));
872

    
873
                        val = DwgUtil.testBit(intData, bitPos);
874
                        bitPos = ((Integer) val.get(0)).intValue();
875
                        dwgFile.setHeader("SPLFRAME", val.get(1));
876

    
877
//                        val = DwgUtil.testBit(intData, bitPos);
878
//                        bitPos = ((Integer) val.get(0)).intValue();
879
//                        dwgFile.setHeader("ATTREQ", val.get(1));
880
//
881
//                        val = DwgUtil.testBit(intData, bitPos);
882
//                        bitPos = ((Integer) val.get(0)).intValue();
883
//                        dwgFile.setHeader("ATTDIA", val.get(1));
884

    
885
                        val = DwgUtil.testBit(intData, bitPos);
886
                        bitPos = ((Integer) val.get(0)).intValue();
887
                        dwgFile.setHeader("MIRRTEXT", val.get(1));
888

    
889
                        val = DwgUtil.testBit(intData, bitPos);
890
                        bitPos = ((Integer) val.get(0)).intValue();
891
                        dwgFile.setHeader("WORLDVIEW", val.get(1));
892

    
893
//                        val = DwgUtil.testBit(intData, bitPos);
894
//                        bitPos = ((Integer) val.get(0)).intValue();
895
//                        dwgFile.setHeader("WIREFRAME", val.get(1));
896

    
897
                        val = DwgUtil.testBit(intData, bitPos);
898
                        bitPos = ((Integer) val.get(0)).intValue();
899
                        dwgFile.setHeader("TILEMODE", val.get(1));
900

    
901
                        val = DwgUtil.testBit(intData, bitPos);
902
                        bitPos = ((Integer) val.get(0)).intValue();
903
                        dwgFile.setHeader("PLIMCHECK", val.get(1));
904

    
905
                        val = DwgUtil.testBit(intData, bitPos);
906
                        bitPos = ((Integer) val.get(0)).intValue();
907
                        dwgFile.setHeader("VISRETAIN", val.get(1));
908

    
909
//                        val = DwgUtil.testBit(intData, bitPos);
910
//                        bitPos = ((Integer) val.get(0)).intValue();
911
//                        dwgFile.setHeader("DELOBJ", val.get(1));
912

    
913
                        val = DwgUtil.testBit(intData, bitPos);
914
                        bitPos = ((Integer) val.get(0)).intValue();
915
                        dwgFile.setHeader("DISPSILH", val.get(1));
916

    
917
                        val = DwgUtil.testBit(intData, bitPos);
918
                        bitPos = ((Integer) val.get(0)).intValue();
919
                        dwgFile.setHeader("PELLISE", val.get(1));
920

    
921
                        val = DwgUtil.getBitShort(intData, bitPos);
922
                        bitPos = ((Integer) val.get(0)).intValue();
923
                        if (dwgFile.getDwgVersion() == "R14")
924
                                dwgFile.setHeader("PROXYGRAPH", val.get(1));
925
                        else
926
                                dwgFile.setHeader("SAVEIMAGES", val.get(1));
927

    
928
//                        val = DwgUtil.getBitShort(intData, bitPos);
929
//                        bitPos = ((Integer) val.get(0)).intValue();
930
//                        dwgFile.setHeader("DRAGMODE", val.get(1));
931

    
932
                        val = DwgUtil.getBitShort(intData, bitPos);
933
                        bitPos = ((Integer) val.get(0)).intValue();
934
                        dwgFile.setHeader("TREEDEPTH", val.get(1));
935

    
936
                        val = DwgUtil.getBitShort(intData, bitPos);
937
                        bitPos = ((Integer) val.get(0)).intValue();
938
                        dwgFile.setHeader("LUNITS", val.get(1));
939

    
940
                        val = DwgUtil.getBitShort(intData, bitPos);
941
                        bitPos = ((Integer) val.get(0)).intValue();
942
                        dwgFile.setHeader("LUPREC", val.get(1));
943

    
944
                        val = DwgUtil.getBitShort(intData, bitPos);
945
                        bitPos = ((Integer) val.get(0)).intValue();
946
                        dwgFile.setHeader("AUNITS", val.get(1));
947

    
948
                        val = DwgUtil.getBitShort(intData, bitPos);
949
                        bitPos = ((Integer) val.get(0)).intValue();
950
                        dwgFile.setHeader("AUPREC", val.get(1));
951

    
952
//                        val = DwgUtil.getBitShort(intData, bitPos);
953
//                        bitPos = ((Integer) val.get(0)).intValue();
954
//                        dwgFile.setHeader("OSMODE", val.get(1));
955

    
956
                        val = DwgUtil.getBitShort(intData, bitPos);
957
                        bitPos = ((Integer) val.get(0)).intValue();
958
                        dwgFile.setHeader("ATTMODE", val.get(1));
959

    
960
//                        val = DwgUtil.getBitShort(intData, bitPos);
961
//                        bitPos = ((Integer) val.get(0)).intValue();
962
//                        dwgFile.setHeader("COORDS", val.get(1));
963

    
964
                        val = DwgUtil.getBitShort(intData, bitPos);
965
                        bitPos = ((Integer) val.get(0)).intValue();
966
                        dwgFile.setHeader("PDMODE", val.get(1));
967

    
968
//                        val = DwgUtil.getBitShort(intData, bitPos);
969
//                        bitPos = ((Integer) val.get(0)).intValue();
970
//                        dwgFile.setHeader("PICKSTYLE", val.get(1));
971

    
972
                        val = DwgUtil.getBitShort(intData, bitPos);
973
                        bitPos = ((Integer) val.get(0)).intValue();
974
                        dwgFile.setHeader("USERI1", val.get(1));
975

    
976
                        val = DwgUtil.getBitShort(intData, bitPos);
977
                        bitPos = ((Integer) val.get(0)).intValue();
978
                        dwgFile.setHeader("USERI2", val.get(1));
979

    
980
                        val = DwgUtil.getBitShort(intData, bitPos);
981
                        bitPos = ((Integer) val.get(0)).intValue();
982
                        dwgFile.setHeader("USERI3", val.get(1));
983

    
984
                        val = DwgUtil.getBitShort(intData, bitPos);
985
                        bitPos = ((Integer) val.get(0)).intValue();
986
                        dwgFile.setHeader("USERI4", val.get(1));
987

    
988
                        val = DwgUtil.getBitShort(intData, bitPos);
989
                        bitPos = ((Integer) val.get(0)).intValue();
990
                        dwgFile.setHeader("USERI5", val.get(1));
991

    
992
                        val = DwgUtil.getBitShort(intData, bitPos);
993
                        bitPos = ((Integer) val.get(0)).intValue();
994
                        dwgFile.setHeader("SPLINESEGS", val.get(1));
995

    
996
                        val = DwgUtil.getBitShort(intData, bitPos);
997
                        bitPos = ((Integer) val.get(0)).intValue();
998
                        dwgFile.setHeader("SURFU", val.get(1));
999

    
1000
                        val = DwgUtil.getBitShort(intData, bitPos);
1001
                        bitPos = ((Integer) val.get(0)).intValue();
1002
                        dwgFile.setHeader("SURFV", val.get(1));
1003

    
1004
                        val = DwgUtil.getBitShort(intData, bitPos);
1005
                        bitPos = ((Integer) val.get(0)).intValue();
1006
                        dwgFile.setHeader("SURFTYPE", val.get(1));
1007

    
1008
                        val = DwgUtil.getBitShort(intData, bitPos);
1009
                        bitPos = ((Integer) val.get(0)).intValue();
1010
                        dwgFile.setHeader("SURFTAB1", val.get(1));
1011

    
1012
                        val = DwgUtil.getBitShort(intData, bitPos);
1013
                        bitPos = ((Integer) val.get(0)).intValue();
1014
                        dwgFile.setHeader("SURFTAB2", val.get(1));
1015

    
1016
                        val = DwgUtil.getBitShort(intData, bitPos);
1017
                        bitPos = ((Integer) val.get(0)).intValue();
1018
                        dwgFile.setHeader("SPLINETYPE", val.get(1));
1019

    
1020
                        val = DwgUtil.getBitShort(intData, bitPos);
1021
                        bitPos = ((Integer) val.get(0)).intValue();
1022
                        dwgFile.setHeader("SHADEDGE", val.get(1));
1023

    
1024
                        val = DwgUtil.getBitShort(intData, bitPos);
1025
                        bitPos = ((Integer) val.get(0)).intValue();
1026
                        dwgFile.setHeader("SHADEDIF", val.get(1));
1027

    
1028
                        val = DwgUtil.getBitShort(intData, bitPos);
1029
                        bitPos = ((Integer) val.get(0)).intValue();
1030
                        dwgFile.setHeader("UNITMODE", val.get(1));
1031

    
1032
                        val = DwgUtil.getBitShort(intData, bitPos);
1033
                        bitPos = ((Integer) val.get(0)).intValue();
1034
                        dwgFile.setHeader("MAXACTVP", val.get(1));
1035

    
1036
                        val = DwgUtil.getBitShort(intData, bitPos);
1037
                        bitPos = ((Integer) val.get(0)).intValue();
1038
                        dwgFile.setHeader("ISOLINES", val.get(1));
1039

    
1040
                        val = DwgUtil.getBitShort(intData, bitPos);
1041
                        bitPos = ((Integer) val.get(0)).intValue();
1042
                        dwgFile.setHeader("CMLJUST", val.get(1));
1043

    
1044
                        val = DwgUtil.getBitShort(intData, bitPos);
1045
                        bitPos = ((Integer) val.get(0)).intValue();
1046
                        dwgFile.setHeader("TEXTQLTY", val.get(1));
1047

    
1048
                        val = DwgUtil.getBitDouble(intData, bitPos);
1049
                        bitPos = ((Integer) val.get(0)).intValue();
1050
                        dwgFile.setHeader("LTSCALE", val.get(1));
1051

    
1052
                        val = DwgUtil.getBitDouble(intData, bitPos);
1053
                        bitPos = ((Integer) val.get(0)).intValue();
1054
                        dwgFile.setHeader("TEXTSIZE", val.get(1));
1055

    
1056
                        val = DwgUtil.getBitDouble(intData, bitPos);
1057
                        bitPos = ((Integer) val.get(0)).intValue();
1058
                        dwgFile.setHeader("TRACEWID", val.get(1));
1059

    
1060
                        val = DwgUtil.getBitDouble(intData, bitPos);
1061
                        bitPos = ((Integer) val.get(0)).intValue();
1062
                        dwgFile.setHeader("SKETCHINC", val.get(1));
1063

    
1064
                        val = DwgUtil.getBitDouble(intData, bitPos);
1065
                        bitPos = ((Integer) val.get(0)).intValue();
1066
                        dwgFile.setHeader("FILLETRAD", val.get(1));
1067

    
1068
                        val = DwgUtil.getBitDouble(intData, bitPos);
1069
                        bitPos = ((Integer) val.get(0)).intValue();
1070
                        dwgFile.setHeader("THICKNESS", val.get(1));
1071

    
1072
                        val = DwgUtil.getBitDouble(intData, bitPos);
1073
                        bitPos = ((Integer) val.get(0)).intValue();
1074
                        dwgFile.setHeader("ANGBASE", val.get(1));
1075

    
1076
                        val = DwgUtil.getBitDouble(intData, bitPos);
1077
                        bitPos = ((Integer) val.get(0)).intValue();
1078
                        dwgFile.setHeader("PDSIZE", val.get(1));
1079

    
1080
                        val = DwgUtil.getBitDouble(intData, bitPos);
1081
                        bitPos = ((Integer) val.get(0)).intValue();
1082
                        dwgFile.setHeader("PLINEWID", val.get(1));
1083

    
1084
                        val = DwgUtil.getBitDouble(intData, bitPos);
1085
                        bitPos = ((Integer) val.get(0)).intValue();
1086
                        dwgFile.setHeader("USERR1", val.get(1));
1087

    
1088
                        val = DwgUtil.getBitDouble(intData, bitPos);
1089
                        bitPos = ((Integer) val.get(0)).intValue();
1090
                        dwgFile.setHeader("USERR2", val.get(1));
1091

    
1092
                        val = DwgUtil.getBitDouble(intData, bitPos);
1093
                        bitPos = ((Integer) val.get(0)).intValue();
1094
                        dwgFile.setHeader("USERR3", val.get(1));
1095

    
1096
                        val = DwgUtil.getBitDouble(intData, bitPos);
1097
                        bitPos = ((Integer) val.get(0)).intValue();
1098
                        dwgFile.setHeader("USERR4", val.get(1));
1099

    
1100
                        val = DwgUtil.getBitDouble(intData, bitPos);
1101
                        bitPos = ((Integer) val.get(0)).intValue();
1102
                        dwgFile.setHeader("USERR5", val.get(1));
1103

    
1104
                        val = DwgUtil.getBitDouble(intData, bitPos);
1105
                        bitPos = ((Integer) val.get(0)).intValue();
1106
                        dwgFile.setHeader("CHAMFERA", val.get(1));
1107

    
1108
                        val = DwgUtil.getBitDouble(intData, bitPos);
1109
                        bitPos = ((Integer) val.get(0)).intValue();
1110
                        dwgFile.setHeader("CHAMFERB", val.get(1));
1111

    
1112
                        val = DwgUtil.getBitDouble(intData, bitPos);
1113
                        bitPos = ((Integer) val.get(0)).intValue();
1114
                        dwgFile.setHeader("CHAMFERC", val.get(1));
1115

    
1116
                        val = DwgUtil.getBitDouble(intData, bitPos);
1117
                        bitPos = ((Integer) val.get(0)).intValue();
1118
                        dwgFile.setHeader("CHAMFERD", val.get(1));
1119

    
1120
                        val = DwgUtil.getBitDouble(intData, bitPos);
1121
                        bitPos = ((Integer) val.get(0)).intValue();
1122
                        dwgFile.setHeader("FACETRES", val.get(1));
1123

    
1124
                        val = DwgUtil.getBitDouble(intData, bitPos);
1125
                        bitPos = ((Integer) val.get(0)).intValue();
1126
                        dwgFile.setHeader("CMLSCALE", val.get(1));
1127

    
1128
                        val = DwgUtil.getBitDouble(intData, bitPos);
1129
                        bitPos = ((Integer) val.get(0)).intValue();
1130
                        dwgFile.setHeader("CELTSCALE", val.get(1));
1131

    
1132
                        val = DwgUtil.getTextString(intData, bitPos);
1133
                        bitPos = ((Integer) val.get(0)).intValue();
1134
                        dwgFile.setHeader("MENUNAME", val.get(1));
1135

    
1136
                        int[] tdcreate = new int[2];
1137
                        val = DwgUtil.getBitLong(intData, bitPos);
1138
                        bitPos = ((Integer) val.get(0)).intValue();
1139
                        tdcreate[0] = ((Integer) val.get(1)).intValue();
1140
                        val = DwgUtil.getBitLong(intData, bitPos);
1141
                        bitPos = ((Integer) val.get(0)).intValue();
1142
                        tdcreate[1] = ((Integer) val.get(1)).intValue();
1143
                        dwgFile.setHeader("TDCREATE", tdcreate);
1144

    
1145
                        int[] tdupdate = new int[2];
1146
                        val = DwgUtil.getBitLong(intData, bitPos);
1147
                        bitPos = ((Integer) val.get(0)).intValue();
1148
                        tdupdate[0] = ((Integer) val.get(1)).intValue();
1149
                        val = DwgUtil.getBitLong(intData, bitPos);
1150
                        bitPos = ((Integer) val.get(0)).intValue();
1151
                        tdupdate[1] = ((Integer) val.get(1)).intValue();
1152
                        dwgFile.setHeader("TDUPDATE", tdupdate);
1153

    
1154
                        int[] tdindwg = new int[2];
1155
                        val = DwgUtil.getBitLong(intData, bitPos);
1156
                        bitPos = ((Integer) val.get(0)).intValue();
1157
                        tdindwg[0] = ((Integer) val.get(1)).intValue();
1158
                        val = DwgUtil.getBitLong(intData, bitPos);
1159
                        bitPos = ((Integer) val.get(0)).intValue();
1160
                        tdindwg[1] = ((Integer) val.get(1)).intValue();
1161
                        dwgFile.setHeader("TDINDWG", tdindwg);
1162

    
1163
                        int[] tdusrtime = new int[2];
1164
                        val = DwgUtil.getBitLong(intData, bitPos);
1165
                        bitPos = ((Integer) val.get(0)).intValue();
1166
                        tdusrtime[0] = ((Integer) val.get(1)).intValue();
1167
                        val = DwgUtil.getBitLong(intData, bitPos);
1168
                        bitPos = ((Integer) val.get(0)).intValue();
1169
                        tdusrtime[1] = ((Integer) val.get(1)).intValue();
1170
                        dwgFile.setHeader("TDUSRTIME", tdusrtime);
1171

    
1172
                        val = DwgUtil.getBitShort(intData, bitPos);
1173
                        bitPos = ((Integer) val.get(0)).intValue();
1174
                        dwgFile.setHeader("CECOLOR", val.get(1));
1175

    
1176
                        val = DwgUtil.getHandle(intData, bitPos);
1177
                        bitPos = ((Integer) val.get(0)).intValue();
1178
                        int intHandle = DwgUtil.handleToInt(val);
1179
                        dwgFile.setHeader("HANDSEED", new Integer(intHandle));
1180

    
1181
                        //creo que CLAYER marca la capa actualmente seleccionada en el menu
1182
                        // de
1183
                        // autocad
1184

    
1185
                        val = DwgUtil.getHandle(intData, bitPos);
1186
                        bitPos = ((Integer) val.get(0)).intValue();
1187
                        intHandle = DwgUtil.handleToInt(val);
1188
                        dwgFile.setHeader("CLAYER", new Integer(intHandle));
1189

    
1190
                        val = DwgUtil.getHandle(intData, bitPos);
1191
                        bitPos = ((Integer) val.get(0)).intValue();
1192
                        intHandle = DwgUtil.handleToInt(val);
1193
                        dwgFile.setHeader("TEXSTYLE", new Integer(intHandle));
1194

    
1195
                        val = DwgUtil.getHandle(intData, bitPos);
1196
                        bitPos = ((Integer) val.get(0)).intValue();
1197
                        intHandle = DwgUtil.handleToInt(val);
1198
                        dwgFile.setHeader("CELLTYPE", new Integer(intHandle));
1199

    
1200
                        val = DwgUtil.getHandle(intData, bitPos);
1201
                        bitPos = ((Integer) val.get(0)).intValue();
1202
                        intHandle = DwgUtil.handleToInt(val);
1203
                        dwgFile.setHeader("DIMSTYLE", new Integer(intHandle));
1204

    
1205
                        val = DwgUtil.getHandle(intData, bitPos);
1206
                        bitPos = ((Integer) val.get(0)).intValue();
1207
                        intHandle = DwgUtil.handleToInt(val);
1208
                        dwgFile.setHeader("CMLSTYLE", new Integer(intHandle));
1209

    
1210
                        //this property is exclusive of DWG 2000
1211
                        val = DwgUtil.getBitDouble(intData, bitPos);
1212
                        bitPos = ((Integer) val.get(0)).intValue();
1213
                        dwgFile.setHeader("PSVPSCALE", val.get(1));
1214
                                                        
1215
                        
1216
                        double[] spaces1 = new double[3];
1217
                        val = DwgUtil.getBitDouble(intData, bitPos);
1218
                        bitPos = ((Integer) val.get(0)).intValue();
1219
                        spaces1[0] = ((Double) val.get(1)).doubleValue();
1220
                        val = DwgUtil.getBitDouble(intData, bitPos);
1221
                        bitPos = ((Integer) val.get(0)).intValue();
1222
                        spaces1[1] = ((Double) val.get(1)).doubleValue();
1223
                        val = DwgUtil.getBitDouble(intData, bitPos);
1224
                        bitPos = ((Integer) val.get(0)).intValue();
1225
                        spaces1[2] = ((Double) val.get(1)).doubleValue();
1226
                        dwgFile.setHeader("PSPACE_INSBASE", spaces1);
1227

    
1228
                        double[] spaces2 = new double[3];
1229
                        val = DwgUtil.getBitDouble(intData, bitPos);
1230
                        bitPos = ((Integer) val.get(0)).intValue();
1231
                        spaces2[0] = ((Double) val.get(1)).doubleValue();
1232
                        val = DwgUtil.getBitDouble(intData, bitPos);
1233
                        bitPos = ((Integer) val.get(0)).intValue();
1234
                        spaces2[1] = ((Double) val.get(1)).doubleValue();
1235
                        val = DwgUtil.getBitDouble(intData, bitPos);
1236
                        bitPos = ((Integer) val.get(0)).intValue();
1237
                        spaces2[2] = ((Double) val.get(1)).doubleValue();
1238
                        dwgFile.setHeader("PSPACE_EXTMIN", spaces2);
1239

    
1240
                        double[] spaces3 = new double[3];
1241
                        val = DwgUtil.getBitDouble(intData, bitPos);
1242
                        bitPos = ((Integer) val.get(0)).intValue();
1243
                        spaces3[0] = ((Double) val.get(1)).doubleValue();
1244
                        val = DwgUtil.getBitDouble(intData, bitPos);
1245
                        bitPos = ((Integer) val.get(0)).intValue();
1246
                        spaces3[1] = ((Double) val.get(1)).doubleValue();
1247
                        val = DwgUtil.getBitDouble(intData, bitPos);
1248
                        bitPos = ((Integer) val.get(0)).intValue();
1249
                        spaces3[2] = ((Double) val.get(1)).doubleValue();
1250
                        dwgFile.setHeader("PSPACE_EXTMAX", spaces2);
1251

    
1252
                        double[] spaces4 = new double[2];
1253
                        val = DwgUtil.getRawDouble(intData, bitPos);
1254
                        bitPos = ((Integer) val.get(0)).intValue();
1255
                        spaces4[0] = ((Double) val.get(1)).doubleValue();
1256
                        val = DwgUtil.getRawDouble(intData, bitPos);
1257
                        bitPos = ((Integer) val.get(0)).intValue();
1258
                        spaces4[1] = ((Double) val.get(1)).doubleValue();
1259
                        dwgFile.setHeader("PSPACE_LIMMIN", spaces4);
1260

    
1261
                        double[] spaces5 = new double[2];
1262
                        val = DwgUtil.getRawDouble(intData, bitPos);
1263
                        bitPos = ((Integer) val.get(0)).intValue();
1264
                        spaces5[0] = ((Double) val.get(1)).doubleValue();
1265
                        val = DwgUtil.getRawDouble(intData, bitPos);
1266
                        bitPos = ((Integer) val.get(0)).intValue();
1267
                        spaces5[1] = ((Double) val.get(1)).doubleValue();
1268
                        dwgFile.setHeader("PSPACE_LIMMAX", spaces5);
1269

    
1270
                        val = DwgUtil.getBitDouble(intData, bitPos);
1271
                        bitPos = ((Integer) val.get(0)).intValue();
1272
                        dwgFile.setHeader("PSPACE_ELEVATION", val.get(1));
1273

    
1274
                        double[] spaces6 = new double[6];
1275
                        val = DwgUtil.getBitDouble(intData, bitPos);
1276
                        bitPos = ((Integer) val.get(0)).intValue();
1277
                        spaces6[0] = ((Double) val.get(1)).doubleValue();
1278
                        val = DwgUtil.getBitDouble(intData, bitPos);
1279
                        bitPos = ((Integer) val.get(0)).intValue();
1280
                        spaces6[1] = ((Double) val.get(1)).doubleValue();
1281
                        val = DwgUtil.getBitDouble(intData, bitPos);
1282
                        bitPos = ((Integer) val.get(0)).intValue();
1283
                        spaces6[2] = ((Double) val.get(1)).doubleValue();
1284
                        dwgFile.setHeader("PSPACE_UCSORG", spaces6);
1285

    
1286
                        double[] spaces7 = new double[6];
1287
                        val = DwgUtil.getBitDouble(intData, bitPos);
1288
                        bitPos = ((Integer) val.get(0)).intValue();
1289
                        spaces7[0] = ((Double) val.get(1)).doubleValue();
1290
                        val = DwgUtil.getBitDouble(intData, bitPos);
1291
                        bitPos = ((Integer) val.get(0)).intValue();
1292
                        spaces7[1] = ((Double) val.get(1)).doubleValue();
1293
                        val = DwgUtil.getBitDouble(intData, bitPos);
1294
                        bitPos = ((Integer) val.get(0)).intValue();
1295
                        spaces7[2] = ((Double) val.get(1)).doubleValue();
1296
                        dwgFile.setHeader("PSPACE_UCSXDIR", spaces7);
1297

    
1298
                        double[] spaces8 = new double[6];
1299
                        val = DwgUtil.getBitDouble(intData, bitPos);
1300
                        bitPos = ((Integer) val.get(0)).intValue();
1301
                        spaces8[0] = ((Double) val.get(1)).doubleValue();
1302
                        val = DwgUtil.getBitDouble(intData, bitPos);
1303
                        bitPos = ((Integer) val.get(0)).intValue();
1304
                        spaces8[1] = ((Double) val.get(1)).doubleValue();
1305
                        val = DwgUtil.getBitDouble(intData, bitPos);
1306
                        bitPos = ((Integer) val.get(0)).intValue();
1307
                        spaces8[2] = ((Double) val.get(1)).doubleValue();
1308
                        dwgFile.setHeader("PSPACE_UCSYDIR", spaces8);
1309

    
1310
                        val = DwgUtil.getHandle(intData, bitPos);
1311
                        bitPos = ((Integer) val.get(0)).intValue();
1312
                        intHandle = DwgUtil.handleToInt(val);
1313
                        dwgFile.setHeader("PSPACE_UCSNAME", new Integer(intHandle));
1314

    
1315
                        ///DWG 2000 ONLY
1316
                        
1317
                        val = DwgUtil.getHandle(intData, bitPos);
1318
                        bitPos = ((Integer) val.get(0)).intValue();
1319
                        intHandle = DwgUtil.handleToInt(val);
1320
                        dwgFile.setHeader("PUCSBASE", new Integer(intHandle));
1321
                        
1322
                        val = DwgUtil.getBitShort(intData, bitPos);
1323
                        bitPos = ((Integer) val.get(0)).intValue();
1324
                        dwgFile.setHeader("PUCSBASE", val.get(1));
1325
                        
1326
                        val = DwgUtil.getHandle(intData, bitPos);
1327
                        bitPos = ((Integer) val.get(0)).intValue();
1328
                        intHandle = DwgUtil.handleToInt(val);
1329
                        dwgFile.setHeader("PUCSORTHOREF", new Integer(intHandle));
1330
                        
1331
                        double[] pucsorgtop = new double[3];
1332
                        val = DwgUtil.getBitDouble(intData, bitPos);
1333
                        bitPos = ((Integer) val.get(0)).intValue();
1334
                        pucsorgtop[0] = ((Double) val.get(1)).doubleValue();
1335
                        val = DwgUtil.getBitDouble(intData, bitPos);
1336
                        bitPos = ((Integer) val.get(0)).intValue();
1337
                        pucsorgtop[1] = ((Double) val.get(1)).doubleValue();
1338
                        val = DwgUtil.getBitDouble(intData, bitPos);
1339
                        bitPos = ((Integer) val.get(0)).intValue();
1340
                        pucsorgtop[2] = ((Double) val.get(1)).doubleValue();
1341
                        dwgFile.setHeader("PUCSORGTOP", pucsorgtop);
1342
                                
1343
                        double[] pucsorgbottom = new double[3];
1344
                        val = DwgUtil.getBitDouble(intData, bitPos);
1345
                        bitPos = ((Integer) val.get(0)).intValue();
1346
                        pucsorgbottom[0] = ((Double) val.get(1)).doubleValue();
1347
                        val = DwgUtil.getBitDouble(intData, bitPos);
1348
                        bitPos = ((Integer) val.get(0)).intValue();
1349
                        pucsorgbottom[1] = ((Double) val.get(1)).doubleValue();
1350
                        val = DwgUtil.getBitDouble(intData, bitPos);
1351
                        bitPos = ((Integer) val.get(0)).intValue();
1352
                        pucsorgbottom[2] = ((Double) val.get(1)).doubleValue();
1353
                        dwgFile.setHeader("PUCSORGBOTTOM", pucsorgbottom);
1354
                        
1355
                        double[] pucsorgleft = new double[3];
1356
                        val = DwgUtil.getBitDouble(intData, bitPos);
1357
                        bitPos = ((Integer) val.get(0)).intValue();
1358
                        pucsorgleft[0] = ((Double) val.get(1)).doubleValue();
1359
                        val = DwgUtil.getBitDouble(intData, bitPos);
1360
                        bitPos = ((Integer) val.get(0)).intValue();
1361
                        pucsorgleft[1] = ((Double) val.get(1)).doubleValue();
1362
                        val = DwgUtil.getBitDouble(intData, bitPos);
1363
                        bitPos = ((Integer) val.get(0)).intValue();
1364
                        pucsorgleft[2] = ((Double) val.get(1)).doubleValue();
1365
                        dwgFile.setHeader("PUCSORGLEFT", pucsorgleft);
1366
                                
1367
                        double[] pucsorgright = new double[3];
1368
                        val = DwgUtil.getBitDouble(intData, bitPos);
1369
                        bitPos = ((Integer) val.get(0)).intValue();
1370
                        pucsorgright[0] = ((Double) val.get(1)).doubleValue();
1371
                        val = DwgUtil.getBitDouble(intData, bitPos);
1372
                        bitPos = ((Integer) val.get(0)).intValue();
1373
                        pucsorgright[1] = ((Double) val.get(1)).doubleValue();
1374
                        val = DwgUtil.getBitDouble(intData, bitPos);
1375
                        bitPos = ((Integer) val.get(0)).intValue();
1376
                        pucsorgright[2] = ((Double) val.get(1)).doubleValue();
1377
                        dwgFile.setHeader("PUCSORGRIGHT", pucsorgright);
1378
                        
1379
                        double[] pucsorgfront = new double[3];
1380
                        val = DwgUtil.getBitDouble(intData, bitPos);
1381
                        bitPos = ((Integer) val.get(0)).intValue();
1382
                        pucsorgfront[0] = ((Double) val.get(1)).doubleValue();
1383
                        val = DwgUtil.getBitDouble(intData, bitPos);
1384
                        bitPos = ((Integer) val.get(0)).intValue();
1385
                        pucsorgfront[1] = ((Double) val.get(1)).doubleValue();
1386
                        val = DwgUtil.getBitDouble(intData, bitPos);
1387
                        bitPos = ((Integer) val.get(0)).intValue();
1388
                        pucsorgfront[2] = ((Double) val.get(1)).doubleValue();
1389
                        dwgFile.setHeader("PUCSORGFRONT", pucsorgfront);
1390
                        
1391
                        double[] pucsorgback = new double[3];
1392
                        val = DwgUtil.getBitDouble(intData, bitPos);
1393
                        bitPos = ((Integer) val.get(0)).intValue();
1394
                        pucsorgback[0] = ((Double) val.get(1)).doubleValue();
1395
                        val = DwgUtil.getBitDouble(intData, bitPos);
1396
                        bitPos = ((Integer) val.get(0)).intValue();
1397
                        pucsorgback[1] = ((Double) val.get(1)).doubleValue();
1398
                        val = DwgUtil.getBitDouble(intData, bitPos);
1399
                        bitPos = ((Integer) val.get(0)).intValue();
1400
                        pucsorgback[2] = ((Double) val.get(1)).doubleValue();
1401
                        dwgFile.setHeader("PUCSORGBACK", pucsorgback);        
1402
                                
1403
                        
1404
                        //COMMON
1405
                        double[] spaces9 = new double[6];
1406
                        val = DwgUtil.getBitDouble(intData, bitPos);
1407
                        bitPos = ((Integer) val.get(0)).intValue();
1408
                        spaces9[0] = ((Double) val.get(1)).doubleValue();
1409
                        val = DwgUtil.getBitDouble(intData, bitPos);
1410
                        bitPos = ((Integer) val.get(0)).intValue();
1411
                        spaces9[1] = ((Double) val.get(1)).doubleValue();
1412
                        val = DwgUtil.getBitDouble(intData, bitPos);
1413
                        bitPos = ((Integer) val.get(0)).intValue();
1414
                        spaces9[2] = ((Double) val.get(1)).doubleValue();
1415
                        dwgFile.setHeader("MSPACE_INSBASE", spaces9);
1416

    
1417
                        double[] spaces10 = new double[6];
1418
                        val = DwgUtil.getBitDouble(intData, bitPos);
1419
                        bitPos = ((Integer) val.get(0)).intValue();
1420
                        spaces10[0] = ((Double) val.get(1)).doubleValue();
1421
                        val = DwgUtil.getBitDouble(intData, bitPos);
1422
                        bitPos = ((Integer) val.get(0)).intValue();
1423
                        spaces10[1] = ((Double) val.get(1)).doubleValue();
1424
                        val = DwgUtil.getBitDouble(intData, bitPos);
1425
                        bitPos = ((Integer) val.get(0)).intValue();
1426
                        spaces10[2] = ((Double) val.get(1)).doubleValue();
1427
                        dwgFile.setHeader("MSPACE_EXTMIN", spaces10);
1428

    
1429
                        double[] spaces11 = new double[3];
1430
                        val = DwgUtil.getBitDouble(intData, bitPos);
1431
                        bitPos = ((Integer) val.get(0)).intValue();
1432
                        spaces11[0] = ((Double) val.get(1)).doubleValue();
1433
                        val = DwgUtil.getBitDouble(intData, bitPos);
1434
                        bitPos = ((Integer) val.get(0)).intValue();
1435
                        spaces11[1] = ((Double) val.get(1)).doubleValue();
1436
                        val = DwgUtil.getBitDouble(intData, bitPos);
1437
                        bitPos = ((Integer) val.get(0)).intValue();
1438
                        spaces11[2] = ((Double) val.get(1)).doubleValue();
1439
                        dwgFile.setHeader("MSPACE_EXTMAX", spaces11);
1440

    
1441
                        double[] spaces12 = new double[2];
1442
                        val = DwgUtil.getRawDouble(intData, bitPos);
1443
                        bitPos = ((Integer) val.get(0)).intValue();
1444
                        spaces12[0] = ((Double) val.get(1)).doubleValue();
1445
                        val = DwgUtil.getRawDouble(intData, bitPos);
1446
                        bitPos = ((Integer) val.get(0)).intValue();
1447
                        spaces12[1] = ((Double) val.get(1)).doubleValue();
1448
                        dwgFile.setHeader("MSPACE_LIMMIN", spaces12);
1449

    
1450
                        double[] spaces13 = new double[2];
1451
                        val = DwgUtil.getRawDouble(intData, bitPos);
1452
                        bitPos = ((Integer) val.get(0)).intValue();
1453
                        spaces13[0] = ((Double) val.get(1)).doubleValue();
1454
                        val = DwgUtil.getRawDouble(intData, bitPos);
1455
                        bitPos = ((Integer) val.get(0)).intValue();
1456
                        spaces13[1] = ((Double) val.get(1)).doubleValue();
1457
                        dwgFile.setHeader("MSPACE_LIMMAX", spaces13);
1458

    
1459
                        val = DwgUtil.getBitDouble(intData, bitPos);
1460
                        bitPos = ((Integer) val.get(0)).intValue();
1461
                        dwgFile.setHeader("MSPACE_ELEVATION", (Double) val.get(1));
1462

    
1463
                        double[] spaces14 = new double[3];
1464
                        val = DwgUtil.getBitDouble(intData, bitPos);
1465
                        bitPos = ((Integer) val.get(0)).intValue();
1466
                        spaces14[0] = ((Double) val.get(1)).doubleValue();
1467
                        val = DwgUtil.getBitDouble(intData, bitPos);
1468
                        bitPos = ((Integer) val.get(0)).intValue();
1469
                        spaces14[1] = ((Double) val.get(1)).doubleValue();
1470
                        val = DwgUtil.getBitDouble(intData, bitPos);
1471
                        bitPos = ((Integer) val.get(0)).intValue();
1472
                        spaces14[2] = ((Double) val.get(1)).doubleValue();
1473
                        dwgFile.setHeader("MSPACE_UCSORG", spaces14);
1474

    
1475
                        double[] spaces15 = new double[3];
1476
                        val = DwgUtil.getBitDouble(intData, bitPos);
1477
                        bitPos = ((Integer) val.get(0)).intValue();
1478
                        spaces15[0] = ((Double) val.get(1)).doubleValue();
1479
                        val = DwgUtil.getBitDouble(intData, bitPos);
1480
                        bitPos = ((Integer) val.get(0)).intValue();
1481
                        spaces15[1] = ((Double) val.get(1)).doubleValue();
1482
                        val = DwgUtil.getBitDouble(intData, bitPos);
1483
                        bitPos = ((Integer) val.get(0)).intValue();
1484
                        spaces15[2] = ((Double) val.get(1)).doubleValue();
1485
                        dwgFile.setHeader("MSPACE_UCSXDIR", spaces15);
1486

    
1487
                        double[] spaces16 = new double[3];
1488
                        val = DwgUtil.getBitDouble(intData, bitPos);
1489
                        bitPos = ((Integer) val.get(0)).intValue();
1490
                        spaces16[0] = ((Double) val.get(1)).doubleValue();
1491
                        val = DwgUtil.getBitDouble(intData, bitPos);
1492
                        bitPos = ((Integer) val.get(0)).intValue();
1493
                        spaces16[1] = ((Double) val.get(1)).doubleValue();
1494
                        val = DwgUtil.getBitDouble(intData, bitPos);
1495
                        bitPos = ((Integer) val.get(0)).intValue();
1496
                        spaces16[2] = ((Double) val.get(1)).doubleValue();
1497
                        dwgFile.setHeader("MSPACE_UCSYDIR", spaces16);
1498

    
1499
                        val = DwgUtil.getHandle(intData, bitPos);
1500
                        bitPos = ((Integer) val.get(0)).intValue();
1501
                        intHandle = DwgUtil.handleToInt(val);
1502
                        dwgFile.setHeader("MSPACE_UCSNAME", new Integer(intHandle));
1503

    
1504
                        //DWG 2000
1505
                        
1506
                        val = DwgUtil.getHandle(intData, bitPos);
1507
                        bitPos = ((Integer) val.get(0)).intValue();
1508
                        intHandle = DwgUtil.handleToInt(val);
1509
                        dwgFile.setHeader("UCSBASE", new Integer(intHandle));
1510
                        
1511
                        val = DwgUtil.getBitShort(intData, bitPos);
1512
                        bitPos = ((Integer) val.get(0)).intValue();
1513
                        dwgFile.setHeader("UCSORTHOVIEW", val.get(1));
1514
                        
1515
                        val = DwgUtil.getHandle(intData, bitPos);
1516
                        bitPos = ((Integer) val.get(0)).intValue();
1517
                        intHandle = DwgUtil.handleToInt(val);
1518
                        dwgFile.setHeader("UCSORTHOREF", new Integer(intHandle));
1519
                        
1520
                        double[] ucsorgtop = new double[3];
1521
                        val = DwgUtil.getBitDouble(intData, bitPos);
1522
                        bitPos = ((Integer) val.get(0)).intValue();
1523
                        ucsorgtop[0] = ((Double) val.get(1)).doubleValue();
1524
                        val = DwgUtil.getBitDouble(intData, bitPos);
1525
                        bitPos = ((Integer) val.get(0)).intValue();
1526
                        ucsorgtop[1] = ((Double) val.get(1)).doubleValue();
1527
                        val = DwgUtil.getBitDouble(intData, bitPos);
1528
                        bitPos = ((Integer) val.get(0)).intValue();
1529
                        ucsorgtop[2] = ((Double) val.get(1)).doubleValue();
1530
                        dwgFile.setHeader("UCSORGTOP", ucsorgtop);        
1531
                        
1532
                        double[] ucsorgbottom = new double[3];
1533
                        val = DwgUtil.getBitDouble(intData, bitPos);
1534
                        bitPos = ((Integer) val.get(0)).intValue();
1535
                        ucsorgbottom[0] = ((Double) val.get(1)).doubleValue();
1536
                        val = DwgUtil.getBitDouble(intData, bitPos);
1537
                        bitPos = ((Integer) val.get(0)).intValue();
1538
                        ucsorgbottom[1] = ((Double) val.get(1)).doubleValue();
1539
                        val = DwgUtil.getBitDouble(intData, bitPos);
1540
                        bitPos = ((Integer) val.get(0)).intValue();
1541
                        ucsorgbottom[2] = ((Double) val.get(1)).doubleValue();
1542
                        dwgFile.setHeader("UCSORGBOTTOM", ucsorgbottom);
1543
                        
1544
                        double[] ucsorgleft = new double[3];
1545
                        val = DwgUtil.getBitDouble(intData, bitPos);
1546
                        bitPos = ((Integer) val.get(0)).intValue();
1547
                        ucsorgleft[0] = ((Double) val.get(1)).doubleValue();
1548
                        val = DwgUtil.getBitDouble(intData, bitPos);
1549
                        bitPos = ((Integer) val.get(0)).intValue();
1550
                        ucsorgleft[1] = ((Double) val.get(1)).doubleValue();
1551
                        val = DwgUtil.getBitDouble(intData, bitPos);
1552
                        bitPos = ((Integer) val.get(0)).intValue();
1553
                        ucsorgleft[2] = ((Double) val.get(1)).doubleValue();
1554
                        dwgFile.setHeader("UCSORGLEFT", ucsorgleft);        
1555
                        
1556
                        double[] ucsorgright = new double[3];
1557
                        val = DwgUtil.getBitDouble(intData, bitPos);
1558
                        bitPos = ((Integer) val.get(0)).intValue();
1559
                        ucsorgright[0] = ((Double) val.get(1)).doubleValue();
1560
                        val = DwgUtil.getBitDouble(intData, bitPos);
1561
                        bitPos = ((Integer) val.get(0)).intValue();
1562
                        ucsorgright[1] = ((Double) val.get(1)).doubleValue();
1563
                        val = DwgUtil.getBitDouble(intData, bitPos);
1564
                        bitPos = ((Integer) val.get(0)).intValue();
1565
                        ucsorgright[2] = ((Double) val.get(1)).doubleValue();
1566
                        dwgFile.setHeader("UCSORGRIGHT", ucsorgright);        
1567
                        
1568
                        double[] ucsorgfront = new double[3];
1569
                        val = DwgUtil.getBitDouble(intData, bitPos);
1570
                        bitPos = ((Integer) val.get(0)).intValue();
1571
                        ucsorgfront[0] = ((Double) val.get(1)).doubleValue();
1572
                        val = DwgUtil.getBitDouble(intData, bitPos);
1573
                        bitPos = ((Integer) val.get(0)).intValue();
1574
                        ucsorgfront[1] = ((Double) val.get(1)).doubleValue();
1575
                        val = DwgUtil.getBitDouble(intData, bitPos);
1576
                        bitPos = ((Integer) val.get(0)).intValue();
1577
                        ucsorgfront[2] = ((Double) val.get(1)).doubleValue();
1578
                        dwgFile.setHeader("UCSORGFRONT", ucsorgfront);        
1579
                        
1580
                        double[] ucsorgback = new double[3];
1581
                        val = DwgUtil.getBitDouble(intData, bitPos);
1582
                        bitPos = ((Integer) val.get(0)).intValue();
1583
                        ucsorgback[0] = ((Double) val.get(1)).doubleValue();
1584
                        val = DwgUtil.getBitDouble(intData, bitPos);
1585
                        bitPos = ((Integer) val.get(0)).intValue();
1586
                        ucsorgback[1] = ((Double) val.get(1)).doubleValue();
1587
                        val = DwgUtil.getBitDouble(intData, bitPos);
1588
                        bitPos = ((Integer) val.get(0)).intValue();
1589
                        ucsorgback[2] = ((Double) val.get(1)).doubleValue();
1590
                        dwgFile.setHeader("UCSORGBACK", ucsorgback);        
1591
                        
1592
                        val = DwgUtil.getTextString(intData, bitPos);
1593
                        bitPos = ((Integer) val.get(0)).intValue();
1594
                        dwgFile.setHeader("DIMPOST", val.get(1));        
1595
                                
1596
                        val = DwgUtil.getTextString(intData, bitPos);
1597
                        bitPos = ((Integer) val.get(0)).intValue();
1598
                        dwgFile.setHeader("DIMAPOST", val.get(1));        
1599
                        
1600
                                
1601
                        //Not readed in dwg 2000
1602
                        
1603
//                        val = DwgUtil.testBit(intData, bitPos);
1604
//                        bitPos = ((Integer) val.get(0)).intValue();
1605
//                        dwgFile.setHeader("DIMTOL", val.get(1));
1606
//
1607
//                        val = DwgUtil.testBit(intData, bitPos);
1608
//                        bitPos = ((Integer) val.get(0)).intValue();
1609
//                        dwgFile.setHeader("DIMLIM", val.get(1));
1610
//
1611
//                        val = DwgUtil.testBit(intData, bitPos);
1612
//                        bitPos = ((Integer) val.get(0)).intValue();
1613
//                        dwgFile.setHeader("DIMTIH", val.get(1));
1614
//
1615
//                        val = DwgUtil.testBit(intData, bitPos);
1616
//                        bitPos = ((Integer) val.get(0)).intValue();
1617
//                        dwgFile.setHeader("DIMTOH", val.get(1));
1618
//
1619
//                        val = DwgUtil.testBit(intData, bitPos);
1620
//                        bitPos = ((Integer) val.get(0)).intValue();
1621
//                        dwgFile.setHeader("DIMSE1", val.get(1));
1622
//
1623
//                        val = DwgUtil.testBit(intData, bitPos);
1624
//                        bitPos = ((Integer) val.get(0)).intValue();
1625
//                        dwgFile.setHeader("DIMTSE2", val.get(1));
1626
//
1627
//                        val = DwgUtil.testBit(intData, bitPos);
1628
//                        bitPos = ((Integer) val.get(0)).intValue();
1629
//                        dwgFile.setHeader("DIMALT", val.get(1));
1630
//
1631
//                        val = DwgUtil.testBit(intData, bitPos);
1632
//                        bitPos = ((Integer) val.get(0)).intValue();
1633
//                        dwgFile.setHeader("DIMTOFL", val.get(1));
1634
//
1635
//                        val = DwgUtil.testBit(intData, bitPos);
1636
//                        bitPos = ((Integer) val.get(0)).intValue();
1637
//                        dwgFile.setHeader("DIMSAH", val.get(1));
1638
//
1639
//                        val = DwgUtil.testBit(intData, bitPos);
1640
//                        bitPos = ((Integer) val.get(0)).intValue();
1641
//                        dwgFile.setHeader("DIMTIX", val.get(1));
1642
//
1643
//                        val = DwgUtil.testBit(intData, bitPos);
1644
//                        bitPos = ((Integer) val.get(0)).intValue();
1645
//                        dwgFile.setHeader("DIMSOXD", val.get(1));
1646
//
1647
//                        val = DwgUtil.getRawChar(intData, bitPos);
1648
//                        bitPos = ((Integer) val.get(0)).intValue();
1649
//                        dwgFile.setHeader("DIMALTD", val.get(1));
1650
//
1651
//                        val = DwgUtil.getRawChar(intData, bitPos);
1652
//                        bitPos = ((Integer) val.get(0)).intValue();
1653
//                        dwgFile.setHeader("DIMZIN", val.get(1));
1654
//
1655
//                        val = DwgUtil.testBit(intData, bitPos);
1656
//                        bitPos = ((Integer) val.get(0)).intValue();
1657
//                        dwgFile.setHeader("DIMSD1", val.get(1));
1658
//
1659
//                        val = DwgUtil.testBit(intData, bitPos);
1660
//                        bitPos = ((Integer) val.get(0)).intValue();
1661
//                        dwgFile.setHeader("DIMSD2", val.get(1));
1662
//
1663
//                        val = DwgUtil.getRawChar(intData, bitPos);
1664
//                        bitPos = ((Integer) val.get(0)).intValue();
1665
//                        dwgFile.setHeader("DIMTOLJ", val.get(1));
1666
//
1667
//                        val = DwgUtil.getRawChar(intData, bitPos);
1668
//                        bitPos = ((Integer) val.get(0)).intValue();
1669
//                        dwgFile.setHeader("DIMJUST", val.get(1));
1670
//
1671
//                        val = DwgUtil.getRawChar(intData, bitPos);
1672
//                        bitPos = ((Integer) val.get(0)).intValue();
1673
//                        dwgFile.setHeader("DIMFINT", val.get(1));
1674
//
1675
//                        val = DwgUtil.testBit(intData, bitPos);
1676
//                        bitPos = ((Integer) val.get(0)).intValue();
1677
//                        dwgFile.setHeader("DIMUPT", val.get(1));
1678
//
1679
//                        val = DwgUtil.getRawChar(intData, bitPos);
1680
//                        bitPos = ((Integer) val.get(0)).intValue();
1681
//                        dwgFile.setHeader("DIMZIN", val.get(1));
1682
//
1683
//                        val = DwgUtil.getRawChar(intData, bitPos);
1684
//                        bitPos = ((Integer) val.get(0)).intValue();
1685
//                        dwgFile.setHeader("DIMALTZ", val.get(1));
1686
//
1687
//                        val = DwgUtil.getRawChar(intData, bitPos);
1688
//                        bitPos = ((Integer) val.get(0)).intValue();
1689
//                        dwgFile.setHeader("DIMALTTZ", val.get(1));
1690
//
1691
//                        val = DwgUtil.getRawChar(intData, bitPos);
1692
//                        bitPos = ((Integer) val.get(0)).intValue();
1693
//                        dwgFile.setHeader("DIMTAD", val.get(1));
1694
//
1695
//                        val = DwgUtil.getBitShort(intData, bitPos);
1696
//                        bitPos = ((Integer) val.get(0)).intValue();
1697
//                        dwgFile.setHeader("DIMUNIT", val.get(1));
1698
//
1699
//                        val = DwgUtil.getBitShort(intData, bitPos);
1700
//                        bitPos = ((Integer) val.get(0)).intValue();
1701
//                        dwgFile.setHeader("DIMAUNIT", val.get(1));
1702
//
1703
//                        val = DwgUtil.getBitShort(intData, bitPos);
1704
//                        bitPos = ((Integer) val.get(0)).intValue();
1705
//                        dwgFile.setHeader("DIMDEC", val.get(1));
1706
//
1707
//                        val = DwgUtil.getBitShort(intData, bitPos);
1708
//                        bitPos = ((Integer) val.get(0)).intValue();
1709
//                        dwgFile.setHeader("DIMTDEC", val.get(1));
1710
//
1711
//                        val = DwgUtil.getBitShort(intData, bitPos);
1712
//                        bitPos = ((Integer) val.get(0)).intValue();
1713
//                        dwgFile.setHeader("DIMALTU", val.get(1));
1714
//
1715
//                        val = DwgUtil.getBitShort(intData, bitPos);
1716
//                        bitPos = ((Integer) val.get(0)).intValue();
1717
//                        dwgFile.setHeader("DIMALTTD", val.get(1));
1718
//
1719
//                        val = DwgUtil.getHandle(intData, bitPos);
1720
//                        bitPos = ((Integer) val.get(0)).intValue();
1721
//                        intHandle = DwgUtil.handleToInt(val);
1722
//                        dwgFile.setHeader("DIMTXSTY", new Integer(intHandle));
1723

    
1724
                        val = DwgUtil.getBitDouble(intData, bitPos);
1725
                        bitPos = ((Integer) val.get(0)).intValue();
1726
                        dwgFile.setHeader("DIMSCALE", val.get(1));
1727

    
1728
                        val = DwgUtil.getBitDouble(intData, bitPos);
1729
                        bitPos = ((Integer) val.get(0)).intValue();
1730
                        dwgFile.setHeader("DIMASZ", val.get(1));
1731

    
1732
                        val = DwgUtil.getBitDouble(intData, bitPos);
1733
                        bitPos = ((Integer) val.get(0)).intValue();
1734
                        dwgFile.setHeader("DIMEXO", val.get(1));
1735

    
1736
                        val = DwgUtil.getBitDouble(intData, bitPos);
1737
                        bitPos = ((Integer) val.get(0)).intValue();
1738
                        dwgFile.setHeader("DIMDLI", val.get(1));
1739

    
1740
                        val = DwgUtil.getBitDouble(intData, bitPos);
1741
                        bitPos = ((Integer) val.get(0)).intValue();
1742
                        dwgFile.setHeader("DIMEXE", val.get(1));
1743

    
1744
                        val = DwgUtil.getBitDouble(intData, bitPos);
1745
                        bitPos = ((Integer) val.get(0)).intValue();
1746
                        dwgFile.setHeader("DIMAND", val.get(1));
1747

    
1748
                        val = DwgUtil.getBitDouble(intData, bitPos);
1749
                        bitPos = ((Integer) val.get(0)).intValue();
1750
                        dwgFile.setHeader("DIMDLE", val.get(1));
1751

    
1752
                        val = DwgUtil.getBitDouble(intData, bitPos);
1753
                        bitPos = ((Integer) val.get(0)).intValue();
1754
                        dwgFile.setHeader("DIMTP", val.get(1));
1755

    
1756
                        val = DwgUtil.getBitDouble(intData, bitPos);
1757
                        bitPos = ((Integer) val.get(0)).intValue();
1758
                        dwgFile.setHeader("DIMTM", val.get(1));
1759

    
1760
                        //DWG 2000 only
1761
                        
1762
                        val = DwgUtil.testBit(intData, bitPos);
1763
                        bitPos = ((Integer) val.get(0)).intValue();
1764
                        dwgFile.setHeader("DIMTOL", val.get(1));
1765
                        
1766
                        val = DwgUtil.testBit(intData, bitPos);
1767
                        bitPos = ((Integer) val.get(0)).intValue();
1768
                        dwgFile.setHeader("DIMLIM", val.get(1));
1769
                        
1770
                        val = DwgUtil.testBit(intData, bitPos);
1771
                        bitPos = ((Integer) val.get(0)).intValue();
1772
                        dwgFile.setHeader("DIMTIH", val.get(1));
1773
                        
1774
                        val = DwgUtil.testBit(intData, bitPos);
1775
                        bitPos = ((Integer) val.get(0)).intValue();
1776
                        dwgFile.setHeader("DIMTOH", val.get(1));
1777
                        
1778
                        val = DwgUtil.testBit(intData, bitPos);
1779
                        bitPos = ((Integer) val.get(0)).intValue();
1780
                        dwgFile.setHeader("DIMSE1", val.get(1));
1781
                        
1782
                        val = DwgUtil.testBit(intData, bitPos);
1783
                        bitPos = ((Integer) val.get(0)).intValue();
1784
                        dwgFile.setHeader("DIMSE2", val.get(1));
1785
                        
1786
                        val = DwgUtil.getBitShort(intData, bitPos);
1787
                        bitPos = ((Integer) val.get(0)).intValue();
1788
                        dwgFile.setHeader("DIMTAD", val.get(1));
1789
                        
1790
                        val = DwgUtil.getBitShort(intData, bitPos);
1791
                        bitPos = ((Integer) val.get(0)).intValue();
1792
                        dwgFile.setHeader("DIMZIN", val.get(1));
1793
                        
1794
                        val = DwgUtil.getBitShort(intData, bitPos);
1795
                        bitPos = ((Integer) val.get(0)).intValue();
1796
                        dwgFile.setHeader("DIMAZIN", val.get(1));
1797
                                
1798
                        //common
1799
                        
1800
                        val = DwgUtil.getBitDouble(intData, bitPos);
1801
                        bitPos = ((Integer) val.get(0)).intValue();
1802
                        dwgFile.setHeader("DIMTXT", val.get(1));
1803

    
1804
                        val = DwgUtil.getBitDouble(intData, bitPos);
1805
                        bitPos = ((Integer) val.get(0)).intValue();
1806
                        dwgFile.setHeader("DIMCEN", val.get(1));
1807

    
1808
                        val = DwgUtil.getBitDouble(intData, bitPos);
1809
                        bitPos = ((Integer) val.get(0)).intValue();
1810
                        dwgFile.setHeader("DIMSZ", val.get(1));
1811

    
1812
                        val = DwgUtil.getBitDouble(intData, bitPos);
1813
                        bitPos = ((Integer) val.get(0)).intValue();
1814
                        dwgFile.setHeader("DIMALTF", val.get(1));
1815

    
1816
                        val = DwgUtil.getBitDouble(intData, bitPos);
1817
                        bitPos = ((Integer) val.get(0)).intValue();
1818
                        dwgFile.setHeader("DIMLFAC", val.get(1));
1819

    
1820
                        val = DwgUtil.getBitDouble(intData, bitPos);
1821
                        bitPos = ((Integer) val.get(0)).intValue();
1822
                        dwgFile.setHeader("DIMTVP", val.get(1));
1823

    
1824
                        val = DwgUtil.getBitDouble(intData, bitPos);
1825
                        bitPos = ((Integer) val.get(0)).intValue();
1826
                        dwgFile.setHeader("DIMTFAC", val.get(1));
1827

    
1828
                        val = DwgUtil.getBitDouble(intData, bitPos);
1829
                        bitPos = ((Integer) val.get(0)).intValue();
1830
                        dwgFile.setHeader("DIMGAP", val.get(1));
1831

    
1832
                        //not readed in DWG 2000
1833
                        
1834
//                        val = DwgUtil.getTextString(intData, bitPos);
1835
//                        bitPos = ((Integer) val.get(0)).intValue();
1836
//                        dwgFile.setHeader("DIMPOST", val.get(1));
1837
//
1838
//                        val = DwgUtil.getTextString(intData, bitPos);
1839
//                        bitPos = ((Integer) val.get(0)).intValue();
1840
//                        dwgFile.setHeader("DIMAPOST", val.get(1));
1841
//
1842
//                        val = DwgUtil.getTextString(intData, bitPos);
1843
//                        bitPos = ((Integer) val.get(0)).intValue();
1844
//                        dwgFile.setHeader("DIMBLK", val.get(1));
1845
//
1846
//                        val = DwgUtil.getTextString(intData, bitPos);
1847
//                        bitPos = ((Integer) val.get(0)).intValue();
1848
//                        dwgFile.setHeader("DIMBLK1", val.get(1));
1849
//
1850
//                        val = DwgUtil.getTextString(intData, bitPos);
1851
//                        bitPos = ((Integer) val.get(0)).intValue();
1852
//                        dwgFile.setHeader("DIMBLK2", val.get(1));
1853

    
1854
                        val = DwgUtil.getBitDouble(intData, bitPos);
1855
                        bitPos = ((Integer) val.get(0)).intValue();
1856
                        dwgFile.setHeader("DIMALTRND", val.get(1));        
1857
                        
1858
                        val = DwgUtil.testBit(intData, bitPos);
1859
                        bitPos = ((Integer) val.get(0)).intValue();
1860
                        dwgFile.setHeader("DIMALT", val.get(1));
1861
                        
1862
                        val = DwgUtil.getBitShort(intData, bitPos);
1863
                        bitPos = ((Integer) val.get(0)).intValue();
1864
                        dwgFile.setHeader("DIMALTD", val.get(1));
1865
                                
1866
                        val = DwgUtil.testBit(intData, bitPos);
1867
                        bitPos = ((Integer) val.get(0)).intValue();
1868
                        dwgFile.setHeader("DIMTOFL", val.get(1));
1869
                        
1870
                        val = DwgUtil.testBit(intData, bitPos);
1871
                        bitPos = ((Integer) val.get(0)).intValue();
1872
                        dwgFile.setHeader("DIMSAH", val.get(1));
1873
                        
1874
                        val = DwgUtil.testBit(intData, bitPos);
1875
                        bitPos = ((Integer) val.get(0)).intValue();
1876
                        dwgFile.setHeader("DIMTIX", val.get(1));
1877
                        
1878
                        val = DwgUtil.testBit(intData, bitPos);
1879
                        bitPos = ((Integer) val.get(0)).intValue();
1880
                        dwgFile.setHeader("DIMSOXD", val.get(1));
1881
                        
1882
                        //common
1883
                        val = DwgUtil.getBitShort(intData, bitPos);
1884
                        bitPos = ((Integer) val.get(0)).intValue();
1885
                        dwgFile.setHeader("DIMCLRD", val.get(1));
1886

    
1887
                        val = DwgUtil.getBitShort(intData, bitPos);
1888
                        bitPos = ((Integer) val.get(0)).intValue();
1889
                        dwgFile.setHeader("DIMCLRE", val.get(1));
1890

    
1891
                        val = DwgUtil.getBitShort(intData, bitPos);
1892
                        bitPos = ((Integer) val.get(0)).intValue();
1893
                        dwgFile.setHeader("DIMCLRT", val.get(1));
1894

    
1895
                        //dwg 2000
1896
                        val = DwgUtil.getBitShort(intData, bitPos);
1897
                        bitPos = ((Integer) val.get(0)).intValue();
1898
                        dwgFile.setHeader("DIMADEC", val.get(1));
1899
                        
1900
                        val = DwgUtil.getBitShort(intData, bitPos);
1901
                        bitPos = ((Integer) val.get(0)).intValue();
1902
                        dwgFile.setHeader("DIMDEC", val.get(1));
1903
                        
1904
                        val = DwgUtil.getBitShort(intData, bitPos);
1905
                        bitPos = ((Integer) val.get(0)).intValue();
1906
                        dwgFile.setHeader("DIMTDEC", val.get(1));
1907
                        
1908
                        val = DwgUtil.getBitShort(intData, bitPos);
1909
                        bitPos = ((Integer) val.get(0)).intValue();
1910
                        dwgFile.setHeader("DIMALTU", val.get(1));
1911
                        
1912
                        val = DwgUtil.getBitShort(intData, bitPos);
1913
                        bitPos = ((Integer) val.get(0)).intValue();
1914
                        dwgFile.setHeader("DIMALTTD", val.get(1));
1915
                        
1916
                        val = DwgUtil.getBitShort(intData, bitPos);
1917
                        bitPos = ((Integer) val.get(0)).intValue();
1918
                        dwgFile.setHeader("DIMAUNIT", val.get(1));
1919
                        
1920
                        val = DwgUtil.getBitShort(intData, bitPos);
1921
                        bitPos = ((Integer) val.get(0)).intValue();
1922
                        dwgFile.setHeader("DIMFRAC", val.get(1));
1923
                        
1924
                        val = DwgUtil.getBitShort(intData, bitPos);
1925
                        bitPos = ((Integer) val.get(0)).intValue();
1926
                        dwgFile.setHeader("DIMLUNIT", val.get(1));
1927
                        
1928
                        val = DwgUtil.getBitShort(intData, bitPos);
1929
                        bitPos = ((Integer) val.get(0)).intValue();
1930
                        dwgFile.setHeader("DIMDSEP", val.get(1));
1931
                        
1932
                        val = DwgUtil.getBitShort(intData, bitPos);
1933
                        bitPos = ((Integer) val.get(0)).intValue();
1934
                        dwgFile.setHeader("DIMTMOVE", val.get(1));
1935
                        
1936
                        val = DwgUtil.getBitShort(intData, bitPos);
1937
                        bitPos = ((Integer) val.get(0)).intValue();
1938
                        dwgFile.setHeader("DIMJUST", val.get(1));
1939
                        
1940
                        val = DwgUtil.testBit(intData, bitPos);
1941
                        bitPos = ((Integer) val.get(0)).intValue();
1942
                        dwgFile.setHeader("DIMSD1", val.get(1));
1943
                                
1944
                        val = DwgUtil.testBit(intData, bitPos);
1945
                        bitPos = ((Integer) val.get(0)).intValue();
1946
                        dwgFile.setHeader("DIMSD2", val.get(1));
1947
                        
1948
                        
1949
                        val = DwgUtil.getBitShort(intData, bitPos);
1950
                        bitPos = ((Integer) val.get(0)).intValue();
1951
                        dwgFile.setHeader("DIMTOLJ", val.get(1));
1952
                        
1953
                        val = DwgUtil.getBitShort(intData, bitPos);
1954
                        bitPos = ((Integer) val.get(0)).intValue();
1955
                        dwgFile.setHeader("DIMTZIN", val.get(1));
1956
                        
1957
                        val = DwgUtil.getBitShort(intData, bitPos);
1958
                        bitPos = ((Integer) val.get(0)).intValue();
1959
                        dwgFile.setHeader("DIMALTZ", val.get(1));
1960
                        
1961
                        val = DwgUtil.getBitShort(intData, bitPos);
1962
                        bitPos = ((Integer) val.get(0)).intValue();
1963
                        dwgFile.setHeader("DIMALTTZ", val.get(1));
1964
                                
1965
                        val = DwgUtil.testBit(intData, bitPos);
1966
                        bitPos = ((Integer) val.get(0)).intValue();
1967
                        dwgFile.setHeader("DIMUPT", val.get(1));
1968
                        
1969
                        val = DwgUtil.getBitShort(intData, bitPos);
1970
                        bitPos = ((Integer) val.get(0)).intValue();
1971
                        dwgFile.setHeader("DIMFIT", val.get(1));
1972
                        
1973
                        val = DwgUtil.getHandle(intData, bitPos);
1974
                        bitPos = ((Integer) val.get(0)).intValue();
1975
                        intHandle = DwgUtil.handleToInt(val);
1976
                        dwgFile.setHeader("DIMTXTSTY", new Integer(intHandle));
1977
                                
1978
                        val = DwgUtil.getHandle(intData, bitPos);
1979
                        bitPos = ((Integer) val.get(0)).intValue();
1980
                        intHandle = DwgUtil.handleToInt(val);
1981
                        dwgFile.setHeader("DIMLDRBLK", new Integer(intHandle));
1982
                        
1983
                        val = DwgUtil.getHandle(intData, bitPos);
1984
                        bitPos = ((Integer) val.get(0)).intValue();
1985
                        intHandle = DwgUtil.handleToInt(val);
1986
                        dwgFile.setHeader("DIMBLK", new Integer(intHandle));
1987
                        
1988
                        val = DwgUtil.getHandle(intData, bitPos);
1989
                        bitPos = ((Integer) val.get(0)).intValue();
1990
                        intHandle = DwgUtil.handleToInt(val);
1991
                        dwgFile.setHeader("DIMBLK1", new Integer(intHandle));
1992
                        
1993
                        val = DwgUtil.getHandle(intData, bitPos);
1994
                        bitPos = ((Integer) val.get(0)).intValue();
1995
                        intHandle = DwgUtil.handleToInt(val);
1996
                        dwgFile.setHeader("DIMBLK2", new Integer(intHandle));
1997
                        
1998
                        val = DwgUtil.getBitShort(intData, bitPos);
1999
                        bitPos = ((Integer) val.get(0)).intValue();
2000
                        dwgFile.setHeader("DIMLWD", val.get(1));
2001
                        
2002
                        val = DwgUtil.getBitShort(intData, bitPos);
2003
                        bitPos = ((Integer) val.get(0)).intValue();
2004
                        dwgFile.setHeader("DIMLWE", val.get(1));
2005
                                
2006
                        //common
2007
                        val = DwgUtil.getHandle(intData, bitPos);
2008
                        bitPos = ((Integer) val.get(0)).intValue();
2009
                        intHandle = DwgUtil.handleToInt(val);
2010
                        dwgFile.setHeader("BLOCK_CONTROL_OBJECT", new Integer(intHandle));
2011

    
2012
                        val = DwgUtil.getHandle(intData, bitPos);
2013
                        bitPos = ((Integer) val.get(0)).intValue();
2014
                        intHandle = DwgUtil.handleToInt(val);
2015
                        dwgFile.setHeader("LAYER_CONTROL_OBJECT", new Integer(intHandle));
2016

    
2017
                        val = DwgUtil.getHandle(intData, bitPos);
2018
                        bitPos = ((Integer) val.get(0)).intValue();
2019
                        intHandle = DwgUtil.handleToInt(val);
2020
                        dwgFile.setHeader("STYLE_CONTROL_OBJECT", new Integer(intHandle));
2021

    
2022
                        val = DwgUtil.getHandle(intData, bitPos);
2023
                        bitPos = ((Integer) val.get(0)).intValue();
2024
                        intHandle = DwgUtil.handleToInt(val);
2025
                        dwgFile
2026
                                        .setHeader("LINETYPE_CONTROL_OBJECT",
2027
                                                        new Integer(intHandle));
2028

    
2029
                        val = DwgUtil.getHandle(intData, bitPos);
2030
                        bitPos = ((Integer) val.get(0)).intValue();
2031
                        intHandle = DwgUtil.handleToInt(val);
2032
                        dwgFile.setHeader("VIEW_CONTROL_OBJECT", new Integer(intHandle));
2033

    
2034
                        val = DwgUtil.getHandle(intData, bitPos);
2035
                        bitPos = ((Integer) val.get(0)).intValue();
2036
                        intHandle = DwgUtil.handleToInt(val);
2037
                        dwgFile.setHeader("UCS_CONTROL_OBJECT", new Integer(intHandle));
2038

    
2039
                        val = DwgUtil.getHandle(intData, bitPos);
2040
                        bitPos = ((Integer) val.get(0)).intValue();
2041
                        intHandle = DwgUtil.handleToInt(val);
2042
                        dwgFile.setHeader("VPORT_CONTROL_OBJECT", new Integer(intHandle));
2043

    
2044
                        val = DwgUtil.getHandle(intData, bitPos);
2045
                        bitPos = ((Integer) val.get(0)).intValue();
2046
                        intHandle = DwgUtil.handleToInt(val);
2047
                        dwgFile.setHeader("APPID_CONTROL_OBJECT", new Integer(intHandle));
2048

    
2049
                        val = DwgUtil.getHandle(intData, bitPos);
2050
                        bitPos = ((Integer) val.get(0)).intValue();
2051
                        intHandle = DwgUtil.handleToInt(val);
2052
                        dwgFile.setHeader("DIMSTYLE_CONTROL_OBJECT",
2053
                                                        new Integer(intHandle));
2054

    
2055
                        //TODO Se lee para 2000? (en la doc. dice r13-r15)
2056
                        val = DwgUtil.getHandle(intData, bitPos);
2057
                        bitPos = ((Integer) val.get(0)).intValue();
2058
                        intHandle = DwgUtil.handleToInt(val);
2059
                        dwgFile.setHeader("VIEWPORT_ENTITY_HEADER", new Integer(intHandle));
2060

    
2061
                        val = DwgUtil.getHandle(intData, bitPos);
2062
                        bitPos = ((Integer) val.get(0)).intValue();
2063
                        intHandle = DwgUtil.handleToInt(val);
2064
                        dwgFile.setHeader("ACAD_GROUP_DICTIONARY", new Integer(intHandle));
2065

    
2066
                        val = DwgUtil.getHandle(intData, bitPos);
2067
                        bitPos = ((Integer) val.get(0)).intValue();
2068
                        intHandle = DwgUtil.handleToInt(val);
2069
                        dwgFile.setHeader("ACAD_MLINE_DICTIONARY", new Integer(intHandle));
2070

    
2071
                        val = DwgUtil.getHandle(intData, bitPos);
2072
                        bitPos = ((Integer) val.get(0)).intValue();
2073
                        intHandle = DwgUtil.handleToInt(val);
2074
                        dwgFile.setHeader("NAMED_OBJECT_DICTIONARY",
2075
                                                        new Integer(intHandle));
2076

    
2077
                        //only dwg 2000
2078
                        
2079
                        //unknown bitshort
2080
                        val = DwgUtil.getBitShort(intData, bitPos);
2081
                        bitPos = ((Integer) val.get(0)).intValue();
2082
                        
2083
//                        unknown bitshort
2084
                        val = DwgUtil.getBitShort(intData, bitPos);
2085
                        bitPos = ((Integer) val.get(0)).intValue();
2086
                        
2087
                        val = DwgUtil.getTextString(intData, bitPos);
2088
                        bitPos = ((Integer) val.get(0)).intValue();
2089
                        dwgFile.setHeader("HYPERLINKBASE",
2090
                                        val.get(1));
2091
                        
2092
                        val = DwgUtil.getTextString(intData, bitPos);
2093
                        bitPos = ((Integer) val.get(0)).intValue();
2094
                        dwgFile.setHeader("STYLESHEET",
2095
                                        val.get(1));
2096
                        
2097
                        val = DwgUtil.getHandle(intData, bitPos);
2098
                        bitPos = ((Integer) val.get(0)).intValue();
2099
                        intHandle = DwgUtil.handleToInt(val);
2100
                        dwgFile.setHeader("LAYOUT_DICTIONARY",
2101
                                                        new Integer(intHandle));
2102
                        
2103
                        val = DwgUtil.getHandle(intData, bitPos);
2104
                        bitPos = ((Integer) val.get(0)).intValue();
2105
                        intHandle = DwgUtil.handleToInt(val);
2106
                        dwgFile.setHeader("PLOT_SETTINGS_DICTIONARY",
2107
                                                        new Integer(intHandle));
2108
                        
2109
                        val = DwgUtil.getHandle(intData, bitPos);
2110
                        bitPos = ((Integer) val.get(0)).intValue();
2111
                        intHandle = DwgUtil.handleToInt(val);
2112
                        dwgFile.setHeader("PLOT_STYLES_DICTIONARY",
2113
                                                        new Integer(intHandle));
2114
                        
2115
                        /*
2116
                         Flags:
2117
                                CELWEIGHT        Flags & 0x001F
2118
                                ENDCAPS                Flags & 0x0060
2119
                                JOINSTYLE        Flags & 0x0180
2120
                                LWDISPLAY        !(Flags & 0x0200)
2121
                                XEDIT                !(Flags & 0x0400)
2122
                                EXTNAMES        Flags & 0x0800
2123
                                PSTYLEMODE        Flags & 0x2000
2124
                                OLESTARTUP        Flags & 0x4000
2125
                         * */
2126
                        val = DwgUtil.getBitLong(intData, bitPos);
2127
                        bitPos = ((Integer) val.get(0)).intValue();
2128
                        dwgFile.setHeader("FLAGS",
2129
                                        val.get(1));
2130
                        
2131
                        val = DwgUtil.getBitShort(intData, bitPos);
2132
                        bitPos = ((Integer) val.get(0)).intValue();
2133
                        dwgFile.setHeader("INSUNITS",
2134
                                        val.get(1));
2135
                        
2136
                        val = DwgUtil.getBitShort(intData, bitPos);
2137
                        bitPos = ((Integer) val.get(0)).intValue();
2138
                        dwgFile.setHeader("CEPSNTYPE",
2139
                                        val.get(1));
2140
                                
2141
                        if(((Integer)val.get(1)).intValue() == 3){
2142
                                val = DwgUtil.getHandle(intData, bitPos);
2143
                                bitPos = ((Integer) val.get(0)).intValue();
2144
                                intHandle = DwgUtil.handleToInt(val);
2145
                                dwgFile.setHeader("CPSNID",
2146
                                                                new Integer(intHandle));
2147
                        }
2148
                        
2149
                        val = DwgUtil.getTextString(intData, bitPos);
2150
                        bitPos = ((Integer) val.get(0)).intValue();
2151
                        dwgFile.setHeader("FINGERPRINTGUID",
2152
                                        val.get(1));
2153
                        
2154
                        val = DwgUtil.getTextString(intData, bitPos);
2155
                        bitPos = ((Integer) val.get(0)).intValue();
2156
                        dwgFile.setHeader("VERSIONGUID",
2157
                                        val.get(1));        
2158
                                
2159
                        
2160
                        val = DwgUtil.getHandle(intData, bitPos);
2161
                        bitPos = ((Integer) val.get(0)).intValue();
2162
                        intHandle = DwgUtil.handleToInt(val);
2163
                        dwgFile.setHeader("PAPER_BLOCK_RECORD", new Integer(intHandle));
2164

    
2165
                        val = DwgUtil.getHandle(intData, bitPos);
2166
                        bitPos = ((Integer) val.get(0)).intValue();
2167
                        intHandle = DwgUtil.handleToInt(val);
2168
                        dwgFile.setHeader("MODEL_BLOCK_RECORD", new Integer(intHandle));
2169

    
2170
                        val = DwgUtil.getHandle(intData, bitPos);
2171
                        bitPos = ((Integer) val.get(0)).intValue();
2172
                        intHandle = DwgUtil.handleToInt(val);
2173
                        dwgFile.setHeader("LTYPE_BYLAYER", new Integer(intHandle));
2174

    
2175
                        val = DwgUtil.getHandle(intData, bitPos);
2176
                        bitPos = ((Integer) val.get(0)).intValue();
2177
                        intHandle = DwgUtil.handleToInt(val);
2178
                        dwgFile.setHeader("LTYPE_BYBLOCK", new Integer(intHandle));
2179

    
2180
                        val = DwgUtil.getHandle(intData, bitPos);
2181
                        bitPos = ((Integer) val.get(0)).intValue();
2182
                        intHandle = DwgUtil.handleToInt(val);
2183
                        dwgFile.setHeader("LTYPE_CONTINUOUS", new Integer(intHandle));
2184

    
2185
                        //                    # remaing bits are unknown, and they end with possible
2186
                        //                    # padding bits so that 16-bit CRC value after the data
2187
                        //                    # is on a byte boundary - ignore them for now ...
2188

    
2189
                } catch (Exception e) {
2190
                        logger.error(e);
2191
                }
2192
        }
2193

    
2194
        
2195
        
2196
        
2197
}