Statistics
| Revision:

svn-gvsig-desktop / branches / CqCMSDvp / libraries / libCq CMS for java.old / src / org / cresques / io / DxfFile.java @ 2312

History | View | Annotate | Download (59.2 KB)

1
/*
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
package org.cresques.io;
25

    
26
import java.io.BufferedReader;
27
import java.io.FileNotFoundException;
28
import java.io.FileReader;
29
import java.io.FileWriter;
30
import java.io.IOException;
31
import java.io.InputStream;
32
import java.io.InputStreamReader;
33
import java.io.Reader;
34
import java.util.Date;
35
import java.util.Hashtable;
36
import java.util.Vector;
37
import org.cresques.cts.ICoordTrans;
38
import org.cresques.cts.IProjection;
39
import org.cresques.geo.Projected;
40
import org.cresques.px.Extent;
41
import org.cresques.px.IObjList;
42
import org.cresques.px.dxf.DxfEntityMaker;
43
import org.cresques.px.dxf.DxfHeaderManager;
44
import org.cresques.px.dxf.DxfHeaderVariables;
45

    
46
public class DxfFile extends GeoFile {
47
        
48
        private boolean cadFlag = true;
49
        
50
        long lineNr = 0;
51

    
52
        String buf = null;
53
        
54
        BufferedReader fi;
55
        long l = 0;
56
        int count = 0;
57
        DxfGroup grp = null;
58
        
59
        EntityFactory entityMaker = null;
60
        VarSettings headerManager;
61
        
62
        /**
63
         * Crea los objetos en el Modelo correspondiente.
64
         * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
65
         */
66
        public interface EntityFactory extends Projected {
67
                public void setAddingToBlock(boolean a);
68
                public void createLayer(DxfGroupVector v) throws Exception ;
69
                public void createPolyline(DxfGroupVector v) throws Exception ;
70
                public void addVertex(DxfGroupVector v) throws Exception ;
71
                public void endSeq() throws Exception ;
72
                public void createLwPolyline(DxfGroupVector v) throws Exception ;
73
                public void createLine(DxfGroupVector v) throws Exception ;
74
                public void createText(DxfGroupVector v) throws Exception ;
75
                public void createMText(DxfGroupVector v) throws Exception ;
76
                public void createPoint(DxfGroupVector v) throws Exception ;
77
                public void createCircle(DxfGroupVector v) throws Exception ;
78
                public void createEllipse(DxfGroupVector v) throws Exception ;
79
                public void createArc(DxfGroupVector v) throws Exception ;
80
                public void createInsert(DxfGroupVector v) throws Exception ;
81
                public void createSolid(DxfGroupVector v) throws Exception ;
82
                public void createSpline(DxfGroupVector v) throws Exception ;
83
                public void createAttdef(DxfGroupVector v) throws Exception ;
84
                public void createAttrib(DxfGroupVector v) throws Exception ;
85
                public void createBlock(DxfGroupVector v) throws Exception ;
86
                public void endBlk(DxfGroupVector v) throws Exception ;
87
                void testBlocks();
88
                public Extent getExtent();
89
                public Vector getBlkList();
90
                // Para manejar los atributos almacenados en DXFs.
91
                public Vector getAttributes();
92
                public void depureAttributes();
93
                public IObjList getObjects();
94
                public boolean isDxf3DFile();
95
        };
96
        
97
        /**
98
         * Establece el estado de las variables propias de un DXF que est?n definidas
99
         * en la secci?n HEADER. Por ejemplo, la versi?n del DXF.
100
         * @author jmorell (jose.morell@gmail.com)
101
         * @version 15-dic-2004
102
         */
103
        public interface VarSettings {
104
                
105
                /**
106
                 * Establece la versi?n de Autocad en la que fue generado el DXF.
107
                 * @param v
108
                 * @throws Exception
109
                 */
110
                public void setAcadVersion(DxfGroupVector v) throws Exception ;
111
                
112
                /**
113
                 * Devuelve la versi?n de Autocad en la que fue generado el DXF.
114
                 * @return
115
                 */
116
                public String getAcadVersion();
117
                
118
                /**
119
                 * Devuelve el estado de las variables propias de un DXF
120
                 * @return
121
                 */
122
                public DxfHeaderVariables getDxfHeaderVars();
123
                
124
        };
125
        
126
        public DxfFile(IProjection proj, String name, EntityFactory maker) {
127
                super(proj, name);
128
                entityMaker = maker;
129
                headerManager = new DxfHeaderManager();
130
        }
131
        
132
        // 041215: Metiendole el interface VarSettings. No me gusta pero no se como
133
        // evitar que pierda el objeto.
134
        public DxfFile(IProjection proj, String name, EntityFactory maker, VarSettings dxfVars) {
135
                super(proj, name);
136
                entityMaker = maker;
137
                headerManager = dxfVars;
138
        }
139
        
140
        /**
141
         * Carga un .dxf
142
         */
143
        public GeoFile load() {
144
                System.out.println("Dxf: Cargando "+name+" ...");
145
                try {
146
                        if (ZipFileFolder.isUrl(name)) {
147
                                ZipFileFolder zFolder = new ZipFileFolder(name);
148
                                InputStream is = zFolder.getInputStream(name);
149
                                return load(new InputStreamReader(is));
150
                        } else 
151
                                return load(new FileReader(name));
152
                } catch (FileNotFoundException fnfe) {
153
                        fnfe.printStackTrace();
154
                } catch (Exception e) {
155
                        System.err.println("Dxf: ERROR."+l+"lineas leidas");
156
                        e.printStackTrace();
157
                }
158
                return this;
159
        }
160
        
161
        public GeoFile load(Reader fr) throws NumberFormatException, Exception {
162
                System.out.println("Dxf: Cargando '"+name+"' ...");
163
                fi = new BufferedReader(fr);
164
                while ((grp = readGrp()) != null) {
165
                        l+=2;
166
                        
167
                        if (grp.equals(0, "EOF"))                break;
168
                        if (grp.equals(0, "SECTION"))
169
                                readSection();
170
                }
171
                fi.close();
172
                extent.add(entityMaker.getExtent());
173
                System.out.println("Dxf: '"+name+"' cargado. ("+l+" l?neas).");
174
                this.lineNr = l;
175
                return this;
176
        }
177
        
178
        private DxfGroup readGrp() throws NumberFormatException, IOException {
179
                DxfGroup g = DxfGroup.read(fi);
180
                if (g != null) l += 2;
181
                /*if (g.code == 8)
182
                        if (((String) g.data).length() < 1) {
183
                                System.err.println("a que un layer no puede ser ''?");
184
                                System.exit(1);
185
                        }*/
186
                return g;
187
        }
188
        
189
        private void readSection() throws NumberFormatException, Exception {
190
                while (true) {
191
                        grp = readGrp(); System.out.print("-1:"+grp);
192
                        if (grp.code == 2)
193
                                if (((String) grp.data).compareTo("HEADER") == 0)
194
                                        readHeader();
195
                                else if (((String) grp.data).compareTo("CLASSES") == 0)
196
                                        readAnySection();
197
                                else if (((String) grp.data).compareTo("TABLES") == 0)
198
                                        readTables();
199
                                else if (((String) grp.data).compareTo("BLOCKS") == 0)
200
                                        readBlocks();
201
                                else if (((String) grp.data).compareTo("ENTITIES") == 0)
202
                                        readEntities();
203
                                else if (((String) grp.data).compareTo("OBJECTS") == 0)
204
                                        readAnySection();
205
                                else {
206
                                        System.out.println("DxfRead: Seccion "+grp.data);
207
                                        readAnySection();
208
                                }
209
                        else
210
                                System.err.println("Dxf: Codigo/Seccion desconocidos" + grp);
211
                        if (grp.equals(0, "EOF")) break;
212
                        if (grp.equals(0, "ENDSEC")) break;
213
                }                
214
        }
215
        
216
        private void readTables() throws NumberFormatException, Exception {
217
                System.out.println("Dxf: Seccion TABLAS, linea "+ l+ "grp ="+ grp);
218
                int layerCnt = 0;
219
                String tableAct = "NONAME";
220
                
221
                Hashtable tables = new Hashtable();
222
                Vector table = new Vector();
223
                DxfGroupVector v = new DxfGroupVector();
224
                
225
                grp = readGrp();// System.out.print("0:"+grp);
226
                while (true) {
227
                        if (grp.code == 0) {
228
                                String data = (String) grp.getData();
229
                                if (data.compareTo("ENDSEC") == 0 || data.compareTo("EOF") == 0)
230
                                        break;
231
                                else if (data.compareTo("ENDTAB") == 0) {
232
                                        tables.put(tableAct, table);
233
                                        table = new Vector();
234
                                        grp = readGrp();// System.out.print("1:"+grp);
235
                                        
236
                                        /**/if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
237
                                                entityMaker.createLayer(v);
238
                                                System.out.println("Dxf: Layer "+v.getDataAsString(2));
239
                                                layerCnt++;
240
                                                v.clear();
241
                                        }/**/
242
                                        continue;
243
                                } else {
244
                                        if (table.size()==1) {
245
                                                tableAct = v.getDataAsString(2);
246
                                                System.out.println("Dxf: Tabla "+tableAct);
247
                                        } else
248
                                                if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
249
                                                        entityMaker.createLayer(v);
250
                                                        System.out.println("Dxf: Layer "+v.getDataAsString(2));
251
                                                        layerCnt++;
252
                                                }
253

    
254
                                        v.clear();
255
                                        v.add(grp);
256
                                }
257
                                while (true) {
258
                                        grp = readGrp();// System.out.print("2:"+grp);
259
                                        if (grp.code == 0)        break;
260
                                        v.add(grp);
261
                                }
262
                                table.add(v);
263
                        } else {
264
                                System.err.println("Dxf: Error de secuencia");
265
                                grp = readGrp(); //System.out.print("3:"+grp);        
266
                        }
267
                }
268
                System.out.println("Dxf: Seccion TABLAS: " + layerCnt + " Capas. ");
269
        }
270
        
271
        private void readAnySection() throws NumberFormatException, IOException {
272
                System.out.println("Dxf: Seccion '"+((String) grp.getData())+"', linea "+ l);
273
                while (true) {
274
                        grp = readGrp();
275
                        if (grp.equals(0, "ENDSEC")) break;
276
                        else if (grp.equals(0, "EOF")) break;
277
                }
278
        }
279
        
280
        /**
281
         * Primera aproximaci?n a la implementaci?n de la lectura del HEADER. En principio
282
         * interesa que se lea la versi?n del DXF.
283
         * Para implementar esta parte del lector se ha optado por incluir el m?todo
284
         * setAcadVersion en el interface EntityFactory. A lo mejor conviene implementar
285
         * un nuevo interface VarSettings.
286
         * @throws NumberFormatException
287
         * @throws Exception
288
         */
289
        private void readHeader() throws NumberFormatException, Exception {
290
                System.out.println("Dxf: Seccion HEADER, linea "+ l);
291
                int variableCnt = 0;
292
                int cntVeces = 0;
293
                DxfGroupVector v = new DxfGroupVector();
294
                grp = readGrp();
295
                while (true) {
296
                        if (grp.equals(0, "EOF")) {
297
                                break;
298
                        }
299
                        else if (grp.code==9 || grp.code==0) {
300
                                if (v.size() > 0) {
301
                                        String lastVariable = (String) ((DxfGroup) v.get(0)).data;
302
                                        //System.out.println(lastVariable);
303
                                        if (lastVariable.compareTo("$ACADVER") == 0) {
304
                                                //System.out.println("Aqui llega.");
305
                                                headerManager.setAcadVersion(v);
306
                                        } else if (lastVariable.compareTo("ENDSEC") == 0) {
307
                                                //System.out.println("Llega al ENDSEC.");
308
                                                break;
309
                                        } else
310
                                                System.err.println("Dxf: Variable "+lastVariable+" desconocida.");
311
                                }
312
                                v.clear();
313
                                v.add(grp);
314
                                while (true) {
315
                                        grp = readGrp();
316
                                        if (grp.code == 9 || grp.code==0)        break;
317
                                        v.add(grp);
318
                                }
319
                                variableCnt++;
320
                        }
321
                        cntVeces++;
322
                }
323
                System.out.println("Dxf: Seccion HEADER, " + variableCnt + " variables, "+ cntVeces + " veces.");
324
                //System.out.println("Seccion HEADER, linea "+ l+ " (SALGO)");
325
                System.out.println("readHeader: ACAD Version: " + headerManager.getDxfHeaderVars().getAcadVersion());
326
        }        
327
        
328
        private void readEntities() throws NumberFormatException, Exception {
329
                System.out.println("Dxf: Seccion ENTITIES, linea "+ l);
330
                int entityCnt = 0;
331
                int cntVeces = 0;
332
                DxfGroupVector v = new DxfGroupVector();
333
                grp = readGrp();
334
                while (true) {
335
                        if (grp.equals(0, "EOF")) break;
336
                        else if (grp.code == 0) {
337
                                if (v.size() > 0) {
338
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
339
                                        if (lastEntity.compareTo("POLYLINE") == 0) {
340
                                                entityMaker.createPolyline(v);
341
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
342
                                                entityMaker.addVertex(v);
343
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
344
                                                entityMaker.endSeq();
345
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
346
                                                entityMaker.createLwPolyline(v);
347
                                        } else if (lastEntity.compareTo("LINE") == 0) {
348
                                                entityMaker.createLine(v);
349
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
350
                                                entityMaker.createText(v);
351
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
352
                                                entityMaker.createMText(v);
353
                                        } else if (lastEntity.compareTo("POINT") == 0) {
354
                                                entityMaker.createPoint(v);
355
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
356
                                                entityMaker.createCircle(v);
357
                                        } else if (lastEntity.compareTo("ELLIPSE") == 0) {
358
                                                entityMaker.createEllipse(v);
359
                                        } else if (lastEntity.compareTo("ARC") == 0) {
360
                                                entityMaker.createArc(v);
361
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
362
                                                entityMaker.createInsert(v);
363
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
364
                                                entityMaker.createSolid(v);
365
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
366
                                                entityMaker.createSpline(v);
367
                                        } else if (lastEntity.compareTo("ATTRIB") == 0) {
368
                                                entityMaker.createAttrib(v);
369
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
370
                                                break;
371
                                        } else
372
                                                System.err.println("Dxf: Entidad "+lastEntity+" desconocida.");
373
                                }
374
                                v.clear();
375
                                v.add(grp);
376
                                while (true) {
377
                                        grp = readGrp();
378
                                        if (grp.code == 0)        break;
379
                                        v.add(grp);
380
                                }
381
                                entityCnt++;
382
                        }
383
                        cntVeces++;
384
                }
385
                System.out.println("Dxf: Seccion ENTITIES, " + entityCnt + " entidades, "+ cntVeces + " veces.");
386
                //System.out.println("Seccion ENTITIES, linea "+ l+ " (SALGO)");
387
        }
388
        
389
        private void readBlocks() throws NumberFormatException, Exception {
390
                System.out.println("Dxf: Seccion BLOCKS, linea "+ l);
391
                int blkCnt = 0;
392
                int cntVeces = 0;
393
                DxfGroupVector v = new DxfGroupVector();
394
                grp = readGrp();
395
                while (true) {
396
                        if (grp.equals(0, "EOF")) break;
397
                        else if (grp.code == 0) {
398
                                if (v.size() > 0) {
399
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
400
                                        if (lastEntity.compareTo("BLOCK") == 0) {
401
                                                //System.out.println("readBlocks(): Empezamos a leer un bloque");
402
                                                entityMaker.createBlock(v);
403
                                        } else if (lastEntity.compareTo("POLYLINE") == 0) {
404
                                                //System.out.println("readBlocks(): A?adimos una polilinea al bloque");
405
                                                entityMaker.createPolyline(v);
406
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
407
                                                //System.out.println("readBlocks(): A?adimos un vertice a la polilinea");
408
                                                entityMaker.addVertex(v);
409
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
410
                                                //System.out.println("readBlocks(): Cerramos una polilinea");
411
                                                entityMaker.endSeq();
412
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
413
                                                //System.out.println("readBlocks(): A?adimos una lwpolilinea al bloque");
414
                                                entityMaker.createLwPolyline(v);
415
                                        } else if (lastEntity.compareTo("LINE") == 0) {
416
                                                //System.out.println("readBlocks(): A?adimos una linea al bloque");
417
                                                entityMaker.createLine(v);
418
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
419
                                                //System.out.println("readBlocks(): A?adimos un texto al bloque");
420
                                                entityMaker.createText(v);
421
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
422
                                                //System.out.println("readBlocks(): A?adimos un m-texto al bloque");
423
                                                entityMaker.createMText(v);
424
                                        } else if (lastEntity.compareTo("POINT") == 0) {
425
                                                //System.out.println("readBlocks(): A?adimos un punto al bloque");
426
                                                entityMaker.createPoint(v);
427
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
428
                                                //System.out.println("readBlocks(): A?adimos un circulo al bloque");
429
                                                entityMaker.createCircle(v);
430
                                        } else if (lastEntity.compareTo("ARC") == 0) {
431
                                                //System.out.println("readBlocks(): A?adimos un arco al bloque");
432
                                                entityMaker.createArc(v);
433
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
434
                                                //System.out.println("readBlocks(): A?adimos un insert al bloque");
435
                                                entityMaker.createInsert(v);
436
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
437
                                                //System.out.println("readBlocks(): A?adimos un solido al bloque");
438
                                                entityMaker.createSolid(v);
439
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
440
                                                entityMaker.createSpline(v);
441
                                        } else if (lastEntity.compareTo("ATTDEF") == 0) {
442
                                                entityMaker.createAttdef(v);
443
                                        } else if (lastEntity.compareTo("ENDBLK") == 0) {
444
                                                //System.out.println("readBlocks(): Cerramos un bloque"+v);
445
                                                entityMaker.endBlk(v);
446
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
447
                                                break;
448
                                        } else
449
                                                System.err.println("Dxf: Entidad de bloque "+lastEntity+" desconocida.");
450
                                }
451
                                v.clear();
452
                                v.add(grp);
453
                                while (true) {
454
                                        grp = readGrp();
455
                                        if (grp.code == 0)        break;
456
                                        v.add(grp);
457
                                }
458
                                blkCnt++;
459
                        }
460
                        cntVeces++;
461
                }
462
                
463
                entityMaker.testBlocks();
464
                // Cuando termina de leer la secci?n de bloques se asegura de que todos los campos
465
                // son distintos.
466
                //System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
467
                entityMaker.depureAttributes();
468
                //System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
469
                System.out.println("Dxf: Seccion BLOCKS, " + blkCnt + " elementos de bloque. "+ cntVeces + " veces.");
470
        }
471
        
472
        public IObjList getObjects() {
473
                return this.entityMaker.getObjects();
474
        }
475
        
476
        /**
477
         * jmorell: M?todo que permite salvar al formato DXF2000.
478
         * Este m?todo ha sido actualizado en el proceso de implementaci?n del piloto
479
         * de CAD. En este piloto deb?a existir soporte para elipses, y este es uno de
480
         * los motivos que nos llevan a implementar ahora para DXF2000, puesto que el
481
         * DXF R12 no soporta elipses.
482
         * @param fName
483
         * @throws IOException
484
         */
485
        public void save(String fName) throws IOException {
486
                System.out.println("save: fName = " + fName);
487
                long t2, t1;
488
                t1 = getTime();
489
                fName = DataSource.normalize(fName);
490
                FileWriter fw = new FileWriter(fName);
491
                // COMMENTAIRES DU TRADUCTEUR
492
//                fw.write(DxfGroup.toString(999, Integer.toString(features.size()) + " features")); 
493
                fw.write(DxfGroup.toString(999, "TRANSLATION BY geo.cresques.io.DxfFile"));
494
                fw.write(DxfGroup.toString(999, "DATE : " + (new Date()).toString()));
495
                writeHeader(fw);
496
                writeTables(fw);
497
                writeBlocks(fw);
498
                writeEntities(fw);
499
                writeObjects(fw);
500
                fw.write(DxfGroup.toString(0, "EOF"));
501
                fw.flush();
502
                fw.close();
503
                t2 = getTime();
504
                System.out.println("DxfFile.save(): Tiempo salvando: " + (t2-t1)/1000 + " seg.");
505
        }
506
        /**
507
         * Escritor de la cabecera de un DXF.
508
         * jmorell: Actualizaci?n del escritor de DXF de R12 a 2000.
509
         * @param fw
510
         * @throws IOException
511
         */
512
        public void writeHeader(FileWriter fw) throws IOException {
513
                fw.write(DxfGroup.toString(0, "SECTION"));
514
                fw.write(DxfGroup.toString(2, "HEADER"));
515
                fw.write(DxfGroup.toString(9, "$ACADVER"));
516
                        //fw.write(DxfGroup.toString(1, "AC1009"));                        // DXF R12
517
                        fw.write(DxfGroup.toString(1, "AC1015"));                        // DXF 2000
518
                fw.write(DxfGroup.toString(9, "$INSBASE"));
519
                        fw.write(DxfGroup.toString(10, 0.0, 1));
520
                        fw.write(DxfGroup.toString(20, 0.0, 1));
521
                        fw.write(DxfGroup.toString(30, 0.0, 1));
522
                fw.write(DxfGroup.toString(9, "$EXTMIN"));
523
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
524
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
525
                        fw.write(DxfGroup.toString(30, 0.0, 6));
526
                fw.write(DxfGroup.toString(9, "$EXTMAX"));
527
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
528
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
529
                        fw.write(DxfGroup.toString(30, 0.0, 6));
530
                fw.write(DxfGroup.toString(9, "$LIMMIN"));
531
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
532
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
533
                fw.write(DxfGroup.toString(9, "$LIMMAX"));
534
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
535
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
536
                fw.write(DxfGroup.toString(9, "$ORTHOMODE")+DxfGroup.toString(70, 0));
537
                fw.write(DxfGroup.toString(9, "$REGENMODE")+DxfGroup.toString(70, 1));
538
                fw.write(DxfGroup.toString(9, "$FILLMODE")+        DxfGroup.toString(70, 1));
539
                fw.write(DxfGroup.toString(9, "$QTEXTMODE")+DxfGroup.toString(70, 0));
540
                fw.write(DxfGroup.toString(9, "$MIRRTEXT")+        DxfGroup.toString(70, 1));
541
                fw.write(DxfGroup.toString(9, "$DRAGMODE")+        DxfGroup.toString(70, 2));
542
                fw.write(DxfGroup.toString(9, "$LTSCALE")+        DxfGroup.toString(40, 1.0, 1));
543
                fw.write(DxfGroup.toString(9, "$OSMODE")+        DxfGroup.toString(70, 0));
544
                fw.write(DxfGroup.toString(9, "$ATTMODE")+        DxfGroup.toString(70, 1));
545
                fw.write(DxfGroup.toString(9, "$TEXTSIZE")+        DxfGroup.toString(40, 0.2, 1));
546
                fw.write(DxfGroup.toString(9, "$TRACEWID")+        DxfGroup.toString(40, 0.05, 2));
547
                fw.write(DxfGroup.toString(9, "$TEXTSTYLE")+        DxfGroup.toString(7, "STANDARD"));
548
                fw.write(DxfGroup.toString(9, "$CLAYER")+        DxfGroup.toString(8, "0"));
549
                fw.write(DxfGroup.toString(9, "$CELTYPE")+        DxfGroup.toString(6, "CONTINUOUS"));
550
                fw.write(DxfGroup.toString(9, "$CECOLOR")+        DxfGroup.toString(62, 256));
551
                fw.write(DxfGroup.toString(9, "$DIMSCALE")+        DxfGroup.toString(40, 1.0, 1));
552
                fw.write(DxfGroup.toString(9, "$DIMASZ")+        DxfGroup.toString(40, 0.18, 2));
553
                fw.write(DxfGroup.toString(9, "$DIMEXO")+        DxfGroup.toString(40, 0.0625, 4));
554
                fw.write(DxfGroup.toString(9, "$DIMDLI")+        DxfGroup.toString(40, 0.38, 2));
555
                fw.write(DxfGroup.toString(9, "$DIMRND")+        DxfGroup.toString(40, 0.0, 1));
556
                fw.write(DxfGroup.toString(9, "$DIMDLE")+        DxfGroup.toString(40, 0.0, 1));
557
                fw.write(DxfGroup.toString(9, "$DIMEXE")+        DxfGroup.toString(40, 0.18, 2));
558
                fw.write(DxfGroup.toString(9, "$DIMTP")+        DxfGroup.toString(40, 0.0, 1));
559
                fw.write(DxfGroup.toString(9, "$DIMTM")+        DxfGroup.toString(40, 0.0, 1));
560
                fw.write(DxfGroup.toString(9, "$DIMTXT")+        DxfGroup.toString(40, 0.18, 2));
561
                fw.write(DxfGroup.toString(9, "$DIMCEN")+        DxfGroup.toString(40, 0.09, 2));
562
                fw.write(DxfGroup.toString(9, "$DIMTSZ")+        DxfGroup.toString(40, 0.0, 1));
563
                fw.write(DxfGroup.toString(9,"$DIMTOL")+        DxfGroup.toString(70,0));
564
                fw.write(DxfGroup.toString(9,"$DIMLIM")+        DxfGroup.toString(70,0));
565
                fw.write(DxfGroup.toString(9,"$DIMTIH")+        DxfGroup.toString(70,1));
566
                fw.write(DxfGroup.toString(9,"$DIMTOH")+        DxfGroup.toString(70,1));
567
                fw.write(DxfGroup.toString(9,"$DIMSE1")+        DxfGroup.toString(70,0));
568
                fw.write(DxfGroup.toString(9,"$DIMSE2")+        DxfGroup.toString(70,0));
569
                fw.write(DxfGroup.toString(9,"$DIMTAD")+        DxfGroup.toString(70,0));
570
                fw.write(DxfGroup.toString(9,"$DIMZIN")+        DxfGroup.toString(70,0));
571
                fw.write(DxfGroup.toString(9,"$DIMBLK")+        DxfGroup.toString(1,""));
572
                fw.write(DxfGroup.toString(9,"$DIMASO")+        DxfGroup.toString(70,1));
573
                fw.write(DxfGroup.toString(9,"$DIMSHO")+        DxfGroup.toString(70,1));
574
                fw.write(DxfGroup.toString(9,"$DIMPOST")+        DxfGroup.toString(1,""));
575
                fw.write(DxfGroup.toString(9,"$DIMAPOST")+        DxfGroup.toString(1,""));
576
                fw.write(DxfGroup.toString(9,"$DIMALT")+        DxfGroup.toString(70,0));
577
                fw.write(DxfGroup.toString(9,"$DIMALTD")+        DxfGroup.toString(70,2));
578
                fw.write(DxfGroup.toString(9,"$DIMALTF")+        DxfGroup.toString(40,25.4,1));
579
                fw.write(DxfGroup.toString(9,"$DIMLFAC")+        DxfGroup.toString(40,1.0,1));
580
                fw.write(DxfGroup.toString(9,"$DIMTOFL")+        DxfGroup.toString(70,0));
581
                fw.write(DxfGroup.toString(9,"$DIMTVP")+        DxfGroup.toString(40,0.0,1));
582
                fw.write(DxfGroup.toString(9,"$DIMTIX")+        DxfGroup.toString(70,0));
583
                fw.write(DxfGroup.toString(9,"$DIMSOXD")+        DxfGroup.toString(70,0));
584
                fw.write(DxfGroup.toString(9,"$DIMSAH")+        DxfGroup.toString(70,0));
585
                fw.write(DxfGroup.toString(9,"$DIMBLK1")+        DxfGroup.toString(1,""));
586
                fw.write(DxfGroup.toString(9,"$DIMBLK2")+        DxfGroup.toString(1,""));
587
                fw.write(DxfGroup.toString(9,"$DIMSTYLE")+        DxfGroup.toString(2,"STANDARD"));
588
                fw.write(DxfGroup.toString(9,"$DIMCLRD")+        DxfGroup.toString(70,0));
589
                fw.write(DxfGroup.toString(9,"$DIMCLRE")+        DxfGroup.toString(70,0));
590
                fw.write(DxfGroup.toString(9,"$DIMCLRT")+        DxfGroup.toString(70,0));
591
                fw.write(DxfGroup.toString(9,"$DIMTFAC")+        DxfGroup.toString(40,1.0,1));
592
                fw.write(DxfGroup.toString(9,"$DIMGAP")+        DxfGroup.toString(40,0.09,2));
593
                fw.write(DxfGroup.toString(9,"$LUNITS")+        DxfGroup.toString(70,2));
594
                fw.write(DxfGroup.toString(9,"$LUPREC")+        DxfGroup.toString(70,4));
595
                fw.write(DxfGroup.toString(9,"$AXISMODE")+        DxfGroup.toString(70,0));
596
                fw.write(DxfGroup.toString(9,"$AXISUNIT"));
597
                fw.write(DxfGroup.toString(10,0.0,1));
598
                fw.write(DxfGroup.toString(20,0.0,1));
599
                fw.write(DxfGroup.toString(9,"$SKETCHINC")+        DxfGroup.toString(40,0.1,1));
600
                fw.write(DxfGroup.toString(9,"$FILLETRAD")+        DxfGroup.toString(40,0.0,1));
601
                fw.write(DxfGroup.toString(9,"$AUNITS")+        DxfGroup.toString(70,0));
602
                fw.write(DxfGroup.toString(9,"$AUPREC")+        DxfGroup.toString(70,0));
603
                fw.write(DxfGroup.toString(9,"$MENU")+                DxfGroup.toString(1,"acad"));
604
                fw.write(DxfGroup.toString(9,"$ELEVATION")+        DxfGroup.toString(40,0.0,1));
605
                fw.write(DxfGroup.toString(9,"$PELEVATION")+DxfGroup.toString(40,0.0,1));
606
                fw.write(DxfGroup.toString(9,"$THICKNESS")+        DxfGroup.toString(40,0.0,1));
607
                fw.write(DxfGroup.toString(9,"$LIMCHECK")+        DxfGroup.toString(70,0));
608
                fw.write(DxfGroup.toString(9,"$BLIPMODE")+        DxfGroup.toString(70,1));
609
                fw.write(DxfGroup.toString(9,"$CHAMFERA")+        DxfGroup.toString(40,0.0,1));
610
                fw.write(DxfGroup.toString(9,"$CHAMFERB")+        DxfGroup.toString(40,0.0,1));
611
                fw.write(DxfGroup.toString(9,"$SKPOLY")+        DxfGroup.toString(70,0));
612
                fw.write(DxfGroup.toString(9,"$TDCREATE")+        DxfGroup.toString(40,2453116.436828704,9));
613
                fw.write(DxfGroup.toString(9,"$TDUPDATE")+        DxfGroup.toString(40,2453116.436828704,9));
614
                fw.write(DxfGroup.toString(9,"$TDINDWG")+        DxfGroup.toString(40,0.0000000000,10));
615
                fw.write(DxfGroup.toString(9,"$TDUSRTIMER")+DxfGroup.toString(40,0.0000000000,10));
616
                fw.write(DxfGroup.toString(9,"$USRTIMER")+        DxfGroup.toString(70,1));
617
                fw.write(DxfGroup.toString(9,"$ANGBASE")+        DxfGroup.toString(50,0.0,1));
618
                fw.write(DxfGroup.toString(9,"$ANGDIR")+        DxfGroup.toString(70,0));
619
                fw.write(DxfGroup.toString(9,"$PDMODE")+        DxfGroup.toString(70,0));
620
                fw.write(DxfGroup.toString(9,"$PDSIZE")+        DxfGroup.toString(40,0.0,1));
621
                fw.write(DxfGroup.toString(9,"$PLINEWID")+        DxfGroup.toString(40,0.0,1));
622
                fw.write(DxfGroup.toString(9,"$COORDS")+        DxfGroup.toString(70,0));
623
                fw.write(DxfGroup.toString(9,"$SPLFRAME")+        DxfGroup.toString(70,0));
624
                fw.write(DxfGroup.toString(9,"$SPLINETYPE")+DxfGroup.toString(70,6));
625
                fw.write(DxfGroup.toString(9,"$SPLINESEGS")+DxfGroup.toString(70,10));
626
                fw.write(DxfGroup.toString(9,"$ATTDIA")+        DxfGroup.toString(70,0));
627
                fw.write(DxfGroup.toString(9,"$ATTREQ")+        DxfGroup.toString(70,1));
628
                fw.write(DxfGroup.toString(9,"$HANDLING")+        DxfGroup.toString(70,1));
629
                fw.write(DxfGroup.toString(9,"$HANDSEED")+        DxfGroup.toString(5,"394B"));
630
                fw.write(DxfGroup.toString(9,"$SURFTAB1")+        DxfGroup.toString(70,6));
631
                fw.write(DxfGroup.toString(9,"$SURFTAB2")+        DxfGroup.toString(70,6));
632
                fw.write(DxfGroup.toString(9,"$SURFTYPE")+        DxfGroup.toString(70,6));
633
                fw.write(DxfGroup.toString(9,"$SURFU")+                DxfGroup.toString(70,6));
634
                fw.write(DxfGroup.toString(9,"$SURFV")+                DxfGroup.toString(70,6));
635
                fw.write(DxfGroup.toString(9,"$UCSNAME")+        DxfGroup.toString(2,""));
636
                fw.write(DxfGroup.toString(9,"$UCSORG"));
637
                fw.write(DxfGroup.toString(10,0.0,1));
638
                fw.write(DxfGroup.toString(20,0.0,1));
639
                fw.write(DxfGroup.toString(30,0.0,1));
640
                fw.write(DxfGroup.toString(9,"$UCSXDIR"));
641
                fw.write(DxfGroup.toString(10,1.0,1));
642
                fw.write(DxfGroup.toString(20,0.0,1));
643
                fw.write(DxfGroup.toString(30,0.0,1));
644
                fw.write(DxfGroup.toString(9,"$UCSYDIR"));
645
                fw.write(DxfGroup.toString(10,0.0,1));
646
                fw.write(DxfGroup.toString(20,1.0,1));
647
                fw.write(DxfGroup.toString(30,0.0,1));
648
                fw.write(DxfGroup.toString(9,"$PUCSNAME")+        DxfGroup.toString(2,""));
649
                fw.write(DxfGroup.toString(9,"$PUCSORG"));
650
                fw.write(DxfGroup.toString(10,0.0,1));
651
                fw.write(DxfGroup.toString(20,0.0,1));
652
                fw.write(DxfGroup.toString(30,0.0,1));
653
                fw.write(DxfGroup.toString(9,"$PUCSXDIR"));
654
                fw.write(DxfGroup.toString(10,1.0,1));
655
                fw.write(DxfGroup.toString(20,0.0,1));
656
                fw.write(DxfGroup.toString(30,0.0,1));
657
                fw.write(DxfGroup.toString(9,"$PUCSYDIR"));
658
                fw.write(DxfGroup.toString(10,0.0,1));
659
                fw.write(DxfGroup.toString(20,1.0,1));
660
                fw.write(DxfGroup.toString(30,0.0,1));
661
                fw.write(DxfGroup.toString(9,"$USERI1")+        DxfGroup.toString(70,0));
662
                fw.write(DxfGroup.toString(9,"$USERI2")+        DxfGroup.toString(70,0));
663
                fw.write(DxfGroup.toString(9,"$USERI3")+        DxfGroup.toString(70,0));
664
                fw.write(DxfGroup.toString(9,"$USERI4")+        DxfGroup.toString(70,0));
665
                fw.write(DxfGroup.toString(9,"$USERI5")+        DxfGroup.toString(70,0));
666
                fw.write(DxfGroup.toString(9,"$USERR1")+        DxfGroup.toString(40,0.0,1));
667
                fw.write(DxfGroup.toString(9,"$USERR2")+        DxfGroup.toString(40,0.0,1));
668
                fw.write(DxfGroup.toString(9,"$USERR3")+        DxfGroup.toString(40,0.0,1));
669
                fw.write(DxfGroup.toString(9,"$USERR4")+        DxfGroup.toString(40,0.0,1));
670
                fw.write(DxfGroup.toString(9,"$USERR5")+        DxfGroup.toString(40,0.0,1));
671
                fw.write(DxfGroup.toString(9,"$WORLDVIEW")+        DxfGroup.toString(70,1));
672
                fw.write(DxfGroup.toString(9,"$SHADEDGE")+        DxfGroup.toString(70,3));
673
                fw.write(DxfGroup.toString(9,"$SHADEDIF")+        DxfGroup.toString(70,70));
674
                fw.write(DxfGroup.toString(9,"$TILEMODE")+        DxfGroup.toString(70,1));
675
                fw.write(DxfGroup.toString(9,"$MAXACTVP")+        DxfGroup.toString(70,16));
676
                fw.write(DxfGroup.toString(9,"$PINSBASE"));
677
                fw.write(DxfGroup.toString(10,0.0,1));
678
                fw.write(DxfGroup.toString(20,0.0,1));
679
                fw.write(DxfGroup.toString(30,0.0,1));
680
                fw.write(DxfGroup.toString(9,"$PLIMCHECK")+        DxfGroup.toString(70,0));
681
                fw.write(DxfGroup.toString(9,"$PEXTMIN"));
682
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
683
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
684
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
685
                fw.write(DxfGroup.toString(9,"$PEXTMAX"));
686
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
687
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
688
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
689
                fw.write(DxfGroup.toString(9,"$PLIMMIN"));
690
                fw.write(DxfGroup.toString(10,0.0,1));
691
                fw.write(DxfGroup.toString(20,0.0,1));
692
                fw.write(DxfGroup.toString(9,"$PLIMMAX"));
693
                fw.write(DxfGroup.toString(10,12.0,1));
694
                fw.write(DxfGroup.toString(20,9.0,1));
695
                fw.write(DxfGroup.toString(9,"$UNITMODE")+        DxfGroup.toString(70,0));
696
                fw.write(DxfGroup.toString(9,"$VISRETAIN")+        DxfGroup.toString(70,0));
697
                fw.write(DxfGroup.toString(9,"$PLINEGEN")+        DxfGroup.toString(70,1));
698
                fw.write(DxfGroup.toString(9,"$PSLTSCALE")+        DxfGroup.toString(70,0));
699
                fw.write(DxfGroup.toString(9,"$TREEDEPTH")+        DxfGroup.toString(70,3020));
700
                fw.write(DxfGroup.toString(9,"$DWGCODEPAGE")+DxfGroup.toString(3,"ansi_1252"));
701
/*                
702
                fw.write(DxfGroup.toString(9, "$ELEVATION"));
703
                        fw.write(DxfGroup.toString(40, 0.0, 3));
704
                fw.write(DxfGroup.toString(9, "$LIMCHECK"));
705
                        fw.write(DxfGroup.toString(70, 1));
706
                fw.write(DxfGroup.toString(9, "$LUNITS"));
707
                        fw.write(DxfGroup.toString(70, 2));
708
                fw.write(DxfGroup.toString(9, "$LUPREC"));
709
                        fw.write(DxfGroup.toString(70, 2));*/
710
                fw.write(DxfGroup.toString(0, "ENDSEC"));
711
        }
712
        
713
        /**
714
         * Escritor de la secci?n TABLES de un DXF.
715
         * @param fw
716
         * @throws IOException
717
         */
718
        public void writeTables(FileWriter fw) throws IOException {
719
                fw.write(DxfGroup.toString(0, "SECTION"));
720
                fw.write(DxfGroup.toString(2, "TABLES"));
721
                // esta tampoco.
722
                writeVPortTable(fw);
723
                writeLTypeTable(fw);
724
                writeLayerTable(fw);
725
                writeStyleTable(fw);
726
                // estas no son las provocan el pete.
727
                writeViewTable(fw);
728
                writeUCSTable(fw);
729
                // esta provoca el pete. Y si no se pone las tablas aparecen
730
                // incompletas y acad no abre el fichero ...
731
                writeAppidTable(fw);
732
                writeDimStyleTable(fw);
733
                // esta no provoca pete.
734
                writeBlockRecordTable(fw);
735
                fw.write(DxfGroup.toString(0, "ENDSEC"));
736
        }
737
        /**
738
         * Escritor de la tabla VPORT.
739
         * @param fw
740
         * @throws IOException
741
         */
742
        public void writeVPortTable(FileWriter fw) throws IOException {
743
                fw.write(DxfGroup.toString(0, "TABLE"));
744
                fw.write(DxfGroup.toString(2, "VPORT"));
745
                fw.write(DxfGroup.toString(5, 8));
746
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
747
                fw.write(DxfGroup.toString(70, 0));
748
                /*fw.write(DxfGroup.toString(70, 1));
749
                fw.write(DxfGroup.toString(0, "VPORT"));
750
                fw.write(DxfGroup.toString(5, 30));
751
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
752
                fw.write(DxfGroup.toString(100, "AcDbViewportTableRecord"));
753
                fw.write(DxfGroup.toString(2, "*Active"));
754
                fw.write(DxfGroup.toString(70, 0));
755
                fw.write(DxfGroup.toString(10, 0.0, 4));
756
                fw.write(DxfGroup.toString(20, 0.0, 4));
757
                fw.write(DxfGroup.toString(11, 1.0, 4));
758
                fw.write(DxfGroup.toString(21, 1.0, 4));
759
                fw.write(DxfGroup.toString(12, 286.30555555555549, 10));
760
                fw.write(DxfGroup.toString(22, 148.5, 4));
761
                fw.write(DxfGroup.toString(13, 0.0, 4));
762
                fw.write(DxfGroup.toString(23, 0.0, 4));
763
                fw.write(DxfGroup.toString(14, 10.0, 4));
764
                fw.write(DxfGroup.toString(24, 10.0, 4));
765
                fw.write(DxfGroup.toString(15, 10.0, 4));
766
                fw.write(DxfGroup.toString(25, 10.0, 4));
767
                fw.write(DxfGroup.toString(16, 0.0, 4));
768
                fw.write(DxfGroup.toString(26, 0.0, 4));
769
                fw.write(DxfGroup.toString(36, 1.0, 4));
770
                fw.write(DxfGroup.toString(17, 0.0, 4));
771
                fw.write(DxfGroup.toString(27, 0.0, 4));
772
                fw.write(DxfGroup.toString(37, 0.0, 4));
773
                fw.write(DxfGroup.toString(40, 297.0, 4));
774
                fw.write(DxfGroup.toString(41, 1.92798353909465, 10));
775
                fw.write(DxfGroup.toString(42, 50.0, 4));
776
                fw.write(DxfGroup.toString(43, 0.0, 4));
777
                fw.write(DxfGroup.toString(44, 0.0, 4));
778
                fw.write(DxfGroup.toString(50, 0.0, 4));
779
                fw.write(DxfGroup.toString(51, 0.0, 4));
780
                fw.write(DxfGroup.toString(71, 0));
781
                fw.write(DxfGroup.toString(72, 100));
782
                fw.write(DxfGroup.toString(73, 1));
783
                fw.write(DxfGroup.toString(74, 3));
784
                fw.write(DxfGroup.toString(75, 1));
785
                fw.write(DxfGroup.toString(76, 1));
786
                fw.write(DxfGroup.toString(77, 0));
787
                fw.write(DxfGroup.toString(78, 0));
788
                fw.write(DxfGroup.toString(281, 0));
789
                fw.write(DxfGroup.toString(65, 1));
790
                fw.write(DxfGroup.toString(110, 0.0, 4));
791
                fw.write(DxfGroup.toString(120, 0.0, 4));
792
                fw.write(DxfGroup.toString(130, 0.0, 4));
793
                fw.write(DxfGroup.toString(111, 1.0, 4));
794
                fw.write(DxfGroup.toString(121, 0.0, 4));
795
                fw.write(DxfGroup.toString(131, 0.0, 4));
796
                fw.write(DxfGroup.toString(112, 0.0, 4));
797
                fw.write(DxfGroup.toString(122, 1.0, 4));
798
                fw.write(DxfGroup.toString(132, 0.0, 4));
799
                fw.write(DxfGroup.toString(79, 0));
800
                fw.write(DxfGroup.toString(146, 0.0, 4));*/
801
                fw.write(DxfGroup.toString(0, "ENDTAB"));
802
        }
803
        /**
804
         * Escritor de la tabla LTYPE.
805
         * @param fw
806
         * @throws IOException
807
         */
808
        public void writeLTypeTable(FileWriter fw) throws IOException {
809
                fw.write(DxfGroup.toString(0, "TABLE"));
810
                fw.write(DxfGroup.toString(2, "LTYPE"));
811
                fw.write(DxfGroup.toString(5, 5));
812
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
813
                fw.write(DxfGroup.toString(70, 1));
814
                // Aqui hay que crear un objeto DxfLType como el DxfLayer tambi?n basado en
815
                // el lector de DXF de Mich.
816
                /*DxfTABLE_LTYPE_ITEM ltype =
817
                        new DxfTABLE_LTYPE_ITEM("CONTINUE", 0, "", 65, 0f, new float[0]);
818
                fw.write(ltype.toString());*/
819
                fw.write(DxfGroup.toString(0, "LTYPE"));
820
                fw.write(DxfGroup.toString(5, 14));
821
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
822
                fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
823
                fw.write(DxfGroup.toString(2, "ByBlock"));
824
                fw.write(DxfGroup.toString(70, 0));
825
                fw.write(DxfGroup.toString(3, ""));
826
                fw.write(DxfGroup.toString(72, 65));
827
                fw.write(DxfGroup.toString(73, 0));
828
                fw.write(DxfGroup.toString(40, 0.0, 4));
829
                fw.write(DxfGroup.toString(0, "LTYPE"));
830
                fw.write(DxfGroup.toString(5, 15));
831
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
832
                fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
833
                fw.write(DxfGroup.toString(2, "ByLayer"));
834
                fw.write(DxfGroup.toString(70, 0));
835
                fw.write(DxfGroup.toString(3, ""));
836
                fw.write(DxfGroup.toString(72, 65));
837
                fw.write(DxfGroup.toString(73, 0));
838
                fw.write(DxfGroup.toString(40, 0.0, 4));
839
                fw.write(DxfGroup.toString(0, "ENDTAB"));
840
        }
841
        /**
842
         * Escritor de la tabla LAYER.
843
         * @param fw
844
         * @throws IOException
845
         */
846
        public void writeLayerTable(FileWriter fw) throws IOException {
847
                fw.write(DxfGroup.toString(0, "TABLE"));
848
                fw.write(DxfGroup.toString(2, "LAYER"));
849
                fw.write(DxfGroup.toString(5, 2));
850
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
851
                fw.write(DxfGroup.toString(70, 1));
852
                //layer = new DxfLayer(layerName, 0, 131, "CONTINUOUS");
853
                //fw.write(layer.toString());
854
                //fw.write(((DxfEntityMaker) entityMaker).getLayers().toDxfString());
855
                fw.write(DxfGroup.toString(0, "LAYER"));
856
                fw.write(DxfGroup.toString(5, 10));
857
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
858
                fw.write(DxfGroup.toString(100, "AcDbLayerTableRecord"));
859
                fw.write(DxfGroup.toString(2, "0"));
860
                fw.write(DxfGroup.toString(70, 0));
861
                fw.write(DxfGroup.toString(62, 7));
862
                fw.write(DxfGroup.toString(6, "CONTINUOUS"));
863
                fw.write(DxfGroup.toString(390, "F"));
864
                fw.write(DxfGroup.toString(0, "ENDTAB"));
865
        }
866
        /**
867
         * Escritor de la tabla STYLE.
868
         * @param fw
869
         * @throws IOException
870
         */
871
        public void writeStyleTable(FileWriter fw) throws IOException {
872
                fw.write(DxfGroup.toString(0, "TABLE"));
873
                fw.write(DxfGroup.toString(2, "STYLE"));
874
                fw.write(DxfGroup.toString(5, 3));
875
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
876
                fw.write(DxfGroup.toString(70, 0));
877
                /*fw.write(DxfGroup.toString(70, 1));
878
                DxfTABLE_STYLE_ITEM style =
879
                        new DxfTABLE_STYLE_ITEM("STANDARD", 0, 0f, 1f, 0f, 0, 1.0f, "xxx.txt", "yyy.txt");
880
                fw.write(style.toString());*/
881
                fw.write(DxfGroup.toString(0, "STYLE"));
882
                fw.write(DxfGroup.toString(5, 11));
883
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
884
                fw.write(DxfGroup.toString(100, "AcDbTextStyleTableRecord"));
885
                fw.write(DxfGroup.toString(2, "Standard"));
886
                fw.write(DxfGroup.toString(70, 0));
887
                fw.write(DxfGroup.toString(71, 0));
888
                fw.write(DxfGroup.toString(40, 0.0, 4));
889
                fw.write(DxfGroup.toString(41, 1.0, 4));
890
                fw.write(DxfGroup.toString(42, 2.5, 4));
891
                fw.write(DxfGroup.toString(50, 0.0, 4));
892
                fw.write(DxfGroup.toString(3, "txt"));
893
                fw.write(DxfGroup.toString(4, ""));
894
                fw.write(DxfGroup.toString(0, "ENDTAB"));
895
        }
896
        /**
897
         * Escritor de la tabla VIEW.
898
         * @param fw
899
         * @throws IOException
900
         */
901
        public void writeViewTable(FileWriter fw) throws IOException {
902
                fw.write(DxfGroup.toString(0, "TABLE"));
903
                fw.write(DxfGroup.toString(2, "VIEW"));
904
                fw.write(DxfGroup.toString(5, 6));
905
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
906
                fw.write(DxfGroup.toString(70, 0));
907
                fw.write(DxfGroup.toString(0, "ENDTAB"));
908
        }
909
        /**
910
         * Escritor de la tabla UCS.
911
         * @param fw
912
         * @throws IOException
913
         */
914
        public void writeUCSTable(FileWriter fw) throws IOException {
915
                fw.write(DxfGroup.toString(0, "TABLE"));
916
                fw.write(DxfGroup.toString(2, "UCS"));
917
                fw.write(DxfGroup.toString(5, 7));
918
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
919
                fw.write(DxfGroup.toString(70, 0));
920
                fw.write(DxfGroup.toString(0, "ENDTAB"));
921
        }
922
        /**
923
         * Escritor de la tabla APPID.
924
         * @param fw
925
         * @throws IOException
926
         */
927
        public void writeAppidTable(FileWriter fw) throws IOException {
928
                fw.write(DxfGroup.toString(0, "TABLE"));
929
                fw.write(DxfGroup.toString(2, "APPID"));
930
                fw.write(DxfGroup.toString(5, 9));
931
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
932
                fw.write(DxfGroup.toString(70, 1));
933
                fw.write(DxfGroup.toString(0, "APPID"));
934
                fw.write(DxfGroup.toString(5, 12));
935
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
936
                fw.write(DxfGroup.toString(100, "AcDbRegAppTableRecord"));
937
                fw.write(DxfGroup.toString(2, "ACAD"));
938
                fw.write(DxfGroup.toString(70, 1));
939
                fw.write(DxfGroup.toString(0, "ENDTAB"));
940
        }
941
        /**
942
         * Escritor de la tabla DIMSTYLE.
943
         * @param fw
944
         * @throws IOException
945
         */
946
        public void writeDimStyleTable(FileWriter fw) throws IOException {
947
                fw.write(DxfGroup.toString(0, "TABLE"));
948
                fw.write(DxfGroup.toString(2, "DIMSTYLE"));
949
                fw.write(DxfGroup.toString(5, "A"));
950
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
951
                fw.write(DxfGroup.toString(70, 0));
952
                fw.write(DxfGroup.toString(100, "AcDbDimStyleTable"));
953
                fw.write(DxfGroup.toString(0, "ENDTAB"));
954
        }
955
        /**
956
         * Escritor de la tabla BLOCK_RECORD.
957
         * @param fw
958
         * @throws IOException
959
         */
960
        public void writeBlockRecordTable(FileWriter fw) throws IOException {
961
                fw.write(DxfGroup.toString(0, "TABLE"));
962
                fw.write(DxfGroup.toString(2, "BLOCK_RECORD"));
963
                fw.write(DxfGroup.toString(5, 1));
964
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
965
                fw.write(DxfGroup.toString(70, 1));
966
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
967
                fw.write(DxfGroup.toString(5, "1F"));
968
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
969
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
970
                fw.write(DxfGroup.toString(2, "*Model_Space"));
971
                fw.write(DxfGroup.toString(340, "22"));
972
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
973
                fw.write(DxfGroup.toString(5, "1B"));
974
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
975
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
976
                fw.write(DxfGroup.toString(2, "*Paper_Space"));
977
                fw.write(DxfGroup.toString(340, "1E"));
978
                fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
979
                fw.write(DxfGroup.toString(5, "23"));
980
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
981
                fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
982
                fw.write(DxfGroup.toString(2, "*Paper_Space0"));
983
                fw.write(DxfGroup.toString(340, "26"));
984
                fw.write(DxfGroup.toString(0, "ENDTAB"));
985
        }
986
        /**
987
         * Escritor de la secci?n de bloques por defecto de un DXF2000.
988
         * @param fw
989
         * @throws IOException
990
         */
991
        public void writeBlocks(FileWriter fw) throws IOException {
992
                fw.write(DxfGroup.toString(0, "SECTION"));
993
                fw.write(DxfGroup.toString(2, "BLOCKS"));
994
                fw.write(DxfGroup.toString(0, "BLOCK"));
995
                fw.write(DxfGroup.toString(5, "20"));
996
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
997
                fw.write(DxfGroup.toString(8, "0"));
998
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
999
                fw.write(DxfGroup.toString(2, "*Model_Space"));
1000
                fw.write(DxfGroup.toString(70, 0));
1001
                fw.write(DxfGroup.toString(10, 0.0, 4));
1002
                fw.write(DxfGroup.toString(20, 0.0, 4));
1003
                fw.write(DxfGroup.toString(30, 0.0, 4));
1004
                fw.write(DxfGroup.toString(3, "*Model_Space"));
1005
                fw.write(DxfGroup.toString(1, ""));
1006
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1007
                fw.write(DxfGroup.toString(5, "21"));
1008
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1009
                fw.write(DxfGroup.toString(8, "0"));
1010
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1011
                fw.write(DxfGroup.toString(0, "BLOCK"));
1012
                fw.write(DxfGroup.toString(5, "1C"));
1013
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1014
                fw.write(DxfGroup.toString(67, 1));
1015
                fw.write(DxfGroup.toString(8, "0"));
1016
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
1017
                fw.write(DxfGroup.toString(2, "*Paper_Space"));
1018
                fw.write(DxfGroup.toString(70, 0));
1019
                fw.write(DxfGroup.toString(10, 0.0, 4));
1020
                fw.write(DxfGroup.toString(20, 0.0, 4));
1021
                fw.write(DxfGroup.toString(30, 0.0, 4));
1022
                fw.write(DxfGroup.toString(3, "*Paper_Space"));
1023
                fw.write(DxfGroup.toString(1, ""));
1024
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1025
                fw.write(DxfGroup.toString(5, "1D"));
1026
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1027
                fw.write(DxfGroup.toString(67, 1));
1028
                fw.write(DxfGroup.toString(8, "0"));
1029
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1030
                fw.write(DxfGroup.toString(0, "BLOCK"));
1031
                fw.write(DxfGroup.toString(5, "24"));
1032
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1033
                fw.write(DxfGroup.toString(8, "0"));
1034
                fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
1035
                fw.write(DxfGroup.toString(2, "*Paper_Space0"));
1036
                fw.write(DxfGroup.toString(70, 0));
1037
                fw.write(DxfGroup.toString(10, 0.0, 4));
1038
                fw.write(DxfGroup.toString(20, 0.0, 4));
1039
                fw.write(DxfGroup.toString(30, 0.0, 4));
1040
                fw.write(DxfGroup.toString(3, "*Paper_Space0"));
1041
                fw.write(DxfGroup.toString(1, ""));
1042
                fw.write(DxfGroup.toString(0, "ENDBLK"));
1043
                fw.write(DxfGroup.toString(5, "25"));
1044
                fw.write(DxfGroup.toString(100, "AcDbEntity"));
1045
                fw.write(DxfGroup.toString(8, "0"));
1046
                fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
1047
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1048
        }
1049
        /**
1050
         * Escritor de la secci?n de entidades.
1051
         * @param fw
1052
         * @throws IOException
1053
         */
1054
        public void writeEntities(FileWriter fw) throws IOException {
1055
                // ECRITURE DES FEATURES
1056
                fw.write(DxfGroup.toString(0, "SECTION"));
1057
                fw.write(DxfGroup.toString(2, "ENTITIES"));                
1058
                if (cadFlag) {
1059
                        fw.write(((DxfEntityMaker) entityMaker).getEntities().toDxfString());
1060
                } else {
1061
                        //fw.write(((DxfFeatureMaker) entityMaker).getObjects().toDxfString());                        
1062
                }
1063
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1064
        }
1065
        
1066
        /**
1067
         * 050224, jmorell: Escritura de la secci?n OBJECTS seg?n QCAD.
1068
         * Writes a objects section. This section is needed in VER_R13.
1069
         * Note that this method currently only writes a faked OBJECTS section
1070
         * to make the file readable by Aut*cad.
1071
         */
1072
        public void writeObjects(FileWriter fw) throws IOException {
1073
            //int dicId, dicId2, dicId3, dicId4, dicId5;
1074
            //int dicId5;
1075

    
1076
            fw.write(DxfGroup.toString(  0, "SECTION"));
1077
            fw.write(DxfGroup.toString(  2, "OBJECTS"));
1078
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1079
            //fw.write(DxfGroup.toString(5, 0xC);                            // C
1080
            fw.write(DxfGroup.toString(  5, "C"));
1081
            //fw.write(DxfGroup.toString(330, 0);
1082
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1083
            fw.write(DxfGroup.toString(280, 0));
1084
            fw.write(DxfGroup.toString(281, 1));
1085
            fw.write(DxfGroup.toString(  3, "ACAD_GROUP"));
1086
            //fw.write(DxfGroup.toString(350, dw.getNextHandle());          // D
1087
            fw.write(DxfGroup.toString(350, "D"));          // D
1088
            fw.write(DxfGroup.toString(  3, "ACAD_LAYOUT"));
1089
            fw.write(DxfGroup.toString(350, "1A"));
1090
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+0);        // 1A
1091
            fw.write(DxfGroup.toString(  3, "ACAD_MLINESTYLE"));
1092
            fw.write(DxfGroup.toString(350, "17"));
1093
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 17
1094
            fw.write(DxfGroup.toString(  3, "ACAD_PLOTSETTINGS"));
1095
            fw.write(DxfGroup.toString(350, "19"));
1096
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 19
1097
            fw.write(DxfGroup.toString(  3, "ACAD_PLOTSTYLENAME"));
1098
            fw.write(DxfGroup.toString(350, "E"));
1099
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+3);        // E
1100
            fw.write(DxfGroup.toString(  3, "AcDbVariableDictionary"));
1101
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()));        // 2C
1102
            fw.write(DxfGroup.toString(350, "2C"));        // 2C
1103
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1104
            fw.write(DxfGroup.toString(5, "D"));
1105
            //dw.handle();                                    // D
1106
            //fw.write(DxfGroup.toString(330, 0xC);
1107
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1108
            fw.write(DxfGroup.toString(280, 0));
1109
            fw.write(DxfGroup.toString(281, 1));
1110
            fw.write(DxfGroup.toString(  0, "ACDBDICTIONARYWDFLT"));
1111
            fw.write(DxfGroup.toString(5, "E"));
1112
            //dicId4 = dw.handle();                           // E
1113
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1114
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1115
            fw.write(DxfGroup.toString(281, 1));
1116
            fw.write(DxfGroup.toString(  3, "Normal"));
1117
            fw.write(DxfGroup.toString(350, "F"));
1118
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // F
1119
            fw.write(DxfGroup.toString(100, "AcDbDictionaryWithDefault"));
1120
            fw.write(DxfGroup.toString(340, "F"));
1121
            //fw.write(DxfGroup.toString(340, dw.getNextHandle()+5);        // F
1122
            fw.write(DxfGroup.toString(  0, "ACDBPLACEHOLDER"));
1123
            fw.write(DxfGroup.toString(5, "F"));
1124
            //dw.handle();                                    // F
1125
            //fw.write(DxfGroup.toString(330, dicId4);                      // E
1126
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1127
            //dicId3 = dw.handle();                           // 17
1128
            fw.write(DxfGroup.toString(5, "17"));
1129
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1130
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1131
            fw.write(DxfGroup.toString(280, 0));
1132
            fw.write(DxfGroup.toString(281, 1));
1133
            fw.write(DxfGroup.toString(  3, "Standard"));
1134
            fw.write(DxfGroup.toString(350, "18"));
1135
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 18
1136
            fw.write(DxfGroup.toString(  0, "MLINESTYLE"));
1137
            fw.write(DxfGroup.toString(5, "18"));
1138
            //dw.handle();                                    // 18
1139
            //fw.write(DxfGroup.toString(330, dicId3);                      // 17
1140
            fw.write(DxfGroup.toString(100, "AcDbMlineStyle"));
1141
            fw.write(DxfGroup.toString(  2, "STANDARD"));
1142
            fw.write(DxfGroup.toString( 70, 0));
1143
            fw.write(DxfGroup.toString(  3, ""));
1144
            fw.write(DxfGroup.toString( 62, 256));
1145
            //dw.dxfReal( 51, 90.0);
1146
            fw.write(DxfGroup.toString( 51, 90.0, 4));
1147
            fw.write(DxfGroup.toString( 52, 90.0, 4));
1148
            fw.write(DxfGroup.toString( 71, 2));
1149
            fw.write(DxfGroup.toString( 49, 0.5, 4));
1150
            fw.write(DxfGroup.toString( 62, 256));
1151
            fw.write(DxfGroup.toString(  6, "BYLAYER"));
1152
            fw.write(DxfGroup.toString( 49, -0.5, 4));
1153
            fw.write(DxfGroup.toString( 62, 256));
1154
            fw.write(DxfGroup.toString(  6, "BYLAYER"));
1155
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1156
            fw.write(DxfGroup.toString(5, "19"));
1157
            //dw.handle();                           // 17
1158
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1159
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1160
            fw.write(DxfGroup.toString(280, 0));
1161
            fw.write(DxfGroup.toString(281, 1));
1162
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1163
            //dicId2 = dw.handle();                           // 1A
1164
            fw.write(DxfGroup.toString(5, "1A"));
1165
            //fw.write(DxfGroup.toString(330, 0xC);
1166
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1167
            fw.write(DxfGroup.toString(281, 1));
1168
            fw.write(DxfGroup.toString(  3, "Layout1"));
1169
            fw.write(DxfGroup.toString(350, "1E"));
1170
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 1E
1171
            fw.write(DxfGroup.toString(  3, "Layout2"));
1172
            fw.write(DxfGroup.toString(350, "26"));
1173
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+4);        // 26
1174
            fw.write(DxfGroup.toString(  3, "Model"));
1175
            fw.write(DxfGroup.toString(350, "22"));
1176
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 22
1177

    
1178
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1179
            fw.write(DxfGroup.toString(5, "1E"));
1180
            //dw.handle();                                    // 1E
1181
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1182
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1183
            fw.write(DxfGroup.toString(  1, ""));
1184
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1185
            fw.write(DxfGroup.toString(  4, ""));
1186
            fw.write(DxfGroup.toString(  6, ""));
1187
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1188
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1189
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1190
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1191
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1192
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1193
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1194
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1195
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1196
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1197
            fw.write(DxfGroup.toString(140, 0.0, 4));
1198
            fw.write(DxfGroup.toString(141, 0.0, 4));
1199
            fw.write(DxfGroup.toString(142, 1.0, 4));
1200
            fw.write(DxfGroup.toString(143, 1.0, 4));
1201
            fw.write(DxfGroup.toString( 70, 688));
1202
            fw.write(DxfGroup.toString( 72, 0));
1203
            fw.write(DxfGroup.toString( 73, 0));
1204
            fw.write(DxfGroup.toString( 74, 5));
1205
            fw.write(DxfGroup.toString(  7, ""));
1206
            fw.write(DxfGroup.toString( 75, 16));
1207
            fw.write(DxfGroup.toString(147, 1.0, 4));
1208
            fw.write(DxfGroup.toString(148, 0.0, 4));
1209
            fw.write(DxfGroup.toString(149, 0.0, 4));
1210
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1211
            fw.write(DxfGroup.toString(  1, "Layout1"));
1212
            fw.write(DxfGroup.toString( 70, 1));
1213
            fw.write(DxfGroup.toString( 71, 1));
1214
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1215
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1216
            fw.write(DxfGroup.toString( 11, 420.0, 4));
1217
            fw.write(DxfGroup.toString( 21, 297.0, 4));
1218
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1219
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1220
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1221
            fw.write(DxfGroup.toString( 14, 1.000000000000000E+20, 4));
1222
            fw.write(DxfGroup.toString( 24, 1.000000000000000E+20, 4));
1223
            fw.write(DxfGroup.toString( 34, 1.000000000000000E+20, 4));
1224
            fw.write(DxfGroup.toString( 15, -1.000000000000000E+20, 4));
1225
            fw.write(DxfGroup.toString( 25, -1.000000000000000E+20, 4));
1226
            fw.write(DxfGroup.toString( 35, -1.000000000000000E+20, 4));
1227
            fw.write(DxfGroup.toString(146, 0.0, 4));
1228
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1229
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1230
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1231
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1232
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1233
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1234
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1235
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1236
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1237
            fw.write(DxfGroup.toString( 76, 0));
1238
            //fw.write(DxfGroup.toString(330, dw.getPaperSpaceHandle());    // 1B
1239
            fw.write(DxfGroup.toString(330, "1B"));
1240
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1241
            fw.write(DxfGroup.toString(5, "22"));
1242
            //dw.handle();                                    // 22
1243
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1244
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1245
            fw.write(DxfGroup.toString(  1, ""));
1246
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1247
            fw.write(DxfGroup.toString(  4, ""));
1248
            fw.write(DxfGroup.toString(  6, ""));
1249
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1250
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1251
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1252
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1253
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1254
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1255
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1256
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1257
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1258
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1259
            fw.write(DxfGroup.toString(140, 0.0, 4));
1260
            fw.write(DxfGroup.toString(141, 0.0, 4));
1261
            fw.write(DxfGroup.toString(142, 1.0, 4));
1262
            fw.write(DxfGroup.toString(143, 1.0, 4));
1263
            fw.write(DxfGroup.toString( 70, 1712));
1264
            fw.write(DxfGroup.toString( 72, 0));
1265
            fw.write(DxfGroup.toString( 73, 0));
1266
            fw.write(DxfGroup.toString( 74, 0));
1267
            fw.write(DxfGroup.toString(  7, ""));
1268
            fw.write(DxfGroup.toString( 75, 0));
1269
            fw.write(DxfGroup.toString(147, 1.0, 4));
1270
            fw.write(DxfGroup.toString(148, 0.0, 4));
1271
            fw.write(DxfGroup.toString(149, 0.0, 4));
1272
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1273
            fw.write(DxfGroup.toString(  1, "Model"));
1274
            fw.write(DxfGroup.toString( 70, 1));
1275
            fw.write(DxfGroup.toString( 71, 0));
1276
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1277
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1278
            fw.write(DxfGroup.toString( 11, 12.0, 4));
1279
            fw.write(DxfGroup.toString( 21, 9.0, 4));
1280
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1281
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1282
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1283
            fw.write(DxfGroup.toString( 14, 0.0, 4));
1284
            fw.write(DxfGroup.toString( 24, 0.0, 4));
1285
            fw.write(DxfGroup.toString( 34, 0.0, 4));
1286
            fw.write(DxfGroup.toString( 15, 0.0, 4));
1287
            fw.write(DxfGroup.toString( 25, 0.0, 4));
1288
            fw.write(DxfGroup.toString( 35, 0.0, 4));
1289
            fw.write(DxfGroup.toString(146, 0.0, 4));
1290
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1291
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1292
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1293
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1294
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1295
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1296
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1297
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1298
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1299
            fw.write(DxfGroup.toString( 76, 0));
1300
            //fw.write(DxfGroup.toString(330, dw.getModelSpaceHandle());    // 1F
1301
            fw.write(DxfGroup.toString(330, "1F"));
1302
            fw.write(DxfGroup.toString(  0, "LAYOUT"));
1303
            //dw.handle();                                    // 26
1304
            fw.write(DxfGroup.toString(5, "26"));
1305
            //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
1306
            fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
1307
            fw.write(DxfGroup.toString(  1, ""));
1308
            fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
1309
            fw.write(DxfGroup.toString(  4, ""));
1310
            fw.write(DxfGroup.toString(  6, ""));
1311
            fw.write(DxfGroup.toString( 40, 0.0, 4));
1312
            fw.write(DxfGroup.toString( 41, 0.0, 4));
1313
            fw.write(DxfGroup.toString( 42, 0.0, 4));
1314
            fw.write(DxfGroup.toString( 43, 0.0, 4));
1315
            fw.write(DxfGroup.toString( 44, 0.0, 4));
1316
            fw.write(DxfGroup.toString( 45, 0.0, 4));
1317
            fw.write(DxfGroup.toString( 46, 0.0, 4));
1318
            fw.write(DxfGroup.toString( 47, 0.0, 4));
1319
            fw.write(DxfGroup.toString( 48, 0.0, 4));
1320
            fw.write(DxfGroup.toString( 49, 0.0, 4));
1321
            fw.write(DxfGroup.toString(140, 0.0, 4));
1322
            fw.write(DxfGroup.toString(141, 0.0, 4));
1323
            fw.write(DxfGroup.toString(142, 1.0, 4));
1324
            fw.write(DxfGroup.toString(143, 1.0, 4));
1325
            fw.write(DxfGroup.toString( 70, 688));
1326
            fw.write(DxfGroup.toString( 72, 0));
1327
            fw.write(DxfGroup.toString( 73, 0));
1328
            fw.write(DxfGroup.toString( 74, 5));
1329
            fw.write(DxfGroup.toString(  7, ""));
1330
            fw.write(DxfGroup.toString( 75, 16));
1331
            fw.write(DxfGroup.toString(147, 1.0, 4));
1332
            fw.write(DxfGroup.toString(148, 0.0, 4));
1333
            fw.write(DxfGroup.toString(149, 0.0, 4));
1334
            fw.write(DxfGroup.toString(100, "AcDbLayout"));
1335
            fw.write(DxfGroup.toString(  1, "Layout2"));
1336
            fw.write(DxfGroup.toString( 70, 1));
1337
            fw.write(DxfGroup.toString( 71, 2));
1338
            fw.write(DxfGroup.toString( 10, 0.0, 4));
1339
            fw.write(DxfGroup.toString( 20, 0.0, 4));
1340
            fw.write(DxfGroup.toString( 11, 12.0, 4));
1341
            fw.write(DxfGroup.toString( 21, 9.0, 4));
1342
            fw.write(DxfGroup.toString( 12, 0.0, 4));
1343
            fw.write(DxfGroup.toString( 22, 0.0, 4));
1344
            fw.write(DxfGroup.toString( 32, 0.0, 4));
1345
            fw.write(DxfGroup.toString( 14, 0.0, 4));
1346
            fw.write(DxfGroup.toString( 24, 0.0, 4));
1347
            fw.write(DxfGroup.toString( 34, 0.0, 4));
1348
            fw.write(DxfGroup.toString( 15, 0.0, 4));
1349
            fw.write(DxfGroup.toString( 25, 0.0, 4));
1350
            fw.write(DxfGroup.toString( 35, 0.0, 4));
1351
            fw.write(DxfGroup.toString(146, 0.0, 4));
1352
            fw.write(DxfGroup.toString( 13, 0.0, 4));
1353
            fw.write(DxfGroup.toString( 23, 0.0, 4));
1354
            fw.write(DxfGroup.toString( 33, 0.0, 4));
1355
            fw.write(DxfGroup.toString( 16, 1.0, 4));
1356
            fw.write(DxfGroup.toString( 26, 0.0, 4));
1357
            fw.write(DxfGroup.toString( 36, 0.0, 4));
1358
            fw.write(DxfGroup.toString( 17, 0.0, 4));
1359
            fw.write(DxfGroup.toString( 27, 1.0, 4));
1360
            fw.write(DxfGroup.toString( 37, 0.0, 4));
1361
            fw.write(DxfGroup.toString( 76, 0));
1362
            //fw.write(DxfGroup.toString(330, dw.getPaperSpace0Handle());   // 23
1363
            fw.write(DxfGroup.toString(330, "23"));
1364
            fw.write(DxfGroup.toString(  0, "DICTIONARY"));
1365
            fw.write(DxfGroup.toString(5, 0x2E));
1366
            //dicId5 =
1367
            //dw.handle();                           // 2C
1368
            //fw.write(DxfGroup.toString(330, 0xC);                       // C
1369
            fw.write(DxfGroup.toString(100, "AcDbDictionary"));
1370
            fw.write(DxfGroup.toString(281, 1));
1371
            fw.write(DxfGroup.toString(  3, "DIMASSOC"));
1372
            //fw.write(DxfGroup.toString(350, 0x2F);
1373
            //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 2E
1374
            fw.write(DxfGroup.toString(350, 0x30));        // 2E
1375
            fw.write(DxfGroup.toString(  3, "HIDETEXT"));
1376
            //fw.write(DxfGroup.toString(350, 0x2E);
1377
            //fw.write(DxfGroup.toString(350, dw.getNextHandle());        // 2D
1378
            fw.write(DxfGroup.toString(350, 0x2F));        // 2D
1379
            fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
1380
            fw.write(DxfGroup.toString(5, 0x2F));
1381
            //dw.handle();                                    // 2E
1382
            //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
1383
            fw.write(DxfGroup.toString(100, "DictionaryVariables"));
1384
            fw.write(DxfGroup.toString(280, 0));
1385
            fw.write(DxfGroup.toString(  1, 2));
1386
            fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
1387
            fw.write(DxfGroup.toString(5, 0x30));
1388
            //dw.handle();                                    // 2D
1389
            //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
1390
            fw.write(DxfGroup.toString(100, "DictionaryVariables"));
1391
            fw.write(DxfGroup.toString(280, 0));
1392
            fw.write(DxfGroup.toString(  1, 1));
1393
                fw.write(DxfGroup.toString(0, "ENDSEC"));
1394
        }
1395
        
1396
        public void reProject(ICoordTrans rp) {
1397
                System.out.println("Dxf: reproyectando ...");
1398
                entityMaker.reProject(rp);
1399
        }
1400

    
1401
        /* (non-Javadoc)
1402
         * @see org.cresques.io.GeoFile#close()
1403
         */
1404
        public void close() {
1405
                // TODO Auto-generated method stub
1406
                
1407
        }
1408
        /**
1409
         * @return Returns the cadFlag.
1410
         */
1411
        public boolean isCadFlag() {
1412
                return cadFlag;
1413
        }
1414
        /**
1415
         * @param cadFlag The cadFlag to set.
1416
         */
1417
        public void setCadFlag(boolean cadFlag) {
1418
                this.cadFlag = cadFlag;
1419
        }
1420
}