root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / DwgObject.java @ 10240
History | View | Annotate | Download (11.2 KB)
1 | 2896 | jmorell | /* jdwglib. Java Library for reading Dwg files.
|
---|---|---|---|
2 | *
|
||
3 | * Author: Jose Morell Rama (jose.morell@gmail.com).
|
||
4 | * Port from the Pythoncad Dwg library by Art Haas.
|
||
5 | *
|
||
6 | * Copyright (C) 2005 Jose Morell, IVER TI S.A. 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 | * Jose Morell (jose.morell@gmail.com)
|
||
25 | *
|
||
26 | * or
|
||
27 | *
|
||
28 | * IVER TI S.A.
|
||
29 | * C/Salamanca, 50
|
||
30 | * 46005 Valencia
|
||
31 | * Spain
|
||
32 | * +34 963163400
|
||
33 | * dac@iver.es
|
||
34 | */
|
||
35 | package com.iver.cit.jdwglib.dwg; |
||
36 | |||
37 | 9990 | fdiaz | import java.util.ArrayList; |
38 | 9894 | azabala | import java.util.List; |
39 | 2896 | jmorell | |
40 | /**
|
||
41 | * The DwgObject class represents a DWG object
|
||
42 | *
|
||
43 | * @author jmorell
|
||
44 | */
|
||
45 | 10173 | fdiaz | public class DwgObject implements Cloneable{ |
46 | 2896 | jmorell | protected int type; |
47 | 9910 | azabala | |
48 | 10014 | fdiaz | protected DwgHandleReference handle;
|
49 | 9910 | azabala | |
50 | 2896 | jmorell | protected String version; |
51 | 9910 | azabala | |
52 | 2896 | jmorell | protected int mode; |
53 | 9910 | azabala | |
54 | 9720 | azabala | /**
|
55 | * code of the layer handle
|
||
56 | 9910 | azabala | */
|
57 | 10014 | fdiaz | //protected int layerHandleCode;
|
58 | 9910 | azabala | |
59 | 9720 | azabala | /**
|
60 | * layer handle as an integer
|
||
61 | 9910 | azabala | */
|
62 | 10014 | fdiaz | protected DwgHandleReference layerHandle;
|
63 | 9910 | azabala | |
64 | 2896 | jmorell | protected int color; |
65 | 9910 | azabala | |
66 | 2896 | jmorell | protected int numReactors; |
67 | 9910 | azabala | |
68 | 2896 | jmorell | protected boolean noLinks; |
69 | 9910 | azabala | |
70 | 2896 | jmorell | protected int linetypeFlags; |
71 | 9910 | azabala | |
72 | 2896 | jmorell | protected int plotstyleFlags; |
73 | 9910 | azabala | |
74 | 2896 | jmorell | protected int sizeInBits; |
75 | 9910 | azabala | |
76 | 9894 | azabala | protected List extendedData; |
77 | 9910 | azabala | |
78 | 2896 | jmorell | protected int graphicData; |
79 | 9910 | azabala | |
80 | 10014 | fdiaz | protected DwgHandleReference plotStyleHandle = null; |
81 | 9910 | azabala | |
82 | 10014 | fdiaz | protected DwgHandleReference subEntityHandle = null; |
83 | 9910 | azabala | |
84 | 10014 | fdiaz | protected DwgHandleReference xDicObjHandle = null; |
85 | |||
86 | 2896 | jmorell | protected boolean graphicsFlag; |
87 | 10111 | fdiaz | |
88 | private DwgFile dwgFile = null; |
||
89 | 9910 | azabala | |
90 | 2896 | jmorell | /**
|
91 | 9720 | azabala | * Index of the dwg object in the object's map section
|
92 | 9910 | azabala | *
|
93 | */
|
||
94 | 9720 | azabala | protected int index = 0; |
95 | 9910 | azabala | |
96 | /*
|
||
97 | * Previous and Next Handle (this stuff has allowed us to solve the problem
|
||
98 | * of layer handles
|
||
99 | */
|
||
100 | 10014 | fdiaz | private DwgHandleReference nextHandle = null; |
101 | 9910 | azabala | |
102 | 10014 | fdiaz | private DwgHandleReference previousHandle = null; |
103 | 9910 | azabala | |
104 | 10014 | fdiaz | //private ArrayList reactorsHandlesCodes = new ArrayList();
|
105 | 9910 | azabala | |
106 | 9990 | fdiaz | private ArrayList reactorsHandles = new ArrayList(); |
107 | |||
108 | 9910 | azabala | public DwgObject(int index) { |
109 | 9720 | azabala | this.index = index;
|
110 | } |
||
111 | 9910 | azabala | |
112 | 10014 | fdiaz | public void setNextHandle(DwgHandleReference hr) { |
113 | this.nextHandle = hr;
|
||
114 | 9910 | azabala | |
115 | 2896 | jmorell | } |
116 | 9910 | azabala | |
117 | 10014 | fdiaz | public void setPreviousHandle(DwgHandleReference hr) { |
118 | this.previousHandle = hr;
|
||
119 | 9910 | azabala | } |
120 | |||
121 | 10014 | fdiaz | /*
|
122 | 9990 | fdiaz | public void setReactorsHandles(ArrayList reactorsHandles) {
|
123 | this.reactorsHandlesCodes=reactorsHandles;
|
||
124 | }
|
||
125 | 10014 | fdiaz | */
|
126 | 9990 | fdiaz | |
127 | 10014 | fdiaz | public void addReactorHandle(DwgHandleReference hr) { |
128 | if (this.reactorsHandles == null){ |
||
129 | 9990 | fdiaz | this.reactorsHandles = new ArrayList(); |
130 | } |
||
131 | 10014 | fdiaz | this.reactorsHandles.add(hr);
|
132 | 9990 | fdiaz | } |
133 | |||
134 | |||
135 | 10014 | fdiaz | public DwgHandleReference getNextHandle() {
|
136 | 9910 | azabala | return this.nextHandle; |
137 | |||
138 | } |
||
139 | |||
140 | 10014 | fdiaz | public DwgHandleReference getPreviousHandle() {
|
141 | 9910 | azabala | return this.previousHandle; |
142 | } |
||
143 | |||
144 | 9990 | fdiaz | public ArrayList getReactorsHandles() { |
145 | return this.reactorsHandles; |
||
146 | } |
||
147 | |||
148 | 9910 | azabala | //TODO Todo esto no vale si handle puede tomar valor -1
|
149 | 10173 | fdiaz | public boolean hasLayerHandle() { |
150 | return this.layerHandle != null; |
||
151 | } |
||
152 | 9910 | azabala | public boolean hasNextHandle() { |
153 | 10014 | fdiaz | return this.nextHandle != null; |
154 | 9910 | azabala | } |
155 | |||
156 | public boolean hasPreviousHandle() { |
||
157 | 10014 | fdiaz | return this.previousHandle != null; |
158 | 9910 | azabala | } |
159 | |||
160 | 9990 | fdiaz | public boolean hasSubEntityHandle(){ |
161 | 10014 | fdiaz | return this.subEntityHandle != null; |
162 | 9990 | fdiaz | } |
163 | |||
164 | public boolean hasXDicObjHandle(){ |
||
165 | 10014 | fdiaz | return this.xDicObjHandle != null; |
166 | 9990 | fdiaz | } |
167 | |||
168 | public boolean hasReactorsHandles(){ |
||
169 | 10014 | fdiaz | return this.reactorsHandles.size() != 0; |
170 | 9990 | fdiaz | } |
171 | |||
172 | public int reactorsHandlesQuantity(){ |
||
173 | 10014 | fdiaz | return this.reactorsHandles.size(); |
174 | 9990 | fdiaz | } |
175 | |||
176 | 9910 | azabala | public int getIndex() { |
177 | return index;
|
||
178 | } |
||
179 | |||
180 | 2896 | jmorell | /**
|
181 | * @return Returns the sizeInBits.
|
||
182 | */
|
||
183 | public int getSizeInBits() { |
||
184 | return sizeInBits;
|
||
185 | } |
||
186 | 9910 | azabala | |
187 | 2896 | jmorell | /**
|
188 | 9910 | azabala | * @param sizeInBits
|
189 | * The sizeInBits to set.
|
||
190 | 2896 | jmorell | */
|
191 | public void setSizeInBits(int sizeInBits) { |
||
192 | this.sizeInBits = sizeInBits;
|
||
193 | } |
||
194 | 9910 | azabala | |
195 | 2896 | jmorell | /**
|
196 | * @return Returns the extendedData.
|
||
197 | */
|
||
198 | 9894 | azabala | public List getExtendedData() { |
199 | 2896 | jmorell | return extendedData;
|
200 | } |
||
201 | 9910 | azabala | |
202 | 2896 | jmorell | /**
|
203 | 9910 | azabala | * @param extData
|
204 | * The extendedData to set.
|
||
205 | 2896 | jmorell | */
|
206 | 9894 | azabala | public void setExtendedData(List extData) { |
207 | 7178 | azabala | this.extendedData = extData;
|
208 | 2896 | jmorell | } |
209 | 9910 | azabala | |
210 | 2896 | jmorell | /**
|
211 | * @return Returns the graphicData.
|
||
212 | */
|
||
213 | public int getGraphicData() { |
||
214 | return graphicData;
|
||
215 | } |
||
216 | 9910 | azabala | |
217 | 2896 | jmorell | /**
|
218 | 9910 | azabala | * @param graphicData
|
219 | * The graphicData to set.
|
||
220 | 2896 | jmorell | */
|
221 | public void setGraphicData(int graphicData) { |
||
222 | this.graphicData = graphicData;
|
||
223 | } |
||
224 | 9910 | azabala | |
225 | 2896 | jmorell | /**
|
226 | * @return Returns the version.
|
||
227 | */
|
||
228 | public String getVersion() { |
||
229 | return version;
|
||
230 | } |
||
231 | 9910 | azabala | |
232 | 2896 | jmorell | /**
|
233 | 9910 | azabala | * @param linetypeFlags
|
234 | * The linetypeFlags to set.
|
||
235 | 2896 | jmorell | */
|
236 | public void setLinetypeFlags(int linetypeFlags) { |
||
237 | this.linetypeFlags = linetypeFlags;
|
||
238 | } |
||
239 | 9910 | azabala | |
240 | 2896 | jmorell | /**
|
241 | 9910 | azabala | * @param plotstyleFlags
|
242 | * The plotstyleFlags to set.
|
||
243 | 2896 | jmorell | */
|
244 | public void setPlotstyleFlags(int plotstyleFlags) { |
||
245 | this.plotstyleFlags = plotstyleFlags;
|
||
246 | } |
||
247 | 9910 | azabala | |
248 | 2896 | jmorell | /**
|
249 | * @return Returns the subEntityHandle.
|
||
250 | */
|
||
251 | 10014 | fdiaz | public DwgHandleReference getSubEntityHandle() {
|
252 | 2896 | jmorell | return subEntityHandle;
|
253 | } |
||
254 | 9910 | azabala | |
255 | 2896 | jmorell | /**
|
256 | 9910 | azabala | * @param subEntityHandle
|
257 | * The subEntityHandle to set.
|
||
258 | 2896 | jmorell | */
|
259 | 10014 | fdiaz | public void setSubEntityHandle(DwgHandleReference subEntityHandle) { |
260 | 2896 | jmorell | this.subEntityHandle = subEntityHandle;
|
261 | } |
||
262 | 9910 | azabala | |
263 | 2896 | jmorell | /**
|
264 | * @return Returns the xDicObjHandle.
|
||
265 | */
|
||
266 | 10014 | fdiaz | public DwgHandleReference getXDicObjHandle() {
|
267 | 2896 | jmorell | return xDicObjHandle;
|
268 | } |
||
269 | 9910 | azabala | |
270 | 2896 | jmorell | /**
|
271 | 9910 | azabala | * @param dicObjHandle
|
272 | * The xDicObjHandle to set.
|
||
273 | 2896 | jmorell | */
|
274 | 10014 | fdiaz | public void setXDicObjHandle(DwgHandleReference dicObjHandle) { |
275 | 2896 | jmorell | xDicObjHandle = dicObjHandle; |
276 | } |
||
277 | 9910 | azabala | |
278 | 2896 | jmorell | /**
|
279 | 9910 | azabala | * @return Returns the color.
|
280 | */
|
||
281 | public int getColor() { |
||
282 | return color;
|
||
283 | } |
||
284 | |||
285 | /**
|
||
286 | * @param color
|
||
287 | * The color to set.
|
||
288 | */
|
||
289 | public void setColor(int color) { |
||
290 | this.color = color;
|
||
291 | } |
||
292 | |||
293 | /**
|
||
294 | * @return Returns the handle.
|
||
295 | */
|
||
296 | 10014 | fdiaz | public DwgHandleReference getHandle() {
|
297 | 9910 | azabala | return handle;
|
298 | } |
||
299 | |||
300 | /**
|
||
301 | * @param handle
|
||
302 | * The handle to set.
|
||
303 | */
|
||
304 | 10014 | fdiaz | public void setHandle(DwgHandleReference handle) { |
305 | 9910 | azabala | this.handle = handle;
|
306 | } |
||
307 | |||
308 | /**
|
||
309 | * @return Returns the layerHandle.
|
||
310 | */
|
||
311 | 10014 | fdiaz | public DwgHandleReference getLayerHandle() {
|
312 | 9910 | azabala | return layerHandle;
|
313 | } |
||
314 | |||
315 | /**
|
||
316 | * @param layerHandle
|
||
317 | * The layerHandle to set.
|
||
318 | */
|
||
319 | 10014 | fdiaz | public void setLayerHandle(DwgHandleReference layerHandle) { |
320 | 9910 | azabala | this.layerHandle = layerHandle;
|
321 | } |
||
322 | |||
323 | /**
|
||
324 | * @return Returns the mode.
|
||
325 | */
|
||
326 | public int getMode() { |
||
327 | return mode;
|
||
328 | } |
||
329 | |||
330 | /**
|
||
331 | * @param mode
|
||
332 | * The mode to set.
|
||
333 | */
|
||
334 | public void setMode(int mode) { |
||
335 | this.mode = mode;
|
||
336 | } |
||
337 | |||
338 | /**
|
||
339 | * @return Returns the noLinks.
|
||
340 | */
|
||
341 | public boolean isNoLinks() { |
||
342 | return noLinks;
|
||
343 | } |
||
344 | |||
345 | /**
|
||
346 | * @param noLinks
|
||
347 | * The noLinks to set.
|
||
348 | */
|
||
349 | public void setNoLinks(boolean noLinks) { |
||
350 | this.noLinks = noLinks;
|
||
351 | } |
||
352 | |||
353 | /**
|
||
354 | * @return Returns the numReactors.
|
||
355 | */
|
||
356 | public int getNumReactors() { |
||
357 | return numReactors;
|
||
358 | } |
||
359 | |||
360 | /**
|
||
361 | * @param numReactors
|
||
362 | * The numReactors to set.
|
||
363 | */
|
||
364 | public void setNumReactors(int numReactors) { |
||
365 | this.numReactors = numReactors;
|
||
366 | } |
||
367 | |||
368 | /**
|
||
369 | * @return Returns the type.
|
||
370 | */
|
||
371 | public int getType() { |
||
372 | return type;
|
||
373 | } |
||
374 | |||
375 | /**
|
||
376 | * @param type
|
||
377 | * The type to set.
|
||
378 | */
|
||
379 | public void setType(int type) { |
||
380 | this.type = type;
|
||
381 | } |
||
382 | |||
383 | /**
|
||
384 | * @return Returns the linetypeFlags.
|
||
385 | */
|
||
386 | public int getLinetypeFlags() { |
||
387 | return linetypeFlags;
|
||
388 | } |
||
389 | |||
390 | /**
|
||
391 | * @return Returns the plotstyleFlags.
|
||
392 | */
|
||
393 | public int getPlotstyleFlags() { |
||
394 | return plotstyleFlags;
|
||
395 | } |
||
396 | |||
397 | /**
|
||
398 | * @param version
|
||
399 | * The version to set.
|
||
400 | */
|
||
401 | public void setVersion(String version) { |
||
402 | this.version = version;
|
||
403 | } |
||
404 | |||
405 | /**
|
||
406 | * @return Returns the graphicsFlag.
|
||
407 | */
|
||
408 | public boolean isGraphicsFlag() { |
||
409 | return graphicsFlag;
|
||
410 | } |
||
411 | |||
412 | /**
|
||
413 | * @param graphicsFlag
|
||
414 | * The graphicsFlag to set.
|
||
415 | */
|
||
416 | public void setGraphicsFlag(boolean graphicsFlag) { |
||
417 | this.graphicsFlag = graphicsFlag;
|
||
418 | } |
||
419 | |||
420 | /*
|
||
421 | * This property exists in 13-14 versions, but not in 2000 version
|
||
422 | */
|
||
423 | 10024 | fdiaz | private boolean lyrByLineType = false; |
424 | 9910 | azabala | |
425 | public void setLyrByLineType(boolean lyrByLineType) { |
||
426 | this.lyrByLineType = lyrByLineType;
|
||
427 | } |
||
428 | |||
429 | public boolean isLyrByLineType() { |
||
430 | return lyrByLineType;
|
||
431 | } |
||
432 | |||
433 | 10014 | fdiaz | public void setPlotStyleHandle(DwgHandleReference hr) { |
434 | this.plotStyleHandle = hr;
|
||
435 | |||
436 | } |
||
437 | |||
438 | public boolean hasPlotStyleHandle() { |
||
439 | return this.plotStyleHandle != null; |
||
440 | } |
||
441 | |||
442 | 9910 | azabala | /*
|
443 | * Esto solo se usa para la version 13-14
|
||
444 | */
|
||
445 | 10024 | fdiaz | private DwgHandleReference lineTypeHandle = null; |
446 | 9910 | azabala | |
447 | /**
|
||
448 | * Sets the handle of the line type of this drawing entity.
|
||
449 | *
|
||
450 | * TODO Ver si conviene guardar tambien el handleCode de este handle
|
||
451 | *
|
||
452 | * @param handle2
|
||
453 | */
|
||
454 | 10014 | fdiaz | public void setLineTypeHandle(DwgHandleReference hr) { |
455 | this.lineTypeHandle = hr;
|
||
456 | 9910 | azabala | |
457 | } |
||
458 | 10024 | fdiaz | |
459 | public DwgHandleReference getLineTypeHandle() {
|
||
460 | return this.lineTypeHandle; |
||
461 | } |
||
462 | 10014 | fdiaz | |
463 | public boolean hasLineTypeHandle() { |
||
464 | return this.lineTypeHandle != null; |
||
465 | } |
||
466 | |||
467 | 10111 | fdiaz | public DwgObject getSuperEntity() {
|
468 | if(this.hasSubEntityHandle()){ |
||
469 | int handleCode = this.subEntityHandle.getCode(); |
||
470 | int offset = this.subEntityHandle.getOffset(); |
||
471 | int handle = -1; |
||
472 | |||
473 | DwgObject object; |
||
474 | 10014 | fdiaz | |
475 | 10111 | fdiaz | switch(handleCode){
|
476 | 10173 | fdiaz | // TODO: case 0x2:
|
477 | // TODO: case 0x3:
|
||
478 | 10144 | fdiaz | case 0x4: |
479 | 10111 | fdiaz | case 0x5: |
480 | handle = offset; |
||
481 | break;
|
||
482 | 10173 | fdiaz | // TODO: case 0x6:
|
483 | 10144 | fdiaz | case 0x8: |
484 | handle=this.getHandle().getOffset() - 1; |
||
485 | break;
|
||
486 | case 0xA: |
||
487 | handle = this.getHandle().getOffset() + offset;
|
||
488 | break;
|
||
489 | 10111 | fdiaz | case 0xC: |
490 | 10144 | fdiaz | handle = this.getHandle().getOffset() - offset;
|
491 | 10111 | fdiaz | break;
|
492 | default:
|
||
493 | 10173 | fdiaz | System.out.println ("DwgObject.getDwgSuperEntity: handleCode "+handleCode+" no implementado. offset = "+offset); |
494 | 10111 | fdiaz | } |
495 | if(handle != -1){ |
||
496 | 10240 | azabala | /*
|
497 | 10111 | fdiaz | LinkedList objects = this.dwgFile.getDwgObjects();
|
498 | Iterator objsIterator = objects.iterator();
|
||
499 | while(objsIterator.hasNext()){
|
||
500 | object = (DwgObject) objsIterator.next();
|
||
501 | int objHdl = object.getHandle().getOffset();
|
||
502 | if (objHdl == handle){
|
||
503 | return object;
|
||
504 | }
|
||
505 | }
|
||
506 | 10240 | azabala | */
|
507 | object = dwgFile.getDwgObjectFromHandle(handle); |
||
508 | if(object != null) |
||
509 | return object;
|
||
510 | 10111 | fdiaz | } |
511 | System.out.println(" NO SE HA ENCONTRADO UN OBJETO CON HANDLE " + handle + ". handleCode = " + handleCode + " dwgObject.index = "+this.index +" dwgObject.type = " + this.type + " dwgObjectClassName = "+ this.getClass().getName()); |
||
512 | } |
||
513 | return null; |
||
514 | } |
||
515 | |||
516 | public void setDwgFile(DwgFile dwgFile){ |
||
517 | this.dwgFile = dwgFile;
|
||
518 | } |
||
519 | |||
520 | public DwgFile getDwgFile(){
|
||
521 | return this.dwgFile; |
||
522 | } |
||
523 | 10173 | fdiaz | |
524 | public Object clone(){ |
||
525 | DwgObject obj = new DwgObject(this.index); |
||
526 | this.fill(obj);
|
||
527 | return obj;
|
||
528 | } |
||
529 | |||
530 | protected void fill(DwgObject obj){ |
||
531 | |||
532 | obj.setColor(color); |
||
533 | obj.setDwgFile(dwgFile); //Tal vez vaya fuera
|
||
534 | obj.setExtendedData(extendedData); |
||
535 | obj.setGraphicData(graphicData); |
||
536 | obj.setGraphicsFlag(graphicsFlag); |
||
537 | obj.setHandle(handle); |
||
538 | obj.setLayerHandle(layerHandle); |
||
539 | obj.setLinetypeFlags(linetypeFlags); |
||
540 | obj.setLineTypeHandle(lineTypeHandle); |
||
541 | obj.setLyrByLineType(lyrByLineType); |
||
542 | obj.setMode(mode); |
||
543 | obj.setNextHandle(nextHandle); |
||
544 | obj.setNoLinks(noLinks); |
||
545 | obj.setNumReactors(numReactors); |
||
546 | obj.setPlotstyleFlags(plotstyleFlags); |
||
547 | obj.setPlotStyleHandle(plotStyleHandle); |
||
548 | obj.setPreviousHandle(previousHandle); |
||
549 | obj.setSizeInBits(sizeInBits); |
||
550 | obj.setSubEntityHandle(subEntityHandle); |
||
551 | obj.setType(type); |
||
552 | obj.setVersion(version); |
||
553 | obj.setXDicObjHandle(xDicObjHandle); |
||
554 | |||
555 | } |
||
556 | 9910 | azabala | } |