Statistics
| Revision:

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

History | View | Annotate | Download (27.2 KB)

1
package org.cresques.io;
2

    
3
import java.io.BufferedReader;
4
import java.io.FileNotFoundException;
5
import java.io.FileReader;
6
import java.io.FileWriter;
7
import java.io.IOException;
8
import java.io.InputStream;
9
import java.io.InputStreamReader;
10
import java.io.Reader;
11
import java.util.Date;
12
import java.util.Hashtable;
13
import java.util.Vector;
14
import org.cresques.cts.ICoordTrans;
15
import org.cresques.cts.IProjection;
16
import org.cresques.geo.Projected;
17
import org.cresques.px.Extent;
18
import org.cresques.px.IObjList;
19
import org.cresques.px.dxf.DxfEntityMaker;
20

    
21
public class DxfFile extends GeoFile {
22
        
23
        private boolean cadFlag = true;
24
        
25
        long lineNr = 0;
26

    
27
        String buf = null;
28
        
29
        BufferedReader fi;
30
        long l = 0;
31
        int count = 0;
32
        DxfGroup grp = null;
33
        
34
        EntityFactory entityMaker = null;
35
        
36
        /**
37
         * Crea los objetos en el Modelo correspondiente.
38
         * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
39
         */
40
        public interface EntityFactory extends Projected {
41
                public void setAddingToBlock(boolean a);
42
                public void createLayer(DxfGroupVector v) throws Exception ;
43
                public void createPolyline(DxfGroupVector v) throws Exception ;
44
                public void addVertex(DxfGroupVector v) throws Exception ;
45
                public void endSeq() throws Exception ;
46
                public void createLwPolyline(DxfGroupVector v) throws Exception ;
47
                public void createLine(DxfGroupVector v) throws Exception ;
48
                public void createText(DxfGroupVector v) throws Exception ;
49
                public void createMText(DxfGroupVector v) throws Exception ;
50
                public void createPoint(DxfGroupVector v) throws Exception ;
51
                public void createCircle(DxfGroupVector v) throws Exception ;
52
                public void createArc(DxfGroupVector v) throws Exception ;
53
                public void createInsert(DxfGroupVector v) throws Exception ;
54
                public void createSolid(DxfGroupVector v) throws Exception ;
55
                public void createSpline(DxfGroupVector v) throws Exception ;
56
                public void createAttdef(DxfGroupVector v) throws Exception ;
57
                public void createAttrib(DxfGroupVector v) throws Exception ;
58
                public void createBlock(DxfGroupVector v) throws Exception ;
59
                public void endBlk(DxfGroupVector v) throws Exception ;
60
                void testBlocks();
61
                public Extent getExtent();
62
                public Vector getBlkList();
63
                public IObjList getObjects();
64
        };
65
        
66
        public DxfFile(IProjection proj, String name, EntityFactory maker) {
67
                super(proj, name);
68
                entityMaker = maker;
69
        }
70
        
71
        /**
72
         * Carga un .dxf
73
         */
74
        public GeoFile load() {
75
                System.out.println("Dxf: Cargando "+name+" ...");
76
                try {
77
                        if (ZipFileFolder.isUrl(name)) {
78
                                ZipFileFolder zFolder = new ZipFileFolder(name);
79
                                InputStream is = zFolder.getInputStream(name);
80
                                return load(new InputStreamReader(is));
81
                        } else 
82
                                return load(new FileReader(name));
83
                } catch (FileNotFoundException fnfe) {
84
                        fnfe.printStackTrace();
85
                } catch (Exception e) {
86
                        System.err.println("Dxf: ERROR."+l+"lineas leidas");
87
                        e.printStackTrace();
88
                }
89
                return this;
90
        }
91
        
92
        public GeoFile load(Reader fr) throws NumberFormatException, Exception {
93
                System.out.println("Dxf: Cargando '"+name+"' ...");
94
                fi = new BufferedReader(fr);
95
                while ((grp = readGrp()) != null) {
96
                        l+=2;
97
                        
98
                        if (grp.equals(0, "EOF"))                break;
99
                        if (grp.equals(0, "SECTION"))
100
                                readSection();
101
                }
102
                fi.close();
103
                extent.add(entityMaker.getExtent());
104
                System.out.println("Dxf: '"+name+"' cargado. ("+l+" l?neas).");
105
                this.lineNr = l;
106
                return this;
107
        }
108
        
109
        private DxfGroup readGrp() throws NumberFormatException, IOException {
110
                DxfGroup g = DxfGroup.read(fi);
111
                if (g != null) l += 2;
112
                /*if (g.code == 8)
113
                        if (((String) g.data).length() < 1) {
114
                                System.err.println("a que un layer no puede ser ''?");
115
                                System.exit(1);
116
                        }*/
117
                return g;
118
        }
119
        
120
        private void readSection() throws NumberFormatException, Exception {
121
                while (true) {
122
                        grp = readGrp(); System.out.print("-1:"+grp);
123
                        if (grp.code == 2)
124
                                if (((String) grp.data).compareTo("HEADER") == 0)
125
                                        readAnySection();
126
                                else if (((String) grp.data).compareTo("CLASSES") == 0)
127
                                        readAnySection();
128
                                else if (((String) grp.data).compareTo("TABLES") == 0)
129
                                        readTables();
130
                                else if (((String) grp.data).compareTo("BLOCKS") == 0)
131
                                        readBlocks();
132
                                else if (((String) grp.data).compareTo("ENTITIES") == 0)
133
                                        readEntities();
134
                                else if (((String) grp.data).compareTo("OBJECTS") == 0)
135
                                        readAnySection();
136
                                else {
137
                                        System.out.println("DxfRead: Seccion "+grp.data);
138
                                        readAnySection();
139
                                }
140
                        else
141
                                System.err.println("Dxf: Codigo/Seccion desconocidos" + grp);
142
                        if (grp.equals(0, "EOF")) break;
143
                        if (grp.equals(0, "ENDSEC")) break;
144
                }                
145
        }
146
        
147
        private void readTables() throws NumberFormatException, Exception {
148
                System.out.println("Dxf: Seccion TABLAS, linea "+ l+ "grp ="+ grp);
149
                int layerCnt = 0;
150
                String tableAct = "NONAME";
151
                
152
                Hashtable tables = new Hashtable();
153
                Vector table = new Vector();
154
                DxfGroupVector v = new DxfGroupVector();
155
                
156
                grp = readGrp();// System.out.print("0:"+grp);
157
                while (true) {
158
                        if (grp.code == 0) {
159
                                String data = (String) grp.getData();
160
                                if (data.compareTo("ENDSEC") == 0 || data.compareTo("EOF") == 0)
161
                                        break;
162
                                else if (data.compareTo("ENDTAB") == 0) {
163
                                        tables.put(tableAct, table);
164
                                        table = new Vector();
165
                                        grp = readGrp();// System.out.print("1:"+grp);
166
                                        
167
                                        /**/if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
168
                                                entityMaker.createLayer(v);
169
                                                System.out.println("Dxf: Layer "+v.getDataAsString(2));
170
                                                layerCnt++;
171
                                                v.clear();
172
                                        }/**/
173
                                        continue;
174
                                } else {
175
                                        if (table.size()==1) {
176
                                                tableAct = v.getDataAsString(2);
177
                                                System.out.println("Dxf: Tabla "+tableAct);
178
                                        } else
179
                                                if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
180
                                                        entityMaker.createLayer(v);
181
                                                        System.out.println("Dxf: Layer "+v.getDataAsString(2));
182
                                                        layerCnt++;
183
                                                }
184

    
185
                                        v.clear();
186
                                        v.add(grp);
187
                                }
188
                                while (true) {
189
                                        grp = readGrp();// System.out.print("2:"+grp);
190
                                        if (grp.code == 0)        break;
191
                                        v.add(grp);
192
                                }
193
                                table.add(v);
194
                        } else {
195
                                System.err.println("Dxf: Error de secuencia");
196
                                grp = readGrp(); //System.out.print("3:"+grp);        
197
                        }
198
                }
199
                System.out.println("Dxf: Seccion TABLAS: " + layerCnt + " Capas. ");
200
        }
201
        
202
        private void readAnySection() throws NumberFormatException, IOException {
203
                System.out.println("Dxf: Seccion '"+((String) grp.getData())+"', linea "+ l);
204
                while (true) {
205
                        grp = readGrp();
206
                        if (grp.equals(0, "ENDSEC")) break;
207
                        else if (grp.equals(0, "EOF")) break;
208
                }
209
        }
210
        
211
        private void readEntities() throws NumberFormatException, Exception {
212
                System.out.println("Dxf: Seccion ENTITIES, linea "+ l);
213
                int entityCnt = 0;
214
                int cntVeces = 0;
215
                DxfGroupVector v = new DxfGroupVector();
216
                grp = readGrp();
217
                while (true) {
218
                        if (grp.equals(0, "EOF")) break;
219
                        else if (grp.code == 0) {
220
                                if (v.size() > 0) {
221
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
222
                                        if (lastEntity.compareTo("POLYLINE") == 0) {
223
                                                entityMaker.createPolyline(v);
224
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
225
                                                entityMaker.addVertex(v);
226
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
227
                                                entityMaker.endSeq();
228
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
229
                                                entityMaker.createLwPolyline(v);
230
                                        } else if (lastEntity.compareTo("LINE") == 0) {
231
                                                entityMaker.createLine(v);
232
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
233
                                                entityMaker.createText(v);
234
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
235
                                                entityMaker.createMText(v);
236
                                        } else if (lastEntity.compareTo("POINT") == 0) {
237
                                                entityMaker.createPoint(v);
238
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
239
                                                entityMaker.createCircle(v);
240
                                        } else if (lastEntity.compareTo("ARC") == 0) {
241
                                                entityMaker.createArc(v);
242
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
243
                                                entityMaker.createInsert(v);
244
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
245
                                                entityMaker.createSolid(v);
246
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
247
                                                entityMaker.createSpline(v);
248
                                        } else if (lastEntity.compareTo("ATTRIB") == 0) {
249
                                                entityMaker.createAttrib(v);
250
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
251
                                                break;
252
                                        } else
253
                                                System.err.println("Dxf: Entidad "+lastEntity+" desconocida.");
254
                                }
255
                                v.clear();
256
                                v.add(grp);
257
                                while (true) {
258
                                        grp = readGrp();
259
                                        if (grp.code == 0)        break;
260
                                        v.add(grp);
261
                                }
262
                                entityCnt++;
263
                        }
264
                        cntVeces++;
265
                }
266
                System.out.println("Dxf: Seccion ENTITIES, " + entityCnt + " entidades, "+ cntVeces + " veces.");
267
                //System.out.println("Seccion ENTITIES, linea "+ l+ " (SALGO)");
268
        }
269
        
270
        private void readBlocks() throws NumberFormatException, Exception {
271
                System.out.println("Dxf: Seccion BLOCKS, linea "+ l);
272
                int blkCnt = 0;
273
                int cntVeces = 0;
274
                DxfGroupVector v = new DxfGroupVector();
275
                grp = readGrp();
276
                while (true) {
277
                        if (grp.equals(0, "EOF")) break;
278
                        else if (grp.code == 0) {
279
                                if (v.size() > 0) {
280
                                        String lastEntity = (String) ((DxfGroup) v.get(0)).data;
281
                                        if (lastEntity.compareTo("BLOCK") == 0) {
282
                                                System.out.println("readBlocks(): Empezamos a leer un bloque");
283
                                                entityMaker.createBlock(v);
284
                                        } else if (lastEntity.compareTo("POLYLINE") == 0) {
285
                                                //System.out.println("readBlocks(): A?adimos una polilinea al bloque");
286
                                                entityMaker.createPolyline(v);
287
                                        } else if (lastEntity.compareTo("VERTEX") == 0) {
288
                                                //System.out.println("readBlocks(): A?adimos un vertice a la polilinea");
289
                                                entityMaker.addVertex(v);
290
                                        } else if (lastEntity.compareTo("SEQEND") == 0) {
291
                                                //System.out.println("readBlocks(): Cerramos una polilinea");
292
                                                entityMaker.endSeq();
293
                                        } else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
294
                                                //System.out.println("readBlocks(): A?adimos una lwpolilinea al bloque");
295
                                                entityMaker.createLwPolyline(v);
296
                                        } else if (lastEntity.compareTo("LINE") == 0) {
297
                                                //System.out.println("readBlocks(): A?adimos una linea al bloque");
298
                                                entityMaker.createLine(v);
299
                                        } else if (lastEntity.compareTo("TEXT") == 0) {
300
                                                //System.out.println("readBlocks(): A?adimos un texto al bloque");
301
                                                entityMaker.createText(v);
302
                                        } else if (lastEntity.compareTo("MTEXT") == 0) {
303
                                                //System.out.println("readBlocks(): A?adimos un m-texto al bloque");
304
                                                entityMaker.createMText(v);
305
                                        } else if (lastEntity.compareTo("POINT") == 0) {
306
                                                //System.out.println("readBlocks(): A?adimos un punto al bloque");
307
                                                entityMaker.createPoint(v);
308
                                        } else if (lastEntity.compareTo("CIRCLE") == 0) {
309
                                                //System.out.println("readBlocks(): A?adimos un circulo al bloque");
310
                                                entityMaker.createCircle(v);
311
                                        } else if (lastEntity.compareTo("ARC") == 0) {
312
                                                //System.out.println("readBlocks(): A?adimos un arco al bloque");
313
                                                entityMaker.createArc(v);
314
                                        } else if (lastEntity.compareTo("INSERT") == 0) {
315
                                                //System.out.println("readBlocks(): A?adimos un insert al bloque");
316
                                                entityMaker.createInsert(v);
317
                                        } else if (lastEntity.compareTo("SOLID") == 0) {
318
                                                //System.out.println("readBlocks(): A?adimos un solido al bloque");
319
                                                entityMaker.createSolid(v);
320
                                        } else if (lastEntity.compareTo("SPLINE") == 0) {
321
                                                entityMaker.createSpline(v);
322
                                        } else if (lastEntity.compareTo("ATTDEF") == 0) {
323
                                                entityMaker.createAttdef(v);
324
                                        } else if (lastEntity.compareTo("ENDBLK") == 0) {
325
                                                System.out.println("readBlocks(): Cerramos un bloque"+v);
326
                                                entityMaker.endBlk(v);
327
                                        } else if (lastEntity.compareTo("ENDSEC") == 0) {
328
                                                break;
329
                                        } else
330
                                                System.err.println("Dxf: Entidad de bloque "+lastEntity+" desconocida.");
331
                                }
332
                                v.clear();
333
                                v.add(grp);
334
                                while (true) {
335
                                        grp = readGrp();
336
                                        if (grp.code == 0)        break;
337
                                        v.add(grp);
338
                                }
339
                                blkCnt++;
340
                        }
341
                        cntVeces++;
342
                }
343
                
344
                entityMaker.testBlocks();
345
                
346
                System.out.println("Dxf: Seccion BLOCKS, " + blkCnt + " elementos de bloque. "+ cntVeces + " veces.");
347
        }
348
        
349
        public IObjList getObjects() {
350
                return this.entityMaker.getObjects();
351
        }
352
        
353
        public void save(String fName) throws IOException {
354
                long t2, t1;
355
                t1 = getTime();
356
                fName = DataSource.normalize(fName);
357
                FileWriter fw = new FileWriter(fName);
358
                // COMMENTAIRES DU TRADUCTEUR
359
//                fw.write(DxfGroup.toString(999, Integer.toString(features.size()) + " features")); 
360
                fw.write(DxfGroup.toString(999, "TRANSLATION BY geo.cresques.io.DxfFile"));
361
                fw.write(DxfGroup.toString(999, "DATE : " + (new Date()).toString()));
362
                //writeHeader(fw);
363
                //writeTables(fw);
364
                writeEntities(fw);
365
                fw.write(DxfGroup.toString(0, "EOF"));
366
                fw.flush();
367
                fw.close();
368
                t2 = getTime();
369
                System.out.println("DxfFile.save(): Tiempo salvando: " + (t2-t1)/1000 + " seg.");
370
        }
371
        
372
        public void writeHeader(FileWriter fw) throws IOException {
373
                fw.write(DxfGroup.toString(0, "SECTION"));
374
                fw.write(DxfGroup.toString(2, "HEADER"));
375
                fw.write(DxfGroup.toString(9, "$ACADVER"));
376
                        fw.write(DxfGroup.toString(1, "AC1009"));
377
                fw.write(DxfGroup.toString(9, "$INSBASE"));
378
                        fw.write(DxfGroup.toString(10, 0.0, 1));
379
                        fw.write(DxfGroup.toString(20, 0.0, 1));
380
                        fw.write(DxfGroup.toString(30, 0.0, 1));
381
                fw.write(DxfGroup.toString(9, "$EXTMIN"));
382
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
383
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
384
                        fw.write(DxfGroup.toString(30, 0.0, 6));
385
                fw.write(DxfGroup.toString(9, "$EXTMAX"));
386
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
387
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
388
                        fw.write(DxfGroup.toString(30, 0.0, 6));
389
                fw.write(DxfGroup.toString(9, "$LIMMIN"));
390
                        fw.write(DxfGroup.toString(10, extent.minX(), 6));
391
                        fw.write(DxfGroup.toString(20, extent.minY(), 6));
392
                fw.write(DxfGroup.toString(9, "$LIMMAX"));
393
                        fw.write(DxfGroup.toString(10, extent.maxX(), 6));
394
                        fw.write(DxfGroup.toString(20, extent.maxY(), 6));
395
                fw.write(DxfGroup.toString(9, "$ORTHOMODE")+DxfGroup.toString(70, 0));
396
                fw.write(DxfGroup.toString(9, "$REGENMODE")+DxfGroup.toString(70, 1));
397
                fw.write(DxfGroup.toString(9, "$FILLMODE")+        DxfGroup.toString(70, 1));
398
                fw.write(DxfGroup.toString(9, "$QTEXTMODE")+DxfGroup.toString(70, 0));
399
                fw.write(DxfGroup.toString(9, "$MIRRTEXT")+        DxfGroup.toString(70, 1));
400
                fw.write(DxfGroup.toString(9, "$DRAGMODE")+        DxfGroup.toString(70, 2));
401
                fw.write(DxfGroup.toString(9, "$LTSCALE")+        DxfGroup.toString(40, 1.0, 1));
402
                fw.write(DxfGroup.toString(9, "$OSMODE")+        DxfGroup.toString(70, 0));
403
                fw.write(DxfGroup.toString(9, "$ATTMODE")+        DxfGroup.toString(70, 1));
404
                fw.write(DxfGroup.toString(9, "$TEXTSIZE")+        DxfGroup.toString(40, 0.2, 1));
405
                fw.write(DxfGroup.toString(9, "$TRACEWID")+        DxfGroup.toString(40, 0.05, 2));
406
                fw.write(DxfGroup.toString(9, "$TEXTSTYLE")+        DxfGroup.toString(7, "STANDARD"));
407
                fw.write(DxfGroup.toString(9, "$CLAYER")+        DxfGroup.toString(8, "0"));
408
                fw.write(DxfGroup.toString(9, "$CELTYPE")+        DxfGroup.toString(6, "CONTINUOUS"));
409
                fw.write(DxfGroup.toString(9, "$CECOLOR")+        DxfGroup.toString(62, 256));
410
                fw.write(DxfGroup.toString(9, "$DIMSCALE")+        DxfGroup.toString(40, 1.0, 1));
411
                fw.write(DxfGroup.toString(9, "$DIMASZ")+        DxfGroup.toString(40, 0.18, 2));
412
                fw.write(DxfGroup.toString(9, "$DIMEXO")+        DxfGroup.toString(40, 0.0625, 4));
413
                fw.write(DxfGroup.toString(9, "$DIMDLI")+        DxfGroup.toString(40, 0.38, 2));
414
                fw.write(DxfGroup.toString(9, "$DIMRND")+        DxfGroup.toString(40, 0.0, 1));
415
                fw.write(DxfGroup.toString(9, "$DIMDLE")+        DxfGroup.toString(40, 0.0, 1));
416
                fw.write(DxfGroup.toString(9, "$DIMEXE")+        DxfGroup.toString(40, 0.18, 2));
417
                fw.write(DxfGroup.toString(9, "$DIMTP")+        DxfGroup.toString(40, 0.0, 1));
418
                fw.write(DxfGroup.toString(9, "$DIMTM")+        DxfGroup.toString(40, 0.0, 1));
419
                fw.write(DxfGroup.toString(9, "$DIMTXT")+        DxfGroup.toString(40, 0.18, 2));
420
                fw.write(DxfGroup.toString(9, "$DIMCEN")+        DxfGroup.toString(40, 0.09, 2));
421
                fw.write(DxfGroup.toString(9, "$DIMTSZ")+        DxfGroup.toString(40, 0.0, 1));
422
                fw.write(DxfGroup.toString(9,"$DIMTOL")+        DxfGroup.toString(70,0));
423
                fw.write(DxfGroup.toString(9,"$DIMLIM")+        DxfGroup.toString(70,0));
424
                fw.write(DxfGroup.toString(9,"$DIMTIH")+        DxfGroup.toString(70,1));
425
                fw.write(DxfGroup.toString(9,"$DIMTOH")+        DxfGroup.toString(70,1));
426
                fw.write(DxfGroup.toString(9,"$DIMSE1")+        DxfGroup.toString(70,0));
427
                fw.write(DxfGroup.toString(9,"$DIMSE2")+        DxfGroup.toString(70,0));
428
                fw.write(DxfGroup.toString(9,"$DIMTAD")+        DxfGroup.toString(70,0));
429
                fw.write(DxfGroup.toString(9,"$DIMZIN")+        DxfGroup.toString(70,0));
430
                fw.write(DxfGroup.toString(9,"$DIMBLK")+        DxfGroup.toString(1,""));
431
                fw.write(DxfGroup.toString(9,"$DIMASO")+        DxfGroup.toString(70,1));
432
                fw.write(DxfGroup.toString(9,"$DIMSHO")+        DxfGroup.toString(70,1));
433
                fw.write(DxfGroup.toString(9,"$DIMPOST")+        DxfGroup.toString(1,""));
434
                fw.write(DxfGroup.toString(9,"$DIMAPOST")+        DxfGroup.toString(1,""));
435
                fw.write(DxfGroup.toString(9,"$DIMALT")+        DxfGroup.toString(70,0));
436
                fw.write(DxfGroup.toString(9,"$DIMALTD")+        DxfGroup.toString(70,2));
437
                fw.write(DxfGroup.toString(9,"$DIMALTF")+        DxfGroup.toString(40,25.4,1));
438
                fw.write(DxfGroup.toString(9,"$DIMLFAC")+        DxfGroup.toString(40,1.0,1));
439
                fw.write(DxfGroup.toString(9,"$DIMTOFL")+        DxfGroup.toString(70,0));
440
                fw.write(DxfGroup.toString(9,"$DIMTVP")+        DxfGroup.toString(40,0.0,1));
441
                fw.write(DxfGroup.toString(9,"$DIMTIX")+        DxfGroup.toString(70,0));
442
                fw.write(DxfGroup.toString(9,"$DIMSOXD")+        DxfGroup.toString(70,0));
443
                fw.write(DxfGroup.toString(9,"$DIMSAH")+        DxfGroup.toString(70,0));
444
                fw.write(DxfGroup.toString(9,"$DIMBLK1")+        DxfGroup.toString(1,""));
445
                fw.write(DxfGroup.toString(9,"$DIMBLK2")+        DxfGroup.toString(1,""));
446
                fw.write(DxfGroup.toString(9,"$DIMSTYLE")+        DxfGroup.toString(2,"STANDARD"));
447
                fw.write(DxfGroup.toString(9,"$DIMCLRD")+        DxfGroup.toString(70,0));
448
                fw.write(DxfGroup.toString(9,"$DIMCLRE")+        DxfGroup.toString(70,0));
449
                fw.write(DxfGroup.toString(9,"$DIMCLRT")+        DxfGroup.toString(70,0));
450
                fw.write(DxfGroup.toString(9,"$DIMTFAC")+        DxfGroup.toString(40,1.0,1));
451
                fw.write(DxfGroup.toString(9,"$DIMGAP")+        DxfGroup.toString(40,0.09,2));
452
                fw.write(DxfGroup.toString(9,"$LUNITS")+        DxfGroup.toString(70,2));
453
                fw.write(DxfGroup.toString(9,"$LUPREC")+        DxfGroup.toString(70,4));
454
                fw.write(DxfGroup.toString(9,"$AXISMODE")+        DxfGroup.toString(70,0));
455
                fw.write(DxfGroup.toString(9,"$AXISUNIT"));
456
                fw.write(DxfGroup.toString(10,0.0,1));
457
                fw.write(DxfGroup.toString(20,0.0,1));
458
                fw.write(DxfGroup.toString(9,"$SKETCHINC")+        DxfGroup.toString(40,0.1,1));
459
                fw.write(DxfGroup.toString(9,"$FILLETRAD")+        DxfGroup.toString(40,0.0,1));
460
                fw.write(DxfGroup.toString(9,"$AUNITS")+        DxfGroup.toString(70,0));
461
                fw.write(DxfGroup.toString(9,"$AUPREC")+        DxfGroup.toString(70,0));
462
                fw.write(DxfGroup.toString(9,"$MENU")+                DxfGroup.toString(1,"acad"));
463
                fw.write(DxfGroup.toString(9,"$ELEVATION")+        DxfGroup.toString(40,0.0,1));
464
                fw.write(DxfGroup.toString(9,"$PELEVATION")+DxfGroup.toString(40,0.0,1));
465
                fw.write(DxfGroup.toString(9,"$THICKNESS")+        DxfGroup.toString(40,0.0,1));
466
                fw.write(DxfGroup.toString(9,"$LIMCHECK")+        DxfGroup.toString(70,0));
467
                fw.write(DxfGroup.toString(9,"$BLIPMODE")+        DxfGroup.toString(70,1));
468
                fw.write(DxfGroup.toString(9,"$CHAMFERA")+        DxfGroup.toString(40,0.0,1));
469
                fw.write(DxfGroup.toString(9,"$CHAMFERB")+        DxfGroup.toString(40,0.0,1));
470
                fw.write(DxfGroup.toString(9,"$SKPOLY")+        DxfGroup.toString(70,0));
471
                fw.write(DxfGroup.toString(9,"$TDCREATE")+        DxfGroup.toString(40,2453116.436828704,9));
472
                fw.write(DxfGroup.toString(9,"$TDUPDATE")+        DxfGroup.toString(40,2453116.436828704,9));
473
                fw.write(DxfGroup.toString(9,"$TDINDWG")+        DxfGroup.toString(40,0.0000000000,10));
474
                fw.write(DxfGroup.toString(9,"$TDUSRTIMER")+DxfGroup.toString(40,0.0000000000,10));
475
                fw.write(DxfGroup.toString(9,"$USRTIMER")+        DxfGroup.toString(70,1));
476
                fw.write(DxfGroup.toString(9,"$ANGBASE")+        DxfGroup.toString(50,0.0,1));
477
                fw.write(DxfGroup.toString(9,"$ANGDIR")+        DxfGroup.toString(70,0));
478
                fw.write(DxfGroup.toString(9,"$PDMODE")+        DxfGroup.toString(70,0));
479
                fw.write(DxfGroup.toString(9,"$PDSIZE")+        DxfGroup.toString(40,0.0,1));
480
                fw.write(DxfGroup.toString(9,"$PLINEWID")+        DxfGroup.toString(40,0.0,1));
481
                fw.write(DxfGroup.toString(9,"$COORDS")+        DxfGroup.toString(70,0));
482
                fw.write(DxfGroup.toString(9,"$SPLFRAME")+        DxfGroup.toString(70,0));
483
                fw.write(DxfGroup.toString(9,"$SPLINETYPE")+DxfGroup.toString(70,6));
484
                fw.write(DxfGroup.toString(9,"$SPLINESEGS")+DxfGroup.toString(70,10));
485
                fw.write(DxfGroup.toString(9,"$ATTDIA")+        DxfGroup.toString(70,0));
486
                fw.write(DxfGroup.toString(9,"$ATTREQ")+        DxfGroup.toString(70,1));
487
                fw.write(DxfGroup.toString(9,"$HANDLING")+        DxfGroup.toString(70,1));
488
                fw.write(DxfGroup.toString(9,"$HANDSEED")+        DxfGroup.toString(5,"394B"));
489
                fw.write(DxfGroup.toString(9,"$SURFTAB1")+        DxfGroup.toString(70,6));
490
                fw.write(DxfGroup.toString(9,"$SURFTAB2")+        DxfGroup.toString(70,6));
491
                fw.write(DxfGroup.toString(9,"$SURFTYPE")+        DxfGroup.toString(70,6));
492
                fw.write(DxfGroup.toString(9,"$SURFU")+                DxfGroup.toString(70,6));
493
                fw.write(DxfGroup.toString(9,"$SURFV")+                DxfGroup.toString(70,6));
494
                fw.write(DxfGroup.toString(9,"$UCSNAME")+        DxfGroup.toString(2,""));
495
                fw.write(DxfGroup.toString(9,"$UCSORG"));
496
                fw.write(DxfGroup.toString(10,0.0,1));
497
                fw.write(DxfGroup.toString(20,0.0,1));
498
                fw.write(DxfGroup.toString(30,0.0,1));
499
                fw.write(DxfGroup.toString(9,"$UCSXDIR"));
500
                fw.write(DxfGroup.toString(10,1.0,1));
501
                fw.write(DxfGroup.toString(20,0.0,1));
502
                fw.write(DxfGroup.toString(30,0.0,1));
503
                fw.write(DxfGroup.toString(9,"$UCSYDIR"));
504
                fw.write(DxfGroup.toString(10,0.0,1));
505
                fw.write(DxfGroup.toString(20,1.0,1));
506
                fw.write(DxfGroup.toString(30,0.0,1));
507
                fw.write(DxfGroup.toString(9,"$PUCSNAME")+        DxfGroup.toString(2,""));
508
                fw.write(DxfGroup.toString(9,"$PUCSORG"));
509
                fw.write(DxfGroup.toString(10,0.0,1));
510
                fw.write(DxfGroup.toString(20,0.0,1));
511
                fw.write(DxfGroup.toString(30,0.0,1));
512
                fw.write(DxfGroup.toString(9,"$PUCSXDIR"));
513
                fw.write(DxfGroup.toString(10,1.0,1));
514
                fw.write(DxfGroup.toString(20,0.0,1));
515
                fw.write(DxfGroup.toString(30,0.0,1));
516
                fw.write(DxfGroup.toString(9,"$PUCSYDIR"));
517
                fw.write(DxfGroup.toString(10,0.0,1));
518
                fw.write(DxfGroup.toString(20,1.0,1));
519
                fw.write(DxfGroup.toString(30,0.0,1));
520
                fw.write(DxfGroup.toString(9,"$USERI1")+        DxfGroup.toString(70,0));
521
                fw.write(DxfGroup.toString(9,"$USERI2")+        DxfGroup.toString(70,0));
522
                fw.write(DxfGroup.toString(9,"$USERI3")+        DxfGroup.toString(70,0));
523
                fw.write(DxfGroup.toString(9,"$USERI4")+        DxfGroup.toString(70,0));
524
                fw.write(DxfGroup.toString(9,"$USERI5")+        DxfGroup.toString(70,0));
525
                fw.write(DxfGroup.toString(9,"$USERR1")+        DxfGroup.toString(40,0.0,1));
526
                fw.write(DxfGroup.toString(9,"$USERR2")+        DxfGroup.toString(40,0.0,1));
527
                fw.write(DxfGroup.toString(9,"$USERR3")+        DxfGroup.toString(40,0.0,1));
528
                fw.write(DxfGroup.toString(9,"$USERR4")+        DxfGroup.toString(40,0.0,1));
529
                fw.write(DxfGroup.toString(9,"$USERR5")+        DxfGroup.toString(40,0.0,1));
530
                fw.write(DxfGroup.toString(9,"$WORLDVIEW")+        DxfGroup.toString(70,1));
531
                fw.write(DxfGroup.toString(9,"$SHADEDGE")+        DxfGroup.toString(70,3));
532
                fw.write(DxfGroup.toString(9,"$SHADEDIF")+        DxfGroup.toString(70,70));
533
                fw.write(DxfGroup.toString(9,"$TILEMODE")+        DxfGroup.toString(70,1));
534
                fw.write(DxfGroup.toString(9,"$MAXACTVP")+        DxfGroup.toString(70,16));
535
                fw.write(DxfGroup.toString(9,"$PINSBASE"));
536
                fw.write(DxfGroup.toString(10,0.0,1));
537
                fw.write(DxfGroup.toString(20,0.0,1));
538
                fw.write(DxfGroup.toString(30,0.0,1));
539
                fw.write(DxfGroup.toString(9,"$PLIMCHECK")+        DxfGroup.toString(70,0));
540
                fw.write(DxfGroup.toString(9,"$PEXTMIN"));
541
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
542
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
543
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
544
                fw.write(DxfGroup.toString(9,"$PEXTMAX"));
545
                fw.write(DxfGroup.toString(10,"-1.000000E+20"));
546
                fw.write(DxfGroup.toString(20,"-1.000000E+20"));
547
                fw.write(DxfGroup.toString(30,"-1.000000E+20"));
548
                fw.write(DxfGroup.toString(9,"$PLIMMIN"));
549
                fw.write(DxfGroup.toString(10,0.0,1));
550
                fw.write(DxfGroup.toString(20,0.0,1));
551
                fw.write(DxfGroup.toString(9,"$PLIMMAX"));
552
                fw.write(DxfGroup.toString(10,12.0,1));
553
                fw.write(DxfGroup.toString(20,9.0,1));
554
                fw.write(DxfGroup.toString(9,"$UNITMODE")+        DxfGroup.toString(70,0));
555
                fw.write(DxfGroup.toString(9,"$VISRETAIN")+        DxfGroup.toString(70,0));
556
                fw.write(DxfGroup.toString(9,"$PLINEGEN")+        DxfGroup.toString(70,1));
557
                fw.write(DxfGroup.toString(9,"$PSLTSCALE")+        DxfGroup.toString(70,0));
558
                fw.write(DxfGroup.toString(9,"$TREEDEPTH")+        DxfGroup.toString(70,3020));
559
                fw.write(DxfGroup.toString(9,"$DWGCODEPAGE")+DxfGroup.toString(3,"ansi_1252"));
560
/*                
561
                fw.write(DxfGroup.toString(9, "$ELEVATION"));
562
                        fw.write(DxfGroup.toString(40, 0.0, 3));
563
                fw.write(DxfGroup.toString(9, "$LIMCHECK"));
564
                        fw.write(DxfGroup.toString(70, 1));
565
                fw.write(DxfGroup.toString(9, "$LUNITS"));
566
                        fw.write(DxfGroup.toString(70, 2));
567
                fw.write(DxfGroup.toString(9, "$LUPREC"));
568
                        fw.write(DxfGroup.toString(70, 2));*/
569
                fw.write(DxfGroup.toString(0, "ENDSEC"));
570
        }
571
        
572
        public void writeTables(FileWriter fw) throws IOException {
573
                fw.write(DxfGroup.toString(0, "SECTION"));
574
                fw.write(DxfGroup.toString(2, "TABLES"));
575
                //writeStyleTable(fw);
576
                //writeLTypeTable(fw);
577
                //writeAppidTable(fw);
578
                writeLayerTable(fw);
579
                fw.write(DxfGroup.toString(0, "ENDSEC"));
580

    
581
                fw.write(DxfGroup.toString(0, "ENDBLK"));
582
        }
583
        /*
584
         *   0
585
TABLE
586
  2
587
APPID
588
  5
589
14
590
100
591
AcDbSymbolTable
592
 70
593
     1
594
  0
595
APPID
596
  5
597
15
598
100
599
AcDbSymbolTableRecord
600
100
601
AcDbRegAppTableRecord
602
  2
603
ACAD
604
 70
605
     0
606
  0
607
ENDTAB
608
         */
609
        public void writeAppidTable(FileWriter fw) throws IOException {
610
                fw.write(DxfGroup.toString(0, "TABLE"));
611
                fw.write(DxfGroup.toString(2, "APPID"));
612
                fw.write(DxfGroup.toString(5, 14));
613
                fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
614
                fw.write(DxfGroup.toString(0, "APPID"));
615
                fw.write(DxfGroup.toString(5, 15));
616
                fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
617
                fw.write(DxfGroup.toString(100, "AcDbRegAppTableRecord"));
618
                fw.write(DxfGroup.toString(2, "ACAD"));
619
                fw.write(DxfGroup.toString(70, 1));
620
                fw.write(DxfGroup.toString(0, "ENDTAB"));
621
        }
622
        
623
        /*public void writeStyleTable(FileWriter fw) throws IOException {
624
                fw.write(DxfGroup.toString(0, "TABLE"));
625
                fw.write(DxfGroup.toString(2, "STYLE"));
626
                fw.write(DxfGroup.toString(70, 1));
627
                DxfTABLE_STYLE_ITEM style =
628
                        new DxfTABLE_STYLE_ITEM("STANDARD", 0, 0f, 1f, 0f, 0, 1.0f, "xxx.txt", "yyy.txt");
629
                fw.write(style.toString());
630
                fw.write(DxfGroup.toString(0, "ENDTAB"));
631
        }*/
632
        
633
        /*public void writeLTypeTable(FileWriter fw) throws IOException {
634
                fw.write(DxfGroup.toString(0, "TABLE"));
635
                fw.write(DxfGroup.toString(2, "LTYPE"));
636
                fw.write(DxfGroup.toString(70, 1));
637
                DxfTABLE_LTYPE_ITEM ltype =
638
                        new DxfTABLE_LTYPE_ITEM("CONTINUE", 0, "", 65, 0f, new float[0]);
639
                fw.write(ltype.toString());
640
                fw.write(DxfGroup.toString(0, "ENDTAB"));
641
        }*/
642
        
643
        public void writeLayerTable(FileWriter fw) throws IOException {
644
                fw.write(DxfGroup.toString(0, "TABLE"));
645
                fw.write(DxfGroup.toString(2, "LAYER"));
646
                //                fw.write(DxfGroup.toString(70, 2));
647
                
648

    
649
                //layer = new DxfLayer(layerName, 0, 131, "CONTINUOUS");
650
                //fw.write(layer.toString());
651
                fw.write(((DxfEntityMaker) entityMaker).getLayers().toDxfString());
652
                                
653
                fw.write(DxfGroup.toString(0, "ENDTAB"));
654
        }
655

    
656
        public void writeEntities(FileWriter fw) throws IOException {
657
                // ECRITURE DES FEATURES
658
                fw.write(DxfGroup.toString(0, "SECTION"));
659
                fw.write(DxfGroup.toString(2, "ENTITIES"));                
660
                if (cadFlag) {
661
                        fw.write(((DxfEntityMaker) entityMaker).getEntities().toDxfString());
662
                } else {
663
                        //fw.write(((DxfFeatureMaker) entityMaker).getObjects().toDxfString());                        
664
                }
665
                fw.write(DxfGroup.toString(0, "ENDSEC"));
666
                fw.write(DxfGroup.toString(0, "ENDBLK"));
667
        }
668
        
669
        public void reProject(ICoordTrans rp) {
670
                System.out.println("Dxf: reproyectando ...");
671
                entityMaker.reProject(rp);
672
        }
673

    
674
        /* (non-Javadoc)
675
         * @see org.cresques.io.GeoFile#close()
676
         */
677
        public void close() {
678
                // TODO Auto-generated method stub
679
                
680
        }
681
}