Statistics
| Revision:

root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / DwgFileV14Reader.java @ 9874

History | View | Annotate | Download (50.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.DwgFile;
47
import com.iver.cit.jdwglib.dwg.DwgObject;
48
import com.iver.cit.jdwglib.dwg.DwgObjectFactory;
49
import com.iver.cit.jdwglib.dwg.DwgObjectOffset;
50
import com.iver.cit.jdwglib.dwg.DwgUtil;
51
import com.iver.cit.jdwglib.dwg.objects.DwgArc;
52
import com.iver.cit.jdwglib.dwg.objects.DwgAttdef;
53
import com.iver.cit.jdwglib.dwg.objects.DwgAttrib;
54
import com.iver.cit.jdwglib.dwg.objects.DwgBlock;
55
import com.iver.cit.jdwglib.dwg.objects.DwgBlockControl;
56
import com.iver.cit.jdwglib.dwg.objects.DwgBlockHeader;
57
import com.iver.cit.jdwglib.dwg.objects.DwgCircle;
58
import com.iver.cit.jdwglib.dwg.objects.DwgEllipse;
59
import com.iver.cit.jdwglib.dwg.objects.DwgEndblk;
60
import com.iver.cit.jdwglib.dwg.objects.DwgInsert;
61
import com.iver.cit.jdwglib.dwg.objects.DwgLayer;
62
import com.iver.cit.jdwglib.dwg.objects.DwgLayerControl;
63
import com.iver.cit.jdwglib.dwg.objects.DwgLine;
64
import com.iver.cit.jdwglib.dwg.objects.DwgLwPolyline;
65
import com.iver.cit.jdwglib.dwg.objects.DwgMText;
66
import com.iver.cit.jdwglib.dwg.objects.DwgPoint;
67
import com.iver.cit.jdwglib.dwg.objects.DwgPolyline2D;
68
import com.iver.cit.jdwglib.dwg.objects.DwgPolyline3D;
69
import com.iver.cit.jdwglib.dwg.objects.DwgSeqend;
70
import com.iver.cit.jdwglib.dwg.objects.DwgSolid;
71
import com.iver.cit.jdwglib.dwg.objects.DwgSpline;
72
import com.iver.cit.jdwglib.dwg.objects.DwgText;
73
import com.iver.cit.jdwglib.dwg.objects.DwgVertex2D;
74
import com.iver.cit.jdwglib.dwg.objects.DwgVertex3D;
75

    
76
import freenet.support.HexUtil;
77

    
78
/**
79
 * The DwgFileV14Reader reads the DWG version 14 format
80
 * 
81
 * @author jmorell
82
 */
83
public class DwgFileV14Reader implements DwgFileReader {
84

    
85
        protected DwgFile dwgFile;
86
        protected ByteBuffer bb;
87
        
88
        private static Logger logger = Logger.
89
                getLogger(DwgFileV14Reader.class.getName());
90
        
91
        /**
92
         * Reads the DWG version 15 format
93
         * 
94
         * @param dwgFile Represents the DWG file that we want to read
95
     * @throws IOException When DWG file path is wrong
96
         */
97
        public void read(DwgFile dwgFile, ByteBuffer bb) throws IOException {
98
                this.dwgFile = dwgFile;
99
                this.bb = bb;
100
                readDwgSectionOffsets();
101
                try {
102
                        readDwgObjectOffsets();                
103
                        //readDwgClasses(bb);
104
                } catch (Exception e) {
105
                        logger.error(e);
106
                }
107
                readDwgObjects();
108
        }
109
        
110
        /**
111
         * It reads all HEADER section of a DWG 13-14 file.
112
         * 
113
         * This method must be called only for debug purposes because we dont the meaning
114
         * (or the practical application) of the fields readed with it
115
         * 
116
         * TODO Pasarlo a la clase abstracta comun que se haga de las versiones 15, 13-14
117
         * (la cabecera es la misma practicamente)
118
         * 
119
         * 
120
         * */
121
        protected void readHeaders(){
122
                
123
                int offset = dwgFile.getDwgSectionOffset("HEADERS");
124
                bb.position(offset);
125
                
126
                
127
                //1? leemos el sentinnel inicial
128
                bb.order(ByteOrder.nativeOrder());
129
                byte[] sentinel = new byte[16];
130
                bb.get(sentinel);
131
                
132
                if(sentinel[0] != 0xcf)
133
                        logger.warn("sentinel[0] != 0xcf");
134
                if(sentinel[1] != 0x7b)
135
                        logger.warn("sentinel[1] != 0x7b");
136
                if(sentinel[2] != 0x1f)
137
                        logger.warn("sentinel[2] != 0x1f");
138
                if(sentinel[3] != 0x23)
139
                        logger.warn("sentinel[3] != 0x23");
140
                if(sentinel[4] != 0xfd)
141
                        logger.warn("sentinel[4] != 0xfd");
142
                if(sentinel[5] != 0xde)
143
                        logger.warn("sentinel[5] != 0xde");
144
                if(sentinel[6] != 0x38)
145
                        logger.warn("sentinel[6] != 0x38");
146
                if(sentinel[7] != 0xa9)
147
                        logger.warn("sentinel[7] != 0xa9");
148
                if(sentinel[8] != 0x5f)
149
                        logger.warn("sentinel[8] != 0x5f");
150
                if(sentinel[9] != 0x7c)
151
                        logger.warn("sentinel[9] != 0x7c");
152
                if(sentinel[10] != 0x68)
153
                        logger.warn("sentinel[10] != 0x68");
154
                if(sentinel[11] != 0xb8)
155
                        logger.warn("sentinel[11] != 0xb8");
156
                if(sentinel[12] != 0x4e)
157
                        logger.warn("sentinel[12] != 0x4e");
158
                if(sentinel[13] != 0x6d)
159
                        logger.warn("sentinel[13] != 0x6d");
160
                if(sentinel[14] != 0x33)
161
                        logger.warn("sentinel[14] != 0x33");
162
                if(sentinel[15] != 0x5f)
163
                        logger.warn("sentinel[15] != 0x5f");
164
        
165
                
166
                //2? seguidamente leemos los datos
167
                bb.order(ByteOrder.LITTLE_ENDIAN);
168
                int size = bb.getInt();
169
                
170
                bb.order(ByteOrder.nativeOrder());
171
                byte[] data = new byte[size];
172
                bb.get(data);
173
                
174
                /*
175
                 * J.Morell hacia esto para leer los datos como int[]
176
                   int[] data = new int[size];
177
                        for (int i=0; i < size; i++) {
178
                                dataBytes[i] = bb.get();
179
                                dataMachValString[i] = HexUtil.bytesToHex(new byte[]{dataBytes[i]});
180
                                Integer dataMachValShort = Integer.decode("0x" + dataMachValString[i]);
181
                                data[i] = dataMachValShort.byteValue();
182
                                data[i] = ByteUtils.getUnsigned((byte)data[i]);
183
                        }
184
                 * TODO Hace falta esto????
185
                 * 
186
                 * */
187
                int[] intData = DwgUtil.toIntArray(data);
188
                
189
                
190
                //3? a continuacion el CRC de la seccion HEADER
191
                bb.order(ByteOrder.LITTLE_ENDIAN);
192
                short crc = bb.getShort();
193
                
194
                //Por ultimo, el sentinnel final
195
                bb.order(ByteOrder.nativeOrder());
196
                byte[] lastSentinnel = new byte[16];
197
                bb.get(lastSentinnel);
198
                if(lastSentinnel[0] != 0x30)
199
                        logger.warn("lastSentinnel[0] != 0x30");
200
                if(lastSentinnel[1] != 0x84)
201
                        logger.warn("lastSentinnel[1] != 0x84");
202
                if(lastSentinnel[2] != 0xe0)
203
                        logger.warn("lastSentinnel[2] != 0xe0");
204
                if(lastSentinnel[3] != 0xdc)
205
                        logger.warn("lastSentinnel[3] != 0xdc");
206
                if(lastSentinnel[4] != 0x02)
207
                        logger.warn("lastSentinnel[4] != 0x02");
208
                if(lastSentinnel[5] != 0x21)
209
                        logger.warn("lastSentinnel[5] != 0x21");
210
                if(lastSentinnel[6] != 0xc7)
211
                        logger.warn("lastSentinnel[6] != 0xc7");
212
                if(lastSentinnel[7] != 0x56)
213
                        logger.warn("lastSentinnel[7] != 0x56");
214
                if(lastSentinnel[8] != 0xa0)
215
                        logger.warn("lastSentinnel[8] != 0xa0");
216
                if(lastSentinnel[9] != 0x83)
217
                        logger.warn("lastSentinnel[9] != 0x83");
218
                if(lastSentinnel[10] != 0x97)
219
                        logger.warn("lastSentinnel[10] != 0x97");
220
                if(lastSentinnel[11] != 0x47)
221
                        logger.warn("lastSentinnel[11] != 0x47");
222
                if(lastSentinnel[12] != 0xb1)
223
                        logger.warn("lastSentinnel[12] != 0xb1");
224
                if(lastSentinnel[13] != 0x92)
225
                        logger.warn("lastSentinnel[13] != 0x92");
226
                if(lastSentinnel[14] != 0xcc)
227
                        logger.warn("lastSentinnel[14] != 0xcc");
228
                if(lastSentinnel[15] != 0xa0)
229
                        logger.warn("lastSentinnel[15] != 0xa0");
230
                
231
                //Ahora interpretamos los datos en bruto
232
                int bitPos = 0;
233
                try {
234
                        List val = DwgUtil.getBitDouble(intData, bitPos);
235
                        bitPos = ((Integer)val.get(0)).intValue();
236
                        dwgFile.setHeader("VAL1", val.get(1));
237

    
238
                        val = DwgUtil.getBitDouble(intData, bitPos);
239
                        bitPos = ((Integer)val.get(0)).intValue();
240
                        dwgFile.setHeader("VAL2", val.get(1));
241
                        
242
                        val = DwgUtil.getBitDouble(intData, bitPos);
243
                        bitPos = ((Integer)val.get(0)).intValue();
244
                        dwgFile.setHeader("VAL3", val.get(1));
245
                        
246
                        val = DwgUtil.getBitDouble(intData, bitPos);
247
                        bitPos = ((Integer)val.get(0)).intValue();
248
                        dwgFile.setHeader("VAL4", val.get(1));
249
                        
250
                        val = DwgUtil.getTextString(intData, bitPos);
251
                        bitPos = ((Integer)val.get(0)).intValue();
252
                        dwgFile.setHeader("STRING1", val.get(1));
253
                        
254
                        val = DwgUtil.getTextString(intData, bitPos);
255
                        bitPos = ((Integer)val.get(0)).intValue();
256
                        dwgFile.setHeader("STRING2", val.get(1));
257
                        
258
                        val = DwgUtil.getTextString(intData, bitPos);
259
                        bitPos = ((Integer)val.get(0)).intValue();
260
                        dwgFile.setHeader("STRING3", val.get(1));
261
                        
262
                        val = DwgUtil.getTextString(intData, bitPos);
263
                        bitPos = ((Integer)val.get(0)).intValue();
264
                        dwgFile.setHeader("STRING4", val.get(1));
265
                        
266
                        val = DwgUtil.getBitLong(intData, bitPos);
267
                        bitPos = ((Integer)val.get(0)).intValue();
268
                        dwgFile.setHeader("LONG1", val.get(1));
269
                        
270
                        val = DwgUtil.getBitLong(intData, bitPos);
271
                        bitPos = ((Integer)val.get(0)).intValue();
272
                        dwgFile.setHeader("LONG2", val.get(1));
273
                        
274
                        val = DwgUtil.getBitShort(intData, bitPos);
275
                        bitPos = ((Integer)val.get(0)).intValue();
276
                        dwgFile.setHeader("SHORT1", val.get(1));
277
                        
278
                        val = DwgUtil.getHandle(intData, bitPos);
279
                        bitPos = ((Integer)val.get(0)).intValue();
280
                        dwgFile.setHeader("HANDLE1", val.get(1));
281
                        
282
                        val = DwgUtil.testBit(intData, bitPos);
283
                        bitPos = ((Integer)val.get(0)).intValue();
284
                        dwgFile.setHeader("DIMASO", val.get(1));
285
                        
286
                        val = DwgUtil.testBit(intData, bitPos);
287
                        bitPos = ((Integer)val.get(0)).intValue();
288
                        dwgFile.setHeader("DIMSHO", val.get(1));
289
                        
290
                        val = DwgUtil.testBit(intData, bitPos);
291
                        bitPos = ((Integer)val.get(0)).intValue();
292
                        dwgFile.setHeader("DIMSAV", val.get(1));
293
                        
294
                        val = DwgUtil.testBit(intData, bitPos);
295
                        bitPos = ((Integer)val.get(0)).intValue();
296
                        dwgFile.setHeader("PLINEGEN", val.get(1));
297
                        
298
                        val = DwgUtil.testBit(intData, bitPos);
299
                        bitPos = ((Integer)val.get(0)).intValue();
300
                        dwgFile.setHeader("ORTHOMODE", val.get(1));
301
                        
302
                        val = DwgUtil.testBit(intData, bitPos);
303
                        bitPos = ((Integer)val.get(0)).intValue();
304
                        dwgFile.setHeader("REGENMODE", val.get(1));
305
                        
306
                        val = DwgUtil.testBit(intData, bitPos);
307
                        bitPos = ((Integer)val.get(0)).intValue();
308
                        dwgFile.setHeader("FILLMODE", val.get(1));
309
                        
310
                        val = DwgUtil.testBit(intData, bitPos);
311
                        bitPos = ((Integer)val.get(0)).intValue();
312
                        dwgFile.setHeader("QTEXTMODE", val.get(1));
313
                        
314
                        val = DwgUtil.testBit(intData, bitPos);
315
                        bitPos = ((Integer)val.get(0)).intValue();
316
                        dwgFile.setHeader("PSLTSCALE", val.get(1));
317
                        
318
                        val = DwgUtil.testBit(intData, bitPos);
319
                        bitPos = ((Integer)val.get(0)).intValue();
320
                        dwgFile.setHeader("LIMCHECK", val.get(1));
321
                        
322
                        val = DwgUtil.testBit(intData, bitPos);
323
                        bitPos = ((Integer)val.get(0)).intValue();
324
                        dwgFile.setHeader("BLIPMODE", val.get(1));
325
                        
326
                        val = DwgUtil.testBit(intData, bitPos);
327
                        bitPos = ((Integer)val.get(0)).intValue();
328
                        dwgFile.setHeader("USER_TIMER", val.get(1));
329
                        
330
                        val = DwgUtil.testBit(intData, bitPos);
331
                        bitPos = ((Integer)val.get(0)).intValue();
332
                        dwgFile.setHeader("SKPOLY", val.get(1));
333
                        
334
                        val = DwgUtil.testBit(intData, bitPos);
335
                        bitPos = ((Integer)val.get(0)).intValue();
336
                        dwgFile.setHeader("ANGDIR", val.get(1));
337
                        
338
                        val = DwgUtil.testBit(intData, bitPos);
339
                        bitPos = ((Integer)val.get(0)).intValue();
340
                        dwgFile.setHeader("SPLFRAME", val.get(1));
341
                        
342
                        val = DwgUtil.testBit(intData, bitPos);
343
                        bitPos = ((Integer)val.get(0)).intValue();
344
                        dwgFile.setHeader("ATTREQ", val.get(1));
345
                        
346
                        val = DwgUtil.testBit(intData, bitPos);
347
                        bitPos = ((Integer)val.get(0)).intValue();
348
                        dwgFile.setHeader("ATTDIA", val.get(1));
349
                        
350
                        val = DwgUtil.testBit(intData, bitPos);
351
                        bitPos = ((Integer)val.get(0)).intValue();
352
                        dwgFile.setHeader("MIRRTEXT", val.get(1));
353
                        
354
                        val = DwgUtil.testBit(intData, bitPos);
355
                        bitPos = ((Integer)val.get(0)).intValue();
356
                        dwgFile.setHeader("WORLDVIEW", val.get(1));
357
                        
358
                        val = DwgUtil.testBit(intData, bitPos);
359
                        bitPos = ((Integer)val.get(0)).intValue();
360
                        dwgFile.setHeader("WIREFRAME", val.get(1));
361
                        
362
                        val = DwgUtil.testBit(intData, bitPos);
363
                        bitPos = ((Integer)val.get(0)).intValue();
364
                        dwgFile.setHeader("TILEMODE", val.get(1));
365
                        
366
                        val = DwgUtil.testBit(intData, bitPos);
367
                        bitPos = ((Integer)val.get(0)).intValue();
368
                        dwgFile.setHeader("PLIMCHECK", val.get(1));
369
                        
370
                        val = DwgUtil.testBit(intData, bitPos);
371
                        bitPos = ((Integer)val.get(0)).intValue();
372
                        dwgFile.setHeader("VISRETAIN", val.get(1));
373
                        
374
                        val = DwgUtil.testBit(intData, bitPos);
375
                        bitPos = ((Integer)val.get(0)).intValue();
376
                        dwgFile.setHeader("DELOBJ", val.get(1));
377
                        
378
                        val = DwgUtil.testBit(intData, bitPos);
379
                        bitPos = ((Integer)val.get(0)).intValue();
380
                        dwgFile.setHeader("DISPSILH", val.get(1));
381
                        
382
                        val = DwgUtil.testBit(intData, bitPos);
383
                        bitPos = ((Integer)val.get(0)).intValue();
384
                        dwgFile.setHeader("PELLISE", val.get(1));
385
                        
386
                        val = DwgUtil.getBitShort(intData, bitPos);
387
                        bitPos = ((Integer)val.get(0)).intValue();
388
                        if(dwgFile.getDwgVersion() == "R14")
389
                                dwgFile.setHeader("PROXYGRAPH", val.get(1));
390
                        else
391
                                dwgFile.setHeader("SAVEIMAGES", val.get(1));
392
                        
393
                        val = DwgUtil.getBitShort(intData, bitPos);
394
                        bitPos = ((Integer)val.get(0)).intValue();
395
                        dwgFile.setHeader("DRAGMODE", val.get(1));
396
                        
397
                        val = DwgUtil.getBitShort(intData, bitPos);
398
                        bitPos = ((Integer)val.get(0)).intValue();
399
                        dwgFile.setHeader("TREEDEPTH", val.get(1));
400
                        
401
                        val = DwgUtil.getBitShort(intData, bitPos);
402
                        bitPos = ((Integer)val.get(0)).intValue();
403
                        dwgFile.setHeader("LUNITS", val.get(1));
404
                        
405
                        val = DwgUtil.getBitShort(intData, bitPos);
406
                        bitPos = ((Integer)val.get(0)).intValue();
407
                        dwgFile.setHeader("LUPREC", val.get(1));
408
                        
409
                        val = DwgUtil.getBitShort(intData, bitPos);
410
                        bitPos = ((Integer)val.get(0)).intValue();
411
                        dwgFile.setHeader("AUNITS", val.get(1));
412
                        
413
                        val = DwgUtil.getBitShort(intData, bitPos);
414
                        bitPos = ((Integer)val.get(0)).intValue();
415
                        dwgFile.setHeader("AUPREC", val.get(1));
416
                        
417
                        val = DwgUtil.getBitShort(intData, bitPos);
418
                        bitPos = ((Integer)val.get(0)).intValue();
419
                        dwgFile.setHeader("OSMODE", val.get(1));
420
                        
421
                        val = DwgUtil.getBitShort(intData, bitPos);
422
                        bitPos = ((Integer)val.get(0)).intValue();
423
                        dwgFile.setHeader("ATTMODE", val.get(1));
424
                        
425
                        val = DwgUtil.getBitShort(intData, bitPos);
426
                        bitPos = ((Integer)val.get(0)).intValue();
427
                        dwgFile.setHeader("COORDS", val.get(1));
428
                        
429
                        val = DwgUtil.getBitShort(intData, bitPos);
430
                        bitPos = ((Integer)val.get(0)).intValue();
431
                        dwgFile.setHeader("PDMODE", val.get(1));
432
                        
433
                        val = DwgUtil.getBitShort(intData, bitPos);
434
                        bitPos = ((Integer)val.get(0)).intValue();
435
                        dwgFile.setHeader("PICKSTYLE", val.get(1));
436
                        
437
                        val = DwgUtil.getBitShort(intData, bitPos);
438
                        bitPos = ((Integer)val.get(0)).intValue();
439
                        dwgFile.setHeader("USERI1", val.get(1));
440
                        
441
                        val = DwgUtil.getBitShort(intData, bitPos);
442
                        bitPos = ((Integer)val.get(0)).intValue();
443
                        dwgFile.setHeader("USERI2", val.get(1));
444
                        
445
                        val = DwgUtil.getBitShort(intData, bitPos);
446
                        bitPos = ((Integer)val.get(0)).intValue();
447
                        dwgFile.setHeader("USERI3", val.get(1));
448
                        
449
                        val = DwgUtil.getBitShort(intData, bitPos);
450
                        bitPos = ((Integer)val.get(0)).intValue();
451
                        dwgFile.setHeader("USERI4", val.get(1));
452
                        
453
                        val = DwgUtil.getBitShort(intData, bitPos);
454
                        bitPos = ((Integer)val.get(0)).intValue();
455
                        dwgFile.setHeader("USERI5", val.get(1));
456
                        
457
                        val = DwgUtil.getBitShort(intData, bitPos);
458
                        bitPos = ((Integer)val.get(0)).intValue();
459
                        dwgFile.setHeader("SPLINESEGS", val.get(1));
460
                        
461
                        val = DwgUtil.getBitShort(intData, bitPos);
462
                        bitPos = ((Integer)val.get(0)).intValue();
463
                        dwgFile.setHeader("SURFU", val.get(1));
464
                        
465
                        val = DwgUtil.getBitShort(intData, bitPos);
466
                        bitPos = ((Integer)val.get(0)).intValue();
467
                        dwgFile.setHeader("SURFV", val.get(1));
468
                        
469
                        val = DwgUtil.getBitShort(intData, bitPos);
470
                        bitPos = ((Integer)val.get(0)).intValue();
471
                        dwgFile.setHeader("SURFTYPE", val.get(1));
472
                        
473
                        val = DwgUtil.getBitShort(intData, bitPos);
474
                        bitPos = ((Integer)val.get(0)).intValue();
475
                        dwgFile.setHeader("SURFTAB1", val.get(1));
476
                        
477
                        val = DwgUtil.getBitShort(intData, bitPos);
478
                        bitPos = ((Integer)val.get(0)).intValue();
479
                        dwgFile.setHeader("SURFTAB2", val.get(1));
480
                        
481
                        val = DwgUtil.getBitShort(intData, bitPos);
482
                        bitPos = ((Integer)val.get(0)).intValue();
483
                        dwgFile.setHeader("SPLINETYPE", val.get(1));
484
                        
485
                        val = DwgUtil.getBitShort(intData, bitPos);
486
                        bitPos = ((Integer)val.get(0)).intValue();
487
                        dwgFile.setHeader("SHADEDGE", val.get(1));
488
                        
489
                        val = DwgUtil.getBitShort(intData, bitPos);
490
                        bitPos = ((Integer)val.get(0)).intValue();
491
                        dwgFile.setHeader("SHADEDIF", val.get(1));
492
                        
493
                        val = DwgUtil.getBitShort(intData, bitPos);
494
                        bitPos = ((Integer)val.get(0)).intValue();
495
                        dwgFile.setHeader("UNITMODE", val.get(1));
496
                        
497
                        val = DwgUtil.getBitShort(intData, bitPos);
498
                        bitPos = ((Integer)val.get(0)).intValue();
499
                        dwgFile.setHeader("MAXACTVP", val.get(1));
500
                        
501
                        val = DwgUtil.getBitShort(intData, bitPos);
502
                        bitPos = ((Integer)val.get(0)).intValue();
503
                        dwgFile.setHeader("ISOLINES", val.get(1));
504
                        
505
                        val = DwgUtil.getBitShort(intData, bitPos);
506
                        bitPos = ((Integer)val.get(0)).intValue();
507
                        dwgFile.setHeader("CMLJUST", val.get(1));
508
                        
509
                        val = DwgUtil.getBitShort(intData, bitPos);
510
                        bitPos = ((Integer)val.get(0)).intValue();
511
                        dwgFile.setHeader("TEXTQLTY", val.get(1));
512
                        
513
                        val = DwgUtil.getBitDouble(intData, bitPos);
514
                        bitPos = ((Integer)val.get(0)).intValue();
515
                        dwgFile.setHeader("LTSCALE", val.get(1));
516
                        
517
                        val = DwgUtil.getBitDouble(intData, bitPos);
518
                        bitPos = ((Integer)val.get(0)).intValue();
519
                        dwgFile.setHeader("TEXTSIZE", val.get(1));
520
                        
521
                        val = DwgUtil.getBitDouble(intData, bitPos);
522
                        bitPos = ((Integer)val.get(0)).intValue();
523
                        dwgFile.setHeader("TRACEWID", val.get(1));
524
                        
525
                        val = DwgUtil.getBitDouble(intData, bitPos);
526
                        bitPos = ((Integer)val.get(0)).intValue();
527
                        dwgFile.setHeader("SKETCHINC", val.get(1));
528
                        
529
                        val = DwgUtil.getBitDouble(intData, bitPos);
530
                        bitPos = ((Integer)val.get(0)).intValue();
531
                        dwgFile.setHeader("FILLETRAD", val.get(1));
532
                        
533
                        val = DwgUtil.getBitDouble(intData, bitPos);
534
                        bitPos = ((Integer)val.get(0)).intValue();
535
                        dwgFile.setHeader("THICKNESS", val.get(1));
536
                        
537
                        val = DwgUtil.getBitDouble(intData, bitPos);
538
                        bitPos = ((Integer)val.get(0)).intValue();
539
                        dwgFile.setHeader("ANGBASE", val.get(1));
540
                        
541
                        val = DwgUtil.getBitDouble(intData, bitPos);
542
                        bitPos = ((Integer)val.get(0)).intValue();
543
                        dwgFile.setHeader("PDSIZE", val.get(1));
544
                        
545
                        val = DwgUtil.getBitDouble(intData, bitPos);
546
                        bitPos = ((Integer)val.get(0)).intValue();
547
                        dwgFile.setHeader("PLINEWID", val.get(1));
548
                        
549
                        val = DwgUtil.getBitDouble(intData, bitPos);
550
                        bitPos = ((Integer)val.get(0)).intValue();
551
                        dwgFile.setHeader("USERR1", val.get(1));
552
                        
553
                        val = DwgUtil.getBitDouble(intData, bitPos);
554
                        bitPos = ((Integer)val.get(0)).intValue();
555
                        dwgFile.setHeader("USERR2", val.get(1));
556
                        
557
                        val = DwgUtil.getBitDouble(intData, bitPos);
558
                        bitPos = ((Integer)val.get(0)).intValue();
559
                        dwgFile.setHeader("USERR3", val.get(1));
560
                        
561
                        val = DwgUtil.getBitDouble(intData, bitPos);
562
                        bitPos = ((Integer)val.get(0)).intValue();
563
                        dwgFile.setHeader("USERR4", val.get(1));
564
                        
565
                        val = DwgUtil.getBitDouble(intData, bitPos);
566
                        bitPos = ((Integer)val.get(0)).intValue();
567
                        dwgFile.setHeader("USERR5", val.get(1));
568
                        
569
                        val = DwgUtil.getBitDouble(intData, bitPos);
570
                        bitPos = ((Integer)val.get(0)).intValue();
571
                        dwgFile.setHeader("CHAMFERA", val.get(1));
572
                        
573
                        val = DwgUtil.getBitDouble(intData, bitPos);
574
                        bitPos = ((Integer)val.get(0)).intValue();
575
                        dwgFile.setHeader("CHAMFERB", val.get(1));
576
                        
577
                        val = DwgUtil.getBitDouble(intData, bitPos);
578
                        bitPos = ((Integer)val.get(0)).intValue();
579
                        dwgFile.setHeader("CHAMFERC", val.get(1));
580
                        
581
                        val = DwgUtil.getBitDouble(intData, bitPos);
582
                        bitPos = ((Integer)val.get(0)).intValue();
583
                        dwgFile.setHeader("CHAMFERD", val.get(1));
584
                        
585
                        val = DwgUtil.getBitDouble(intData, bitPos);
586
                        bitPos = ((Integer)val.get(0)).intValue();
587
                        dwgFile.setHeader("FACETRES", val.get(1));
588
                        
589
                        val = DwgUtil.getBitDouble(intData, bitPos);
590
                        bitPos = ((Integer)val.get(0)).intValue();
591
                        dwgFile.setHeader("CMLSCALE", val.get(1));
592
                        
593
                        val = DwgUtil.getBitDouble(intData, bitPos);
594
                        bitPos = ((Integer)val.get(0)).intValue();
595
                        dwgFile.setHeader("CELTSCALE", val.get(1));
596
                        
597
                        val = DwgUtil.getTextString(intData, bitPos);
598
                        bitPos = ((Integer)val.get(0)).intValue();
599
                        dwgFile.setHeader("MENUNAME", val.get(1));
600
                        
601
                        int[] tdcreate = new int[2];
602
                        val = DwgUtil.getBitLong(intData, bitPos);
603
                        bitPos = ((Integer)val.get(0)).intValue();
604
                        tdcreate[0] = ((Integer) val.get(1)).intValue();
605
                        val = DwgUtil.getBitLong(intData, bitPos);
606
                        bitPos = ((Integer)val.get(0)).intValue();
607
                        tdcreate[1] = ((Integer) val.get(1)).intValue();
608
                        dwgFile.setHeader("TDCREATE", tdcreate);
609
                        
610
                        int[] tdupdate = new int[2];
611
                        val = DwgUtil.getBitLong(intData, bitPos);
612
                        bitPos = ((Integer)val.get(0)).intValue();
613
                        tdupdate[0] = ((Integer) val.get(1)).intValue();
614
                        val = DwgUtil.getBitLong(intData, bitPos);
615
                        bitPos = ((Integer)val.get(0)).intValue();
616
                        tdupdate[1] = ((Integer) val.get(1)).intValue();
617
                        dwgFile.setHeader("TDUPDATE", tdupdate);
618
                        
619
                        int[] tdindwg = new int[2];
620
                        val = DwgUtil.getBitLong(intData, bitPos);
621
                        bitPos = ((Integer)val.get(0)).intValue();
622
                        tdindwg[0] = ((Integer) val.get(1)).intValue();
623
                        val = DwgUtil.getBitLong(intData, bitPos);
624
                        bitPos = ((Integer)val.get(0)).intValue();
625
                        tdindwg[1] = ((Integer) val.get(1)).intValue();
626
                        dwgFile.setHeader("TDINDWG", tdindwg);
627
                        
628
                        int[] tdusrtime = new int[2];
629
                        val = DwgUtil.getBitLong(intData, bitPos);
630
                        bitPos = ((Integer)val.get(0)).intValue();
631
                        tdusrtime[0] = ((Integer) val.get(1)).intValue();
632
                        val = DwgUtil.getBitLong(intData, bitPos);
633
                        bitPos = ((Integer)val.get(0)).intValue();
634
                        tdusrtime[1] = ((Integer) val.get(1)).intValue();
635
                        dwgFile.setHeader("TDUSRTIME", tdusrtime);
636
                        
637
                        val = DwgUtil.getBitShort(intData, bitPos);
638
                        bitPos = ((Integer)val.get(0)).intValue();
639
                        dwgFile.setHeader("CECOLOR", val.get(1));
640
                        
641
//desilusion: creo que es el proximo handle que se asignar? a las nuevas
642
//entidades que se creen
643
                        val = DwgUtil.getHandle(intData, bitPos);
644
                        bitPos = ((Integer)val.get(0)).intValue();
645
                        int intHandle = DwgUtil.handleToInt(val);
646
                        dwgFile.setHeader("HANDSEED", new Integer(intHandle));
647
                        
648
        //creo que CLAYER marca la capa actualmente seleccionada en el menu de autocad                
649
                        
650
                        val = DwgUtil.getHandle(intData, bitPos);
651
                        bitPos = ((Integer)val.get(0)).intValue();
652
                        intHandle = DwgUtil.handleToInt(val);
653
                        dwgFile.setHeader("CLAYER", new Integer(intHandle));
654
                        
655
                        val = DwgUtil.getHandle(intData, bitPos);
656
                        bitPos = ((Integer)val.get(0)).intValue();
657
                        intHandle = DwgUtil.handleToInt(val);
658
                        dwgFile.setHeader("TEXSTYLE", new Integer(intHandle));
659
                        
660
                        val = DwgUtil.getHandle(intData, bitPos);
661
                        bitPos = ((Integer)val.get(0)).intValue();
662
                        intHandle = DwgUtil.handleToInt(val);
663
                        dwgFile.setHeader("CELLTYPE", new Integer(intHandle));
664
                        
665
                        val = DwgUtil.getHandle(intData, bitPos);
666
                        bitPos = ((Integer)val.get(0)).intValue();
667
                        intHandle = DwgUtil.handleToInt(val);
668
                        dwgFile.setHeader("DIMSTYLE", new Integer(intHandle));
669
                        
670
                        val = DwgUtil.getHandle(intData, bitPos);
671
                        bitPos = ((Integer)val.get(0)).intValue();
672
                        intHandle = DwgUtil.handleToInt(val);
673
                        dwgFile.setHeader("CMLSTYLE", new Integer(intHandle));
674
                        
675
                        double[] spaces1 = new double[3];
676
                        val = DwgUtil.getBitDouble(intData, bitPos);
677
                        bitPos = ((Integer)val.get(0)).intValue();
678
                        spaces1[0] = ((Double)val.get(1)).doubleValue();
679
                        val = DwgUtil.getBitDouble(intData, bitPos);
680
                        bitPos = ((Integer)val.get(0)).intValue();
681
                        spaces1[1] = ((Double)val.get(1)).doubleValue();
682
                        val = DwgUtil.getBitDouble(intData, bitPos);
683
                        bitPos = ((Integer)val.get(0)).intValue();
684
                        spaces1[2] = ((Double)val.get(1)).doubleValue();
685
                        dwgFile.setHeader("PSPACE_INSBASE", spaces1);
686
                        
687
                        double[] spaces2 = new double[3];
688
                        val = DwgUtil.getBitDouble(intData, bitPos);
689
                        bitPos = ((Integer)val.get(0)).intValue();
690
                        spaces2[0] = ((Double)val.get(1)).doubleValue();
691
                        val = DwgUtil.getBitDouble(intData, bitPos);
692
                        bitPos = ((Integer)val.get(0)).intValue();
693
                        spaces2[1] = ((Double)val.get(1)).doubleValue();
694
                        val = DwgUtil.getBitDouble(intData, bitPos);
695
                        bitPos = ((Integer)val.get(0)).intValue();
696
                        spaces2[2] = ((Double)val.get(1)).doubleValue();
697
                        dwgFile.setHeader("PSPACE_EXTMIN", spaces2);
698
                        
699
                        double[] spaces3 = new double[3];
700
                        val = DwgUtil.getBitDouble(intData, bitPos);
701
                        bitPos = ((Integer)val.get(0)).intValue();
702
                        spaces3[0] = ((Double)val.get(1)).doubleValue();
703
                        val = DwgUtil.getBitDouble(intData, bitPos);
704
                        bitPos = ((Integer)val.get(0)).intValue();
705
                        spaces3[1] = ((Double)val.get(1)).doubleValue();
706
                        val = DwgUtil.getBitDouble(intData, bitPos);
707
                        bitPos = ((Integer)val.get(0)).intValue();
708
                        spaces3[2] = ((Double)val.get(1)).doubleValue();
709
                        dwgFile.setHeader("PSPACE_EXTMAX", spaces2);
710
                        
711
                } catch (Exception e) {
712
                        logger.error(e);
713
                }
714

    
715
                
716
// 
717
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
718
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
719
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
720
//    dwg.setHeader('PSPACE_EXTMAX', (_val1, _val2, _val3))
721
                
722
                
723
                
724
//    _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
725
//    _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
726
//    dwg.setHeader('PSPACE_LIMMIN', (_val1, _val2))
727
                
728
                
729
//    _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
730
//    _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
731
//    dwg.setHeader('PSPACE_LIMMAX', (_val1, _val2))
732
                
733
                
734
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
735
//    dwg.setHeader('PSPACE_ELEVATION', _val)
736
                
737
                
738
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
739
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
740
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
741
//    dwg.setHeader('PSPACE_UCSORG', (_val1, _val2, _val3))
742
                
743
                
744
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
745
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
746
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
747
//    dwg.setHeader('PSPACE_UCSXDIR', (_val1, _val2, _val3))
748
                
749
                
750
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
751
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
752
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
753
//    dwg.setHeader('PSPACE_UCSYDIR', (_val1, _val2, _val3))
754
                
755
                
756
//    _bitpos,  _handle = dwgutil.get_handle(_data, _bitpos)
757
//    dwg.setHeader('PSPACE_UCSNAME', _handle)
758
//    #print "bitpos: %d" % _bitpos
759
                
760
                
761
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
762
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
763
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
764
//    dwg.setHeader('MSPACE_INSBASE', (_val1, _val2, _val3))
765
                
766
                
767
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
768
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
769
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
770
//    dwg.setHeader('MSPACE_EXTMIN', (_val1, _val2, _val3))
771
                
772
                
773
                
774
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
775
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
776
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
777
//    dwg.setHeader('MSPACE_EXTMAX', (_val1, _val2, _val3))
778
                
779
                
780
//    _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
781
//    _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
782
//    dwg.setHeader('MSPACE_LIMMIN', (_val1, _val2))
783
                
784
                
785
//    _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
786
//    _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
787
//    dwg.setHeader('MSPACE_LIMMAX', (_val1, _val2))
788
                
789
                
790
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
791
//    dwg.setHeader('MSPACE_ELEVATION', _val)
792
                
793
                
794
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
795
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
796
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
797
//    dwg.setHeader('MSPACE_UCSORG', (_val1, _val2, _val3))
798
                
799
                
800
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
801
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
802
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
803
//    dwg.setHeader('MSPACE_UCSXDIR', (_val1, _val2, _val3))
804
                
805
                
806
//    _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
807
//    _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
808
//    _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
809
//    dwg.setHeader('MSPACE_UCSYDIR', (_val1, _val2, _val3))
810
                
811
                
812
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
813
//    dwg.setHeader('MSPACE_UCSNAME', _handle)
814
                
815
                
816
//    # print "bitpos: %d" % _bitpos
817
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
818
//    dwg.setHeader('DIMTOL', _val)
819
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
820
//    dwg.setHeader('DIMLIM', _val)
821
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
822
//    dwg.setHeader('DIMTIH', _val)
823
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
824
//    dwg.setHeader('DIMTOH', _val)
825
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
826
//    dwg.setHeader('DIMSE1', _val)
827
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
828
//    dwg.setHeader('DIMSE2', _val)
829
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
830
//    dwg.setHeader('DIMALT', _val)
831
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
832
//    dwg.setHeader('DIMTOFL', _val)
833
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
834
//    dwg.setHeader('DIMSAH', _val)
835
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
836
//    dwg.setHeader('DIMTIX', _val)
837
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
838
//    dwg.setHeader('DIMSOXD', _val)
839
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
840
//    dwg.setHeader('DIMALTD', _val)
841
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
842
//    dwg.setHeader('DIMZIN', _val)
843
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
844
//    dwg.setHeader('DIMSD1', _val)
845
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
846
//    dwg.setHeader('DIMSD2', _val)
847
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
848
//    dwg.setHeader('DIMTOLJ', _val)
849
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
850
//    dwg.setHeader('DIMJUST', _val)
851
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
852
//    dwg.setHeader('DIMFINT', _val)
853
//    _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
854
//    dwg.setHeader('DIMUPT', _val)
855
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
856
//    dwg.setHeader('DIMTZIN', _val)
857
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
858
//    dwg.setHeader('DIMMALTZ', _val)
859
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
860
//    dwg.setHeader('DIMMALTTZ', _val)
861
//    _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
862
//    dwg.setHeader('DIMTAD', _val)
863
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
864
//    dwg.setHeader('DIMUNIT', _val)
865
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
866
//    dwg.setHeader('DIMAUNIT', _val)
867
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
868
//    dwg.setHeader('DIMDEC', _val)
869
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
870
//    dwg.setHeader('DIMTDEC', _val)
871
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
872
//    dwg.setHeader('DIMALTU', _val)
873
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
874
//    dwg.setHeader('DIMALTTD', _val)
875
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
876
//    dwg.setHeader('DIMTXSTY', _handle)
877
//    # print "bitpos: %d" % _bitpos
878
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
879
//    dwg.setHeader('DIMSCALE', _val)
880
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
881
//    dwg.setHeader('DIMASZ', _val)
882
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
883
//    dwg.setHeader('DIMEXO', _val)
884
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
885
//    dwg.setHeader('DIMDLI', _val)
886
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
887
//    dwg.setHeader('DIMEXE', _val)
888
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
889
//    dwg.setHeader('DIMAND', _val)
890
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
891
//    dwg.setHeader('DIMDLE', _val)
892
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
893
//    dwg.setHeader('DIMTP', _val)
894
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
895
//    dwg.setHeader('DIMTM', _val)
896
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
897
//    dwg.setHeader('DIMTXT', _val)
898
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
899
//    dwg.setHeader('DIMCEN', _val)
900
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
901
//    dwg.setHeader('DIMSZ', _val)
902
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
903
//    dwg.setHeader('DIMALTF', _val)
904
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
905
//    dwg.setHeader('DIMLFAC', _val)
906
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
907
//    dwg.setHeader('DIMTVP', _val)
908
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
909
//    dwg.setHeader('DIMTFAC', _val)
910
//    _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
911
//    dwg.setHeader('DIMGAP', _val)
912
//    _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
913
//    dwg.setHeader('DIMPOST', _val)
914
//    _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
915
//    dwg.setHeader('DIMAPOST', _val)
916
//    _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
917
//    dwg.setHeader('DIMBLK', _string)
918
//    _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
919
//    dwg.setHeader('DIMBLK1', _string)
920
//    _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
921
//    dwg.setHeader('DIMBLK2', _string)
922
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
923
//    dwg.setHeader('DIMCLRD', _val)
924
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
925
//    dwg.setHeader('DIMCLRE', _val)
926
//    _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
927
//    dwg.setHeader('DIMCLRT', _val)
928
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
929
//    dwg.setHeader('BLOCK_CONTROL_OBJECT', _handle)
930
//    # print "bitpos: %d" % _bitpos
931
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
932
//    dwg.setHeader('LAYER_CONTROL_OBJECT', _handle)
933
//    # print "bitpos: %d" % _bitpos
934
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
935
//    dwg.setHeader('STYLE_CONTROL_OBJECT', _handle)
936
//    # print "bitpos: %d" % _bitpos
937
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
938
//    dwg.setHeader('LINETYPE_CONTROL_OBJECT', _handle)
939
//    # print "bitpos: %d" % _bitpos
940
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
941
//    dwg.setHeader('VIEW_CONTROL_OBJECT', _handle)
942
//    # print "bitpos: %d" % _bitpos
943
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
944
//    dwg.setHeader('UCS_CONTROL_OBJECT', _handle)
945
//    # print "bitpos: %d" % _bitpos
946
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
947
//    dwg.setHeader('VPORT_CONTROL_OBJECT', _handle)
948
//    # print "bitpos: %d" % _bitpos
949
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
950
//    dwg.setHeader('APPID_CONTROL_OBJECT', _handle)
951
//    # print "bitpos: %d" % _bitpos
952
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
953
//    dwg.setHeader('DIMSTYLE_CONTROL_OBJECT', _handle)
954
//    # print "bitpos: %d" % _bitpos
955
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
956
//    dwg.setHeader('VIEWPORT_ENTITY_HEADER', _handle)
957
//    # print "bitpos: %d" % _bitpos
958
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
959
//    dwg.setHeader('ACAD_GROUP_DICTIONARY', _handle)
960
//    # print "bitpos: %d" % _bitpos
961
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
962
//    dwg.setHeader('ACAD_MLINE_DICTIONARY', _handle)
963
//    # print "bitpos: %d" % _bitpos
964
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
965
//    dwg.setHeader('NAMED_OBJECT_DICTONARY', _handle)
966
//    # print "bitpos: %d" % _bitpos
967
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
968
//    dwg.setHeader('PAPER_BLOCK_RECORD', _handle)
969
//    # print "bitpos: %d" % _bitpos
970
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
971
//    dwg.setHeader('MODEL_BLOCK_RECORD', _handle)
972
//    # print "bitpos: %d" % _bitpos
973
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
974
//    dwg.setHeader('LTYPE_BYLAYER', _handle)
975
//    # print "bitpos: %d" % _bitpos
976
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
977
//    dwg.setHeader('LTYPE_BYBLOCK', _handle)
978
//    # print "bitpos: %d" % _bitpos
979
//    _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
980
//    dwg.setHeader('LTYPE_CONTINUOUS', _handle)
981
//    # print "bitpos: %d" % _bitpos
982
//    # print "bitpos after LTYPE (CONTINUOUS): %d" % _bitpos
983
//    #
984
//    # remaing bits are unknown, and they end with possible
985
//    # padding bits so that 16-bit CRC value after the data
986
//    # is on a byte boundary - ignore them for now ...
987
//    #
988
//                                        
989
                                        
990
        }
991
        
992
        
993
        
994
        
995
        
996
        /**
997
         * It read the SECTIONS from the header of the DWG file
998
         * 
999
         * TODO Mover esto a una clase abstracta Reader, pues es similar
1000
         * para DWG 15 (o hacer que esta herede de DWG 15)
1001
         * 
1002
         * 
1003
         * 
1004
         * */
1005
        protected void readDwgSectionOffsets() {
1006
                //6 primeros bytes: version de autocad
1007
                
1008
                //7 siguientes bytes: 6 ceros y un 1 (0000001)
1009
                //No obstante, la especificaci?n Python dice que los bytes que lee
1010
                //con _buf.fromfile(handle, 7)  son bytes de la maquina. REVISAR
1011
                
1012
                /*Asi se hace copiando integramente Python. Ver si funciona NIO
1013
                byte[] chunk = {bb.get(), 
1014
                                                bb.get(),
1015
                                                bb.get(),
1016
                                                bb.get(),
1017
                                                bb.get(),
1018
                                                bb.get(),
1019
                                                bb.get()};
1020
                */
1021
                bb.order(ByteOrder.nativeOrder());
1022
                byte[] chunk = new byte[7];
1023
                bb.get(chunk);
1024
                
1025
                
1026
                if(chunk[0] != 0)
1027
                        logger.warn("chunk[0] != 0");
1028
                if(chunk[1] != 0)
1029
                        logger.warn("chunk[1] != 0");
1030
                if(chunk[2] != 0)
1031
                        logger.warn("chunk[2] != 0");
1032
                if(chunk[3] != 0)
1033
                        logger.warn("chunk[3] != 0");
1034
                if(chunk[4] != 0)
1035
                        logger.warn("chunk[4] != 0");
1036
                if(chunk[5] != 0)
1037
                        logger.warn("chunk[5] != 0");
1038
                if(chunk[6] != 0)
1039
                        logger.warn("chunk[6] != 0");
1040
                
1041
                 
1042
                  /*
1043
                   * 
1044
                   * */
1045
                
1046
                  //Siempre que en python una lectura se haga as? '<'+loquesea
1047
                  //hay que poner little_endian. Si no, se dejan los de la maquina
1048
                  // (y si aparece > se pone big endian)
1049
                  bb.order(ByteOrder.LITTLE_ENDIAN);
1050
                  byte _ub1 = bb.get();
1051
                  byte _ub2 = bb.get();
1052
                  int imageSeeker = bb.getInt(); 
1053
                  /*
1054
                   TRATAMIENTO DEL IMAGE_SEEKER: LECTURA DE IMAGENES BMP y WMF incrustadas
1055
                  if _image_seeker != 0:
1056
                _offsets['IMAGE'] = _image_seeker
1057
                _offset = handle.tell()
1058
                _bmpdata, _wmfdata = read_image(handle, _image_seeker)
1059
                handle.seek(_offset, 0)  
1060
              print "image seeker to %#x" % _image_seeker
1061
              print "offset at %#x" % handle.tell()
1062
              */
1063
                  
1064
                  
1065
                bb.position(19);//en realidad ya hemos leido 20 bytes
1066
                
1067
                short codePage = bb.getShort();
1068
                int count = bb.getInt();
1069
                
1070
                for (int i=0; i<count; i++) {
1071
                        
1072
                        byte rec = bb.get();
1073
                        int seek = bb.getInt();
1074
                        int size = bb.getInt();
1075
                        
1076
                        String sectionName = "";
1077
                        switch(rec){
1078
                        case 0:
1079
                                sectionName = "HEADERS";
1080
                                break;
1081
                        
1082
                        case 1:
1083
                                sectionName = "CLASSES";
1084
                                break;
1085
                                
1086
                        case 2:
1087
                                sectionName = "OBJECTS";
1088
                                break;
1089
                        case 3:
1090
                                sectionName = "UNKNOWN";
1091
                                break;
1092
                        case 4:
1093
                                sectionName = "R14DATA";
1094
                                break;
1095
                        case 5:
1096
                                sectionName = "R14_REC5";
1097
                                break;
1098
                        default:
1099
                                logger.warn("Seccion con codigo desconocido:"+rec);
1100
                                break;
1101
                        
1102
                        }//switch
1103
                        dwgFile.addDwgSectionOffset(sectionName, seek, size);
1104
                }//for
1105
                
1106
                
1107
                //finalmente se lee el CRC
1108
                short _crc = bb.getShort();
1109
                logger.info("CRC="+ _crc);
1110
                
1111
                
1112
                
1113
                //Seguidamente aparece una seccion fija de 16 bytes
1114
                //Esto hay que leerlo como "bytes de la maquina"
1115
                //TODO Ver si esto afecta
1116
                bb.order(ByteOrder.nativeOrder());
1117
                
1118
                byte[] c2 = new byte[16];
1119
                bb.get(c2);
1120
                if(c2[0] != 0x95)
1121
                        logger.warn("c2[0] != 0x95");
1122
                if(c2[1] != 0xa0)
1123
                        logger.warn("c2[1] != 0xa0");
1124
                if(c2[2] != 0x4e)
1125
                        logger.warn("c2[2] != 0x4e");
1126
                if(c2[3] != 0x28)
1127
                        logger.warn("c2[3] != 0x28");
1128
                if(c2[4] != 0x99)
1129
                        logger.warn("c2[4] != 0x99");
1130
                if(c2[5] != 0x82)
1131
                        logger.warn("c2[5] != 0x82");
1132
                if(c2[6] != 0x1a)
1133
                        logger.warn("c2[6] != 0x1a");
1134
                if(c2[7] != 0xe5)
1135
                        logger.warn("c2[7] != 0xe5");
1136
                if(c2[8] != 0x5e)
1137
                        logger.warn("c2[8] != 0x5e");
1138
                if(c2[9] != 0x41)
1139
                        logger.warn("c2[9] != 0x41");
1140
                if(c2[10] != 0xe0)
1141
                        logger.warn("c2[10] != 0xe0");
1142
                if(c2[11] != 0x5f)
1143
                        logger.warn("c2[11] != 0x5f");
1144
                if(c2[12] != 0x9d)
1145
                        logger.warn("c2[12] != 0x9d");
1146
                if(c2[13] != 0x3a)
1147
                        logger.warn("c2[13] != 0x3a");
1148
                if(c2[14] != 0x4d)
1149
                        logger.warn("c2[14] != 0x4d");
1150
                if(c2[15] != 0x00)
1151
                        logger.warn("c2[15] != 0x00");
1152
                
1153
                
1154
        
1155
        }
1156
        
1157
        
1158
        
1159
        
1160
        /**
1161
         * OpenDWG spec says:
1162
         * This section -object map- is a table which gives the location of
1163
         * each object in the DWG file.
1164
         * This table is broken into sections. It is basically a list of
1165
         * handle/file loc pairs. It could be readed with this pseudocode:
1166
         * 
1167
         *    Set lastHandle to all 0 and last loc to 0L.
1168
         *    Repeat until section size == 2
1169
         *                         section size = read short (in bigendian order)
1170
         *                         Repeat until out of data for this section
1171
         *                                 offset of this handle form last handle as modular char
1172
         *                                 offset of location in file from last location as modular char
1173
         *                         End repeat
1174
         *           End repeat
1175
         * 
1176
         * */
1177
        protected void readDwgObjectOffsets() throws Exception {
1178
                int offset = dwgFile.getDwgSectionOffset("OBJECTS");
1179
                bb.position(offset);
1180
                while (true) {
1181
                        bb.order(ByteOrder.BIG_ENDIAN);
1182
                        /*
1183
                         * We read the size of the next section.
1184
                         * If size == 2, break (it is the last empty -except crc- section)
1185
                         * */
1186
                        short size = bb.getShort();
1187
                        if (size==2) 
1188
                                break;
1189
                        bb.order(ByteOrder.LITTLE_ENDIAN);
1190
                        byte[] dataBytes = new byte[size];
1191
                        for (int i=0; i<dataBytes.length; i++) {
1192
                                dataBytes[i] = bb.get();
1193
                        }
1194
                        int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
1195
                        int lastHandle=0;
1196
                        int lastLoc=0;
1197
                        int bitPos=0;
1198
                        int bitMax= (size - 2) * 8;
1199
                        while (bitPos < bitMax) {
1200
                                ArrayList v = DwgUtil.getModularChar(data, bitPos);
1201
                                bitPos = ((Integer)v.get(0)).intValue();
1202
                                lastHandle = lastHandle + ((Integer)v.get(1)).intValue();
1203
                                v = DwgUtil.getModularChar(data, bitPos);
1204
                                bitPos = ((Integer)v.get(0)).intValue();
1205
                                lastLoc = lastLoc + ((Integer)v.get(1)).intValue();
1206
                                dwgFile.addDwgObjectOffset(lastHandle, lastLoc);
1207
                        }//while
1208
                }//while
1209
        }
1210
        
1211
        /*
1212
         * Unused.
1213
         * 
1214
         * Dwg spec says that drawing entities (objects) that has not
1215
         * a fixed type must read its type from this section
1216
         * 
1217
         * 
1218
         * */
1219
        protected void readDwgClasses() throws Exception {
1220
                int offset = dwgFile.getDwgSectionOffset("CLASSES");
1221
                // Por ahora nos saltamos los 16 bytes de control
1222
                bb.position(offset+16);
1223
                bb.order(ByteOrder.LITTLE_ENDIAN);
1224
                int size = bb.getInt();
1225
                byte[] dataBytes = new byte[size];
1226
                for (int i=0; i<dataBytes.length; i++) {
1227
                        dataBytes[i] = bb.get();
1228
                }
1229
                int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
1230
                for (int i=0; i<data.length; i++) {
1231
                        data[i] = (byte)ByteUtils.getUnsigned((byte)data[i]);
1232
                }
1233
                bb.position(bb.position()+2+16);
1234
                int maxbit = size * 8;
1235
                int bitPos = 0;
1236
                while ((bitPos+8) < maxbit) {
1237
                        ArrayList v = DwgUtil.getBitShort(data, bitPos);
1238
                        bitPos = ((Integer)v.get(0)).intValue();
1239
                        v = DwgUtil.getBitShort(data, bitPos);
1240
                        bitPos = ((Integer)v.get(0)).intValue();
1241
                        v = DwgUtil.getTextString(data, bitPos);
1242
                        bitPos = ((Integer)v.get(0)).intValue();
1243
                        v = DwgUtil.getTextString(data, bitPos);
1244
                        bitPos = ((Integer)v.get(0)).intValue();
1245
                        v = DwgUtil.getTextString(data, bitPos);
1246
                        bitPos = ((Integer)v.get(0)).intValue();
1247
                        v = DwgUtil.testBit(data, bitPos);
1248
                        bitPos = ((Integer)v.get(0)).intValue();
1249
                        v = DwgUtil.getBitShort(data, bitPos);
1250
                        bitPos = ((Integer)v.get(0)).intValue();
1251
                }
1252
        }
1253
        
1254
        
1255
        /**
1256
         * Reads all the object referenced in the object map section of the
1257
         * DWG file (using their object file obsets)
1258
         * */
1259
        protected void readDwgObjects() {
1260
                for (int i=0; i<dwgFile.getDwgObjectOffsets().size(); i++) {
1261
                        DwgObjectOffset doo = (DwgObjectOffset)dwgFile.getDwgObjectOffsets().get(i);
1262
                        DwgObject obj = readDwgObject(doo.getOffset(), i);
1263
                        /*
1264
                        azabala: las entidades DWG no implementadas no nos aportan nada
1265
                        (aunque la sigo leyendo por si aparecen problemas de puntero de fichero)
1266
                        No considero por tanto los DwgObject
1267
                        if (obj != null) {
1268
                dwgFile.addDwgObject(obj);
1269
            }
1270
            */
1271
                        if(obj != null && obj.getClass() != DwgObject.class){
1272
                                dwgFile.addDwgObject(obj);
1273
                        }
1274
                }
1275
        }
1276
        
1277
        /**
1278
         * Return a dwg object from its index in the dwg file
1279
         * @param index of the requested dwg object in the dwg file
1280
         * 
1281
         * */
1282
        public DwgObject getDwgObjectByIndex(int index){
1283
                DwgObjectOffset doo = (DwgObjectOffset)dwgFile.getDwgObjectOffsets().get(index);
1284
                return readDwgObject(doo.getOffset(), index);
1285
        }
1286
        
1287
        /**
1288
         * Reads a dwg drawing entity (dwg object) given its offset in the file
1289
         * */
1290
        
1291
        
1292
        protected DwgObject readDwgObject(int offset, int index) {
1293
            try {
1294
                        bb.position(offset);
1295
                        int size = DwgUtil.getModularShort(bb);
1296
                        
1297
                        bb.order(ByteOrder.LITTLE_ENDIAN);
1298
                        byte[] dataBytes = new byte[size];
1299
                        String[] dataMachValString = new String[size];
1300
                        int[] data = new int[size];
1301
                        for (int i=0; i < size; i++) {
1302
                                dataBytes[i] = bb.get();
1303
                                dataMachValString[i] = HexUtil.bytesToHex(new byte[]{dataBytes[i]});
1304
                                Integer dataMachValShort = Integer.decode("0x" + dataMachValString[i]);
1305
                                data[i] = dataMachValShort.byteValue();
1306
                                data[i] = ByteUtils.getUnsigned((byte)data[i]);
1307
                        }
1308
                        
1309
                        
1310
                        int bitPos = 0;
1311
                        ArrayList v = DwgUtil.getBitShort(data, bitPos);
1312
                        bitPos = ((Integer)v.get(0)).intValue();
1313
                        int type = ((Integer)v.get(1)).intValue();
1314
                        
1315
                        DwgObject obj = DwgObjectFactory.
1316
                                                                getInstance().
1317
                                                                create(type, index);
1318
                   
1319
                                    
1320
                    v = DwgUtil.getRawLong(data, bitPos);
1321
                    bitPos = ((Integer)v.get(0)).intValue();
1322
                    int objBSize = ((Integer)v.get(1)).intValue();
1323
                    obj.setSizeInBits(objBSize);
1324
                    
1325
          
1326
                    ArrayList entityHandle = new ArrayList();
1327
                    v = DwgUtil.getHandle(data, bitPos);
1328
                    bitPos = ((Integer)v.get(0)).intValue();
1329
                    for (int i=1;i<v.size();i++) {
1330
                            entityHandle.add(v.get(i));
1331
                    }
1332
                    obj.setHandle(DwgUtil.
1333
                                    handleBinToHandleInt(entityHandle));
1334
                               
1335
                    v = DwgUtil.readExtendedData(data, bitPos);
1336
                    bitPos = ((Integer)v.get(0)).intValue();
1337
                    ArrayList extData = (ArrayList)v.get(1);
1338
                    obj.setExtendedData(extData);
1339
                    
1340
                                   
1341
                    boolean gflag = false;
1342
                    gflag = obj.isGraphicsFlag();           
1343
                    if (gflag) {
1344
                            //lee un flag boolean
1345
                            v = DwgUtil.testBit(data, bitPos);
1346
                            bitPos = ((Integer)v.get(0)).intValue();
1347
                            boolean val = ((Boolean)v.get(1)).booleanValue();
1348
                           //si hay imagen asociada, se lee por completo
1349
                            if (val) {
1350
                                    v = DwgUtil.getRawLong(data, bitPos);
1351
                                    bitPos = ((Integer)v.get(0)).intValue();
1352
                                    size = ((Integer)v.get(1)).intValue();
1353
                                    int bgSize = size*8;
1354
                                        Integer giData = (Integer)DwgUtil.getBits(data, bgSize, bitPos);
1355
                                        obj.setGraphicData(giData.intValue());
1356
                                        bitPos = bitPos + bgSize;
1357
                            }
1358
                    }
1359
                    
1360
                        readSpecificObject(obj, data, bitPos);
1361
                    return obj;
1362
            } catch (Exception e) {
1363
//                logger.warn("Exception capturada. Probablemente se ha encontrado un" +
1364
//                                "objeto con type non fixed");
1365
                //e.printStackTrace();
1366
                return null;
1367
            }
1368
        }
1369
        
1370
        /*
1371
         * TODO Esto est? pesimamente dise?ado.
1372
         * Cada objeto DwgObject debe tener un metodo
1373
         * readSpecificObject(data,bitPos)
1374
         * 
1375
         * */
1376
        protected void readSpecificObject(DwgObject obj, int[] data, int bitPos) throws Exception {
1377
                if (obj.getType()==0x11) {
1378
                        ((DwgArc)obj).readDwgArcV15(data, bitPos);
1379
                } else if (obj.getType()==0x12) {
1380
                        ((DwgCircle)obj).readDwgCircleV15(data, bitPos);
1381
                } else if (obj.getType()==0x13) {
1382
                        ((DwgLine)obj).readDwgLineV15(data, bitPos);
1383
                } else if (obj.getType()==0x1B) {
1384
                        ((DwgPoint)obj).readDwgPointV15(data, bitPos);
1385
                } else if (obj.getType()==0x0F) {
1386
                        ((DwgPolyline2D)obj).readDwgPolyline2DV15(data, bitPos);
1387
                } else if (obj.getType()==0x10) {
1388
                        ((DwgPolyline3D)obj).readDwgPolyline3DV15(data, bitPos);
1389
                } else if (obj.getType()==0x0A) {
1390
                        ((DwgVertex2D)obj).readDwgVertex2DV15(data, bitPos);
1391
                } else if (obj.getType()==0x0B) {
1392
                        ((DwgVertex3D)obj).readDwgVertex3DV15(data, bitPos);
1393
                } else if (obj.getType()==0x6) {
1394
                        ((DwgSeqend)obj).readDwgSeqendV15(data, bitPos);
1395
                } else if (obj.getType()==0x1) {
1396
                        ((DwgText)obj).readDwgTextV15(data, bitPos);
1397
                } else if (obj.getType()==0x2) {
1398
                        ((DwgAttrib)obj).readDwgAttribV15(data, bitPos);
1399
                } else if (obj.getType()==0x3) {
1400
                        ((DwgAttdef)obj).readDwgAttdefV15(data, bitPos);
1401
                } else if (obj.getType()==0x4) {
1402
                        ((DwgBlock)obj).readDwgBlockV15(data, bitPos);
1403
                } else if (obj.getType()==0x5) {
1404
                        ((DwgEndblk)obj).readDwgEndblkV15(data, bitPos);
1405
                } else if (obj.getType()==0x30) {
1406
                        ((DwgBlockControl)obj).readDwgBlockControlV15(data, bitPos);
1407
                } else if (obj.getType()==0x31) {
1408
                        ((DwgBlockHeader)obj).readDwgBlockHeaderV15(data, bitPos);
1409
                } else if (obj.getType()==0x32) {
1410
                        ((DwgLayerControl)obj).readDwgLayerControlV15(data, bitPos);
1411
                } else if (obj.getType()==0x33) {
1412
                        ((DwgLayer)obj).readDwgLayerV15(data, bitPos);
1413
                } else if (obj.getType()==0x7) {
1414
                        ((DwgInsert)obj).readDwgInsertV15(data, bitPos);
1415
                } else if (obj.getType()==0x2C) {
1416
                        ((DwgMText)obj).readDwgMTextV15(data, bitPos);
1417
                } else if (obj.getType()==0x1F) {
1418
                        ((DwgSolid)obj).readDwgSolidV15(data, bitPos);
1419
                } else if (obj.getType()==0x23) {
1420
                        ((DwgEllipse)obj).readDwgEllipseV15(data, bitPos);
1421
                } else if (obj.getType()==0x24) {
1422
                        ((DwgSpline)obj).readDwgSplineV15(data, bitPos);
1423
                } else if (obj.getType()==0x14) {
1424
                        //logger.warn("... detectado un dim del tipo 0x14 ...");
1425
                } else if (obj.getType()==0x15) {
1426
                        //logger.warn("... detectado un dim del tipo 0x15 ...");
1427
                        //((DwgLinearDimension)obj).readDwgLinearDimensionV15(data, bitPos);
1428
                } else if (obj.getType()==0x16) {
1429
                        //logger.warn("... detectado un dim del tipo 0x16 ...");
1430
                } else if (obj.getType()==0x17) {
1431
                        //logger.warn("... detectado un dim del tipo 0x17 ...");
1432
                } else if (obj.getType()==0x18) {
1433
                        //logger.warn("... detectado un dim del tipo 0x18 ...");
1434
                } else if (obj.getType()==0x19) {
1435
                        //logger.warn("... detectado un dim del tipo 0x19 ...");
1436
                } else if (obj.getType()==0x1A) {
1437
                        //logger.warn("... detectado un dim del tipo 0x1A ...");
1438
                } else if (obj.getType()==0x4D) {
1439
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1440
                } else if (obj.getType()==0x4E) {
1441
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1442
                } else if (obj.getType()==0x4F) {
1443
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1444
                } else if (obj.getType()==0x50) {
1445
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1446
                } else if (obj.getType()==0x51) {
1447
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1448
                } else if (obj.getType()==0x52) {
1449
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1450
                } else if (obj.getType()==0x53) {
1451
                        ((DwgLwPolyline)obj).readDwgLwPolylineV15(data, bitPos);
1452
                } else {
1453
                        //logger.warn("Tipo de objeto pendiente de implementaci?n");
1454
                }
1455
        }
1456
}