Statistics
| Revision:

svn-gvsig-desktop / tags / v1_0_2_Build_908 / libraries / libCq CMS for java.old / src / org / cresques / io / DxfFile.java @ 11054

History | View | Annotate | Download (67.9 KB)

1 2809 nacho
/*
2
 * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
3
 *
4
 * Copyright (C) 2004-5.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
19
 *
20
 * For more information, contact:
21
 *
22
 * cresques@gmail.com
23
 */
24 2 luisw
package org.cresques.io;
25
26
import java.io.BufferedReader;
27
import java.io.FileNotFoundException;
28
import java.io.FileReader;
29 12 luisw
import java.io.FileWriter;
30 2 luisw
import java.io.IOException;
31
import java.io.InputStream;
32
import java.io.InputStreamReader;
33
import java.io.Reader;
34 12 luisw
import java.util.Date;
35 2 luisw
import java.util.Hashtable;
36
import java.util.Vector;
37 94 luisw
import org.cresques.cts.ICoordTrans;
38
import org.cresques.cts.IProjection;
39
import org.cresques.geo.Projected;
40 13 luisw
import org.cresques.px.Extent;
41 96 luisw
import org.cresques.px.IObjList;
42 13 luisw
import org.cresques.px.dxf.DxfEntityMaker;
43 2809 nacho
import org.cresques.px.dxf.DxfHeaderManager;
44
import org.cresques.px.dxf.DxfHeaderVariables;
45 2 luisw
46 2809 nacho
/**
47
 * Clase que representa un fichero en formato DXF. Contiene los interfaces y m?todos
48
 * necesarios para acceder a la informaci?n almacenada en su interior.
49
 *
50
 * @author jmorell
51
 */
52 2 luisw
public class DxfFile extends GeoFile {
53
54 111 jmorell
        private boolean cadFlag = true;
55
56 2 luisw
        long lineNr = 0;
57
58
        String buf = null;
59
60
        BufferedReader fi;
61
        long l = 0;
62
        int count = 0;
63
        DxfGroup grp = null;
64
65 9 luisw
        EntityFactory entityMaker = null;
66 2809 nacho
        VarSettings headerManager;
67 3188 jmorell
    private boolean dxf3DFlag;
68 2 luisw
69 11 luisw
        /**
70
         * Crea los objetos en el Modelo correspondiente.
71
         * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
72
         */
73 94 luisw
        public interface EntityFactory extends Projected {
74 2809 nacho
75
                /**
76
         * Permite saber si se est?n a?adiendo elementos a un bloque
77
         * @param booleano que indica si se est?n a?adiendo elementos a un bloque
78
                 */
79
        public void setAddingToBlock(boolean a);
80
81
        /**
82
         * Crea una nueva capa partiendo de la informaci?n almacenada en el DXF
83
         * @param DxfGroupVector con informaci?n para la construcci?n de la nueva capa
84
         * @throws Exception
85
         */
86 9 luisw
                public void createLayer(DxfGroupVector v) throws Exception ;
87 2809 nacho
88
        /**
89
         * Crea una nueva polil?nea partiendo de la informaci?n almacenada en el DXF
90
         * @param DxfGroupVector con informaci?n para la construcci?n de la nueva polil?nea
91
         * @throws Exception
92
         */
93 9 luisw
                public void createPolyline(DxfGroupVector v) throws Exception ;
94 2809 nacho
95
        /**
96
         * A?ade un v?rtice a la polil?nea que se est? creando
97
         * @param DxfGroupVector con la informaci?n necesaria para la adici?n del v?rtice
98
         * @throws Exception
99
         */
100 9 luisw
                public void addVertex(DxfGroupVector v) throws Exception ;
101 2809 nacho
102
        /**
103
         * Fin de secuencia
104
         * @throws Exception
105
         */
106
        public void endSeq() throws Exception ;
107
108
        /**
109
         * Crea una nueva LwPolyline partiendo de la informaci?n almacenada en el DXF
110
         * @param DxfGroupVector con informaci?n para la construcci?n de la nueva polil?nea
111
         * @throws Exception
112
         */
113 9 luisw
                public void createLwPolyline(DxfGroupVector v) throws Exception ;
114 2809 nacho
115
        /**
116
         * Crea una nueva l?nea partiendo de la informaci?n almacenada en el DXF
117
         * @param DxfGroupVector con informaci?n para la construcci?n de la nueva l?nea
118
         * @throws Exception
119
         */
120
        public void createLine(DxfGroupVector v) throws Exception ;
121
122
        /**
123
         * Crea un nuevo texto partiendo de la informaci?n almacenada en el DXF
124
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo texto
125
         * @throws Exception
126
         */
127
        public void createText(DxfGroupVector v) throws Exception ;
128
129
        /**
130
         * Crea un nuevo MText partiendo de la informaci?n almacenada en el DXF
131
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo MText
132
         * @throws Exception
133
         */
134
        public void createMText(DxfGroupVector v) throws Exception ;
135
136
        /**
137
         * Crea un nuevo punto partiendo de la informaci?n almacenada en el DXF
138
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo punto
139
         * @throws Exception
140
         */
141
        public void createPoint(DxfGroupVector v) throws Exception ;
142
143
        /**
144
         * Crea un nuevo c?rculo partiendo de la informaci?n almacenada en el DXF
145
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo c?rculo
146
         * @throws Exception
147
         */
148
        public void createCircle(DxfGroupVector v) throws Exception ;
149
150
        /**
151
         * Crea una nueva elipse partiendo de la informaci?n almacenada en el DXF
152
         * @param DxfGroupVector con informaci?n para la construcci?n de la nueva elipse
153
         * @throws Exception
154
         */
155
        public void createEllipse(DxfGroupVector v) throws Exception ;
156
157
        /**
158
         * Crea un nuevo arco partiendo de la informaci?n almacenada en el DXF
159
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo arco
160
         * @throws Exception
161
         */
162
        public void createArc(DxfGroupVector v) throws Exception ;
163
164
        /**
165
         * Crea un nuevo punto de inserci?n partiendo de la informaci?n almacenada en el DXF
166
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo punto de inserci?n
167
         * @throws Exception
168
         */
169
        public void createInsert(DxfGroupVector v) throws Exception ;
170
171
        /**
172
         * Crea un nuevo s?lido 2D partiendo de la informaci?n almacenada en el DXF
173
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo s?lido
174
         * @throws Exception
175
         */
176
        public void createSolid(DxfGroupVector v) throws Exception ;
177
178
        /**
179
         * Crea un nuevo Spline partiendo de la informaci?n almacenada en el DXF
180
         * @param DxfGroupVector con informaci?n para la construcci?n del nuevo Spline
181
         * @throws Exception
182
         */
183
        public void createSpline(DxfGroupVector v) throws Exception ;
184
185
        /**
186
         * Construye la definici?n de un nuevo atributo partiendo de la informaci?n almacenada en el DXF
187
         * @param DxfGroupVector con informaci?n para la construcci?n de la definici?n del nuevo atributo
188
         * @throws Exception
189
         */
190
        public void createAttdef(DxfGroupVector v) throws Exception ;
191
192
        /**
193
         * Crea un nuevo atributo partiendo de la informaci?n almacenada en el DXF
194
         * @param DxfGroupVector con informaci?n para la creaci?n del nuevo atributo
195
         * @throws Exception
196
         */
197
        public void createAttrib(DxfGroupVector v) throws Exception ;
198
199
        /**
200
         * Crea un bloque
201
         * @param DxfGroupVector con informaci?n para la creaci?n del nuevo elemento
202
         * @throws Exception
203
         */
204
        public void createBlock(DxfGroupVector v) throws Exception ;
205
206
        /**
207
         * Fin de la definici?n de un bloqe
208
         * @param DxfGroupVector con informaci?n referente al final de un bloque
209
         * @throws Exception
210
         */
211
        public void endBlk(DxfGroupVector v) throws Exception ;
212
213
        /**
214
         * Gestiona los bloques que no se han tratado en la primera vuelta
215
         */
216
        void testBlocks();
217
218
        /**
219
         * Devuelve el extent
220
         * @return el extent
221
         */
222
        public Extent getExtent();
223
224
        /**
225
         * Devuelve la lista de bloques
226
         * @return la lista de bloques
227
         */
228
        public Vector getBlkList();
229
230
                /**
231
         * Permite la gesti?n de los atributos almacenados en unn DXF
232
         * @return un Vector con la lista de atributos
233
                 */
234
        public Vector getAttributes();
235
236
        /**
237
         * Borra los atributos repetidos
238
         */
239
        public void depureAttributes();
240
241
        /**
242
         * Devuelve los objetos almacenados en el DXF
243
         * @return IObjList con los objetos procedentes del DXF
244
         */
245
        public IObjList getObjects();
246
247
        /**
248
         * Permite saber si se trata de un fichero DXF en 2D o en 3D
249
         * @return booleano que indica si se trata de un fichero DXF 3D
250
         */
251
        public boolean isDxf3DFile();
252 9 luisw
        };
253
254 2809 nacho
        /**
255
         * Establece el estado de las variables propias de un DXF que est?n definidas
256
         * en la secci?n HEADER. Por ejemplo, la versi?n del DXF.
257
         * @author jmorell (jose.morell@gmail.com)
258
         * @version 15-dic-2004
259
         */
260
        public interface VarSettings {
261
262
                /**
263
                 * Establece la versi?n de Autocad en la que fue generado el DXF.
264
                 * @param informaci?n de base
265
                 * @throws Exception
266
                 */
267
                public void setAcadVersion(DxfGroupVector v) throws Exception ;
268
269
                /**
270
                 * Devuelve la versi?n de Autocad en la que fue generado el DXF.
271
                 * @return
272
                 */
273
                public String getAcadVersion();
274
275
                /**
276
                 * Devuelve el estado de las variables propias de un DXF
277
                 * @return
278
                 */
279
                public DxfHeaderVariables getDxfHeaderVars();
280 3188 jmorell
        public boolean isWritedDxf3D();
281
        public void loadMinZFromHeader(double d);
282
        public void loadMaxZFromHeader(double d);
283 2809 nacho
        };
284
285
    /**
286
     * Constructor de la clase
287
     * @param proj, la proyecci?n cartogr?fica
288
     * @param name, el path absoluto hasta el fichero DXF
289
     * @param maker, el interface que permite la construcci?n de las entidades procedentes del DXF
290
     */
291 94 luisw
        public DxfFile(IProjection proj, String name, EntityFactory maker) {
292 13 luisw
                super(proj, name);
293 2 luisw
                entityMaker = maker;
294 2809 nacho
                headerManager = new DxfHeaderManager();
295 2 luisw
        }
296
297 2809 nacho
    /**
298
     * Constructor de la clase que adem?s incorpora la capacidad de leer una porci?n del HEADER
299
     * @param proj, la proyecci?n cartogr?fica
300
     * @param name, el path absoluto hasta el fichero DXF
301
     * @param maker, el interface que permite la construcci?n de las entidades procedentes del DXF
302
     * @param dxfVars, el interface que permite la lectura del HEADER de un DXF
303
     */
304
    public DxfFile(IProjection proj, String name, EntityFactory maker, VarSettings dxfVars) {
305
                super(proj, name);
306
                entityMaker = maker;
307
                headerManager = dxfVars;
308
        }
309
310 2 luisw
        /**
311 2809 nacho
         * Carga un fichero en formato DXF
312 2 luisw
         */
313
        public GeoFile load() {
314
                System.out.println("Dxf: Cargando "+name+" ...");
315
                try {
316
                        if (ZipFileFolder.isUrl(name)) {
317
                                ZipFileFolder zFolder = new ZipFileFolder(name);
318
                                InputStream is = zFolder.getInputStream(name);
319
                                return load(new InputStreamReader(is));
320
                        } else
321
                                return load(new FileReader(name));
322
                } catch (FileNotFoundException fnfe) {
323
                        fnfe.printStackTrace();
324
                } catch (Exception e) {
325
                        System.err.println("Dxf: ERROR."+l+"lineas leidas");
326
                        e.printStackTrace();
327
                }
328
                return this;
329
        }
330
331 2809 nacho
    /**
332
     * Carga un fichero en formato DXF tomando un Reader como par?metro
333
     * @param fr, Reader que se le pasa como par?metro
334
     * @return devuelve un objeto GeoFile, padre de DxfFile
335
     * @throws NumberFormatException
336
     * @throws Exception
337
     */
338 2 luisw
        public GeoFile load(Reader fr) throws NumberFormatException, Exception {
339
                System.out.println("Dxf: Cargando '"+name+"' ...");
340
                fi = new BufferedReader(fr);
341
                while ((grp = readGrp()) != null) {
342
                        l+=2;
343
344
                        if (grp.equals(0, "EOF"))                break;
345
                        if (grp.equals(0, "SECTION"))
346
                                readSection();
347
                }
348
                fi.close();
349 13 luisw
                extent.add(entityMaker.getExtent());
350 2 luisw
                System.out.println("Dxf: '"+name+"' cargado. ("+l+" l?neas).");
351
                this.lineNr = l;
352
                return this;
353
        }
354
355 2809 nacho
    /**
356
     * El fichero DXF se divide en grupos. Este m?todo permite leer cada grupo individualmente
357
     * @return devuelve la informaci?n del DXF en forma de objetos de la clase DxfGroup
358
     * @throws NumberFormatException
359
     * @throws IOException
360
     */
361 2 luisw
        private DxfGroup readGrp() throws NumberFormatException, IOException {
362
                DxfGroup g = DxfGroup.read(fi);
363
                if (g != null) l += 2;
364 102 jmorell
                /*if (g.code == 8)
365
                        if (((String) g.data).length() < 1) {
366
                                System.err.println("a que un layer no puede ser ''?");
367
                                System.exit(1);
368
                        }*/
369 2 luisw
                return g;
370
        }
371
372 2809 nacho
    /**
373
     * El fichero DXF se divide en varias secciones. Este m?todo se encarga de leer cada
374
     * una de ellas
375
     * @throws NumberFormatException
376
     * @throws Exception
377
     */
378 2 luisw
        private void readSection() throws NumberFormatException, Exception {
379
                while (true) {
380 96 luisw
                        grp = readGrp(); System.out.print("-1:"+grp);
381 2 luisw
                        if (grp.code == 2)
382
                                if (((String) grp.data).compareTo("HEADER") == 0)
383 2809 nacho
                                        readHeader();
384 2 luisw
                                else if (((String) grp.data).compareTo("CLASSES") == 0)
385
                                        readAnySection();
386
                                else if (((String) grp.data).compareTo("TABLES") == 0)
387
                                        readTables();
388
                                else if (((String) grp.data).compareTo("BLOCKS") == 0)
389 57 jmorell
                                        readBlocks();
390 2 luisw
                                else if (((String) grp.data).compareTo("ENTITIES") == 0)
391
                                        readEntities();
392
                                else if (((String) grp.data).compareTo("OBJECTS") == 0)
393
                                        readAnySection();
394
                                else {
395
                                        System.out.println("DxfRead: Seccion "+grp.data);
396
                                        readAnySection();
397
                                }
398
                        else
399
                                System.err.println("Dxf: Codigo/Seccion desconocidos" + grp);
400
                        if (grp.equals(0, "EOF")) break;
401
                        if (grp.equals(0, "ENDSEC")) break;
402
                }
403
        }
404
405 2809 nacho
    /**
406
     * Habilita la lectura de la secci?n de TABLES
407
     * @throws NumberFormatException
408
     * @throws Exception
409
     */
410 2 luisw
        private void readTables() throws NumberFormatException, Exception {
411 96 luisw
                System.out.println("Dxf: Seccion TABLAS, linea "+ l+ "grp ="+ grp);
412 2 luisw
                int layerCnt = 0;
413
                String tableAct = "NONAME";
414
415
                Hashtable tables = new Hashtable();
416
                Vector table = new Vector();
417
                DxfGroupVector v = new DxfGroupVector();
418
419 96 luisw
                grp = readGrp();// System.out.print("0:"+grp);
420 2 luisw
                while (true) {
421
                        if (grp.code == 0) {
422
                                String data = (String) grp.getData();
423
                                if (data.compareTo("ENDSEC") == 0 || data.compareTo("EOF") == 0)
424
                                        break;
425
                                else if (data.compareTo("ENDTAB") == 0) {
426
                                        tables.put(tableAct, table);
427
                                        table = new Vector();
428 96 luisw
                                        grp = readGrp();// System.out.print("1:"+grp);
429
430
                                        /**/if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
431
                                                entityMaker.createLayer(v);
432
                                                System.out.println("Dxf: Layer "+v.getDataAsString(2));
433
                                                layerCnt++;
434
                                                v.clear();
435
                                        }/**/
436 2 luisw
                                        continue;
437
                                } else {
438
                                        if (table.size()==1) {
439
                                                tableAct = v.getDataAsString(2);
440
                                                System.out.println("Dxf: Tabla "+tableAct);
441
                                        } else
442
                                                if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
443
                                                        entityMaker.createLayer(v);
444 96 luisw
                                                        System.out.println("Dxf: Layer "+v.getDataAsString(2));
445 2 luisw
                                                        layerCnt++;
446
                                                }
447
448
                                        v.clear();
449
                                        v.add(grp);
450
                                }
451
                                while (true) {
452 96 luisw
                                        grp = readGrp();// System.out.print("2:"+grp);
453 2 luisw
                                        if (grp.code == 0)        break;
454
                                        v.add(grp);
455
                                }
456
                                table.add(v);
457
                        } else {
458
                                System.err.println("Dxf: Error de secuencia");
459 96 luisw
                                grp = readGrp(); //System.out.print("3:"+grp);
460 2 luisw
                        }
461
                }
462
                System.out.println("Dxf: Seccion TABLAS: " + layerCnt + " Capas. ");
463
        }
464
465 2809 nacho
    /**
466
     * M?todo de lectura de secci?n por defecto. Se utiliza mientras se realiza la
467
     * implementaci?n correspondiente
468
     * @throws NumberFormatException
469
     * @throws IOException
470
     */
471 2 luisw
        private void readAnySection() throws NumberFormatException, IOException {
472
                System.out.println("Dxf: Seccion '"+((String) grp.getData())+"', linea "+ l);
473
                while (true) {
474
                        grp = readGrp();
475
                        if (grp.equals(0, "ENDSEC")) break;
476
                        else if (grp.equals(0, "EOF")) break;
477
                }
478
        }
479
480 2809 nacho
        /**
481
         * Primera aproximaci?n a la implementaci?n de la lectura del HEADER. En principio
482
         * interesa que se lea la versi?n del DXF.
483
         * Para implementar esta parte del lector se ha optado por incluir el m?todo
484
         * setAcadVersion en el interface EntityFactory. A lo mejor conviene implementar
485
         * un nuevo interface VarSettings.
486
         * @throws NumberFormatException
487
         * @throws Exception
488
         */
489
        private void readHeader() throws NumberFormatException, Exception {
490
                System.out.println("Dxf: Seccion HEADER, linea "+ l);
491
                int variableCnt = 0;
492
                int cntVeces = 0;
493
                DxfGroupVector v = new DxfGroupVector();
494
                grp = readGrp();
495
                while (true) {
496
                        if (grp.equals(0, "EOF")) {
497
                                break;
498
                        }
499
                        else if (grp.code==9 || grp.code==0) {
500
                                if (v.size() > 0) {
501
                                        String lastVariable = (String) ((DxfGroup) v.get(0)).data;
502
                                        //System.out.println(lastVariable);
503
                                        if (lastVariable.compareTo("$ACADVER") == 0) {
504
                                                //System.out.println("Aqui llega.");
505
                                                headerManager.setAcadVersion(v);
506 3188 jmorell
                                        } else if (lastVariable.compareTo("$EXTMIN") == 0) {
507 8765 jjdelcerro
                                                if(v.hasCode(3))
508
                                                        headerManager.loadMinZFromHeader(((Double)((DxfGroup) v.get(3)).data).doubleValue());
509 3188 jmorell
                    } else if (lastVariable.compareTo("$EXTMAX") == 0) {
510 8765 jjdelcerro
                            if(v.hasCode(3))
511
                                    headerManager.loadMaxZFromHeader(((Double)((DxfGroup) v.get(3)).data).doubleValue());
512 3188 jmorell
                    } else if (lastVariable.compareTo("ENDSEC") == 0) {
513
                        //System.out.println("Llega al ENDSEC.");
514
                        break;
515 2968 jaume
                                        } /*else
516
                                                System.err.println("Dxf: Variable "+lastVariable+" desconocida.");*/
517 2809 nacho
                                }
518
                                v.clear();
519
                                v.add(grp);
520
                                while (true) {
521
                                        grp = readGrp();
522
                                        if (grp.code == 9 || grp.code==0)        break;
523
                                        v.add(grp);
524
                                }
525
                                variableCnt++;
526
                        }
527
                        cntVeces++;
528
                }
529
                System.out.println("Dxf: Seccion HEADER, " + variableCnt + " variables, "+ cntVeces + " veces.");
530
                //System.out.println("Seccion HEADER, linea "+ l+ " (SALGO)");
531
                System.out.println("readHeader: ACAD Version: " + headerManager.getDxfHeaderVars().getAcadVersion());
532
        }
533
534
    /**
535
     * Permite leer la secci?n ENTITIES del DXF, donde se encuentran las entidades
536
     * geom?tricas del DXF que no aparecen dentro de ning?n bloque
537
     * @throws NumberFormatException
538
     * @throws Exception
539
     */
540 2 luisw
        private void readEntities() throws NumberFormatException, Exception {
541
                System.out.println("Dxf: Seccion ENTITIES, linea "+ l);
542
                int entityCnt = 0;
543
                int cntVeces = 0;
544
                DxfGroupVector v = new DxfGroupVector();
545
                grp = readGrp();
546
                while (true) {
547 69 jmorell
                        if (grp.equals(0, "EOF")) break;
548 2 luisw
                        else if (grp.code == 0) {
549
                                if (v.size() > 0) {
550
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
551
                                        if (lastEntity.compareTo("POLYLINE") == 0) {
552
                                                entityMaker.createPolyline(v);
553
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
554
                                                entityMaker.addVertex(v);
555
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
556
                                                entityMaker.endSeq();
557
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
558
                                                entityMaker.createLwPolyline(v);
559
                                        } else if (lastEntity.compareTo("LINE") == 0) {
560
                                                entityMaker.createLine(v);
561
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
562
                                                entityMaker.createText(v);
563 2809 nacho
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
564
                                                entityMaker.createMText(v);
565 31 jmorell
                                        } else if (lastEntity.compareTo("POINT") == 0) {
566
                                                entityMaker.createPoint(v);
567 35 jmorell
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
568
                                                entityMaker.createCircle(v);
569 2809 nacho
                                        } else if (lastEntity.compareTo("ELLIPSE") == 0) {
570
                                                entityMaker.createEllipse(v);
571 38 jmorell
                                        } else if (lastEntity.compareTo("ARC") == 0) {
572
                                                entityMaker.createArc(v);
573 41 jmorell
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
574
                                                entityMaker.createInsert(v);
575 2 luisw
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
576
                                                entityMaker.createSolid(v);
577 90 jmorell
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
578
                                                entityMaker.createSpline(v);
579 171 jmorell
                                        } else if (lastEntity.compareTo("ATTRIB") == 0) {
580
                                                entityMaker.createAttrib(v);
581 59 jmorell
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
582
                                                break;
583 2 luisw
                                        } else
584
                                                System.err.println("Dxf: Entidad "+lastEntity+" desconocida.");
585
                                }
586
                                v.clear();
587
                                v.add(grp);
588
                                while (true) {
589
                                        grp = readGrp();
590
                                        if (grp.code == 0)        break;
591
                                        v.add(grp);
592
                                }
593
                                entityCnt++;
594
                        }
595
                        cntVeces++;
596
                }
597 71 jmorell
                System.out.println("Dxf: Seccion ENTITIES, " + entityCnt + " entidades, "+ cntVeces + " veces.");
598 2 luisw
                //System.out.println("Seccion ENTITIES, linea "+ l+ " (SALGO)");
599
        }
600 8 luisw
601 2809 nacho
    /**
602
     * Permite la secci?n BLOCKS del DXF, donde se encuentran las definiciones de los
603
     * bloques que componen el DXF
604
     * @throws NumberFormatException
605
     * @throws Exception
606
     */
607 57 jmorell
        private void readBlocks() throws NumberFormatException, Exception {
608
                System.out.println("Dxf: Seccion BLOCKS, linea "+ l);
609
                int blkCnt = 0;
610
                int cntVeces = 0;
611
                DxfGroupVector v = new DxfGroupVector();
612
                grp = readGrp();
613
                while (true) {
614 69 jmorell
                        if (grp.equals(0, "EOF")) break;
615 57 jmorell
                        else if (grp.code == 0) {
616
                                if (v.size() > 0) {
617
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
618
                                        if (lastEntity.compareTo("BLOCK") == 0) {
619 2809 nacho
                                                //System.out.println("readBlocks(): Empezamos a leer un bloque");
620 57 jmorell
                                                entityMaker.createBlock(v);
621
                                        } else if (lastEntity.compareTo("POLYLINE") == 0) {
622 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos una polilinea al bloque");
623 57 jmorell
                                                entityMaker.createPolyline(v);
624
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
625 96 luisw
                                                //System.out.println("readBlocks(): A?adimos un vertice a la polilinea");
626 57 jmorell
                                                entityMaker.addVertex(v);
627
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
628 96 luisw
                                                //System.out.println("readBlocks(): Cerramos una polilinea");
629 57 jmorell
                                                entityMaker.endSeq();
630
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
631 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos una lwpolilinea al bloque");
632 57 jmorell
                                                entityMaker.createLwPolyline(v);
633
                                        } else if (lastEntity.compareTo("LINE") == 0) {
634 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos una linea al bloque");
635 57 jmorell
                                                entityMaker.createLine(v);
636
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
637 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un texto al bloque");
638 57 jmorell
                                                entityMaker.createText(v);
639 2809 nacho
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
640
                                                //System.out.println("readBlocks(): A?adimos un m-texto al bloque");
641
                                                entityMaker.createMText(v);
642 57 jmorell
                                        } else if (lastEntity.compareTo("POINT") == 0) {
643 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un punto al bloque");
644 57 jmorell
                                                entityMaker.createPoint(v);
645
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
646 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un circulo al bloque");
647 57 jmorell
                                                entityMaker.createCircle(v);
648
                                        } else if (lastEntity.compareTo("ARC") == 0) {
649 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un arco al bloque");
650 57 jmorell
                                                entityMaker.createArc(v);
651
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
652 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un insert al bloque");
653 57 jmorell
                                                entityMaker.createInsert(v);
654
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
655 186 jmorell
                                                //System.out.println("readBlocks(): A?adimos un solido al bloque");
656 57 jmorell
                                                entityMaker.createSolid(v);
657 171 jmorell
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
658
                                                entityMaker.createSpline(v);
659
                                        } else if (lastEntity.compareTo("ATTDEF") == 0) {
660
                                                entityMaker.createAttdef(v);
661 57 jmorell
                                        } else if (lastEntity.compareTo("ENDBLK") == 0) {
662 2809 nacho
                                                //System.out.println("readBlocks(): Cerramos un bloque"+v);
663 57 jmorell
                                                entityMaker.endBlk(v);
664 59 jmorell
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
665
                                                break;
666 57 jmorell
                                        } else
667
                                                System.err.println("Dxf: Entidad de bloque "+lastEntity+" desconocida.");
668
                                }
669
                                v.clear();
670
                                v.add(grp);
671
                                while (true) {
672
                                        grp = readGrp();
673
                                        if (grp.code == 0)        break;
674
                                        v.add(grp);
675
                                }
676
                                blkCnt++;
677
                        }
678
                        cntVeces++;
679
                }
680 62 jmorell
681 78 luisw
                entityMaker.testBlocks();
682 2809 nacho
                // Cuando termina de leer la secci?n de bloques se asegura de que todos los campos
683
                // son distintos.
684
                //System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
685
                entityMaker.depureAttributes();
686
                //System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
687 59 jmorell
                System.out.println("Dxf: Seccion BLOCKS, " + blkCnt + " elementos de bloque. "+ cntVeces + " veces.");
688 57 jmorell
        }
689
690 2809 nacho
    /**
691
     * Devuelve los objetos geom?tricos obtenidos de un DXF
692
     */
693 96 luisw
        public IObjList getObjects() {
694
                return this.entityMaker.getObjects();
695
        }
696 79 jmorell
697 2809 nacho
        /**
698
         * jmorell: M?todo que permite salvar capas al formato DXF2000.
699
         * Este m?todo ha sido actualizado en el proceso de implementaci?n del piloto
700
         * de CAD. En este piloto deb?a existir soporte para elipses, y este es uno de
701
         * los motivos que nos llevan a implementar ahora para DXF2000, puesto que el
702
         * DXF R12 no soporta elipses.
703
         * @param fName
704
         * @throws IOException
705
         */
706 12 luisw
        public void save(String fName) throws IOException {
707 2809 nacho
                System.out.println("save: fName = " + fName);
708 14 luisw
                long t2, t1;
709
                t1 = getTime();
710 12 luisw
                fName = DataSource.normalize(fName);
711
                FileWriter fw = new FileWriter(fName);
712 13 luisw
                // COMMENTAIRES DU TRADUCTEUR
713
//                fw.write(DxfGroup.toString(999, Integer.toString(features.size()) + " features"));
714
                fw.write(DxfGroup.toString(999, "TRANSLATION BY geo.cresques.io.DxfFile"));
715
                fw.write(DxfGroup.toString(999, "DATE : " + (new Date()).toString()));
716 2809 nacho
                writeHeader(fw);
717
                writeTables(fw);
718
                writeBlocks(fw);
719 12 luisw
                writeEntities(fw);
720 2809 nacho
                writeObjects(fw);
721 13 luisw
                fw.write(DxfGroup.toString(0, "EOF"));
722
                fw.flush();
723 12 luisw
                fw.close();
724 14 luisw
                t2 = getTime();
725
                System.out.println("DxfFile.save(): Tiempo salvando: " + (t2-t1)/1000 + " seg.");
726 8 luisw
        }
727 2809 nacho
728
        /**
729
         * Escritor de la cabecera de un DXF.
730
         * jmorell: Actualizaci?n del escritor de DXF de R12 a 2000.
731
         * @param fw, un FileWriter para escribir ficheros
732
         * @throws IOException
733
         */
734 12 luisw
        public void writeHeader(FileWriter fw) throws IOException {
735 13 luisw
                fw.write(DxfGroup.toString(0, "SECTION"));
736
                fw.write(DxfGroup.toString(2, "HEADER"));
737
                fw.write(DxfGroup.toString(9, "$ACADVER"));
738 2809 nacho
                        //fw.write(DxfGroup.toString(1, "AC1009"));                        // DXF R12
739
                        fw.write(DxfGroup.toString(1, "AC1015"));                        // DXF 2000
740 17 luisw
                fw.write(DxfGroup.toString(9, "$INSBASE"));
741
                        fw.write(DxfGroup.toString(10, 0.0, 1));
742
                        fw.write(DxfGroup.toString(20, 0.0, 1));
743
                        fw.write(DxfGroup.toString(30, 0.0, 1));
744
                fw.write(DxfGroup.toString(9, "$EXTMIN"));
745
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
746
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
747 3188 jmorell
                        if (dxf3DFlag) fw.write(DxfGroup.toString(30, extent.minX(), 6));
748
            else fw.write(DxfGroup.toString(30, 0.0, 6));
749 13 luisw
                fw.write(DxfGroup.toString(9, "$EXTMAX"));
750
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
751
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
752 3188 jmorell
            if (dxf3DFlag) fw.write(DxfGroup.toString(30, extent.maxX(), 6));
753
            else fw.write(DxfGroup.toString(30, 0.0, 6));
754 17 luisw
                fw.write(DxfGroup.toString(9, "$LIMMIN"));
755 13 luisw
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
756
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
757
                fw.write(DxfGroup.toString(9, "$LIMMAX"));
758
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
759
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
760 17 luisw
                fw.write(DxfGroup.toString(9, "$ORTHOMODE")+DxfGroup.toString(70, 0));
761
                fw.write(DxfGroup.toString(9, "$REGENMODE")+DxfGroup.toString(70, 1));
762
                fw.write(DxfGroup.toString(9, "$FILLMODE")+        DxfGroup.toString(70, 1));
763
                fw.write(DxfGroup.toString(9, "$QTEXTMODE")+DxfGroup.toString(70, 0));
764
                fw.write(DxfGroup.toString(9, "$MIRRTEXT")+        DxfGroup.toString(70, 1));
765
                fw.write(DxfGroup.toString(9, "$DRAGMODE")+        DxfGroup.toString(70, 2));
766
                fw.write(DxfGroup.toString(9, "$LTSCALE")+        DxfGroup.toString(40, 1.0, 1));
767
                fw.write(DxfGroup.toString(9, "$OSMODE")+        DxfGroup.toString(70, 0));
768
                fw.write(DxfGroup.toString(9, "$ATTMODE")+        DxfGroup.toString(70, 1));
769 19 luisw
                fw.write(DxfGroup.toString(9, "$TEXTSIZE")+        DxfGroup.toString(40, 0.2, 1));
770
                fw.write(DxfGroup.toString(9, "$TRACEWID")+        DxfGroup.toString(40, 0.05, 2));
771
                fw.write(DxfGroup.toString(9, "$TEXTSTYLE")+        DxfGroup.toString(7, "STANDARD"));
772 17 luisw
                fw.write(DxfGroup.toString(9, "$CLAYER")+        DxfGroup.toString(8, "0"));
773
                fw.write(DxfGroup.toString(9, "$CELTYPE")+        DxfGroup.toString(6, "CONTINUOUS"));
774
                fw.write(DxfGroup.toString(9, "$CECOLOR")+        DxfGroup.toString(62, 256));
775
                fw.write(DxfGroup.toString(9, "$DIMSCALE")+        DxfGroup.toString(40, 1.0, 1));
776
                fw.write(DxfGroup.toString(9, "$DIMASZ")+        DxfGroup.toString(40, 0.18, 2));
777
                fw.write(DxfGroup.toString(9, "$DIMEXO")+        DxfGroup.toString(40, 0.0625, 4));
778
                fw.write(DxfGroup.toString(9, "$DIMDLI")+        DxfGroup.toString(40, 0.38, 2));
779
                fw.write(DxfGroup.toString(9, "$DIMRND")+        DxfGroup.toString(40, 0.0, 1));
780
                fw.write(DxfGroup.toString(9, "$DIMDLE")+        DxfGroup.toString(40, 0.0, 1));
781
                fw.write(DxfGroup.toString(9, "$DIMEXE")+        DxfGroup.toString(40, 0.18, 2));
782
                fw.write(DxfGroup.toString(9, "$DIMTP")+        DxfGroup.toString(40, 0.0, 1));
783
                fw.write(DxfGroup.toString(9, "$DIMTM")+        DxfGroup.toString(40, 0.0, 1));
784
                fw.write(DxfGroup.toString(9, "$DIMTXT")+        DxfGroup.toString(40, 0.18, 2));
785
                fw.write(DxfGroup.toString(9, "$DIMCEN")+        DxfGroup.toString(40, 0.09, 2));
786
                fw.write(DxfGroup.toString(9, "$DIMTSZ")+        DxfGroup.toString(40, 0.0, 1));
787 18 luisw
                fw.write(DxfGroup.toString(9,"$DIMTOL")+        DxfGroup.toString(70,0));
788
                fw.write(DxfGroup.toString(9,"$DIMLIM")+        DxfGroup.toString(70,0));
789
                fw.write(DxfGroup.toString(9,"$DIMTIH")+        DxfGroup.toString(70,1));
790
                fw.write(DxfGroup.toString(9,"$DIMTOH")+        DxfGroup.toString(70,1));
791
                fw.write(DxfGroup.toString(9,"$DIMSE1")+        DxfGroup.toString(70,0));
792
                fw.write(DxfGroup.toString(9,"$DIMSE2")+        DxfGroup.toString(70,0));
793
                fw.write(DxfGroup.toString(9,"$DIMTAD")+        DxfGroup.toString(70,0));
794
                fw.write(DxfGroup.toString(9,"$DIMZIN")+        DxfGroup.toString(70,0));
795
                fw.write(DxfGroup.toString(9,"$DIMBLK")+        DxfGroup.toString(1,""));
796
                fw.write(DxfGroup.toString(9,"$DIMASO")+        DxfGroup.toString(70,1));
797
                fw.write(DxfGroup.toString(9,"$DIMSHO")+        DxfGroup.toString(70,1));
798
                fw.write(DxfGroup.toString(9,"$DIMPOST")+        DxfGroup.toString(1,""));
799
                fw.write(DxfGroup.toString(9,"$DIMAPOST")+        DxfGroup.toString(1,""));
800
                fw.write(DxfGroup.toString(9,"$DIMALT")+        DxfGroup.toString(70,0));
801
                fw.write(DxfGroup.toString(9,"$DIMALTD")+        DxfGroup.toString(70,2));
802
                fw.write(DxfGroup.toString(9,"$DIMALTF")+        DxfGroup.toString(40,25.4,1));
803
                fw.write(DxfGroup.toString(9,"$DIMLFAC")+        DxfGroup.toString(40,1.0,1));
804
                fw.write(DxfGroup.toString(9,"$DIMTOFL")+        DxfGroup.toString(70,0));
805
                fw.write(DxfGroup.toString(9,"$DIMTVP")+        DxfGroup.toString(40,0.0,1));
806
                fw.write(DxfGroup.toString(9,"$DIMTIX")+        DxfGroup.toString(70,0));
807
                fw.write(DxfGroup.toString(9,"$DIMSOXD")+        DxfGroup.toString(70,0));
808
                fw.write(DxfGroup.toString(9,"$DIMSAH")+        DxfGroup.toString(70,0));
809
                fw.write(DxfGroup.toString(9,"$DIMBLK1")+        DxfGroup.toString(1,""));
810
                fw.write(DxfGroup.toString(9,"$DIMBLK2")+        DxfGroup.toString(1,""));
811
                fw.write(DxfGroup.toString(9,"$DIMSTYLE")+        DxfGroup.toString(2,"STANDARD"));
812
                fw.write(DxfGroup.toString(9,"$DIMCLRD")+        DxfGroup.toString(70,0));
813
                fw.write(DxfGroup.toString(9,"$DIMCLRE")+        DxfGroup.toString(70,0));
814
                fw.write(DxfGroup.toString(9,"$DIMCLRT")+        DxfGroup.toString(70,0));
815
                fw.write(DxfGroup.toString(9,"$DIMTFAC")+        DxfGroup.toString(40,1.0,1));
816
                fw.write(DxfGroup.toString(9,"$DIMGAP")+        DxfGroup.toString(40,0.09,2));
817
                fw.write(DxfGroup.toString(9,"$LUNITS")+        DxfGroup.toString(70,2));
818
                fw.write(DxfGroup.toString(9,"$LUPREC")+        DxfGroup.toString(70,4));
819
                fw.write(DxfGroup.toString(9,"$AXISMODE")+        DxfGroup.toString(70,0));
820
                fw.write(DxfGroup.toString(9,"$AXISUNIT"));
821
                fw.write(DxfGroup.toString(10,0.0,1));
822
                fw.write(DxfGroup.toString(20,0.0,1));
823
                fw.write(DxfGroup.toString(9,"$SKETCHINC")+        DxfGroup.toString(40,0.1,1));
824
                fw.write(DxfGroup.toString(9,"$FILLETRAD")+        DxfGroup.toString(40,0.0,1));
825
                fw.write(DxfGroup.toString(9,"$AUNITS")+        DxfGroup.toString(70,0));
826
                fw.write(DxfGroup.toString(9,"$AUPREC")+        DxfGroup.toString(70,0));
827
                fw.write(DxfGroup.toString(9,"$MENU")+                DxfGroup.toString(1,"acad"));
828
                fw.write(DxfGroup.toString(9,"$ELEVATION")+        DxfGroup.toString(40,0.0,1));
829
                fw.write(DxfGroup.toString(9,"$PELEVATION")+DxfGroup.toString(40,0.0,1));
830
                fw.write(DxfGroup.toString(9,"$THICKNESS")+        DxfGroup.toString(40,0.0,1));
831
                fw.write(DxfGroup.toString(9,"$LIMCHECK")+        DxfGroup.toString(70,0));
832
                fw.write(DxfGroup.toString(9,"$BLIPMODE")+        DxfGroup.toString(70,1));
833
                fw.write(DxfGroup.toString(9,"$CHAMFERA")+        DxfGroup.toString(40,0.0,1));
834
                fw.write(DxfGroup.toString(9,"$CHAMFERB")+        DxfGroup.toString(40,0.0,1));
835
                fw.write(DxfGroup.toString(9,"$SKPOLY")+        DxfGroup.toString(70,0));
836
                fw.write(DxfGroup.toString(9,"$TDCREATE")+        DxfGroup.toString(40,2453116.436828704,9));
837
                fw.write(DxfGroup.toString(9,"$TDUPDATE")+        DxfGroup.toString(40,2453116.436828704,9));
838
                fw.write(DxfGroup.toString(9,"$TDINDWG")+        DxfGroup.toString(40,0.0000000000,10));
839
                fw.write(DxfGroup.toString(9,"$TDUSRTIMER")+DxfGroup.toString(40,0.0000000000,10));
840
                fw.write(DxfGroup.toString(9,"$USRTIMER")+        DxfGroup.toString(70,1));
841
                fw.write(DxfGroup.toString(9,"$ANGBASE")+        DxfGroup.toString(50,0.0,1));
842
                fw.write(DxfGroup.toString(9,"$ANGDIR")+        DxfGroup.toString(70,0));
843
                fw.write(DxfGroup.toString(9,"$PDMODE")+        DxfGroup.toString(70,0));
844
                fw.write(DxfGroup.toString(9,"$PDSIZE")+        DxfGroup.toString(40,0.0,1));
845
                fw.write(DxfGroup.toString(9,"$PLINEWID")+        DxfGroup.toString(40,0.0,1));
846
                fw.write(DxfGroup.toString(9,"$COORDS")+        DxfGroup.toString(70,0));
847
                fw.write(DxfGroup.toString(9,"$SPLFRAME")+        DxfGroup.toString(70,0));
848
                fw.write(DxfGroup.toString(9,"$SPLINETYPE")+DxfGroup.toString(70,6));
849
                fw.write(DxfGroup.toString(9,"$SPLINESEGS")+DxfGroup.toString(70,10));
850
                fw.write(DxfGroup.toString(9,"$ATTDIA")+        DxfGroup.toString(70,0));
851
                fw.write(DxfGroup.toString(9,"$ATTREQ")+        DxfGroup.toString(70,1));
852
                fw.write(DxfGroup.toString(9,"$HANDLING")+        DxfGroup.toString(70,1));
853
                fw.write(DxfGroup.toString(9,"$HANDSEED")+        DxfGroup.toString(5,"394B"));
854
                fw.write(DxfGroup.toString(9,"$SURFTAB1")+        DxfGroup.toString(70,6));
855
                fw.write(DxfGroup.toString(9,"$SURFTAB2")+        DxfGroup.toString(70,6));
856
                fw.write(DxfGroup.toString(9,"$SURFTYPE")+        DxfGroup.toString(70,6));
857
                fw.write(DxfGroup.toString(9,"$SURFU")+                DxfGroup.toString(70,6));
858
                fw.write(DxfGroup.toString(9,"$SURFV")+                DxfGroup.toString(70,6));
859
                fw.write(DxfGroup.toString(9,"$UCSNAME")+        DxfGroup.toString(2,""));
860
                fw.write(DxfGroup.toString(9,"$UCSORG"));
861
                fw.write(DxfGroup.toString(10,0.0,1));
862
                fw.write(DxfGroup.toString(20,0.0,1));
863
                fw.write(DxfGroup.toString(30,0.0,1));
864
                fw.write(DxfGroup.toString(9,"$UCSXDIR"));
865
                fw.write(DxfGroup.toString(10,1.0,1));
866
                fw.write(DxfGroup.toString(20,0.0,1));
867
                fw.write(DxfGroup.toString(30,0.0,1));
868
                fw.write(DxfGroup.toString(9,"$UCSYDIR"));
869
                fw.write(DxfGroup.toString(10,0.0,1));
870
                fw.write(DxfGroup.toString(20,1.0,1));
871
                fw.write(DxfGroup.toString(30,0.0,1));
872
                fw.write(DxfGroup.toString(9,"$PUCSNAME")+        DxfGroup.toString(2,""));
873
                fw.write(DxfGroup.toString(9,"$PUCSORG"));
874
                fw.write(DxfGroup.toString(10,0.0,1));
875
                fw.write(DxfGroup.toString(20,0.0,1));
876
                fw.write(DxfGroup.toString(30,0.0,1));
877
                fw.write(DxfGroup.toString(9,"$PUCSXDIR"));
878
                fw.write(DxfGroup.toString(10,1.0,1));
879
                fw.write(DxfGroup.toString(20,0.0,1));
880
                fw.write(DxfGroup.toString(30,0.0,1));
881
                fw.write(DxfGroup.toString(9,"$PUCSYDIR"));
882
                fw.write(DxfGroup.toString(10,0.0,1));
883
                fw.write(DxfGroup.toString(20,1.0,1));
884
                fw.write(DxfGroup.toString(30,0.0,1));
885
                fw.write(DxfGroup.toString(9,"$USERI1")+        DxfGroup.toString(70,0));
886
                fw.write(DxfGroup.toString(9,"$USERI2")+        DxfGroup.toString(70,0));
887
                fw.write(DxfGroup.toString(9,"$USERI3")+        DxfGroup.toString(70,0));
888
                fw.write(DxfGroup.toString(9,"$USERI4")+        DxfGroup.toString(70,0));
889
                fw.write(DxfGroup.toString(9,"$USERI5")+        DxfGroup.toString(70,0));
890
                fw.write(DxfGroup.toString(9,"$USERR1")+        DxfGroup.toString(40,0.0,1));
891
                fw.write(DxfGroup.toString(9,"$USERR2")+        DxfGroup.toString(40,0.0,1));
892
                fw.write(DxfGroup.toString(9,"$USERR3")+        DxfGroup.toString(40,0.0,1));
893
                fw.write(DxfGroup.toString(9,"$USERR4")+        DxfGroup.toString(40,0.0,1));
894
                fw.write(DxfGroup.toString(9,"$USERR5")+        DxfGroup.toString(40,0.0,1));
895
                fw.write(DxfGroup.toString(9,"$WORLDVIEW")+        DxfGroup.toString(70,1));
896
                fw.write(DxfGroup.toString(9,"$SHADEDGE")+        DxfGroup.toString(70,3));
897
                fw.write(DxfGroup.toString(9,"$SHADEDIF")+        DxfGroup.toString(70,70));
898
                fw.write(DxfGroup.toString(9,"$TILEMODE")+        DxfGroup.toString(70,1));
899
                fw.write(DxfGroup.toString(9,"$MAXACTVP")+        DxfGroup.toString(70,16));
900
                fw.write(DxfGroup.toString(9,"$PINSBASE"));
901
                fw.write(DxfGroup.toString(10,0.0,1));
902
                fw.write(DxfGroup.toString(20,0.0,1));
903
                fw.write(DxfGroup.toString(30,0.0,1));
904
                fw.write(DxfGroup.toString(9,"$PLIMCHECK")+        DxfGroup.toString(70,0));
905
                fw.write(DxfGroup.toString(9,"$PEXTMIN"));
906
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
907
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
908
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
909
                fw.write(DxfGroup.toString(9,"$PEXTMAX"));
910
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
911
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
912
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
913
                fw.write(DxfGroup.toString(9,"$PLIMMIN"));
914
                fw.write(DxfGroup.toString(10,0.0,1));
915
                fw.write(DxfGroup.toString(20,0.0,1));
916
                fw.write(DxfGroup.toString(9,"$PLIMMAX"));
917
                fw.write(DxfGroup.toString(10,12.0,1));
918
                fw.write(DxfGroup.toString(20,9.0,1));
919
                fw.write(DxfGroup.toString(9,"$UNITMODE")+        DxfGroup.toString(70,0));
920
                fw.write(DxfGroup.toString(9,"$VISRETAIN")+        DxfGroup.toString(70,0));
921
                fw.write(DxfGroup.toString(9,"$PLINEGEN")+        DxfGroup.toString(70,1));
922
                fw.write(DxfGroup.toString(9,"$PSLTSCALE")+        DxfGroup.toString(70,0));
923
                fw.write(DxfGroup.toString(9,"$TREEDEPTH")+        DxfGroup.toString(70,3020));
924
                fw.write(DxfGroup.toString(9,"$DWGCODEPAGE")+DxfGroup.toString(3,"ansi_1252"));
925
/*
926 17 luisw
                fw.write(DxfGroup.toString(9, "$ELEVATION"));
927
                        fw.write(DxfGroup.toString(40, 0.0, 3));
928
                fw.write(DxfGroup.toString(9, "$LIMCHECK"));
929
                        fw.write(DxfGroup.toString(70, 1));
930 13 luisw
                fw.write(DxfGroup.toString(9, "$LUNITS"));
931
                        fw.write(DxfGroup.toString(70, 2));
932
                fw.write(DxfGroup.toString(9, "$LUPREC"));
933 18 luisw
                        fw.write(DxfGroup.toString(70, 2));*/
934 13 luisw
                fw.write(DxfGroup.toString(0, "ENDSEC"));
935 12 luisw
        }
936
937 2809 nacho
        /**
938
         * Escritor de la secci?n TABLES de un DXF.
939
         * @param fw, FileWriter
940
         * @throws IOException
941
         */
942 13 luisw
        public void writeTables(FileWriter fw) throws IOException {
943
                fw.write(DxfGroup.toString(0, "SECTION"));
944
                fw.write(DxfGroup.toString(2, "TABLES"));
945 2809 nacho
                // esta tampoco.
946
                writeVPortTable(fw);
947
                writeLTypeTable(fw);
948 13 luisw
                writeLayerTable(fw);
949 2809 nacho
                writeStyleTable(fw);
950
                // estas no son las provocan el pete.
951
                writeViewTable(fw);
952
                writeUCSTable(fw);
953
                // esta provoca el pete. Y si no se pone las tablas aparecen
954
                // incompletas y acad no abre el fichero ...
955
                writeAppidTable(fw);
956
                writeDimStyleTable(fw);
957
                // esta no provoca pete.
958
                writeBlockRecordTable(fw);
959 13 luisw
                fw.write(DxfGroup.toString(0, "ENDSEC"));
960 12 luisw
        }
961 2809 nacho
962
        /**
963
         * Escritor de la tabla VPORT.
964
         * @param fw
965
         * @throws IOException
966 16 luisw
         */
967 2809 nacho
        public void writeVPortTable(FileWriter fw) throws IOException {
968 16 luisw
                fw.write(DxfGroup.toString(0, "TABLE"));
969 2809 nacho
                fw.write(DxfGroup.toString(2, "VPORT"));
970
                fw.write(DxfGroup.toString(5, 8));
971
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
972
                fw.write(DxfGroup.toString(70, 0));
973
                /*fw.write(DxfGroup.toString(70, 1));
974
                fw.write(DxfGroup.toString(0, "VPORT"));
975
                fw.write(DxfGroup.toString(5, 30));
976
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
977
                fw.write(DxfGroup.toString(100, "AcDbViewportTableRecord"));
978
                fw.write(DxfGroup.toString(2, "*Active"));
979
                fw.write(DxfGroup.toString(70, 0));
980
                fw.write(DxfGroup.toString(10, 0.0, 4));
981
                fw.write(DxfGroup.toString(20, 0.0, 4));
982
                fw.write(DxfGroup.toString(11, 1.0, 4));
983
                fw.write(DxfGroup.toString(21, 1.0, 4));
984
                fw.write(DxfGroup.toString(12, 286.30555555555549, 10));
985
                fw.write(DxfGroup.toString(22, 148.5, 4));
986
                fw.write(DxfGroup.toString(13, 0.0, 4));
987
                fw.write(DxfGroup.toString(23, 0.0, 4));
988
                fw.write(DxfGroup.toString(14, 10.0, 4));
989
                fw.write(DxfGroup.toString(24, 10.0, 4));
990
                fw.write(DxfGroup.toString(15, 10.0, 4));
991
                fw.write(DxfGroup.toString(25, 10.0, 4));
992
                fw.write(DxfGroup.toString(16, 0.0, 4));
993
                fw.write(DxfGroup.toString(26, 0.0, 4));
994
                fw.write(DxfGroup.toString(36, 1.0, 4));
995
                fw.write(DxfGroup.toString(17, 0.0, 4));
996
                fw.write(DxfGroup.toString(27, 0.0, 4));
997
                fw.write(DxfGroup.toString(37, 0.0, 4));
998
                fw.write(DxfGroup.toString(40, 297.0, 4));
999
                fw.write(DxfGroup.toString(41, 1.92798353909465, 10));
1000
                fw.write(DxfGroup.toString(42, 50.0, 4));
1001
                fw.write(DxfGroup.toString(43, 0.0, 4));
1002
                fw.write(DxfGroup.toString(44, 0.0, 4));
1003
                fw.write(DxfGroup.toString(50, 0.0, 4));
1004
                fw.write(DxfGroup.toString(51, 0.0, 4));
1005
                fw.write(DxfGroup.toString(71, 0));
1006
                fw.write(DxfGroup.toString(72, 100));
1007
                fw.write(DxfGroup.toString(73, 1));
1008
                fw.write(DxfGroup.toString(74, 3));
1009
                fw.write(DxfGroup.toString(75, 1));
1010
                fw.write(DxfGroup.toString(76, 1));
1011
                fw.write(DxfGroup.toString(77, 0));
1012
                fw.write(DxfGroup.toString(78, 0));
1013
                fw.write(DxfGroup.toString(281, 0));
1014
                fw.write(DxfGroup.toString(65, 1));
1015
                fw.write(DxfGroup.toString(110, 0.0, 4));
1016
                fw.write(DxfGroup.toString(120, 0.0, 4));
1017
                fw.write(DxfGroup.toString(130, 0.0, 4));
1018
                fw.write(DxfGroup.toString(111, 1.0, 4));
1019
                fw.write(DxfGroup.toString(121, 0.0, 4));
1020
                fw.write(DxfGroup.toString(131, 0.0, 4));
1021
                fw.write(DxfGroup.toString(112, 0.0, 4));
1022
                fw.write(DxfGroup.toString(122, 1.0, 4));
1023
                fw.write(DxfGroup.toString(132, 0.0, 4));
1024
                fw.write(DxfGroup.toString(79, 0));
1025
                fw.write(DxfGroup.toString(146, 0.0, 4));*/
1026
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1027
        }
1028
1029
        /**
1030
         * Escritor de la tabla LTYPE.
1031
         * @param fw
1032
         * @throws IOException
1033
         */
1034
        public void writeLTypeTable(FileWriter fw) throws IOException {
1035
                fw.write(DxfGroup.toString(0, "TABLE"));
1036
                fw.write(DxfGroup.toString(2, "LTYPE"));
1037
                fw.write(DxfGroup.toString(5, 5));
1038
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1039
                fw.write(DxfGroup.toString(70, 1));
1040
                // Aqui hay que crear un objeto DxfLType como el DxfLayer tambi?n basado en
1041
                // el lector de DXF de Mich.
1042
                /*DxfTABLE_LTYPE_ITEM ltype =
1043
                        new DxfTABLE_LTYPE_ITEM("CONTINUE", 0, "", 65, 0f, new float[0]);
1044
                fw.write(ltype.toString());*/
1045
                fw.write(DxfGroup.toString(0, "LTYPE"));
1046 16 luisw
                fw.write(DxfGroup.toString(5, 14));
1047 2809 nacho
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1048
                fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
1049
                fw.write(DxfGroup.toString(2, "ByBlock"));
1050
                fw.write(DxfGroup.toString(70, 0));
1051
                fw.write(DxfGroup.toString(3, ""));
1052
                fw.write(DxfGroup.toString(72, 65));
1053
                fw.write(DxfGroup.toString(73, 0));
1054
                fw.write(DxfGroup.toString(40, 0.0, 4));
1055
                fw.write(DxfGroup.toString(0, "LTYPE"));
1056 16 luisw
                fw.write(DxfGroup.toString(5, 15));
1057
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1058 2809 nacho
                fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
1059
                fw.write(DxfGroup.toString(2, "ByLayer"));
1060
                fw.write(DxfGroup.toString(70, 0));
1061
                fw.write(DxfGroup.toString(3, ""));
1062
                fw.write(DxfGroup.toString(72, 65));
1063
                fw.write(DxfGroup.toString(73, 0));
1064
                fw.write(DxfGroup.toString(40, 0.0, 4));
1065
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1066
        }
1067
1068
        /**
1069
         * Escritor de la tabla LAYER.
1070
         * @param fw
1071
         * @throws IOException
1072
         */
1073
        public void writeLayerTable(FileWriter fw) throws IOException {
1074
                fw.write(DxfGroup.toString(0, "TABLE"));
1075
                fw.write(DxfGroup.toString(2, "LAYER"));
1076
                fw.write(DxfGroup.toString(5, 2));
1077
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1078 16 luisw
                fw.write(DxfGroup.toString(70, 1));
1079 2809 nacho
                //layer = new DxfLayer(layerName, 0, 131, "CONTINUOUS");
1080
                //fw.write(layer.toString());
1081
                //fw.write(((DxfEntityMaker) entityMaker).getLayers().toDxfString());
1082
                fw.write(DxfGroup.toString(0, "LAYER"));
1083
                fw.write(DxfGroup.toString(5, 10));
1084
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1085
                fw.write(DxfGroup.toString(100, "AcDbLayerTableRecord"));
1086
                fw.write(DxfGroup.toString(2, "0"));
1087
                fw.write(DxfGroup.toString(70, 0));
1088
                fw.write(DxfGroup.toString(62, 7));
1089
                fw.write(DxfGroup.toString(6, "CONTINUOUS"));
1090
                fw.write(DxfGroup.toString(390, "F"));
1091 16 luisw
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1092
        }
1093 2809 nacho
1094
        /**
1095
         * Escritor de la tabla STYLE.
1096
         * @param fw
1097
         * @throws IOException
1098
         */
1099
        public void writeStyleTable(FileWriter fw) throws IOException {
1100 13 luisw
                fw.write(DxfGroup.toString(0, "TABLE"));
1101
                fw.write(DxfGroup.toString(2, "STYLE"));
1102 2809 nacho
                fw.write(DxfGroup.toString(5, 3));
1103
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1104
                fw.write(DxfGroup.toString(70, 0));
1105
                /*fw.write(DxfGroup.toString(70, 1));
1106 13 luisw
                DxfTABLE_STYLE_ITEM style =
1107
                        new DxfTABLE_STYLE_ITEM("STANDARD", 0, 0f, 1f, 0f, 0, 1.0f, "xxx.txt", "yyy.txt");
1108 2809 nacho
                fw.write(style.toString());*/
1109
                fw.write(DxfGroup.toString(0, "STYLE"));
1110
                fw.write(DxfGroup.toString(5, 11));
1111
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1112
                fw.write(DxfGroup.toString(100, "AcDbTextStyleTableRecord"));
1113
                fw.write(DxfGroup.toString(2, "Standard"));
1114
                fw.write(DxfGroup.toString(70, 0));
1115
                fw.write(DxfGroup.toString(71, 0));
1116
                fw.write(DxfGroup.toString(40, 0.0, 4));
1117
                fw.write(DxfGroup.toString(41, 1.0, 4));
1118
                fw.write(DxfGroup.toString(42, 2.5, 4));
1119
                fw.write(DxfGroup.toString(50, 0.0, 4));
1120
                fw.write(DxfGroup.toString(3, "txt"));
1121
                fw.write(DxfGroup.toString(4, ""));
1122 13 luisw
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1123 2809 nacho
        }
1124
1125
        /**
1126
         * Escritor de la tabla VIEW.
1127
         * @param fw
1128
         * @throws IOException
1129
         */
1130
        public void writeViewTable(FileWriter fw) throws IOException {
1131 13 luisw
                fw.write(DxfGroup.toString(0, "TABLE"));
1132 2809 nacho
                fw.write(DxfGroup.toString(2, "VIEW"));
1133
                fw.write(DxfGroup.toString(5, 6));
1134
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1135
                fw.write(DxfGroup.toString(70, 0));
1136
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1137
        }
1138
1139
        /**
1140
         * Escritor de la tabla UCS.
1141
         * @param fw
1142
         * @throws IOException
1143
         */
1144
        public void writeUCSTable(FileWriter fw) throws IOException {
1145
                fw.write(DxfGroup.toString(0, "TABLE"));
1146
                fw.write(DxfGroup.toString(2, "UCS"));
1147
                fw.write(DxfGroup.toString(5, 7));
1148
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1149
                fw.write(DxfGroup.toString(70, 0));
1150
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1151
        }
1152
1153
        /**
1154
         * Escritor de la tabla APPID.
1155
         * @param fw
1156
         * @throws IOException
1157
         */
1158
        public void writeAppidTable(FileWriter fw) throws IOException {
1159
                fw.write(DxfGroup.toString(0, "TABLE"));
1160
                fw.write(DxfGroup.toString(2, "APPID"));
1161
                fw.write(DxfGroup.toString(5, 9));
1162
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1163 13 luisw
                fw.write(DxfGroup.toString(70, 1));
1164 2809 nacho
                fw.write(DxfGroup.toString(0, "APPID"));
1165
                fw.write(DxfGroup.toString(5, 12));
1166
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1167
                fw.write(DxfGroup.toString(100, "AcDbRegAppTableRecord"));
1168
                fw.write(DxfGroup.toString(2, "ACAD"));
1169
                fw.write(DxfGroup.toString(70, 1));
1170 13 luisw
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1171 2809 nacho
        }
1172
1173
        /**
1174
         * Escritor de la tabla DIMSTYLE.
1175
         * @param fw
1176
         * @throws IOException
1177
         */
1178
        public void writeDimStyleTable(FileWriter fw) throws IOException {
1179 13 luisw
                fw.write(DxfGroup.toString(0, "TABLE"));
1180 2809 nacho
                fw.write(DxfGroup.toString(2, "DIMSTYLE"));
1181
                fw.write(DxfGroup.toString(5, "A"));
1182
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1183
                fw.write(DxfGroup.toString(70, 0));
1184
                fw.write(DxfGroup.toString(100, "AcDbDimStyleTable"));
1185 13 luisw
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1186 12 luisw
        }
1187 2809 nacho
1188 1512 jmorell
        /**
1189 2809 nacho
         * Escritor de la tabla BLOCK_RECORD.
1190 1512 jmorell
         * @param fw
1191
         * @throws IOException
1192
         */
1193 2809 nacho
        public void writeBlockRecordTable(FileWriter fw) throws IOException {
1194
                fw.write(DxfGroup.toString(0, "TABLE"));
1195
                fw.write(DxfGroup.toString(2, "BLOCK_RECORD"));
1196
                fw.write(DxfGroup.toString(5, 1));
1197
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
1198
                fw.write(DxfGroup.toString(70, 1));
1199
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
1200
                fw.write(DxfGroup.toString(5, "1F"));
1201
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1202
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
1203
                fw.write(DxfGroup.toString(2, "*Model_Space"));
1204
                fw.write(DxfGroup.toString(340, "22"));
1205
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
1206
                fw.write(DxfGroup.toString(5, "1B"));
1207
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1208
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
1209
                fw.write(DxfGroup.toString(2, "*Paper_Space"));
1210
                fw.write(DxfGroup.toString(340, "1E"));
1211
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
1212
                fw.write(DxfGroup.toString(5, "23"));
1213
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
1214
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
1215
                fw.write(DxfGroup.toString(2, "*Paper_Space0"));
1216
                fw.write(DxfGroup.toString(340, "26"));
1217
                fw.write(DxfGroup.toString(0, "ENDTAB"));
1218
        }
1219
1220
        /**
1221
         * Escritor de la secci?n de bloques por defecto de un DXF2000.
1222
         * @param fw
1223
         * @throws IOException
1224
         */
1225
        public void writeBlocks(FileWriter fw) throws IOException {
1226
                fw.write(DxfGroup.toString(0, "SECTION"));
1227
                fw.write(DxfGroup.toString(2, "BLOCKS"));
1228
                fw.write(DxfGroup.toString(0, "BLOCK"));
1229
                fw.write(DxfGroup.toString(5, "20"));
1230
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1231
                fw.write(DxfGroup.toString(8, "0"));
1232
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
1233
                fw.write(DxfGroup.toString(2, "*Model_Space"));
1234
                fw.write(DxfGroup.toString(70, 0));
1235
                fw.write(DxfGroup.toString(10, 0.0, 4));
1236
                fw.write(DxfGroup.toString(20, 0.0, 4));
1237
                fw.write(DxfGroup.toString(30, 0.0, 4));
1238
                fw.write(DxfGroup.toString(3, "*Model_Space"));
1239
                fw.write(DxfGroup.toString(1, ""));
1240
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1241
                fw.write(DxfGroup.toString(5, "21"));
1242
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1243
                fw.write(DxfGroup.toString(8, "0"));
1244
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1245
                fw.write(DxfGroup.toString(0, "BLOCK"));
1246
                fw.write(DxfGroup.toString(5, "1C"));
1247
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1248
                fw.write(DxfGroup.toString(67, 1));
1249
                fw.write(DxfGroup.toString(8, "0"));
1250
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
1251
                fw.write(DxfGroup.toString(2, "*Paper_Space"));
1252
                fw.write(DxfGroup.toString(70, 0));
1253
                fw.write(DxfGroup.toString(10, 0.0, 4));
1254
                fw.write(DxfGroup.toString(20, 0.0, 4));
1255
                fw.write(DxfGroup.toString(30, 0.0, 4));
1256
                fw.write(DxfGroup.toString(3, "*Paper_Space"));
1257
                fw.write(DxfGroup.toString(1, ""));
1258
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1259
                fw.write(DxfGroup.toString(5, "1D"));
1260
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1261
                fw.write(DxfGroup.toString(67, 1));
1262
                fw.write(DxfGroup.toString(8, "0"));
1263
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1264
                fw.write(DxfGroup.toString(0, "BLOCK"));
1265
                fw.write(DxfGroup.toString(5, "24"));
1266
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1267
                fw.write(DxfGroup.toString(8, "0"));
1268
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
1269
                fw.write(DxfGroup.toString(2, "*Paper_Space0"));
1270
                fw.write(DxfGroup.toString(70, 0));
1271
                fw.write(DxfGroup.toString(10, 0.0, 4));
1272
                fw.write(DxfGroup.toString(20, 0.0, 4));
1273
                fw.write(DxfGroup.toString(30, 0.0, 4));
1274
                fw.write(DxfGroup.toString(3, "*Paper_Space0"));
1275
                fw.write(DxfGroup.toString(1, ""));
1276
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1277
                fw.write(DxfGroup.toString(5, "25"));
1278
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1279
                fw.write(DxfGroup.toString(8, "0"));
1280
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1281
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1282
        }
1283
1284
        /**
1285
         * Escritor de la secci?n ENTITIES de entidades.
1286
         * @param fw
1287
         * @throws IOException
1288
         */
1289 12 luisw
        public void writeEntities(FileWriter fw) throws IOException {
1290 13 luisw
                // ECRITURE DES FEATURES
1291
                fw.write(DxfGroup.toString(0, "SECTION"));
1292
                fw.write(DxfGroup.toString(2, "ENTITIES"));
1293 111 jmorell
                if (cadFlag) {
1294
                        fw.write(((DxfEntityMaker) entityMaker).getEntities().toDxfString());
1295
                } else {
1296
                        //fw.write(((DxfFeatureMaker) entityMaker).getObjects().toDxfString());
1297
                }
1298 13 luisw
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1299 12 luisw
        }
1300
1301 2809 nacho
        /**
1302
         * 050224, jmorell: Escritura de la secci?n OBJECTS seg?n QCAD.
1303
         * Writes a objects section. This section is needed in VER_R13.
1304
         * Note that this method currently only writes a faked OBJECTS section
1305
         * to make the file readable by Aut*cad.
1306
         */
1307
        public void writeObjects(FileWriter fw) throws IOException {
1308
            //int dicId, dicId2, dicId3, dicId4, dicId5;
1309
            //int dicId5;
1310
1311
            fw.write(DxfGroup.toString(  0, "SECTION"));
1312
            fw.write(DxfGroup.toString(  2, "OBJECTS"));
1313
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1314
            //fw.write(DxfGroup.toString(5, 0xC);                            // C
1315
            fw.write(DxfGroup.toString(  5, "C"));
1316
            //fw.write(DxfGroup.toString(330, 0);
1317
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1318
            fw.write(DxfGroup.toString(280, 0));
1319
            fw.write(DxfGroup.toString(281, 1));
1320
            fw.write(DxfGroup.toString(  3, "ACAD_GROUP"));
1321
            //fw.write(DxfGroup.toString(350, dw.getNextHandle());          // D
1322
            fw.write(DxfGroup.toString(350, "D"));          // D
1323
            fw.write(DxfGroup.toString(  3, "ACAD_LAYOUT"));
1324
            fw.write(DxfGroup.toString(350, "1A"));
1325
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+0);        // 1A
1326
            fw.write(DxfGroup.toString(  3, "ACAD_MLINESTYLE"));
1327
            fw.write(DxfGroup.toString(350, "17"));
1328
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 17
1329
            fw.write(DxfGroup.toString(  3, "ACAD_PLOTSETTINGS"));
1330
            fw.write(DxfGroup.toString(350, "19"));
1331
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 19
1332
            fw.write(DxfGroup.toString(  3, "ACAD_PLOTSTYLENAME"));
1333
            fw.write(DxfGroup.toString(350, "E"));
1334
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+3);        // E
1335
            fw.write(DxfGroup.toString(  3, "AcDbVariableDictionary"));
1336
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()));        // 2C
1337
            fw.write(DxfGroup.toString(350, "2C"));        // 2C
1338
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1339
            fw.write(DxfGroup.toString(5, "D"));
1340
            //dw.handle();                                    // D
1341
            //fw.write(DxfGroup.toString(330, 0xC);
1342
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1343
            fw.write(DxfGroup.toString(280, 0));
1344
            fw.write(DxfGroup.toString(281, 1));
1345
            fw.write(DxfGroup.toString(  0, "ACDBDICTIONARYWDFLT"));
1346
            fw.write(DxfGroup.toString(5, "E"));
1347
            //dicId4 = dw.handle();                           // E
1348
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1349
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1350
            fw.write(DxfGroup.toString(281, 1));
1351
            fw.write(DxfGroup.toString(  3, "Normal"));
1352
            fw.write(DxfGroup.toString(350, "F"));
1353
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // F
1354
            fw.write(DxfGroup.toString(100, "AcDbDictionaryWithDefault"));
1355
            fw.write(DxfGroup.toString(340, "F"));
1356
            //fw.write(DxfGroup.toString(340, dw.getNextHandle()+5);        // F
1357
            fw.write(DxfGroup.toString(  0, "ACDBPLACEHOLDER"));
1358
            fw.write(DxfGroup.toString(5, "F"));
1359
            //dw.handle();                                    // F
1360
            //fw.write(DxfGroup.toString(330, dicId4);                      // E
1361
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1362
            //dicId3 = dw.handle();                           // 17
1363
            fw.write(DxfGroup.toString(5, "17"));
1364
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1365
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1366
            fw.write(DxfGroup.toString(280, 0));
1367
            fw.write(DxfGroup.toString(281, 1));
1368
            fw.write(DxfGroup.toString(  3, "Standard"));
1369
            fw.write(DxfGroup.toString(350, "18"));
1370
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 18
1371
            fw.write(DxfGroup.toString(  0, "MLINESTYLE"));
1372
            fw.write(DxfGroup.toString(5, "18"));
1373
            //dw.handle();                                    // 18
1374
            //fw.write(DxfGroup.toString(330, dicId3);                      // 17
1375
            fw.write(DxfGroup.toString(100, "AcDbMlineStyle"));
1376
            fw.write(DxfGroup.toString(  2, "STANDARD"));
1377
            fw.write(DxfGroup.toString( 70, 0));
1378
            fw.write(DxfGroup.toString(  3, ""));
1379
            fw.write(DxfGroup.toString( 62, 256));
1380
            //dw.dxfReal( 51, 90.0);
1381
            fw.write(DxfGroup.toString( 51, 90.0, 4));
1382
            fw.write(DxfGroup.toString( 52, 90.0, 4));
1383
            fw.write(DxfGroup.toString( 71, 2));
1384
            fw.write(DxfGroup.toString( 49, 0.5, 4));
1385
            fw.write(DxfGroup.toString( 62, 256));
1386
            fw.write(DxfGroup.toString(  6, "BYLAYER"));
1387
            fw.write(DxfGroup.toString( 49, -0.5, 4));
1388
            fw.write(DxfGroup.toString( 62, 256));
1389
            fw.write(DxfGroup.toString(  6, "BYLAYER"));
1390
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1391
            fw.write(DxfGroup.toString(5, "19"));
1392
            //dw.handle();                           // 17
1393
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1394
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1395
            fw.write(DxfGroup.toString(280, 0));
1396
            fw.write(DxfGroup.toString(281, 1));
1397
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1398
            //dicId2 = dw.handle();                           // 1A
1399
            fw.write(DxfGroup.toString(5, "1A"));
1400
            //fw.write(DxfGroup.toString(330, 0xC);
1401
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1402
            fw.write(DxfGroup.toString(281, 1));
1403
            fw.write(DxfGroup.toString(  3, "Layout1"));
1404
            fw.write(DxfGroup.toString(350, "1E"));
1405
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 1E
1406
            fw.write(DxfGroup.toString(  3, "Layout2"));
1407
            fw.write(DxfGroup.toString(350, "26"));
1408
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+4);        // 26
1409
            fw.write(DxfGroup.toString(  3, "Model"));
1410
            fw.write(DxfGroup.toString(350, "22"));
1411
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 22
1412
1413
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1414
            fw.write(DxfGroup.toString(5, "1E"));
1415
            //dw.handle();                                    // 1E
1416
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1417
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1418
            fw.write(DxfGroup.toString(  1, ""));
1419
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1420
            fw.write(DxfGroup.toString(  4, ""));
1421
            fw.write(DxfGroup.toString(  6, ""));
1422
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1423
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1424
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1425
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1426
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1427
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1428
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1429
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1430
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1431
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1432
            fw.write(DxfGroup.toString(140, 0.0, 4));
1433
            fw.write(DxfGroup.toString(141, 0.0, 4));
1434
            fw.write(DxfGroup.toString(142, 1.0, 4));
1435
            fw.write(DxfGroup.toString(143, 1.0, 4));
1436
            fw.write(DxfGroup.toString( 70, 688));
1437
            fw.write(DxfGroup.toString( 72, 0));
1438
            fw.write(DxfGroup.toString( 73, 0));
1439
            fw.write(DxfGroup.toString( 74, 5));
1440
            fw.write(DxfGroup.toString(  7, ""));
1441
            fw.write(DxfGroup.toString( 75, 16));
1442
            fw.write(DxfGroup.toString(147, 1.0, 4));
1443
            fw.write(DxfGroup.toString(148, 0.0, 4));
1444
            fw.write(DxfGroup.toString(149, 0.0, 4));
1445
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1446
            fw.write(DxfGroup.toString(  1, "Layout1"));
1447
            fw.write(DxfGroup.toString( 70, 1));
1448
            fw.write(DxfGroup.toString( 71, 1));
1449
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1450
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1451
            fw.write(DxfGroup.toString( 11, 420.0, 4));
1452
            fw.write(DxfGroup.toString( 21, 297.0, 4));
1453
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1454
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1455
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1456
            fw.write(DxfGroup.toString( 14, 1.000000000000000E+20, 4));
1457
            fw.write(DxfGroup.toString( 24, 1.000000000000000E+20, 4));
1458
            fw.write(DxfGroup.toString( 34, 1.000000000000000E+20, 4));
1459
            fw.write(DxfGroup.toString( 15, -1.000000000000000E+20, 4));
1460
            fw.write(DxfGroup.toString( 25, -1.000000000000000E+20, 4));
1461
            fw.write(DxfGroup.toString( 35, -1.000000000000000E+20, 4));
1462
            fw.write(DxfGroup.toString(146, 0.0, 4));
1463
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1464
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1465
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1466
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1467
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1468
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1469
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1470
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1471
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1472
            fw.write(DxfGroup.toString( 76, 0));
1473
            //fw.write(DxfGroup.toString(330, dw.getPaperSpaceHandle());    // 1B
1474
            fw.write(DxfGroup.toString(330, "1B"));
1475
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1476
            fw.write(DxfGroup.toString(5, "22"));
1477
            //dw.handle();                                    // 22
1478
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1479
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1480
            fw.write(DxfGroup.toString(  1, ""));
1481
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1482
            fw.write(DxfGroup.toString(  4, ""));
1483
            fw.write(DxfGroup.toString(  6, ""));
1484
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1485
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1486
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1487
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1488
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1489
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1490
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1491
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1492
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1493
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1494
            fw.write(DxfGroup.toString(140, 0.0, 4));
1495
            fw.write(DxfGroup.toString(141, 0.0, 4));
1496
            fw.write(DxfGroup.toString(142, 1.0, 4));
1497
            fw.write(DxfGroup.toString(143, 1.0, 4));
1498
            fw.write(DxfGroup.toString( 70, 1712));
1499
            fw.write(DxfGroup.toString( 72, 0));
1500
            fw.write(DxfGroup.toString( 73, 0));
1501
            fw.write(DxfGroup.toString( 74, 0));
1502
            fw.write(DxfGroup.toString(  7, ""));
1503
            fw.write(DxfGroup.toString( 75, 0));
1504
            fw.write(DxfGroup.toString(147, 1.0, 4));
1505
            fw.write(DxfGroup.toString(148, 0.0, 4));
1506
            fw.write(DxfGroup.toString(149, 0.0, 4));
1507
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1508
            fw.write(DxfGroup.toString(  1, "Model"));
1509
            fw.write(DxfGroup.toString( 70, 1));
1510
            fw.write(DxfGroup.toString( 71, 0));
1511
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1512
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1513
            fw.write(DxfGroup.toString( 11, 12.0, 4));
1514
            fw.write(DxfGroup.toString( 21, 9.0, 4));
1515
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1516
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1517
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1518
            fw.write(DxfGroup.toString( 14, 0.0, 4));
1519
            fw.write(DxfGroup.toString( 24, 0.0, 4));
1520
            fw.write(DxfGroup.toString( 34, 0.0, 4));
1521
            fw.write(DxfGroup.toString( 15, 0.0, 4));
1522
            fw.write(DxfGroup.toString( 25, 0.0, 4));
1523
            fw.write(DxfGroup.toString( 35, 0.0, 4));
1524
            fw.write(DxfGroup.toString(146, 0.0, 4));
1525
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1526
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1527
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1528
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1529
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1530
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1531
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1532
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1533
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1534
            fw.write(DxfGroup.toString( 76, 0));
1535
            //fw.write(DxfGroup.toString(330, dw.getModelSpaceHandle());    // 1F
1536
            fw.write(DxfGroup.toString(330, "1F"));
1537
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1538
            //dw.handle();                                    // 26
1539
            fw.write(DxfGroup.toString(5, "26"));
1540
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1541
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1542
            fw.write(DxfGroup.toString(  1, ""));
1543
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1544
            fw.write(DxfGroup.toString(  4, ""));
1545
            fw.write(DxfGroup.toString(  6, ""));
1546
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1547
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1548
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1549
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1550
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1551
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1552
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1553
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1554
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1555
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1556
            fw.write(DxfGroup.toString(140, 0.0, 4));
1557
            fw.write(DxfGroup.toString(141, 0.0, 4));
1558
            fw.write(DxfGroup.toString(142, 1.0, 4));
1559
            fw.write(DxfGroup.toString(143, 1.0, 4));
1560
            fw.write(DxfGroup.toString( 70, 688));
1561
            fw.write(DxfGroup.toString( 72, 0));
1562
            fw.write(DxfGroup.toString( 73, 0));
1563
            fw.write(DxfGroup.toString( 74, 5));
1564
            fw.write(DxfGroup.toString(  7, ""));
1565
            fw.write(DxfGroup.toString( 75, 16));
1566
            fw.write(DxfGroup.toString(147, 1.0, 4));
1567
            fw.write(DxfGroup.toString(148, 0.0, 4));
1568
            fw.write(DxfGroup.toString(149, 0.0, 4));
1569
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1570
            fw.write(DxfGroup.toString(  1, "Layout2"));
1571
            fw.write(DxfGroup.toString( 70, 1));
1572
            fw.write(DxfGroup.toString( 71, 2));
1573
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1574
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1575
            fw.write(DxfGroup.toString( 11, 12.0, 4));
1576
            fw.write(DxfGroup.toString( 21, 9.0, 4));
1577
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1578
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1579
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1580
            fw.write(DxfGroup.toString( 14, 0.0, 4));
1581
            fw.write(DxfGroup.toString( 24, 0.0, 4));
1582
            fw.write(DxfGroup.toString( 34, 0.0, 4));
1583
            fw.write(DxfGroup.toString( 15, 0.0, 4));
1584
            fw.write(DxfGroup.toString( 25, 0.0, 4));
1585
            fw.write(DxfGroup.toString( 35, 0.0, 4));
1586
            fw.write(DxfGroup.toString(146, 0.0, 4));
1587
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1588
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1589
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1590
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1591
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1592
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1593
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1594
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1595
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1596
            fw.write(DxfGroup.toString( 76, 0));
1597
            //fw.write(DxfGroup.toString(330, dw.getPaperSpace0Handle());   // 23
1598
            fw.write(DxfGroup.toString(330, "23"));
1599
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1600
            fw.write(DxfGroup.toString(5, 0x2E));
1601
            //dicId5 =
1602
            //dw.handle();                           // 2C
1603
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1604
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1605
            fw.write(DxfGroup.toString(281, 1));
1606
            fw.write(DxfGroup.toString(  3, "DIMASSOC"));
1607
            //fw.write(DxfGroup.toString(350, 0x2F);
1608
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 2E
1609
            fw.write(DxfGroup.toString(350, 0x30));        // 2E
1610
            fw.write(DxfGroup.toString(  3, "HIDETEXT"));
1611
            //fw.write(DxfGroup.toString(350, 0x2E);
1612
            //fw.write(DxfGroup.toString(350, dw.getNextHandle());        // 2D
1613
            fw.write(DxfGroup.toString(350, 0x2F));        // 2D
1614
            fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
1615
            fw.write(DxfGroup.toString(5, 0x2F));
1616
            //dw.handle();                                    // 2E
1617
            //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
1618
            fw.write(DxfGroup.toString(100, "DictionaryVariables"));
1619
            fw.write(DxfGroup.toString(280, 0));
1620
            fw.write(DxfGroup.toString(  1, 2));
1621
            fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
1622
            fw.write(DxfGroup.toString(5, 0x30));
1623
            //dw.handle();                                    // 2D
1624
            //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
1625
            fw.write(DxfGroup.toString(100, "DictionaryVariables"));
1626
            fw.write(DxfGroup.toString(280, 0));
1627
            fw.write(DxfGroup.toString(  1, 1));
1628
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1629
        }
1630
1631
    /**
1632
     * Habilita la reproyecci?n cartogr?fica
1633
     */
1634 94 luisw
        public void reProject(ICoordTrans rp) {
1635 2 luisw
                System.out.println("Dxf: reproyectando ...");
1636
                entityMaker.reProject(rp);
1637
        }
1638 2809 nacho
1639
        /* (non-Javadoc)
1640
         * @see org.cresques.io.GeoFile#close()
1641
         */
1642
        public void close() {
1643
                // TODO Auto-generated method stub
1644
1645
        }
1646
1647 1512 jmorell
        /**
1648 2809 nacho
     * Informa sobre si estamos trabajando con el modelo de datos GIS o con el de CAD
1649 1512 jmorell
         * @return Returns the cadFlag.
1650
         */
1651
        public boolean isCadFlag() {
1652
                return cadFlag;
1653
        }
1654 2809 nacho
1655 1512 jmorell
        /**
1656 2809 nacho
     * Establece si trabajamos con el modelo de datos GIS o con el de CAD
1657 1512 jmorell
         * @param cadFlag The cadFlag to set.
1658
         */
1659
        public void setCadFlag(boolean cadFlag) {
1660
                this.cadFlag = cadFlag;
1661
        }
1662 3188 jmorell
1663
    /**
1664
     * @return Returns the dxf3DFlag.
1665
     */
1666
    public boolean isDxf3DFlag() {
1667
        return dxf3DFlag;
1668
    }
1669
1670
    /**
1671
     * @param dxf3DFlag The dxf3DFlag to set.
1672
     */
1673
    public void setDxf3DFlag(boolean dxf3DFlag) {
1674
        this.dxf3DFlag = dxf3DFlag;
1675
    }
1676 2 luisw
}