Statistics
| Revision:

root / org.gvsig.dgn / trunk / org.gvsig.dgn / org.gvsig.dgn.provider / src / main / java / org / gvsig / fmap / dal / store / dgn / lib / DGNFileHeader.java @ 6

History | View | Annotate | Download (15.3 KB)

1
/*
2
 * Created on 16-jul-2003
3
 *
4
 * Copyright (c) 2003
5
 * Francisco Jos? Pe?arrubia Mart?nez
6
 * IVER Tecnolog?as de la Informaci?n S.A.
7
 * Salamanca 50
8
 * 46005 Valencia (        SPAIN )
9
 * +34 963163400
10
 * mailto:fran@iver.es
11
 * http://www.iver.es
12
 */
13
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
14
 *
15
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
16
 *
17
 * This program is free software; you can redistribute it and/or
18
 * modify it under the terms of the GNU General Public License
19
 * as published by the Free Software Foundation; either version 2
20
 * of the License, or (at your option) any later version.
21
 *
22
 * This program is distributed in the hope that it will be useful,
23
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25
 * GNU General Public License for more details.
26
 *
27
 * You should have received a copy of the GNU General Public License
28
 * along with this program; if not, write to the Free Software
29
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
30
 *
31
 * For more information, contact:
32
 *
33
 *  Generalitat Valenciana
34
 *   Conselleria d'Infraestructures i Transport
35
 *   Av. Blasco Ib??ez, 50
36
 *   46010 VALENCIA
37
 *   SPAIN
38
 *
39
 *      +34 963862235
40
 *   gvsig@gva.es
41
 *      www.gvsig.gva.es
42
 *
43
 *    or
44
 *
45
 *   IVER T.I. S.A
46
 *   Salamanca 50
47
 *   46005 Valencia
48
 *   Spain
49
 *
50
 *   +34 963163400
51
 *   dac@iver.es
52
 */
53
package org.gvsig.fmap.dal.store.dgn.lib;
54

    
55
import java.nio.MappedByteBuffer;
56

    
57

    
58
/**
59
 * Clase Header del DGN.
60
 *
61
 * @author Vicente Caballero Navarro
62
 */
63
public class DGNFileHeader {
64
        /** DGNElemCore style: Element uses DGNElemCore structure */
65
        public static final int DGNST_CORE = 1;
66

    
67
        /** DGNElemCore style: Element uses DGNElemMultiPoint structure */
68
        public static final int DGNST_MULTIPOINT = 2;
69

    
70
        /** DGNElemCore style: Element uses DGNElemColorTable structure */
71
        public static final int DGNST_COLORTABLE = 3;
72

    
73
        /** DGNElemCore style: Element uses DGNElemTCB structure */
74
        public static final int DGNST_TCB = 4;
75

    
76
        /** DGNElemCore style: Element uses DGNElemArc structure */
77
        public static final int DGNST_ARC = 5;
78

    
79
        /** DGNElemCore style: Element uses DGNElemText structure */
80
        public static final int DGNST_TEXT = 6;
81

    
82
        /** DGNElemCore style: Element uses DGNElemComplexHeader structure */
83
        public static final int DGNST_COMPLEX_HEADER = 7;
84

    
85
        /** DGNElemCore style: Element uses DGNElemCellHeader structure */
86
        public static final int DGNST_CELL_HEADER = 8;
87

    
88
        /** DGNElemCore style: Element uses DGNElemTagValue structure */
89
        public static final int DGNST_TAG_VALUE = 9;
90

    
91
        /** DGNElemCore style: Element uses DGNElemTagSet structure */
92
        public static final int DGNST_TAG_SET = 10;
93

    
94
        /** DGNElemCore style: Element uses DGNElemCellLibrary structure */
95
        public static final int DGNST_CELL_LIBRARY = 11;
96

    
97
        /** DGNElemCore style: Element uses DGNElemGroup structure */
98
        public static final int DGNST_GROUP_DATA = 12;
99
        public static final int DGNST_SHARED_CELL_DEFN = 13;
100

    
101
        /* -------------------------------------------------------------------- */
102
        /*      Element types                                                   */
103
        /* -------------------------------------------------------------------- */
104
        public static final int DGNT_NULL = 0;
105
        public static final int DGNT_CELL_LIBRARY = 1;
106
        public static final int DGNT_CELL_HEADER = 2;
107
        public static final int DGNT_LINE = 3;
108
        public static final int DGNT_LINE_STRING = 4;
109
        public static final int DGNT_GROUP_DATA = 5;
110
        public static final int DGNT_SHAPE = 6;
111
        public static final int DGNT_TEXT_NODE = 7;
112
        public static final int DGNT_DIGITIZER_SETUP = 8;
113
        public static final int DGNT_TCB = 9;
114
        public static final int DGNT_LEVEL_SYMBOLOGY = 10;
115
        public static final int DGNT_CURVE = 11;
116
        public static final int DGNT_COMPLEX_CHAIN_HEADER = 12;
117
        public static final int DGNT_COMPLEX_SHAPE_HEADER = 14;
118
        public static final int DGNT_ELLIPSE = 15;
119
        public static final int DGNT_ARC = 16;
120
        public static final int DGNT_TEXT = 17;
121
        public static final int DGNT_BSPLINE = 21;
122
        public static final int DGNT_SHARED_CELL_DEFN = 34;
123
        public static final int DGNT_SHARED_CELL_ELEM = 35; // REVISAR
124
        public static final int DGNT_TAG_VALUE = 37;
125
        public static final int DGNT_APPLICATION_ELEM = 66;
126

    
127
        /* -------------------------------------------------------------------- */
128
        /*      Line Styles                                                     */
129
        /* -------------------------------------------------------------------- */
130
        public static final int DGNS_SOLID = 0;
131
        public static final int DGNS_DOTTED = 1;
132
        public static final int DGNS_MEDIUM_DASH = 2;
133
        public static final int DGNS_LONG_DASH = 3;
134
        public static final int DGNS_DOT_DASH = 4;
135
        public static final int DGNS_SHORT_DASH = 5;
136
        public static final int DGNS_DASH_DOUBLE_DOT = 6;
137
        public static final int DGNS_LONG_DASH_SHORT_DASH = 7;
138

    
139
        /* -------------------------------------------------------------------- */
140
        /*      Class                                                           */
141
        /* -------------------------------------------------------------------- */
142
        public static final int DGNC_PRIMARY = 0;
143
        public static final int DGNC_PATTERN_COMPONENT = 1;
144
        public static final int DGNC_CONSTRUCTION_ELEMENT = 2;
145
        public static final int DGNC_DIMENSION_ELEMENT = 3;
146
        public static final int DGNC_PRIMARY_RULE_ELEMENT = 4;
147
        public static final int DGNC_LINEAR_PATTERNED_ELEMENT = 5;
148
        public static final int DGNC_CONSTRUCTION_RULE_ELEMENT = 6;
149

    
150
        /* -------------------------------------------------------------------- */
151
        /*      Group Data level numbers.                                       */
152
        /*                                                                      */
153
        /*      These are symbolic values for the typ 5 (DGNT_GROUP_DATA)       */
154
        /*      level values that have special meanings.                        */
155
        /* -------------------------------------------------------------------- */
156
        public static final int DGN_GDL_COLOR_TABLE = 1;
157
        public static final int DGN_GDL_NAMED_VIEW = 3;
158
        public static final int DGN_GDL_REF_FILE = 9;
159

    
160
        /* -------------------------------------------------------------------- */
161
        /*      Word 17 property flags.                                         */
162
        /* -------------------------------------------------------------------- */
163
        public static final int DGNPF_HOLE = 0x8000;
164
        public static final int DGNPF_SNAPPABLE = 0x4000;
165
        public static final int DGNPF_PLANAR = 0x2000;
166
        public static final int DGNPF_ORIENTATION = 0x1000;
167
        public static final int DGNPF_ATTRIBUTES = 0x0800;
168
        public static final int DGNPF_MODIFIED = 0x0400;
169
        public static final int DGNPF_NEW = 0x0200;
170
        public static final int DGNPF_LOCKED = 0x0100;
171
        public static final int DGNPF_CLASS = 0x000f;
172

    
173
        /* -------------------------------------------------------------------- */
174
        /*      DGNElementInfo flag values.                                     */
175
        /* -------------------------------------------------------------------- */
176
        public static final int DGNEIF_DELETED = 0x01;
177
        public static final int DGNEIF_COMPLEX = 0x02;
178

    
179
        /* -------------------------------------------------------------------- */
180
        /*      Justifications                                                  */
181
        /* -------------------------------------------------------------------- */
182
        public static final int DGNJ_LEFT_TOP = 0;
183
        public static final int DGNJ_LEFT_CENTER = 1;
184
        public static final int DGNJ_LEFT_BOTTOM = 2;
185
        public static final int DGNJ_LEFTMARGIN_TOP = 3;
186

    
187
        /* text node header only */
188
        public static final int DGNJ_LEFTMARGIN_CENTER = 4;
189

    
190
        /* text node header only */
191
        public static final int DGNJ_LEFTMARGIN_BOTTOM = 5;
192

    
193
        /* text node header only */
194
        public static final int DGNJ_CENTER_TOP = 6;
195
        public static final int DGNJ_CENTER_CENTER = 6;
196
        public static final int DGNJ_CENTER_BOTTOM = 8;
197
        public static final int DGNJ_RIGHTMARGIN_TOP = 9;
198

    
199
        /* text node header only */
200
        public static final int DGNJ_RIGHTMARGIN_CENTER = 10;
201

    
202
        /* text node header only */
203
        public static final int DGNJ_RIGHTMARGIN_BOTTOM = 11;
204

    
205
        /* text node header only */
206
        public static final int DGNJ_RIGHT_TOP = 12;
207
        public static final int DGNJ_RIGHT_CENTER = 13;
208
        public static final int DGNJ_RIGHT_BOTTOM = 14;
209

    
210
        /* -------------------------------------------------------------------- */
211
        /*      DGN file reading options.                                       */
212
        /* -------------------------------------------------------------------- */
213
        public static final int DGNO_CAPTURE_RAW_DATA = 0x01;
214

    
215
        /* -------------------------------------------------------------------- */
216
        /*      Known attribute linkage types, including my synthetic ones.     */
217
        /* -------------------------------------------------------------------- */
218
        public static final int DGNLT_DMRS = 0x0000;
219
        public static final int DGNLT_INFORMIX = 0x3848;
220
        public static final int DGNLT_ODBC = 0x5e62;
221
        public static final int DGNLT_ORACLE = 0x6091;
222
        public static final int DGNLT_RIS = 0x71FB;
223
        public static final int DGNLT_SYBASE = 0x4f58;
224
        public static final int DGNLT_XBASE = 0x1971;
225
        public static final int DGNLT_SHAPE_FILL = 0x0041;
226
        public static final int DGNLT_ASSOC_ID = 0x7D2F;
227

    
228
        /* -------------------------------------------------------------------- */
229
        /*      File creation options.                                          */
230
        /* -------------------------------------------------------------------- */
231
        public static final int DGNCF_USE_SEED_UNITS = 0x01;
232
        public static final int DGNCF_USE_SEED_ORIGIN = 0x02;
233
        public static final int DGNCF_COPY_SEED_FILE_COLOR_TABLE = 0x04;
234
        public static final int DGNCF_COPY_WHOLE_SEED_FILE = 0x08;
235
        public static final int SIZE_LONG = 4;
236

    
237
        /*
238
           int         offset;
239
           int         size;
240
           int         element_id;
241
           int         stype;
242
           int                level;
243
           int                type;
244
           int                complex;
245
           int                deleted;
246
           int                graphic_group;
247
           int                properties;
248
           int         color;
249
           int         weight;
250
           int         style;
251
           int                attr_bytes;
252
           byte attr_data;
253
           int         raw_bytes;
254
           byte raw_data;
255
           //} DGNElemCore;
256
         */
257

    
258
        /** File Length; */
259
        int myFileLength = 0;
260

    
261
        /** Version of the file. */
262
        int myVersion = 1000;
263

    
264
        /*
265
           public static final int SHAPE_NULL = 0;
266
            public static final int SHAPE_POINT = 1;
267
            public static final int SHAPE_POLYLINE = 3;
268
            public static final int SHAPE_POLYGON = 5;
269
            public static final int SHAPE_MULTIPOINT = 8;
270
            public static final int SHAPE_POINTZ = 11;
271
            public static final int SHAPE_POLYLINEZ = 13;
272
            public static final int SHAPE_POLYGONZ = 15;
273
            public static final int SHAPE_MULTIPOINTZ = 18;
274
            public static final int SHAPE_POINTM = 21;
275
            public static final int SHAPE_POLYLINEM = 23;
276
            public static final int SHAPE_POLYGONM = 25;
277
            public static final int SHAPE_MULTIPOINTM = 28;
278
            public static final int SHAPE_MULTIPATCH = 31;
279
         */
280
        int myDGNType = 0;
281
        double myXmin = 0;
282
        double myYmin = 0;
283
        double myXmax = 0;
284
        double myYmax = 0;
285
        double myZmin = 0;
286
        double myZmax = 0;
287
        double myMmin = 0;
288
        double myMmax = 0;
289

    
290
        // notify about warnings.
291
        private boolean myWarning = true;
292

    
293
        /**
294
         * ShapeFileHeader constructor comment.
295
         */
296
        public DGNFileHeader() {
297
                super();
298
        }
299

    
300
        /**
301
         * Return the version of the file.
302
         *
303
         * @return DOCUMENT ME!
304
         */
305
        public int getVersion() {
306
                return myVersion;
307
        }
308

    
309
        /**
310
         * Devuelve el rect?ngulo del fichero.
311
         *
312
         * @return DOCUMENT ME!
313
         */
314
        public java.awt.geom.Rectangle2D.Double getFileExtents() {
315
                return new java.awt.geom.Rectangle2D.Double(myXmin, myYmin,
316
                        myXmax - myXmin, myYmax - myYmin);
317
        }
318

    
319
        /**
320
         * Print warnings to system.out.
321
         *
322
         * @param inWarning DOCUMENT ME!
323
         */
324
        public void setWarnings(boolean inWarning) {
325
                myWarning = inWarning;
326
        }
327

    
328
        /**
329
         * Return the length of the header in 16 bit words..
330
         *
331
         * @return DOCUMENT ME!
332
         */
333
        public int getHeaderLength() {
334
                return 50;
335
        }
336

    
337
        /**
338
         * Return the number of 16 bit words in the shape file as recorded in the
339
         * header
340
         *
341
         * @return DOCUMENT ME!
342
         */
343
        public int getFileLength() {
344
                return myFileLength;
345
        }
346

    
347
        /**
348
         * Read the header from the shape file.
349
         *
350
         * @param in DOCUMENT ME!
351
         */
352
        public void readHeader(MappedByteBuffer in) {
353
                //in.order(ByteOrder.BIG_ENDIAN);
354

    
355
                /*
356
                   offset=in.getInt();
357
                   System.out.println("offset     "+offset);
358
                   size=in.getInt();
359
                   System.out.println("size        "+size);
360
                                   element_id=in.getInt();
361
                   System.out.println("element_id          "+element_id);
362
                                   stype=in.getInt();
363
                   System.out.println("stype        "+stype);
364
                                   level=in.getInt();
365
                   System.out.println("level          "+level);
366
                                   type=in.getInt();
367
                   System.out.println("type          "+type);
368
                                   complex=in.getInt();
369
                   System.out.println("complex          "+complex);
370
                                   deleted=in.getInt();
371
                   System.out.println("deleted          "+deleted);
372
                                   graphic_group=in.getInt();
373
                   System.out.println("graphic_group          "+graphic_group);
374
                                   properties=in.getInt();
375
                   System.out.println("properties          "+properties);
376
                                   color=in.getInt();
377
                   System.out.println("color          "+color);
378
                                   weight=in.getInt();
379
                   System.out.println("weight          "+weight);
380
                                   style=in.getInt();
381
                   System.out.println("style          "+style);
382
                                   attr_bytes=in.getInt();
383
                   System.out.println("attr_bytes          "+attr_bytes);
384
                                   //attr_data=in.get(attr_bytes);
385
                   //System.out.println("attr_data          "+attr_data);
386
                                   raw_bytes=in.getInt();
387
                   System.out.println("raw_bytes          "+raw_bytes);
388
                                   //raw_data=in.get(raw_bytes);
389
                   //System.out.println("raw_data          "+raw_data);
390
                 */
391

    
392
                // the first four bytes are integers
393
                // in.setLittleEndianMode(false);
394

    
395
                /*  in.order(ByteOrder.BIG_ENDIAN);
396
                   myFileCode = in.getInt();
397
                   if (myFileCode != 9994) warn("File Code = "+myFileCode+" Not equal to 9994");
398
                   // From 4 to 8 are unused.
399
                   myUnused1 = in.getInt();
400
                   // From 8 to 12 are unused.
401
                   myUnused2 = in.getInt();
402
                   // From 12 to 16 are unused.
403
                   myUnused3 = in.getInt();
404
                   // From 16 to 20 are unused.
405
                   myUnused4 = in.getInt();
406
                   // From 20 to 24 are unused.
407
                   myUnused5 = in.getInt();
408
                   // From 24 to 28 are the file length.
409
                   myFileLength = in.getInt();
410
                   // From 28 to 32 are the File Version.
411
                   in.order(ByteOrder.LITTLE_ENDIAN);
412
                   myVersion = in.getInt();
413
                   // From 32 to 36 are the Shape Type.
414
                   myShapeType = in.getInt();
415
                   // From 36 to 44 are Xmin.
416
                   myXmin = in.getDouble(); // Double.longBitsToDouble(in.getLong());
417
                   // From 44 to 52 are Ymin.
418
                   myYmin = in.getDouble();
419
                   // From 52 to 60 are Xmax.
420
                   myXmax = in.getDouble();
421
                   // From 60 to 68 are Ymax.
422
                   myYmax = in.getDouble();
423
                   // From 68 to 76 are Zmin.
424
                   myZmin = in.getDouble();
425
                   // From 76 to 84 are Zmax.
426
                   myZmax = in.getDouble();
427
                   // From 84 to 92 are Mmin.
428
                   myMmin = in.getDouble();
429
                   // From 92 to 100 are Mmax.
430
                   myMmax = in.getDouble();
431
                   // that is all 100 bytes of the header.
432
                 */
433
        }
434

    
435
        /**
436
         * Muestra por consola el warning.
437
         *
438
         * @param inWarn DOCUMENT ME!
439
         */
440
        private void warn(String inWarn) {
441
                if (myWarning) {
442
                        System.out.print("WARNING: ");
443
                        System.out.println(inWarn);
444
                }
445
        }
446
}