Statistics
| Revision:

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

History | View | Annotate | Download (58.3 KB)

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