Revision 96

View differences:

tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/test/java/org/gvsig/dwg/lib/DwgTestSuite.java
1
/*
2
 * Created on 08-feb-2007
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: DwgTestSuite.java 28970 2009-05-25 13:27:14Z jmvivo $
47
* $Log$
48
* Revision 1.1.2.1  2007-02-28 07:35:10  jmvivo
49
* Actualizado desde el HEAD.
50
*
51
* Revision 1.1  2007/02/08 20:27:57  azabala
52
* *** empty log message ***
53
*
54
*
55
*/
56
package org.gvsig.dwg.lib;
57

  
58
import junit.framework.Test;
59
import junit.framework.TestSuite;
60

  
61
public class DwgTestSuite {
62

  
63
	public static Test suite() {
64
		TestSuite suite = new TestSuite("Test for com.iver.cit.jdwglib.dwg");
65
		//$JUnit-BEGIN$
66
		suite.addTestSuite(DwgFileTest.class);
67
		//$JUnit-END$
68
		return suite;
69
	}
70

  
71
}
72

  
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/test/java/org/gvsig/dwg/lib/DwgFileTest.java
1
package org.gvsig.dwg.lib;
2

  
3
import java.io.File;
4
import java.io.IOException;
5
import java.net.URL;
6

  
7
import junit.framework.TestCase;
8

  
9
public class DwgFileTest extends TestCase {
10
	private File baseDataPath;
11

  
12
	protected void setUp() throws Exception {
13
		super.setUp();
14
		URL url = this.getClass().getResource("data");
15
		if (url == null) {
16
			throw new Exception("Can't find 'data' dir");
17
		}
18

  
19
		baseDataPath = new File(url.getFile());
20
		if (!baseDataPath.exists()) {
21
			throw new Exception("Can't find 'data' dir");
22
		}
23

  
24
	}
25

  
26
	protected void tearDown() throws Exception {
27
		super.tearDown();
28
	}
29
	public void test1() throws IOException, DwgVersionNotSupportedException {
30
//		String fileName = baseDataPath.getAbsolutePath()+"/Un punto.dwg";
31
//		DwgFile dwg = new DwgFile(fileName);
32
//
33
//		dwg.read();
34
//		dwg.calculateGisModelDwgPolylines();
35
//		dwg.blockManagement();
36
//		LinkedList dwgObjects = dwg.getDwgObjects();
37
	}
38

  
39
	public void test2() throws RuntimeException, CorruptedDwgEntityException{
40
        //Dwg Object that is supposed to be
41
        //an LWPOLYLINE in V14 version
42
		/*
43
        int[] data = new int[]{61,64,64,183,19,227,104,16
44
                            ,0,5,8,59,72,32,252,47,90,142,
45
                            234,145,50,10,71,11,213,36,229,
46
                            162,130,10,228,126,23,174,130,
47
                            145,50,15,98,141,196,244,229,
48
                            162,130,12,126,23,169,66,58,
49
                            145,50,12,47,90,138,68,229,
50
                            162,130,8,0,0,4,7,74,137,50,
51
                            15,177,66,231,252,221,162,130,
52
                            9,130,151,21,242,151,21,190,
53
                            8,21,8,56};
54
         */
55
//		int[] data = new int[]{62,128,64,71,99,
56
//							   40,48,0,5,8,27,72,
57
//							   100,126,23,169,68,
58
//							   178,105,50,13,114,
59
//							   63,11,82,165,162,130,
60
//							   13,114,63,11,210,138,
61
//							   105,50,8,173,114,59,
62
//							   138,205,162,130,15,98,
63
//							   141,192,241,58,105,50,
64
//							   11,51,51,52,178,229,162,
65
//							   130,14,110,102,98,97,234,
66
//							   105,50,11,51,51,52,179,21,
67
//							   162,130,10,149,192,240,42,
68
//							   162,105,50,14,189,27,131,
69
//							   107,69,162,130,14,31,169,
70
//							   66,227,74,105,50,9,240,86,
71
//							   185,27,117,162,130,11,59,
72
//							   51,51,52,234,105,50,13,114,
73
//							   63,11,83,85,162,130,9,74,228,
74
//							   126,22,186,105,50,11,51,51,50,
75
//							   51,53,162,130,11,137,232,82,190,
76
//							   58,105,50,9,74,228,122,147,13,162,
77
//							   130,11,137,232,82,189,106,105,50,9,
78
//							   74,228,122,146,213,162,130,9,74,228,122,20,202,105,50,12,126,23,171,194,173,162,130,12,126,23,169,68,178,105,50,13,114,63,11,82,165,162,130,9,130,151,22,10,136,182,8,21,8,120};
79
//        //1er intento: suponemos que la LWPOLYLINE cumple la especificaci?n
80
//        //a rajatabla
81
//        int bitPos = 0;
82
//        List val = DwgUtil.getBitShort(data, bitPos);
83
//        bitPos = ((Integer) val.get(0)).intValue();
84
//        int type = ((Integer) val.get(1)).intValue();
85
//        System.out.println("type = " + type);
86
//
87
//        DwgHandleReference hr = new DwgHandleReference();
88
//        bitPos = hr.read(data, bitPos);
89
//        System.out.println("handle, code="+
90
//                    hr.getCode()+
91
//                    " ,offset="+
92
//                    hr.getOffset());
93
//
94
//        //Ahora pasamos a la extended data
95
//        val = DwgUtil.getBitShort(data, bitPos);
96
//        bitPos = ((Integer) val.get(0)).intValue();
97
//        int extendedDataSize = ((Integer) val.get(1)).intValue();
98
//        System.out.println("EED size="+extendedDataSize);
99
//        //como el size es 0, me lo salto
100
//
101
//        //ver si tiene datos graficos
102
//        val = DwgUtil.testBit(data, bitPos);
103
//        bitPos = ((Integer) val.get(0)).intValue();
104
//        boolean hasGraphicsData = ((Boolean) val.get(1))
105
//                .booleanValue();
106
//        System.out.println("graphics = "+hasGraphicsData);
107
//
108
//        //como se que no hay graphics me lo salto
109
//        //tama?o en bits
110
//        val = DwgUtil.getRawLong(data, bitPos);
111
//        bitPos = ((Integer) val.get(0)).intValue();
112
//        int sizeInBits = ((Integer) val.get(1)).intValue();
113
//        System.out.println("sizeInBits = "+sizeInBits);
114
//
115
//        /*
116
//         * Ahora, lo que viene es lo que en la spec se dice
117
//         * "Common entity data". Revisar bien pues PythonCAD no lo lee
118
//         * como en la spec.
119
//         *
120
//         * pag 42.
121
//          R13-R14 Only:
122
//          	RL	:	Size of object data in bits
123
//          	6B	:	Flags (FEDCBA)
124
//          	6B	:	Common parameters (CCSSII)
125
//          	Segun esto, deberia leer 6 bits y 6 bits
126
//
127
//          	FLAGS
128
//	      	Mas adelante (pag 43), dice:
129
//	      	DC	:	This is the number of reactors attached to an
130
//	      	entity as a bitshort.
131
//	      	This feature may have been dormant in R13,
132
//	      	but it appears in R14, and in files saved as R13 by R14.
133
//
134
//	      	Ahora bien, pythoncad las est? leyendo como bitLong
135
//          	?En que quedamos, son 2 bits, 1 bitLong o 1 bitShort?
136
//          	TODO REVISAR
137
//
138
//          	COMMON PARAMETERS
139
//          	Al principio, dice que son 6 bits (CC, SS, II)
140
//          	pero luego dice (pag 43):
141
//          	CC	:	Color bitshort
142
//          	SS	:	Linetype scale bitdouble
143
//          	II	:	"Invisible" flag bitshort
144
//
145
//			Pythoncad, en vez de como 2 bits, los est? leyendo
146
//			como BitShort, BitDouble y BitShort
147
//
148
//         * */
149
//
150
//        Integer mode = (Integer) DwgUtil.getBits(data, 2, bitPos);
151
//		bitPos += 2;
152
//		System.out.println("mode = "+mode);
153
//
154
//	/*
155
//		val = DwgUtil.getBitLong(data, bitPos);
156
//		bitPos = ((Integer) val.get(0)).intValue();
157
//		int rnum = ((Integer) val.get(1)).intValue();
158
//		System.out.println("numReactors = "+rnum);
159
//*/
160
//		val = DwgUtil.getBitShort(data, bitPos);
161
//		bitPos = ((Integer) val.get(0)).intValue();
162
//		int rnum = ((Integer) val.get(1)).intValue();
163
//		System.out.println("numReactors = "+rnum);
164
//
165
//
166
//		val = DwgUtil.testBit(data, bitPos);
167
//		bitPos = ((Integer) val.get(0)).intValue();
168
//		boolean isLyrByLineType = ((Boolean) val.get(1)).booleanValue();
169
//		System.out.println("isLyrByLineType="+isLyrByLineType);
170
//
171
//		val = DwgUtil.testBit(data, bitPos);
172
//		bitPos = ((Integer) val.get(0)).intValue();
173
//		boolean noLinks = ((Boolean) val.get(1)).booleanValue();
174
//		System.out.println("noLinks="+noLinks);
175
//
176
//
177
//		val = DwgUtil.getBitShort(data, bitPos);
178
//		bitPos = ((Integer) val.get(0)).intValue();
179
//		int color = ((Integer) val.get(1)).intValue();
180
//		System.out.println("color="+color);
181
//
182
//
183
//		val = DwgUtil.getBitDouble(data, bitPos);
184
//		bitPos = ((Integer) val.get(0)).intValue();
185
//		float ltscale = ((Double) val.get(1)).floatValue();
186
//		System.out.println("ltscale="+ltscale);
187
//
188
//		val = DwgUtil.getBitShort(data, bitPos);
189
//		bitPos = ((Integer) val.get(0)).intValue();
190
//		int invis = ((Integer) val.get(1)).intValue();
191
//		System.out.println("invis="+invis);
192
//
193
//		val = DwgUtil.getBitShort(data, bitPos);
194
//		bitPos = ((Integer) val.get(0)).intValue();
195
//		int flag = ((Integer) val.get(1)).intValue();
196
//		System.out.println("flag="+flag);
197
//
198
//		double dVal = 0d;
199
//		if((flag & 0x4) > 0){
200
//			val = DwgUtil.getBitDouble(data, bitPos);
201
//			bitPos = ((Integer) val.get(0)).intValue();
202
//			dVal = ((Double) val.get(1)).doubleValue();
203
//		}
204
//		System.out.println("constWidth="+dVal);
205
//
206
//		dVal = 0d;
207
//		if((flag & 0x8) > 0){
208
//			val = DwgUtil.getBitDouble(data, bitPos);
209
//			bitPos = ((Integer) val.get(0)).intValue();
210
//			dVal = ((Double) val.get(1)).doubleValue();
211
//		}
212
//		System.out.println("elevation="+dVal);
213
//
214
//		dVal = 0d;
215
//		if ((flag & 0x2) > 0){
216
//			val = DwgUtil.getBitDouble(data, bitPos);
217
//			bitPos = ((Integer) val.get(0)).intValue();
218
//			dVal = ((Double) val.get(1)).doubleValue();
219
//		}
220
//		System.out.println("thickness="+dVal);
221
//
222
//		double x, y, z ;
223
//		x = 0d;
224
//		y = 0d;
225
//		z = 0d;
226
//
227
//		if ((flag & 0x1) > 0){
228
//			val = DwgUtil.getBitDouble(data, bitPos);
229
//			bitPos = ((Integer) val.get(0)).intValue();
230
//			x = ((Double) val.get(1)).doubleValue();
231
//
232
//			val = DwgUtil.getBitDouble(data, bitPos);
233
//			bitPos = ((Integer) val.get(0)).intValue();
234
//			y = ((Double) val.get(1)).doubleValue();
235
//
236
//			val = DwgUtil.getBitDouble(data, bitPos);
237
//			bitPos = ((Integer) val.get(0)).intValue();
238
//			z = ((Double) val.get(1)).doubleValue();
239
//		}
240
//		System.out.println("normal="+x+","+y+","+z);
241
//
242
//		val = DwgUtil.getBitLong(data, bitPos);
243
//		bitPos = ((Integer) val.get(0)).intValue();
244
//		int np = ((Integer) val.get(1)).intValue();
245
//		System.out.println("numPoints="+np);
246
//
247
//		int nb = 0;
248
//		if((flag & 0x10) > 0){
249
//			val = DwgUtil.getBitLong(data, bitPos);
250
//			bitPos = ((Integer) val.get(0)).intValue();
251
//			nb = ((Integer) val.get(1)).intValue();
252
//		}
253
//		System.out.println("numBulges="+nb);
254
//		int nw = 0;
255
//		if((flag & 0x20) > 0){
256
//			val = DwgUtil.getBitLong(data, bitPos);
257
//			bitPos = ((Integer) val.get(0)).intValue();
258
//			nw = ((Integer) val.get(1)).intValue();
259
//		}
260
//		System.out.println("numWidths="+nw);
261
//		if(np > 0){
262
//			Point2D[] points = new Point2D[np];
263
//			for(int i = 0; i < np; i++){
264
//				val = DwgUtil.getRawDouble(data, bitPos);
265
//				bitPos = ((Integer) val.get(0)).intValue();
266
//				x = ((Double) val.get(1)).doubleValue();
267
//
268
//				val = DwgUtil.getRawDouble(data, bitPos);
269
//				bitPos = ((Integer) val.get(0)).intValue();
270
//				y = ((Double) val.get(1)).doubleValue();
271
//
272
//				points[i] = new Point2D.Double(x, y);
273
//				System.out.println("Punto"+i+"="+x+","+y);
274
//			}//for
275
//		}//if np
276
//
277
//		if(nb > 0){
278
//			double[] bulges = new double[nb];
279
//			for(int i = 0; i < nb; i++){
280
//				val = DwgUtil.getRawDouble(data, bitPos);
281
//				bitPos = ((Integer) val.get(0)).intValue();
282
//				bulges[i] = ((Double) val.get(1)).doubleValue();
283
//				System.out.println("Bulge"+i+"="+bulges[i]);
284
//			}//for
285
//
286
//		}//if nb
287
//
288
//		if(nw > 0){
289
//			double[][] widths = new double[nw][2];
290
//			for(int i = 0; i < nw; i++){
291
//				val = DwgUtil.getBitDouble(data, bitPos);
292
//				bitPos = ((Integer) val.get(0)).intValue();
293
//				double sw = ((Double) val.get(1)).doubleValue();
294
//
295
//				val = DwgUtil.getBitDouble(data, bitPos);
296
//				bitPos = ((Integer) val.get(0)).intValue();
297
//				double ew = ((Double) val.get(1)).doubleValue();
298
//
299
//				widths[i][0] = sw;
300
//				widths[i][1] = ew;
301
//				System.out.println("Width"+i+"="+sw+","+ew);
302
//			}//for
303
//		}
304
     }
305

  
306
	public void test3(){
307
		//test of extrusion
308
		double[] coord = null;
309
		double[] extrusion = null;
310
		double[] extrusion2 = new double[]{0, 0, 1};
311

  
312
		coord = new double[]{790089.65, 4477974.75, 9.560000000114087};
313
		extrusion = new double[]{-0.5037965987025721, 0.07005064807841195, 0.8609772899673451};
314
		//1. algoritmo original, vector normal distinto
315
//		double[] newCoord = AcadExtrusionCalculator.extrude(coord, extrusion);
316
//		newCoord = AcadExtrusionCalculator.extrude3(coord, extrusion);
317
//
318
		//2? ahora con vector normal coincidente con eje Z
319
//		newCoord = AcadExtrusionCalculator.extrude(coord, extrusion2);
320
//		newCoord = AcadExtrusionCalculator.extrude3(coord, extrusion2);
321
	}
322
}
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/DwgObjectFactory.java
1
/*
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: DwgObjectFactory.java 28969 2009-05-25 13:23:12Z jmvivo $
47
 * $Log$
48
 * Revision 1.14.2.2  2007-03-21 19:49:16  azabala
49
 * implementation of dwg 12, 13, 14.
50
 *
51
 * Revision 1.18  2007/03/20 19:55:27  azabala
52
 * source code cleaning
53
 *
54
 * Revision 1.17  2007/03/06 19:39:38  azabala
55
 * Changes to adapt dwg 12 to general architecture
56
 *
57
 * Revision 1.16  2007/03/02 20:31:22  azabala
58
 * *** empty log message ***
59
 *
60
 * Revision 1.15  2007/03/01 19:59:46  azabala
61
 * source code cleaning
62
 *
63
 * Revision 1.14  2007/02/22 20:45:51  azabala
64
 * changes to add dwg 12 entities creation
65
 *
66
 * Revision 1.13  2007/02/14 09:20:32  fdiaz
67
 * 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
 * solved bug with lwpolylines
71
 *
72
 * Revision 1.11  2007/02/08 10:27:35  azabala
73
 * if the type is unknown it returns NULL
74
 *
75
 * Revision 1.10  2007/02/06 20:17:29  azabala
76
 * *** empty log message ***
77
 *
78
 * Revision 1.9  2007/02/02 12:39:52  azabala
79
 * Added new dwg entities
80
 *
81
 * Revision 1.8  2007/02/01 20:00:27  azabala
82
 * *** empty log message ***
83
 *
84
 * Revision 1.7  2007/01/31 18:20:58  fdiaz
85
 * 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
 * A๏ฟฝadido el DwgDictionary.
89
 *
90
 * Revision 1.5  2007/01/30 19:40:23  azabala
91
 * *** empty log message ***
92
 *
93
 * Revision 1.4  2007/01/30 12:37:18  azabala
94
 * *** empty log message ***
95
 *
96
 * Revision 1.3  2007/01/24 20:14:31  azabala
97
 * implementation of reader of V14
98
 *
99
 * Revision 1.2  2007/01/12 19:35:00  azabala
100
 * *** empty log message ***
101
 *
102
 * Revision 1.1  2007/01/09 15:39:15  azabala
103
 * *** empty log message ***
104
 *
105
 *
106
 */
107
package org.gvsig.dwg.lib;
108

  
109
import org.gvsig.dwg.lib.objects.DwgArc;
110
import org.gvsig.dwg.lib.objects.DwgAttdef;
111
import org.gvsig.dwg.lib.objects.DwgAttrib;
112
import org.gvsig.dwg.lib.objects.DwgBlock;
113
import org.gvsig.dwg.lib.objects.DwgBlockControl;
114
import org.gvsig.dwg.lib.objects.DwgBlockHeader;
115
import org.gvsig.dwg.lib.objects.DwgCircle;
116
import org.gvsig.dwg.lib.objects.DwgDictionary;
117
import org.gvsig.dwg.lib.objects.DwgDictionaryVar;
118
import org.gvsig.dwg.lib.objects.DwgDimOrd;
119
import org.gvsig.dwg.lib.objects.DwgEllipse;
120
import org.gvsig.dwg.lib.objects.DwgEndblk;
121
import org.gvsig.dwg.lib.objects.DwgFace3D;
122
import org.gvsig.dwg.lib.objects.DwgHatch;
123
import org.gvsig.dwg.lib.objects.DwgIdBuffer;
124
import org.gvsig.dwg.lib.objects.DwgImage;
125
import org.gvsig.dwg.lib.objects.DwgImageDef;
126
import org.gvsig.dwg.lib.objects.DwgImageDefReactor;
127
import org.gvsig.dwg.lib.objects.DwgInsert;
128
import org.gvsig.dwg.lib.objects.DwgLayer;
129
import org.gvsig.dwg.lib.objects.DwgLayerControl;
130
import org.gvsig.dwg.lib.objects.DwgLayerIndex;
131
import org.gvsig.dwg.lib.objects.DwgLine;
132
import org.gvsig.dwg.lib.objects.DwgLwPolyline;
133
import org.gvsig.dwg.lib.objects.DwgMText;
134
import org.gvsig.dwg.lib.objects.DwgMeshPolyline;
135
import org.gvsig.dwg.lib.objects.DwgOle2Frame;
136
import org.gvsig.dwg.lib.objects.DwgPFacePolyline;
137
import org.gvsig.dwg.lib.objects.DwgPoint;
138
import org.gvsig.dwg.lib.objects.DwgPolyline2D;
139
import org.gvsig.dwg.lib.objects.DwgPolyline3D;
140
import org.gvsig.dwg.lib.objects.DwgRasterVariables;
141
import org.gvsig.dwg.lib.objects.DwgSeqend;
142
import org.gvsig.dwg.lib.objects.DwgSolid;
143
import org.gvsig.dwg.lib.objects.DwgSortEntStable;
144
import org.gvsig.dwg.lib.objects.DwgSpatialFilter;
145
import org.gvsig.dwg.lib.objects.DwgSpatialIndex;
146
import org.gvsig.dwg.lib.objects.DwgSpline;
147
import org.gvsig.dwg.lib.objects.DwgText;
148
import org.gvsig.dwg.lib.objects.DwgVertex2D;
149
import org.gvsig.dwg.lib.objects.DwgVertex3D;
150
import org.gvsig.dwg.lib.objects.DwgVertexMesh;
151
import org.gvsig.dwg.lib.objects.DwgVertexPFace;
152
import org.gvsig.dwg.lib.objects.DwgVertexPFaceFace;
153
import org.gvsig.dwg.lib.objects.DwgXRecord;
154

  
155

  
156
/**
157
 * Factory that creates dwg entities from its code (int value).
158
 * 
159
 * 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
 * It's a singleton
165
 *  
166
 */
167
public class DwgObjectFactory {
168

  
169
	private static DwgObjectFactory _instance = new DwgObjectFactory();
170

  
171
	private DwgObjectFactory() {
172
	}
173
	
174
	/*
175
	 * Constants to represent polyline2d, polyline3d,
176
	 * vertex2d and vertex3d.
177
	 * */
178
//	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

  
183
	public static final DwgObjectFactory getInstance() {
184
		return _instance;
185
	}
186

  
187
	
188
	/**
189
	 * Creates a Dwg object instance from its type.
190
	 * 
191
	 * This method is used for DWG 13, 14, 2000 and 2004 files.
192
	 * 
193
	 * */
194
	public DwgObject create(int type, int index) {
195
		DwgObject obj = null;
196

  
197
		 if (type == 0x1) {
198
			obj = new DwgText(index);
199
			obj.setGraphicsFlag(true);
200
		} else if (type == 0x2) {
201
			obj = new DwgAttrib(index);
202
			obj.setGraphicsFlag(true);
203
		} else if (type == 0x3) {
204
			obj = new DwgAttdef(index);
205
			obj.setGraphicsFlag(true);
206
		} else if (type == 0x4) {
207
			obj = new DwgBlock(index);
208
			obj.setGraphicsFlag(true);
209
		} else if (type == 0x5) {
210
			obj = new DwgEndblk(index);
211
			obj.setGraphicsFlag(true);
212
		} else if (type == 0x6) {
213
			obj = new DwgSeqend(index);
214
			obj.setGraphicsFlag(true);
215
		} else if (type == 0x7) {
216
			obj = new DwgInsert(index);
217
			obj.setGraphicsFlag(true);
218
		} else if (type == 0x0A) {
219
			obj = new DwgVertex2D(index);
220
			obj.setGraphicsFlag(true);
221
		} else if (type == 0x0B) {
222
			obj = new DwgVertex3D(index);
223
			obj.setGraphicsFlag(true);
224
		} else if (type == 0x0C) {
225
			obj = new DwgVertexMesh(index);
226
			obj.setGraphicsFlag(true);
227
		} else if (type == 0x0D) {
228
			obj = new DwgVertexPFace(index);
229
			obj.setGraphicsFlag(true);
230
		} else if (type == 0x0E) {
231
			obj = new DwgVertexPFaceFace(index);
232
			obj.setGraphicsFlag(true);
233
		} else if (type == 0x0F) {
234
			obj = new DwgPolyline2D(index);
235
			obj.setGraphicsFlag(true);
236
		} else if (type == 0x10) {
237
			obj = new DwgPolyline3D(index);
238
			obj.setGraphicsFlag(true);
239
		} else if (type == 0x11) {
240
			obj = new DwgArc(index);
241
			obj.setGraphicsFlag(true);
242
		} else if (type == 0x12) {
243
			obj = new DwgCircle(index);
244
			obj.setGraphicsFlag(true);
245
		} else if (type == 0x13) {
246
			obj = new DwgLine(index);
247
			obj.setGraphicsFlag(true);
248
		}  else if (type == 0x1B) {
249
			obj = new DwgPoint(index);
250
			obj.setGraphicsFlag(true);
251
		} else if (type == 0x1D) {
252
			obj = new DwgPFacePolyline(index);
253
			obj.setGraphicsFlag(true);
254
		} else if (type == 0x1E) {
255
			obj = new DwgMeshPolyline(index);
256
			obj.setGraphicsFlag(true);
257
		} else if (type == 0x23) {
258
			obj = new DwgEllipse(index);
259
			obj.setGraphicsFlag(true);
260
		} else if (type == 0x24) {
261
			obj = new DwgSpline(index);
262
			obj.setGraphicsFlag(true);
263
		} else if (type == 0x2A) {
264
			obj = new DwgDictionary(index);
265
			obj.setGraphicsFlag(false);
266
		} else if (type == 0x2C) {
267
			obj = new DwgMText(index);
268
			obj.setGraphicsFlag(true);
269
		} else if (type == 0x30) {
270
			obj = new DwgBlockControl(index);
271
			obj.setGraphicsFlag(false);
272
		} else if (type == 0x31) {
273
			obj = new DwgBlockHeader(index);
274
			obj.setGraphicsFlag(false);
275
		} else if (type == 0x32) {
276
			obj = new DwgLayerControl(index);
277
			obj.setGraphicsFlag(false);
278
		} else if (type == 0x33) {
279
			obj = new DwgLayer(index);
280
			obj.setGraphicsFlag(false);
281
		} else if (type == 0x4D) {
282
			obj = new DwgLwPolyline(index);
283
			obj.setGraphicsFlag(true);
284
		} else if (type == 0x1F) {
285
			obj = new DwgSolid(index);
286
			obj.setGraphicsFlag(true);
287
		} 
288
		
289
//		else if (type == 0x15) {
290
//			obj = new DwgLinearDimension(index);
291
//			obj.setGraphicsFlag(true);
292
//		} 
293
		/*
294
		 * Segun los foros de OpenDWG:
295
		 * OLE2FRAME - 74 -> 0X4A
296
		   LWPOLYLINE - 77 -> 0X4D 
297
		   HATCH - 78 -> 0X4E
298
		 * 
299
		 * 
300
		 * */
301
		
302
		
303
		/*
304
		else if (type == 0x4A){
305
			obj = new DwgOle2Frame(index);
306
			obj.setGraphicsFlag(false);
307
		}
308
		
309
		
310
		else if (type == 0x4E){
311
			obj = new DwgHatch(index);
312
			obj.setGraphicsFlag(true);
313
		}
314
		
315
		else if (type == 0x4E) {
316
			obj = new DwgLwPolyline(index);
317
			obj.setGraphicsFlag(true);
318
		} else if (type == 0x4F) {
319
			obj = new DwgLwPolyline(index);
320
			obj.setGraphicsFlag(true);
321
		} else if (type == 0x50) {
322
			obj = new DwgLwPolyline(index);
323
			obj.setGraphicsFlag(true);
324
		} else if (type == 0x51) {
325
			obj = new DwgLwPolyline(index);
326
			obj.setGraphicsFlag(true);
327
		} else if (type == 0x52) {
328
			obj = new DwgLwPolyline(index);
329
			obj.setGraphicsFlag(true);
330
		} else if (type == 0x53) {
331
			obj = new DwgLwPolyline(index);
332
			obj.setGraphicsFlag(true);
333
		} 
334
		*/
335
		
336
		else {
337
//			obj = new DwgObject(index);
338
			return null;
339
		}
340
		obj.setType(type);
341
		return obj;
342
	}
343

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

  
7
import java.awt.geom.Point2D;
8
import java.util.ArrayList;
9

  
10
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
11
import org.gvsig.dwg.lib.DwgHandleReference;
12
import org.gvsig.dwg.lib.DwgObject;
13
import org.gvsig.dwg.lib.DwgUtil;
14
import org.gvsig.dwg.lib.objects.DwgAttdef;
15

  
16

  
17
/**
18
 * @author alzabord
19
 *
20
 * TODO To change the template for this generated type comment go to
21
 * Window - Preferences - Java - Code Style - Code Templates
22
 */
23
public class DwgAttdefReader15 extends AbstractDwg15Reader{
24

  
25
	/* (non-Javadoc)
26
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
27
	 */
28
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
29
			if(!(dwgObj instanceof DwgAttdef))
30
				throw new RuntimeException("AttdefReader 15 solo lee Attdef");
31
			DwgAttdef att = (DwgAttdef) dwgObj;
32
			int bitPos = offset;
33
			bitPos = headTailReader.readObjectHeader(data, bitPos, att);
34
			ArrayList v = DwgUtil.getRawChar(data, bitPos);
35
			bitPos = ((Integer)v.get(0)).intValue();
36
			int dflag = ((Integer)v.get(1)).intValue();
37
			att.setDataFlag(dflag);
38
			if ((dflag & 0x1)==0) {
39
				v = DwgUtil.getRawDouble(data, bitPos);
40
				bitPos = ((Integer)v.get(0)).intValue();
41
				double elev = ((Double)v.get(1)).doubleValue();
42
				att.setElevation(elev);
43
			}
44
			v = DwgUtil.getRawDouble(data, bitPos);
45
			bitPos = ((Integer)v.get(0)).intValue();
46
			double x1 = ((Double)v.get(1)).doubleValue();
47
			v = DwgUtil.getRawDouble(data, bitPos);
48
			bitPos = ((Integer)v.get(0)).intValue();
49
			double y1 = ((Double)v.get(1)).doubleValue();
50
			att.setInsertionPoint(new Point2D.Double(x1, y1));
51
			double x=0, y=0, z=0;
52
			if ((dflag & 0x2)==0) {
53
				v = DwgUtil.getDefaultDouble(data, bitPos, x1);
54
				bitPos = ((Integer)v.get(0)).intValue();
55
				x = ((Double)v.get(1)).doubleValue();
56
				v = DwgUtil.getDefaultDouble(data, bitPos, y1);
57
				bitPos = ((Integer)v.get(0)).intValue();
58
				y = ((Double)v.get(1)).doubleValue();
59
			}
60
			att.setAlignmentPoint(new Point2D.Double(x, y));
61
			v = DwgUtil.testBit(data, bitPos);
62
			bitPos = ((Integer)v.get(0)).intValue();
63
			boolean flag = ((Boolean)v.get(1)).booleanValue();
64
			if (flag) {
65
				y = 0.0;
66
				x = y;
67
				z = 1.0;
68
			} else {
69
				v = DwgUtil.getBitDouble(data, bitPos);
70
				bitPos = ((Integer)v.get(0)).intValue();
71
				x = ((Double)v.get(1)).doubleValue();
72
				v = DwgUtil.getBitDouble(data, bitPos);
73
				bitPos = ((Integer)v.get(0)).intValue();
74
				y = ((Double)v.get(1)).doubleValue();
75
				v = DwgUtil.getBitDouble(data, bitPos);
76
				bitPos = ((Integer)v.get(0)).intValue();
77
				z = ((Double)v.get(1)).doubleValue();
78
			}
79
			att.setExtrusion(new double[]{x, y, z});
80
			v = DwgUtil.testBit(data, bitPos);
81
			bitPos = ((Integer)v.get(0)).intValue();
82
			flag = ((Boolean)v.get(1)).booleanValue();
83
		    double th;
84
			if (flag) {
85
				th=0.0;
86
			} else {
87
				v = DwgUtil.getBitDouble(data, bitPos);
88
				bitPos = ((Integer)v.get(0)).intValue();
89
				th = ((Double)v.get(1)).doubleValue();
90
			}
91
			att.setThickness(th);
92
			if ((dflag & 0x4)==0) {
93
				v = DwgUtil.getRawDouble(data, bitPos);
94
				bitPos = ((Integer)v.get(0)).intValue();
95
				double oblique = ((Double)v.get(1)).doubleValue();
96
				att.setObliqueAngle(oblique);
97
			}
98
			if ((dflag & 0x8)==0) {
99
				v = DwgUtil.getRawDouble(data, bitPos);
100
				bitPos = ((Integer)v.get(0)).intValue();
101
				double rot = ((Double)v.get(1)).doubleValue();
102
				att.setRotationAngle(rot);
103
			}
104
			v = DwgUtil.getRawDouble(data, bitPos);
105
			bitPos = ((Integer)v.get(0)).intValue();
106
			double height = ((Double)v.get(1)).doubleValue();
107
			att.setHeight(height);
108
			if ((dflag & 0x10)==0) {
109
				v = DwgUtil.getRawDouble(data, bitPos);
110
				bitPos = ((Integer)v.get(0)).intValue();
111
				double width = ((Double)v.get(1)).doubleValue();
112
				att.setWidthFactor(width);
113
			}
114
			v = DwgUtil.getTextString(data, bitPos);
115
			bitPos = ((Integer)v.get(0)).intValue();
116
			String text = (String)v.get(1);
117
			att.setText(text);
118
			if ((dflag & 0x20)==0) {
119
				v = DwgUtil.getBitShort(data, bitPos);
120
				bitPos = ((Integer)v.get(0)).intValue();
121
				int gen = ((Integer)v.get(1)).intValue();
122
				att.setGeneration(gen);
123
			}
124
			if ((dflag & 0x40)==0) {
125
				v = DwgUtil.getBitShort(data, bitPos);
126
				bitPos = ((Integer)v.get(0)).intValue();
127
				int halign = ((Integer)v.get(1)).intValue();
128
				att.setHalign(halign);
129
			}
130
			if ((dflag & 0x80)==0) {
131
				v = DwgUtil.getBitShort(data, bitPos);
132
				bitPos = ((Integer)v.get(0)).intValue();
133
				int valign = ((Integer)v.get(1)).intValue();
134
				att.setValign(valign);
135
			}
136
			v = DwgUtil.getTextString(data, bitPos);
137
			bitPos = ((Integer)v.get(0)).intValue();
138
			String tag = (String)v.get(1);
139
			att.setTag(tag);
140
			v = DwgUtil.getBitShort(data, bitPos);
141
			bitPos = ((Integer)v.get(0)).intValue();
142
			int fl = ((Integer)v.get(1)).intValue();
143
			att.setFieldLength(fl);
144
			v = DwgUtil.getRawChar(data, bitPos);
145
			bitPos = ((Integer)v.get(0)).intValue();
146
			int flags = ((Integer)v.get(1)).intValue();
147
			att.setFlags(flags);
148
			v = DwgUtil.getTextString(data, bitPos);
149
			bitPos = ((Integer)v.get(0)).intValue();
150
			String prompt = (String)v.get(1);
151
			att.setPrompt(prompt);
152
			bitPos = headTailReader.readObjectTailer(data, bitPos, att);
153
			DwgHandleReference styleHandle = new DwgHandleReference();
154
			bitPos = styleHandle.read(data, bitPos);
155
			att.setStyleHandle(styleHandle);
156
		}
157
}
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgSolidReader15.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.readers.v15;
6

  
7
import java.util.ArrayList;
8

  
9
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
10
import org.gvsig.dwg.lib.DwgObject;
11
import org.gvsig.dwg.lib.DwgUtil;
12
import org.gvsig.dwg.lib.objects.DwgSolid;
13

  
14

  
15
/**
16
 * @author azabala
17
 */
18
public class DwgSolidReader15 extends AbstractDwg15Reader{
19

  
20
	/* (non-Javadoc)
21
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
22
	 */
23
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
24
		if(! (dwgObj instanceof DwgSolid))
25
			throw new RuntimeException("ArcReader 15 solo puede leer DwgSolid");
26
		DwgSolid sol = (DwgSolid) dwgObj;
27
		int bitPos = offset;
28
		bitPos = headTailReader.readObjectHeader(data, bitPos, sol);
29
		ArrayList v = DwgUtil.testBit(data, bitPos);
30
		bitPos = ((Integer)v.get(0)).intValue();
31
		boolean flag = ((Boolean)v.get(1)).booleanValue();
32
	    double val;
33
		if (flag) {
34
			val=0.0;
35
		} else {
36
			v = DwgUtil.getBitDouble(data, bitPos);
37
			bitPos = ((Integer)v.get(0)).intValue();
38
			val = ((Double)v.get(1)).doubleValue();
39
		}
40
		sol.setThickness(val);
41
		
42
		v = DwgUtil.getBitDouble(data, bitPos);
43
		bitPos = ((Integer)v.get(0)).intValue();
44
		val = ((Double)v.get(1)).doubleValue();
45
		sol.setElevation(val);
46
		
47
		
48
		v = DwgUtil.getRawDouble(data, bitPos);
49
		bitPos = ((Integer)v.get(0)).intValue();
50
		double x = ((Double)v.get(1)).doubleValue();
51
		v = DwgUtil.getRawDouble(data, bitPos);
52
		bitPos = ((Integer)v.get(0)).intValue();
53
		double y = ((Double)v.get(1)).doubleValue();
54
		double[] coord = new double[]{x, y, val};
55
		sol.setCorner1(coord);
56
		
57
		
58
		v = DwgUtil.getRawDouble(data, bitPos);
59
		bitPos = ((Integer)v.get(0)).intValue();
60
		x = ((Double)v.get(1)).doubleValue();
61
		v = DwgUtil.getRawDouble(data, bitPos);
62
		bitPos = ((Integer)v.get(0)).intValue();
63
		y = ((Double)v.get(1)).doubleValue();
64
		coord = new double[]{x, y, val};
65
		sol.setCorner2(coord);
66
		
67
		
68
		v = DwgUtil.getRawDouble(data, bitPos);
69
		bitPos = ((Integer)v.get(0)).intValue();
70
		x = ((Double)v.get(1)).doubleValue();
71
		v = DwgUtil.getRawDouble(data, bitPos);
72
		bitPos = ((Integer)v.get(0)).intValue();
73
		y = ((Double)v.get(1)).doubleValue();
74
		coord = new double[]{x, y, val};
75
		sol.setCorner3(coord);
76
		
77
		
78
		v = DwgUtil.getRawDouble(data, bitPos);
79
		bitPos = ((Integer)v.get(0)).intValue();
80
		x = ((Double)v.get(1)).doubleValue();
81
		v = DwgUtil.getRawDouble(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		y = ((Double)v.get(1)).doubleValue();
84
		coord = new double[]{x, y, val};
85
		sol.setCorner4(coord);
86
		
87
		
88
		v = DwgUtil.testBit(data, bitPos);
89
		bitPos = ((Integer)v.get(0)).intValue();
90
		flag = ((Boolean)v.get(1)).booleanValue();
91
		double z;
92
	    if (flag) {
93
			 x = y = 0.0;
94
			 z = 1.0;
95
		} else {
96
			v = DwgUtil.getBitDouble(data, bitPos);
97
			bitPos = ((Integer)v.get(0)).intValue();
98
			x = ((Double)v.get(1)).doubleValue();
99
			v = DwgUtil.getBitDouble(data, bitPos);
100
			bitPos = ((Integer)v.get(0)).intValue();
101
			y = ((Double)v.get(1)).doubleValue();
102
			v = DwgUtil.getBitDouble(data, bitPos);
103
			bitPos = ((Integer)v.get(0)).intValue();
104
			z = ((Double)v.get(1)).doubleValue();
105
		}
106
		coord = new double[]{x, y, z};
107
		sol.setExtrusion(coord);
108
		
109
		bitPos = headTailReader.readObjectTailer(data, bitPos, sol);
110
	}
111
}
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgLayerReader15.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.readers.v15;
6

  
7
import java.util.ArrayList;
8

  
9
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
10
import org.gvsig.dwg.lib.DwgHandleReference;
11
import org.gvsig.dwg.lib.DwgObject;
12
import org.gvsig.dwg.lib.DwgUtil;
13
import org.gvsig.dwg.lib.objects.DwgLayer;
14

  
15

  
16
/**
17
 * @author alzabord
18
 *
19
 * TODO To change the template for this generated type comment go to
20
 * Window - Preferences - Java - Code Style - Code Templates
21
 */
22
public class DwgLayerReader15 extends AbstractDwg15Reader{
23

  
24
	/* (non-Javadoc)
25
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
26
	 */
27
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
28
		if(! (dwgObj instanceof DwgLayer))
29
			throw new RuntimeException("LayerReader 15 solo puede leer DwgLayer");
30
		//System.out.println("DwgLayer.readDwgLayerV15: offset = "+offset);
31
		DwgLayer lyr = (DwgLayer) dwgObj;
32
		int bitPos = offset;
33
		ArrayList v = DwgUtil.getBitLong(data, bitPos);
34
		bitPos = ((Integer)v.get(0)).intValue();
35
		int numReactors = ((Integer)v.get(1)).intValue();
36
		//System.out.println("DwgLayer.readDwgLayerV15: numReactors = "+numReactors);
37
		lyr.setNumReactors(numReactors);
38
		v = DwgUtil.getTextString(data, bitPos);
39
		bitPos = ((Integer)v.get(0)).intValue();
40
		String name = (String)v.get(1);
41
		//System.out.println("DwgLayer.readDwgLayerV15: name = "+name);
42
		lyr.setName(name);
43
		v = DwgUtil.testBit(data, bitPos);
44
		bitPos = ((Integer)v.get(0)).intValue();
45
		boolean flag = ((Boolean)v.get(1)).booleanValue();
46
		lyr.setFlag64(flag);
47
		v = DwgUtil.getBitShort(data, bitPos);
48
		bitPos = ((Integer)v.get(0)).intValue();
49
		int xrefplus1 = ((Integer)v.get(1)).intValue();
50
		lyr.setXRefPlus(xrefplus1);
51
		v = DwgUtil.testBit(data, bitPos);
52
		bitPos = ((Integer)v.get(0)).intValue();
53
		boolean xdep = ((Boolean)v.get(1)).booleanValue();
54
		lyr.setXdep(xdep);
55
		v = DwgUtil.getBitShort(data, bitPos);
56
		bitPos = ((Integer)v.get(0)).intValue();
57
		int flags = ((Integer)v.get(1)).intValue();
58
		lyr.setFlags(flags);
59
		v = DwgUtil.getBitShort(data, bitPos);
60
		bitPos = ((Integer)v.get(0)).intValue();
61
		int color = ((Integer)v.get(1)).intValue();
62
		lyr.setColor(color);
63
		
64
		DwgHandleReference hr = new DwgHandleReference();
65
		bitPos = hr.read(data, bitPos);
66
		lyr.setLayerControlHandle(hr);
67
		
68
	    //System.out.println("DwgLayer.readDwgLayerV15: Layer Control: " + layerControlHandle);
69
		
70
		/*
71
		 * Reactors handles
72
		 * DwgObject
73
		 */
74
		DwgHandleReference reactorHandle;
75
		for (int i = 0; i < lyr.getNumReactors(); i++) {
76
			reactorHandle = new DwgHandleReference();
77
			bitPos = reactorHandle.read(data, bitPos);
78
			lyr.addReactorHandle(reactorHandle);
79
		}
80
		
81
		/*
82
		 * XDICOBJHANDLE
83
		 */
84
		DwgHandleReference xDicObjHandle = new DwgHandleReference();
85
		bitPos = xDicObjHandle.read(data, bitPos);
86
		lyr.setXDicObjHandle(xDicObjHandle);
87
	    //System.out.println("DwgLayer.readDwgLayerV15: xdicobjhandle:" + xdicobjhandle);
88

  
89
		DwgHandleReference nullHandle = new DwgHandleReference();
90
		bitPos = nullHandle.read(data, bitPos);
91
		lyr.setNullHandle(nullHandle);
92

  
93
		DwgHandleReference plotStyleHandle = new DwgHandleReference();
94
		bitPos = plotStyleHandle.read(data, bitPos);
95
		lyr.setPlotStyleHandle(plotStyleHandle);
96
			
97
	    //System.out.println("DwgLayer.readDwgLayerV15: Plotstyle: " + plotstyleHandle);
98
		DwgHandleReference lineTypeHandle = new DwgHandleReference();
99
		bitPos = lineTypeHandle.read(data, bitPos);
100
		lyr.setLineTypeHandle(lineTypeHandle);
101
	    //System.out.println("DwgLayer.readDwgLayerV15: Linetype: " + linetypeHandle);
102
	    
103
	}
104

  
105
}
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgVertexPFaceReader15.java
1
/*
2
 * Created on 19-mar-2007
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: DwgVertexPFaceReader15.java 28969 2009-05-25 13:23:12Z jmvivo $
47
* $Log$
48
* Revision 1.1.2.1  2007-03-21 19:49:16  azabala
49
* implementation of dwg 12, 13, 14.
50
*
51
* Revision 1.1  2007/03/20 19:57:08  azabala
52
* source code cleaning
53
*
54
*
55
*/
56
package org.gvsig.dwg.lib.readers.v15;
57

  
58
import java.util.List;
59

  
60
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
61
import org.gvsig.dwg.lib.DwgObject;
62
import org.gvsig.dwg.lib.DwgUtil;
63
import org.gvsig.dwg.lib.objects.DwgVertexPFace;
64

  
65

  
66
public class DwgVertexPFaceReader15 extends AbstractDwg15Reader {
67
	//similar al reader de la versi?n 13-14
68
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj)
69
			throws RuntimeException, CorruptedDwgEntityException {
70
		
71
		 if(! (dwgObj instanceof DwgVertexPFace))
72
		    	throw new RuntimeException("ArcReader 14 solo puede leer DwgVertexPFace");
73
		 DwgVertexPFace v = (DwgVertexPFace) dwgObj;
74
		
75
		 int bitPos = offset;
76
		 bitPos = headTailReader.readObjectHeader(data, bitPos, v);
77
		 
78
		 List val = DwgUtil.getRawChar(data, bitPos);
79
		 bitPos = ((Integer) val.get(0)).intValue();
80
		 int flags = ((Integer) val.get(1)).intValue();
81
		 v.setFlags(flags);
82
		 
83
		 val = DwgUtil.getBitDouble(data, bitPos);
84
		 bitPos = ((Integer) val.get(0)).intValue();
85
		 double x = ((Double) val.get(1)).doubleValue();
86
		
87
		 val = DwgUtil.getBitDouble(data, bitPos);
88
		 bitPos = ((Integer) val.get(0)).intValue();
89
		 double y = ((Double) val.get(1)).doubleValue();
90
		 
91
		 val = DwgUtil.getBitDouble(data, bitPos);
92
		 bitPos = ((Integer) val.get(0)).intValue();
93
		 double z = ((Double) val.get(1)).doubleValue();
94
		 v.setPoint(new double[]{x, y, z});
95
		 
96
		 bitPos = headTailReader.readObjectTailer(data, bitPos, v);
97
	}
98

  
99
}
100

  
101

  
102

  
tags/org.gvsig.dwg-2.0.30/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgLinearDimensionReader15.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.readers.v15;
6

  
7
import java.awt.geom.Point2D;
8
import java.util.ArrayList;
9

  
10
import org.gvsig.dwg.lib.CorruptedDwgEntityException;
11
import org.gvsig.dwg.lib.DwgHandleReference;
12
import org.gvsig.dwg.lib.DwgObject;
13
import org.gvsig.dwg.lib.DwgUtil;
14
import org.gvsig.dwg.lib.objects.DwgLinearDimension;
15

  
16

  
17
/**
18
 * @author alzabord
19
 *
20
 * TODO To change the template for this generated type comment go to
21
 * Window - Preferences - Java - Code Style - Code Templates
22
 */
23
public class DwgLinearDimensionReader15 extends AbstractDwg15Reader{
24

  
25
	/* (non-Javadoc)
26
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
27
	 */
28
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
29
		if(! (dwgObj instanceof DwgLinearDimension))
30
			throw new RuntimeException("ArcReader 15 solo puede leer DwgLinearDimension");
31
		DwgLinearDimension dim = (DwgLinearDimension) dwgObj;
32
		int bitPos = offset;
33
		bitPos = headTailReader.readObjectHeader(data, bitPos, dwgObj);
34
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
35
		bitPos = ((Integer)v.get(0)).intValue();
36
		double x = ((Double)v.get(1)).doubleValue();
37
		v = DwgUtil.getBitDouble(data, bitPos);
38
		bitPos = ((Integer)v.get(0)).intValue();
39
		double y = ((Double)v.get(1)).doubleValue();
40
		v = DwgUtil.getBitDouble(data, bitPos);
41
		bitPos = ((Integer)v.get(0)).intValue();
42
		double z = ((Double)v.get(1)).doubleValue();
43
		dim.setExtrusion(new double[]{x, y, z});
44
		v = DwgUtil.getRawDouble(data, bitPos);
45
		bitPos = ((Integer)v.get(0)).intValue();
46
		x = ((Double)v.get(1)).doubleValue();
47
		v = DwgUtil.getRawDouble(data, bitPos);
48
		bitPos = ((Integer)v.get(0)).intValue();
49
		y = ((Double)v.get(1)).doubleValue();
50
		dim.setTextMidpoint(new Point2D.Double(x, y));
51
		v = DwgUtil.getBitDouble(data, bitPos);
52
		bitPos = ((Integer)v.get(0)).intValue();
53
		double val = ((Double)v.get(1)).doubleValue();
54
		dim.setElevation(val);
55
		v = DwgUtil.getRawChar(data, bitPos);
56
		bitPos = ((Integer)v.get(0)).intValue();
57
		int flags = ((Integer)v.get(1)).intValue();
58
		dim.setFlags(flags);
59
		v = DwgUtil.getTextString(data, bitPos);
60
		bitPos = ((Integer)v.get(0)).intValue();
61
		String text = (String)v.get(1);
62
		dim.setText(text);
63
		v = DwgUtil.getBitDouble(data, bitPos);
64
		bitPos = ((Integer)v.get(0)).intValue();
65
		val = ((Double)v.get(1)).doubleValue();
66
		dim.setRotation(val);
67
		v = DwgUtil.getBitDouble(data, bitPos);
68
		bitPos = ((Integer)v.get(0)).intValue();
69
		val = ((Double)v.get(1)).doubleValue();
70
		dim.setHorizDir(val);
71
		v = DwgUtil.getBitDouble(data, bitPos);
72
		bitPos = ((Integer)v.get(0)).intValue();
73
		x = ((Double)v.get(1)).doubleValue();
74
		v = DwgUtil.getBitDouble(data, bitPos);
75
		bitPos = ((Integer)v.get(0)).intValue();
76
		y = ((Double)v.get(1)).doubleValue();
77
		v = DwgUtil.getBitDouble(data, bitPos);
78
		bitPos = ((Integer)v.get(0)).intValue();
79
		z = ((Double)v.get(1)).doubleValue();
80
		dim.setInsScale(new double[]{x, y, z});
81
		v = DwgUtil.getBitDouble(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		val = ((Double)v.get(1)).doubleValue();
84
		dim.setInsRotation(val);
85
		v = DwgUtil.getBitShort(data, bitPos);
86
		bitPos = ((Integer)v.get(0)).intValue();
87
		int ap = ((Integer)v.get(1)).intValue();
88
		dim.setAttachmentPoint(ap);
89
		v = DwgUtil.getBitShort(data, bitPos);
90
		bitPos = ((Integer)v.get(0)).intValue();
91
		int lss = ((Integer)v.get(1)).intValue();
92
		dim.setLinespaceStyle(lss);
93
		v = DwgUtil.getBitDouble(data, bitPos);
94
		bitPos = ((Integer)v.get(0)).intValue();
95
		val = ((Double)v.get(1)).doubleValue();
96
		dim.setLinespaceFactor(val);
97
		v = DwgUtil.getBitDouble(data, bitPos);
98
		bitPos = ((Integer)v.get(0)).intValue();
99
		val = ((Double)v.get(1)).doubleValue();
100
		dim.setActualMeasurement(val);
101
		v = DwgUtil.getRawDouble(data, bitPos);
102
		bitPos = ((Integer)v.get(0)).intValue();
103
		x = ((Double)v.get(1)).doubleValue();
104
		v = DwgUtil.getRawDouble(data, bitPos);
105
		bitPos = ((Integer)v.get(0)).intValue();
106
		val = ((Double)v.get(1)).doubleValue();
107
		dim.setPt12(new Point2D.Double(x, y));
108
		v = DwgUtil.getBitDouble(data, bitPos);
109
		bitPos = ((Integer)v.get(0)).intValue();
110
		x = ((Double)v.get(1)).doubleValue();
111
		v = DwgUtil.getBitDouble(data, bitPos);
112
		bitPos = ((Integer)v.get(0)).intValue();
113
		y = ((Double)v.get(1)).doubleValue();
114
		v = DwgUtil.getBitDouble(data, bitPos);
115
		bitPos = ((Integer)v.get(0)).intValue();
116
		z = ((Double)v.get(1)).doubleValue();
117
		dim.setPt10(new double[]{x, y, z});
118
		v = DwgUtil.getBitDouble(data, bitPos);
119
		bitPos = ((Integer)v.get(0)).intValue();
120
		x = ((Double)v.get(1)).doubleValue();
121
		v = DwgUtil.getBitDouble(data, bitPos);
122
		bitPos = ((Integer)v.get(0)).intValue();
123
		y = ((Double)v.get(1)).doubleValue();
124
		v = DwgUtil.getBitDouble(data, bitPos);
125
		bitPos = ((Integer)v.get(0)).intValue();
126
		z = ((Double)v.get(1)).doubleValue();
127
		dim.setPt13(new double[]{x, y, z});
128
		v = DwgUtil.getBitDouble(data, bitPos);
129
		bitPos = ((Integer)v.get(0)).intValue();
130
		x = ((Double)v.get(1)).doubleValue();
131
		v = DwgUtil.getBitDouble(data, bitPos);
132
		bitPos = ((Integer)v.get(0)).intValue();
133
		y = ((Double)v.get(1)).doubleValue();
134
		v = DwgUtil.getBitDouble(data, bitPos);
135
		bitPos = ((Integer)v.get(0)).intValue();
136
		z = ((Double)v.get(1)).doubleValue();
137
		dim.setPt14(new double[]{x, y, z});
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff