Statistics
| Revision:

root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / DwgObjectFactory.java @ 10878

History | View | Annotate | Download (13 KB)

1 9602 azabala
/*
2
 * Created on 27-dic-2006
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 *  Generalitat Valenciana
25
 *   Conselleria d'Infraestructures i Transport
26
 *   Av. Blasco Ib??ez, 50
27
 *   46010 VALENCIA
28
 *   SPAIN
29
 *
30
 *      +34 963862235
31
 *   gvsig@gva.es
32
 *      www.gvsig.gva.es
33
 *
34
 *    or
35
 *
36
 *   IVER T.I. S.A
37
 *   Salamanca 50
38
 *   46005 Valencia
39
 *   Spain
40
 *
41
 *   +34 963163400
42
 *   dac@iver.es
43
 */
44
/* CVS MESSAGES:
45
 *
46
 * $Id$
47
 * $Log$
48 10857 azabala
 * Revision 1.19  2007-03-22 17:37:30  azabala
49
 * dont load dwg entities that are not implemented in fmap (or that we are not able to know their meaning)
50
 *
51
 * Revision 1.18  2007/03/20 19:55:27  azabala
52 10820 azabala
 * source code cleaning
53
 *
54
 * Revision 1.17  2007/03/06 19:39:38  azabala
55 10632 azabala
 * Changes to adapt dwg 12 to general architecture
56
 *
57
 * Revision 1.16  2007/03/02 20:31:22  azabala
58 10599 azabala
 * *** empty log message ***
59
 *
60
 * Revision 1.15  2007/03/01 19:59:46  azabala
61 10590 azabala
 * source code cleaning
62
 *
63
 * Revision 1.14  2007/02/22 20:45:51  azabala
64 10482 azabala
 * changes to add dwg 12 entities creation
65
 *
66
 * Revision 1.13  2007/02/14 09:20:32  fdiaz
67 10314 fdiaz
 * Eliminado un comentario y habilitado de nuevo el else del final del metodo create.
68
 *
69
 * Revision 1.12  2007/02/08 20:27:06  azabala
70 10223 azabala
 * solved bug with lwpolylines
71
 *
72
 * Revision 1.11  2007/02/08 10:27:35  azabala
73 10199 azabala
 * if the type is unknown it returns NULL
74
 *
75
 * Revision 1.10  2007/02/06 20:17:29  azabala
76 10156 azabala
 * *** empty log message ***
77
 *
78
 * Revision 1.9  2007/02/02 12:39:52  azabala
79 10091 azabala
 * Added new dwg entities
80
 *
81
 * Revision 1.8  2007/02/01 20:00:27  azabala
82 10054 azabala
 * *** empty log message ***
83
 *
84
 * Revision 1.7  2007/01/31 18:20:58  fdiaz
85 10013 fdiaz
 * A?adido un return null al final de metodo create por si no entra en ninguna de las condiciones.
86
 *
87
 * Revision 1.6  2007/01/31 10:01:11  fdiaz
88 9995 fdiaz
 * A?adido el DwgDictionary.
89
 *
90
 * Revision 1.5  2007/01/30 19:40:23  azabala
91 9977 azabala
 * *** empty log message ***
92
 *
93 9986 azabala
 * Revision 1.4  2007/01/30 12:37:18  azabala
94
 * *** empty log message ***
95
 *
96 9977 azabala
 * Revision 1.3  2007/01/24 20:14:31  azabala
97 9894 azabala
 * implementation of reader of V14
98
 *
99
 * Revision 1.2  2007/01/12 19:35:00  azabala
100 9602 azabala
 * *** empty log message ***
101
 *
102 9720 azabala
 * Revision 1.1  2007/01/09 15:39:15  azabala
103
 * *** empty log message ***
104 9602 azabala
 *
105 9720 azabala
 *
106 9602 azabala
 */
107
package com.iver.cit.jdwglib.dwg;
108
109
import com.iver.cit.jdwglib.dwg.objects.DwgArc;
110
import com.iver.cit.jdwglib.dwg.objects.DwgAttdef;
111
import com.iver.cit.jdwglib.dwg.objects.DwgAttrib;
112
import com.iver.cit.jdwglib.dwg.objects.DwgBlock;
113
import com.iver.cit.jdwglib.dwg.objects.DwgBlockControl;
114
import com.iver.cit.jdwglib.dwg.objects.DwgBlockHeader;
115
import com.iver.cit.jdwglib.dwg.objects.DwgCircle;
116 9995 fdiaz
import com.iver.cit.jdwglib.dwg.objects.DwgDictionary;
117 9986 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgDictionaryVar;
118 10482 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgDimOrd;
119 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgEllipse;
120
import com.iver.cit.jdwglib.dwg.objects.DwgEndblk;
121 10482 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgFace3D;
122 9986 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgHatch;
123 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgIdBuffer;
124
import com.iver.cit.jdwglib.dwg.objects.DwgImage;
125
import com.iver.cit.jdwglib.dwg.objects.DwgImageDef;
126
import com.iver.cit.jdwglib.dwg.objects.DwgImageDefReactor;
127 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgInsert;
128
import com.iver.cit.jdwglib.dwg.objects.DwgLayer;
129
import com.iver.cit.jdwglib.dwg.objects.DwgLayerControl;
130 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgLayerIndex;
131 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgLine;
132
import com.iver.cit.jdwglib.dwg.objects.DwgLwPolyline;
133
import com.iver.cit.jdwglib.dwg.objects.DwgMText;
134 10820 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgMeshPolyline;
135 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgOle2Frame;
136 10820 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgPFacePolyline;
137 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgPoint;
138
import com.iver.cit.jdwglib.dwg.objects.DwgPolyline2D;
139
import com.iver.cit.jdwglib.dwg.objects.DwgPolyline3D;
140 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgRasterVariables;
141 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgSeqend;
142
import com.iver.cit.jdwglib.dwg.objects.DwgSolid;
143 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgSortEntStable;
144
import com.iver.cit.jdwglib.dwg.objects.DwgSpatialFilter;
145
import com.iver.cit.jdwglib.dwg.objects.DwgSpatialIndex;
146 9602 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgSpline;
147
import com.iver.cit.jdwglib.dwg.objects.DwgText;
148
import com.iver.cit.jdwglib.dwg.objects.DwgVertex2D;
149
import com.iver.cit.jdwglib.dwg.objects.DwgVertex3D;
150 10820 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgVertexMesh;
151
import com.iver.cit.jdwglib.dwg.objects.DwgVertexPFace;
152
import com.iver.cit.jdwglib.dwg.objects.DwgVertexPFaceFace;
153 10091 azabala
import com.iver.cit.jdwglib.dwg.objects.DwgXRecord;
154 9602 azabala
155 10482 azabala
156 9602 azabala
/**
157 10482 azabala
 * Factory that creates dwg entities from its code (int value).
158 9602 azabala
 *
159 10482 azabala
 * Some DWG entities dont have a fixed "type code". Instead, their type
160
 * is specified in the CLASSES section of the dwg file.
161
 *
162
 *
163
 *
164 9602 azabala
 * It's a singleton
165 10091 azabala
 *
166 9602 azabala
 */
167
public class DwgObjectFactory {
168
169
        private static DwgObjectFactory _instance = new DwgObjectFactory();
170
171
        private DwgObjectFactory() {
172
        }
173 10482 azabala
174
        /*
175
         * Constants to represent polyline2d, polyline3d,
176
         * vertex2d and vertex3d.
177
         * */
178 10599 azabala
//        public static final byte POLYLINE2D = 40;
179
//        public static final byte POLYLINE3D = 41;
180
//        public static final byte VERTEX2D = 50;
181
//        public static final byte VERTEX3D = 51;
182 9602 azabala
183
        public static final DwgObjectFactory getInstance() {
184
                return _instance;
185
        }
186 10091 azabala
187 10482 azabala
188
        /**
189
         * Creates a Dwg object instance from its type.
190
         *
191
         * This method is used for DWG 13, 14 and 2000 files.
192
         *
193
         * */
194 9720 azabala
        public DwgObject create(int type, int index) {
195 9602 azabala
                DwgObject obj = null;
196 10091 azabala
197 9602 azabala
                if (type == 0x11) {
198 9720 azabala
                        obj = new DwgArc(index);
199 9602 azabala
                        obj.setGraphicsFlag(true);
200 10820 azabala
                } else if (type == 0x1D) {
201
                        obj = new DwgPFacePolyline(index);
202
                        obj.setGraphicsFlag(true);
203
                } else if (type == 0x1E) {
204
                        obj = new DwgMeshPolyline(index);
205
                        obj.setGraphicsFlag(true);
206
                }
207
                else if (type == 0x12) {
208 9720 azabala
                        obj = new DwgCircle(index);
209 9602 azabala
                        obj.setGraphicsFlag(true);
210
                } else if (type == 0x13) {
211 9720 azabala
                        obj = new DwgLine(index);
212 9602 azabala
                        obj.setGraphicsFlag(true);
213
                } else if (type == 0x1B) {
214 9720 azabala
                        obj = new DwgPoint(index);
215 9602 azabala
                        obj.setGraphicsFlag(true);
216
                } else if (type == 0x0F) {
217 9720 azabala
                        obj = new DwgPolyline2D(index);
218 9602 azabala
                        obj.setGraphicsFlag(true);
219
                } else if (type == 0x10) {
220 9720 azabala
                        obj = new DwgPolyline3D(index);
221 9602 azabala
                        obj.setGraphicsFlag(true);
222
                } else if (type == 0x0A) {
223 9720 azabala
                        obj = new DwgVertex2D(index);
224 9602 azabala
                        obj.setGraphicsFlag(true);
225
                } else if (type == 0x0B) {
226 9720 azabala
                        obj = new DwgVertex3D(index);
227 9602 azabala
                        obj.setGraphicsFlag(true);
228 10820 azabala
                } else if (type == 0x0C) {
229
                        obj = new DwgVertexMesh(index);
230
                        obj.setGraphicsFlag(true);
231
                }else if (type == 0x0D) {
232
                        obj = new DwgVertexPFace(index);
233
                        obj.setGraphicsFlag(true);
234
                }else if (type == 0x0E) {
235
                        obj = new DwgVertexPFaceFace(index);
236
                        obj.setGraphicsFlag(true);
237
                }
238
                else if (type == 0x6) {
239 9720 azabala
                        obj = new DwgSeqend(index);
240 9602 azabala
                        obj.setGraphicsFlag(true);
241
                } else if (type == 0x1) {
242 9720 azabala
                        obj = new DwgText(index);
243 9602 azabala
                        obj.setGraphicsFlag(true);
244
                } else if (type == 0x2) {
245 9720 azabala
                        obj = new DwgAttrib(index);
246 9602 azabala
                        obj.setGraphicsFlag(true);
247
                } else if (type == 0x3) {
248 9720 azabala
                        obj = new DwgAttdef(index);
249 9602 azabala
                        obj.setGraphicsFlag(true);
250
                } else if (type == 0x4) {
251 9720 azabala
                        obj = new DwgBlock(index);
252 9602 azabala
                        obj.setGraphicsFlag(true);
253
                } else if (type == 0x5) {
254 9720 azabala
                        obj = new DwgEndblk(index);
255 9602 azabala
                        obj.setGraphicsFlag(true);
256 9995 fdiaz
                } else if (type == 0x2A) {
257
                        obj = new DwgDictionary(index);
258
                        obj.setGraphicsFlag(false);
259 9602 azabala
                } else if (type == 0x30) {
260 9720 azabala
                        obj = new DwgBlockControl(index);
261 9602 azabala
                        obj.setGraphicsFlag(false);
262
                } else if (type == 0x31) {
263 9720 azabala
                        obj = new DwgBlockHeader(index);
264 9602 azabala
                        obj.setGraphicsFlag(false);
265
                } else if (type == 0x32) {
266 9720 azabala
                        obj = new DwgLayerControl(index);
267 9602 azabala
                        obj.setGraphicsFlag(false);
268
                } else if (type == 0x33) {
269 9720 azabala
                        obj = new DwgLayer(index);
270 9602 azabala
                        obj.setGraphicsFlag(false);
271
                } else if (type == 0x7) {
272 9720 azabala
                        obj = new DwgInsert(index);
273 9602 azabala
                        obj.setGraphicsFlag(true);
274
                } else if (type == 0x2C) {
275 9720 azabala
                        obj = new DwgMText(index);
276 9602 azabala
                        obj.setGraphicsFlag(true);
277 10820 azabala
                }
278
//                else if (type == 0x1F) {
279
//                        obj = new DwgSolid(index);
280
//                        obj.setGraphicsFlag(true);
281
//                }
282
                else if (type == 0x23) {
283 9720 azabala
                        obj = new DwgEllipse(index);
284 9602 azabala
                        obj.setGraphicsFlag(true);
285
                } else if (type == 0x24) {
286 9720 azabala
                        obj = new DwgSpline(index);
287 9602 azabala
                        obj.setGraphicsFlag(true);
288 10156 azabala
                }
289 10820 azabala
//                else if (type == 0x15) {
290
//                        obj = new DwgLinearDimension(index);
291
//                        obj.setGraphicsFlag(true);
292
//                }
293 10156 azabala
                /*
294
                 * Segun los foros de OpenDWG:
295
                 * OLE2FRAME - 74 -> 0X4A
296
                   LWPOLYLINE - 77 -> 0X4D
297
                   HATCH - 78 -> 0X4E
298
                 *
299
                 *
300
                 * */
301
302
                else if (type == 0x4D) {
303 9720 azabala
                        obj = new DwgLwPolyline(index);
304 9602 azabala
                        obj.setGraphicsFlag(true);
305 10820 azabala
                }
306
                /*
307
                else if (type == 0x4A){
308 10156 azabala
                        obj = new DwgOle2Frame(index);
309
                        obj.setGraphicsFlag(false);
310 10820 azabala
                }
311

312

313
                else if (type == 0x4E){
314 10156 azabala
                        obj = new DwgHatch(index);
315
                        obj.setGraphicsFlag(true);
316
                }
317 10820 azabala

318 10156 azabala
                else if (type == 0x4E) {
319 9720 azabala
                        obj = new DwgLwPolyline(index);
320 9602 azabala
                        obj.setGraphicsFlag(true);
321
                } else if (type == 0x4F) {
322 9720 azabala
                        obj = new DwgLwPolyline(index);
323 9602 azabala
                        obj.setGraphicsFlag(true);
324
                } else if (type == 0x50) {
325 9720 azabala
                        obj = new DwgLwPolyline(index);
326 9602 azabala
                        obj.setGraphicsFlag(true);
327
                } else if (type == 0x51) {
328 9720 azabala
                        obj = new DwgLwPolyline(index);
329 9602 azabala
                        obj.setGraphicsFlag(true);
330
                } else if (type == 0x52) {
331 9720 azabala
                        obj = new DwgLwPolyline(index);
332 9602 azabala
                        obj.setGraphicsFlag(true);
333
                } else if (type == 0x53) {
334 9720 azabala
                        obj = new DwgLwPolyline(index);
335 9602 azabala
                        obj.setGraphicsFlag(true);
336 10156 azabala
                }
337
                */
338
339
                else {
340 10590 azabala
//                        obj = new DwgObject(index);
341
                        return null;
342 9602 azabala
                }
343
                obj.setType(type);
344
                return obj;
345
        }
346 9995 fdiaz
347 10091 azabala
        /**
348
         * Creates a DwgObject from its DXF name.
349
         *
350
         * This method is used to create entities without a fixed dwg code type
351
         * (entities whose type is > 500)
352 10482 azabala
         *
353
         * This method is used for DWG 13, 14 and 2000 files.
354 10091 azabala
         *
355
         */
356
        public DwgObject create(String dxfName, int index) {
357 10223 azabala
                //TODO De todas estas ver cuales son graficas,
358
                //para poner su graphicsFlag a true
359
                //ESTO MEJOR VA A SER CADA CLASE QUIEN LO HAGA, EN VEZ
360
                //DE LA FACTORIA
361
362 10857 azabala
//                if (dxfName.equalsIgnoreCase("DICTIONARYVAR"))
363
//                        return new DwgDictionaryVar(index);
364
//                else if (dxfName.equalsIgnoreCase("HATCH"))
365
//                        return new DwgHatch(index);
366
//                else if (dxfName.equalsIgnoreCase("IDBUFFER"))
367
//                        return new DwgIdBuffer(index);
368
//                else if (dxfName.equalsIgnoreCase("IMAGE"))
369
//                        return new DwgImage(index);
370
//                else if (dxfName.equalsIgnoreCase("IMAGEDEF"))
371
//                        return new DwgImageDef(index);
372
//                else if (dxfName.equalsIgnoreCase("IMAGEDEFREACTOR"))
373
//                        return new DwgImageDefReactor(index);
374
//                else if (dxfName.equalsIgnoreCase("LAYER_INDEX"))
375
//                        return new DwgLayerIndex(index);
376
//                else
377
                        if (dxfName.equalsIgnoreCase("LWPOLYLINE")){
378 10223 azabala
                        DwgLwPolyline solution = new DwgLwPolyline(index);
379
                        solution.setGraphicsFlag(true);
380
                        return solution;
381 10857 azabala
                }
382
//                else if (dxfName.equalsIgnoreCase("OLE2FRAME"))
383
//                        return new DwgOle2Frame(index);
384
//                else if (dxfName.equalsIgnoreCase("RASTERVARIABLES"))
385
//                        return new DwgRasterVariables(index);
386
//                else if (dxfName.equalsIgnoreCase("SORTENTSTABLE"))
387
//                        return new DwgSortEntStable(index);
388
//                else if (dxfName.equalsIgnoreCase("SPATIALFILTER"))
389
//                        return new DwgSpatialFilter(index);
390
//                else if (dxfName.equalsIgnoreCase("SPATIALINDEX"))
391
//                        return new DwgSpatialIndex(index);
392
//                else if (dxfName.equalsIgnoreCase("XRECORD"))
393
//                        return new DwgXRecord(index);
394 10013 fdiaz
                return null;
395 10091 azabala
        }
396 10482 azabala
397
        /**
398
         * Creates a DWG object for DWG 12 files.
399
         *
400
         * */
401
        public DwgObject create(byte kind, int index){
402
                switch(kind){
403
                case 1:
404
                        return new DwgLine(index);
405
                case 2:
406
                        return new DwgPoint(index);
407
                case 3:
408
                        return new DwgCircle(index);
409
//                case 4://un dxf shape es un fichero externo que define una forma
410
                        //(un tipo rudimentario de svg)
411
//                        return new DwgShape()
412
                case 7:
413
                        return new DwgText(index);
414
                case 8:
415
                        return new DwgArc(index);
416
//                case 9: //It is a 3D quad
417
//                        return new DwgTrace(index);
418
419 10632 azabala
                case 11:
420
                        return new DwgSolid(index);
421 10482 azabala
                case 12:
422 10632 azabala
                        return new DwgBlockHeader(index);
423 10482 azabala
                case 13:
424 10632 azabala
                        return new DwgEndblk(index);
425 10482 azabala
                case 14:
426 10632 azabala
                        return new DwgInsert(index);
427 10482 azabala
                case 15:
428 10632 azabala
                        return new DwgAttdef(index);
429 10482 azabala
                case 16:
430
                        return new DwgAttrib(index);
431 10632 azabala
                case 17://no estoy seguro de q esto sea SbEnd
432 10482 azabala
                        return new DwgSeqend(index);
433 10632 azabala
                case 19://polyline is a particular case. Creation responsability is of Reader
434 10599 azabala
                        return null;
435 10632 azabala
                case 20://vertex like polyline
436 10599 azabala
                        return null;
437 10632 azabala
                case 22:
438 10482 azabala
                        return new DwgFace3D(index);
439 10632 azabala
                case 23: //esto es Dim ??
440 10482 azabala
                        return new DwgDimOrd(index);
441
//                case 25://no implementado
442
//                        return new DwgVPort(index);
443
                        default:
444
                                return null;
445
                }
446
        }
447 10091 azabala
}