Revision 173

View differences:

tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgVertex2DReader15.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.DwgVertex2D;
13

  
14

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

  
23
	/* (non-Javadoc)
24
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
25
	 */
26
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
27
		 if(! (dwgObj instanceof DwgVertex2D))
28
		    	throw new RuntimeException("ArcReader 15 solo puede leer DwgVertex2D");
29
		 DwgVertex2D ver = (DwgVertex2D) dwgObj;
30
		int bitPos = offset;
31
		bitPos = headTailReader.readObjectHeader(data, bitPos, ver);
32
		ArrayList v = DwgUtil.getRawChar(data, bitPos);
33
		bitPos = ((Integer)v.get(0)).intValue();
34
		int flags = ((Integer)v.get(1)).intValue();
35
		ver.setFlags(flags);
36
		v = DwgUtil.getBitDouble(data, bitPos);
37
		bitPos = ((Integer)v.get(0)).intValue();
38
		double x = ((Double)v.get(1)).doubleValue();
39
		v = DwgUtil.getBitDouble(data, bitPos);
40
		bitPos = ((Integer)v.get(0)).intValue();
41
		double y = ((Double)v.get(1)).doubleValue();
42
		v = DwgUtil.getBitDouble(data, bitPos);
43
		bitPos = ((Integer)v.get(0)).intValue();
44
		double z = ((Double)v.get(1)).doubleValue();
45
		ver.setPoint(new double[]{x, y, z});
46
		v = DwgUtil.getBitDouble(data, bitPos);
47
		bitPos = ((Integer)v.get(0)).intValue();
48
		double sw = ((Double)v.get(1)).doubleValue();
49
		double ew = 0.0;
50
		if (sw<0.0) {
51
			ew = Math.abs(sw);
52
			sw = ew;
53
		} else {
54
			v = DwgUtil.getBitDouble(data, bitPos);
55
			bitPos = ((Integer)v.get(0)).intValue();
56
			ew = ((Double)v.get(1)).doubleValue();
57
		}
58
		ver.setInitWidth(sw);
59
		ver.setEndWidth(ew);
60
		v = DwgUtil.getBitDouble(data, bitPos);
61
		bitPos = ((Integer)v.get(0)).intValue();
62
		double bulge = ((Double)v.get(1)).doubleValue();
63
		ver.setBulge(bulge);
64
		v = DwgUtil.getBitDouble(data, bitPos);
65
		bitPos = ((Integer)v.get(0)).intValue();
66
		double tandir = ((Double)v.get(1)).doubleValue();
67
		ver.setTangentDir(tandir);
68
		bitPos = headTailReader.readObjectTailer(data, bitPos, ver);
69
	}
70
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/AbstractDwg15Reader.java
1
/*
2
 * Created on 25-ene-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: AbstractDwg15Reader.java 28969 2009-05-25 13:23:12Z jmvivo $
47
* $Log$
48
* Revision 1.1.2.2  2007-03-21 19:49:16  azabala
49
* implementation of dwg 12, 13, 14.
50
*
51
* Revision 1.1  2007/01/25 20:05:58  azabala
52
* start of implementation of specific versions' object readers
53
*
54
*
55
*/
56
package org.gvsig.dwg.lib.readers.v15;
57

  
58
import org.gvsig.dwg.lib.readers.DwgFileV15Reader;
59
import org.gvsig.dwg.lib.readers.IDwgFileReader;
60
import org.gvsig.dwg.lib.readers.IDwgObjectReader;
61

  
62
public abstract class AbstractDwg15Reader implements IDwgObjectReader{
63
	protected IDwgFileReader headTailReader;
64
	public void setFileReader(IDwgFileReader headTailReader) {
65
		if( ! (headTailReader instanceof DwgFileV15Reader))
66
			throw new RuntimeException("Tratando de leer entidad de DWG 15 (2000) con"+
67
					headTailReader.getClass().getName());
68
		this.headTailReader = headTailReader;
69
	}
70

  
71
}
72

  
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgVertex3DReader15.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.DwgVertex3D;
13

  
14

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

  
23
	/* (non-Javadoc)
24
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
25
	 */
26
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
27
		 if(! (dwgObj instanceof DwgVertex3D))
28
		    	throw new RuntimeException("ArcReader 15 solo puede leer DwgVertex3D");
29
		 DwgVertex3D ver = (DwgVertex3D) dwgObj;
30
		int bitPos = offset;
31
		bitPos = headTailReader.readObjectHeader(data, bitPos, ver);
32
		ArrayList v = DwgUtil.getRawChar(data, bitPos);
33
		bitPos = ((Integer)v.get(0)).intValue();
34
		int flags = ((Integer)v.get(1)).intValue();
35
		ver.setFlags(flags);
36
		v = DwgUtil.getBitDouble(data, bitPos);
37
		bitPos = ((Integer)v.get(0)).intValue();
38
		double x = ((Double)v.get(1)).doubleValue();
39
		v = DwgUtil.getBitDouble(data, bitPos);
40
		bitPos = ((Integer)v.get(0)).intValue();
41
		double y = ((Double)v.get(1)).doubleValue();
42
		v = DwgUtil.getBitDouble(data, bitPos);
43
		bitPos = ((Integer)v.get(0)).intValue();
44
		double z = ((Double)v.get(1)).doubleValue();
45
		double[] coord = new double[]{x, y, z};
46
		ver.setPoint(coord);
47
		bitPos = headTailReader.readObjectTailer(data, bitPos, ver);
48
	}
49
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgInsertReader15.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.DwgInsert;
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 DwgInsertReader15 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 DwgInsert))
29
			throw new RuntimeException("ArcReader 15 solo puede leer DwgInsert");
30
		DwgInsert ins = (DwgInsert) dwgObj;
31
		int bitPos = offset;
32
		bitPos = headTailReader.readObjectHeader(data, bitPos, ins);
33
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
34
		bitPos = ((Integer)v.get(0)).intValue();
35
		double x = ((Double)v.get(1)).doubleValue();
36
		v = DwgUtil.getBitDouble(data, bitPos);
37
		bitPos = ((Integer)v.get(0)).intValue();
38
		double y = ((Double)v.get(1)).doubleValue();
39
		v = DwgUtil.getBitDouble(data, bitPos);
40
		bitPos = ((Integer)v.get(0)).intValue();
41
		double z = ((Double)v.get(1)).doubleValue();
42
		double[] coord = new double[]{x, y, z};
43
		ins.setInsertionPoint(coord);
44
		int dflag = ((Integer)DwgUtil.getBits(data, 2, bitPos)).intValue();
45
		bitPos = bitPos + 2;
46
		if (dflag==0x0) {
47
			v = DwgUtil.getRawDouble(data, bitPos);
48
			bitPos = ((Integer)v.get(0)).intValue();
49
			x = ((Double)v.get(1)).doubleValue();
50
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
51
			bitPos = ((Integer)v.get(0)).intValue();
52
			y = ((Double)v.get(1)).doubleValue();
53
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
54
			bitPos = ((Integer)v.get(0)).intValue();
55
			z = ((Double)v.get(1)).doubleValue();
56
		} else if (dflag==0x1) {
57
			x = 1.0;
58
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
59
			bitPos = ((Integer)v.get(0)).intValue();
60
			y = ((Double)v.get(1)).doubleValue();
61
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
62
			bitPos = ((Integer)v.get(0)).intValue();
63
			z = ((Double)v.get(1)).doubleValue();
64
		} else if (dflag==0x2) {
65
			v = DwgUtil.getRawDouble(data, bitPos);
66
			bitPos = ((Integer)v.get(0)).intValue();
67
			x = ((Double)v.get(1)).doubleValue();
68
			z = x;
69
			y = z;
70
		} else {
71
			z = 1.0;
72
			y = z;
73
			x = y;
74
		}
75
		coord = new double[]{x, y, z};
76
		ins.setScale(coord);
77
		v = DwgUtil.getBitDouble(data, bitPos);
78
		bitPos = ((Integer)v.get(0)).intValue();
79
		double rot = ((Double)v.get(1)).doubleValue();
80
		ins.setRotation(rot);
81
		v = DwgUtil.getBitDouble(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		x = ((Double)v.get(1)).doubleValue();
84
		v = DwgUtil.getBitDouble(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		y = ((Double)v.get(1)).doubleValue();
87
		v = DwgUtil.getBitDouble(data, bitPos);
88
		bitPos = ((Integer)v.get(0)).intValue();
89
		z = ((Double)v.get(1)).doubleValue();
90
		coord = new double[]{x, y, z};
91
		ins.setExtrusion(coord);
92
		v = DwgUtil.testBit(data, bitPos);
93
		bitPos = ((Integer)v.get(0)).intValue();
94
		boolean hasattr = ((Boolean)v.get(1)).booleanValue();
95
		bitPos = headTailReader.readObjectTailer(data, bitPos, ins);
96
		
97
		DwgHandleReference hr = new DwgHandleReference();
98
		bitPos = hr.read(data, bitPos);
99
		ins.setBlockHeaderHandle(hr);
100
		
101
		if (hasattr) {
102
			
103
			hr = new DwgHandleReference();
104
			bitPos = hr.read(data, bitPos);
105
			ins.setFirstAttribHandle(hr);
106
			
107
			hr = new DwgHandleReference();
108
			bitPos = hr.read(data, bitPos);
109
			ins.setLastAttribHandle(hr);
110
			
111
			hr = new DwgHandleReference();
112
			bitPos = hr.read(data, bitPos);
113
			ins.setSeqendHandle(hr);
114
		}
115
	}
116

  
117
	
118

  
119
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgDictionaryReader15.java
1
package org.gvsig.dwg.lib.readers.v15;
2

  
3
import java.util.ArrayList;
4

  
5
import org.gvsig.dwg.lib.DwgHandleReference;
6
import org.gvsig.dwg.lib.DwgObject;
7
import org.gvsig.dwg.lib.DwgUtil;
8
import org.gvsig.dwg.lib.objects.DwgDictionary;
9

  
10

  
11
public class DwgDictionaryReader15 extends AbstractDwg15Reader{
12

  
13
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) {
14
		// TODO Auto-generated method stub
15
		if(! (dwgObj instanceof DwgDictionary))
16
			throw new RuntimeException("DictionaryReader15 solo puede leer DwgDictionary");
17
		DwgDictionary dict = (DwgDictionary) dwgObj;
18
		try {
19
			//System.out.println("LEYENDO UN DICCIONARIO");
20
			int bitPos = offset;
21
			ArrayList v = DwgUtil.getBitShort(data, bitPos);
22
			bitPos = ((Integer)v.get(0)).intValue();
23
			int numReactors = ((Integer)v.get(1)).intValue();
24
			dict.setNumReactors(numReactors);
25
			//System.out.println("numReactors="+numReactors);
26
			
27
			v = DwgUtil.getBitLong(data, bitPos);
28
			bitPos = ((Integer)v.get(0)).intValue();
29
			int numItems = ((Integer)v.get(1)).intValue();
30
			//System.out.println("numItems="+numItems);
31
			
32
			
33
			v = DwgUtil.getBitShort(data, bitPos);
34
			bitPos = ((Integer)v.get(0)).intValue();
35
			int cloningFlag = ((Integer)v.get(1)).intValue();
36
			dict.setCloningFlag(cloningFlag);
37
			//System.out.println("cloningFlag="+cloningFlag);
38
			
39
			v = DwgUtil.getRawChar(data, bitPos);
40
			bitPos = ((Integer)v.get(0)).intValue();
41
			int hardOwnerFlag = ((Integer)v.get(1)).intValue();
42
			dict.setHardOwnerFlag(hardOwnerFlag);
43
			//System.out.println("hardOwnerFlag="+hardOwnerFlag);
44
			
45
			int handleCode;
46
			int handleOffset;
47
			ArrayList entradasTexto = new ArrayList();
48
			for(int i=0; i<numItems; i++){
49
				v = DwgUtil.getTextString(data, bitPos);
50
				bitPos = ((Integer)v.get(0)).intValue();
51
				String text = ((String)v.get(1));
52
				entradasTexto.add(text);
53
			}
54
			DwgHandleReference handle;
55
			for(int i=0; i<numItems; i++){
56
				handle = new DwgHandleReference();
57
				bitPos = handle.read(data, bitPos);
58
				//System.out.println("ENTRADA DE DICCIONARIO text= "+entradasTexto.get(i)+" handleCode ="+handle.getCode()+" handleOffset ="+handle.getOffset());
59
				// A la vez que leemos los handles, rellenamos el diccionario.
60
				dict.put(entradasTexto.get(i),handle);
61
			}
62
			//System.out.println("map.size ="+dict.size());
63
		}catch (Exception e){
64
			System.out.println("Se ha producido una excepion leyendo un diccionario."+e.getMessage());
65
		}
66
	}
67
}
tags/org.gvsig.dwg-2.0.46/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.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgPFaceReader15.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: DwgPFaceReader15.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.DwgHandleReference;
62
import org.gvsig.dwg.lib.DwgObject;
63
import org.gvsig.dwg.lib.DwgUtil;
64
import org.gvsig.dwg.lib.objects.DwgPFacePolyline;
65

  
66

  
67
public class DwgPFaceReader15 extends AbstractDwg15Reader {
68
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj)
69
			throws RuntimeException, CorruptedDwgEntityException {
70
		
71
		if(! (dwgObj instanceof DwgPFacePolyline))
72
	    	throw new RuntimeException("ArcReader 15 solo puede leer DwgPFacePolyline");
73
		DwgPFacePolyline pface = (DwgPFacePolyline) dwgObj;
74
		int bitPos = offset;
75
		bitPos = headTailReader.readObjectHeader(data, bitPos, pface);
76
		
77
		List val = DwgUtil.getBitShort(data, bitPos);
78
		bitPos = ((Integer) val.get(0)).intValue();
79
		int vertexCount = ((Integer) val.get(1)).intValue();
80
		pface.setVertexCount(vertexCount);
81
		
82
		val = DwgUtil.getBitShort(data, bitPos);
83
		bitPos = ((Integer) val.get(0)).intValue();
84
		int faceCount = ((Integer) val.get(1)).intValue();
85
		pface.setFaceCount(faceCount);
86
		
87
		bitPos = headTailReader.readObjectTailer(data, bitPos, pface);
88
		
89
		DwgHandleReference handle = new DwgHandleReference();
90
		bitPos = handle.read(data, bitPos);
91
		pface.setFirstVertexHandle(handle);
92
		
93
		handle = new DwgHandleReference();
94
		bitPos = handle.read(data, bitPos);
95
		pface.setLastVertexHandle(handle);
96
		
97
		handle = new DwgHandleReference();
98
		bitPos = handle.read(data, bitPos);
99
		pface.setSeqendHandle(handle);
100
	}
101

  
102
}
103

  
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgAttribReader15.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.DwgArc;
15
import org.gvsig.dwg.lib.objects.DwgAttrib;
16
import org.gvsig.dwg.lib.readers.IDwgFileReader;
17
import org.gvsig.dwg.lib.readers.IDwgObjectReader;
18

  
19

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

  
28
	/*
29
	 * (non-Javadoc)
30
	 * 
31
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[],
32
	 *      int, com.iver.cit.jdwglib.dwg.DwgObject)
33
	 */
34
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
35

  
36
		if (!(dwgObj instanceof DwgAttrib))
37
			throw new RuntimeException("ArcReader 15 solo puede leer DwgAttrib");
38
		DwgAttrib att = (DwgAttrib) dwgObj;
39

  
40
		int bitPos = offset;
41
		bitPos = headTailReader.readObjectHeader(data, bitPos, att);
42
		ArrayList v = DwgUtil.getRawChar(data, bitPos);
43
		bitPos = ((Integer) v.get(0)).intValue();
44
		int dflag = ((Integer) v.get(1)).intValue();
45
		att.setDataFlag(dflag);
46
		if ((dflag & 0x1) == 0) {
47
			v = DwgUtil.getRawDouble(data, bitPos);
48
			bitPos = ((Integer) v.get(0)).intValue();
49
			double elev = ((Double) v.get(1)).doubleValue();
50
			att.setElevation(elev);
51
		}
52
		v = DwgUtil.getRawDouble(data, bitPos);
53
		bitPos = ((Integer) v.get(0)).intValue();
54
		double x1 = ((Double) v.get(1)).doubleValue();
55
		v = DwgUtil.getRawDouble(data, bitPos);
56
		bitPos = ((Integer) v.get(0)).intValue();
57
		double y1 = ((Double) v.get(1)).doubleValue();
58
		att.setInsertionPoint(new Point2D.Double(x1, y1));
59
		double x = 0, y = 0, z = 0;
60
		if ((dflag & 0x2) == 0) {
61
			v = DwgUtil.getDefaultDouble(data, bitPos, x1);
62
			bitPos = ((Integer) v.get(0)).intValue();
63
			x = ((Double) v.get(1)).doubleValue();
64
			v = DwgUtil.getDefaultDouble(data, bitPos, y1);
65
			bitPos = ((Integer) v.get(0)).intValue();
66
			y = ((Double) v.get(1)).doubleValue();
67
		}
68
		att.setAlignmentPoint(new Point2D.Double(x, y));
69
		v = DwgUtil.testBit(data, bitPos);
70
		bitPos = ((Integer) v.get(0)).intValue();
71
		boolean flag = ((Boolean) v.get(1)).booleanValue();
72
		if (flag) {
73
			y = 0.0;
74
			x = y;
75
			z = 1.0;
76
		} else {
77
			v = DwgUtil.getBitDouble(data, bitPos);
78
			bitPos = ((Integer) v.get(0)).intValue();
79
			x = ((Double) v.get(1)).doubleValue();
80
			v = DwgUtil.getBitDouble(data, bitPos);
81
			bitPos = ((Integer) v.get(0)).intValue();
82
			y = ((Double) v.get(1)).doubleValue();
83
			v = DwgUtil.getBitDouble(data, bitPos);
84
			bitPos = ((Integer) v.get(0)).intValue();
85
			z = ((Double) v.get(1)).doubleValue();
86
		}
87
		att.setExtrusion(new double[] { x, y, z });
88
		v = DwgUtil.testBit(data, bitPos);
89
		bitPos = ((Integer) v.get(0)).intValue();
90
		flag = ((Boolean) v.get(1)).booleanValue();
91
		double th;
92
		if (flag) {
93
			th = 0.0;
94
		} else {
95
			v = DwgUtil.getBitDouble(data, bitPos);
96
			bitPos = ((Integer) v.get(0)).intValue();
97
			th = ((Double) v.get(1)).doubleValue();
98
		}
99
		att.setThickness(th);
100
		if ((dflag & 0x4) == 0) {
101
			v = DwgUtil.getRawDouble(data, bitPos);
102
			bitPos = ((Integer) v.get(0)).intValue();
103
			double oblique = ((Double) v.get(1)).doubleValue();
104
			att.setObliqueAngle(oblique);
105
		}
106
		if ((dflag & 0x8) == 0) {
107
			v = DwgUtil.getRawDouble(data, bitPos);
108
			bitPos = ((Integer) v.get(0)).intValue();
109
			double rot = ((Double) v.get(1)).doubleValue();
110
			att.setRotationAngle(rot);
111
		}
112
		v = DwgUtil.getRawDouble(data, bitPos);
113
		bitPos = ((Integer) v.get(0)).intValue();
114
		double height = ((Double) v.get(1)).doubleValue();
115
		att.setHeight(height);
116
		if ((dflag & 0x10) == 0) {
117
			v = DwgUtil.getRawDouble(data, bitPos);
118
			bitPos = ((Integer) v.get(0)).intValue();
119
			double width = ((Double) v.get(1)).doubleValue();
120
			att.setWidthFactor(width);
121
		}
122
		v = DwgUtil.getTextString(data, bitPos);
123
		bitPos = ((Integer) v.get(0)).intValue();
124
		String text = (String) v.get(1);
125
		att.setText(text);
126
		if ((dflag & 0x20) == 0) {
127
			v = DwgUtil.getBitShort(data, bitPos);
128
			bitPos = ((Integer) v.get(0)).intValue();
129
			int gen = ((Integer) v.get(1)).intValue();
130
			att.setGeneration(gen);
131
		}
132
		if ((dflag & 0x40) == 0) {
133
			v = DwgUtil.getBitShort(data, bitPos);
134
			bitPos = ((Integer) v.get(0)).intValue();
135
			int halign = ((Integer) v.get(1)).intValue();
136
			att.setHalign(halign);
137
		}
138
		if ((dflag & 0x80) == 0) {
139
			v = DwgUtil.getBitShort(data, bitPos);
140
			bitPos = ((Integer) v.get(0)).intValue();
141
			int valign = ((Integer) v.get(1)).intValue();
142
			att.setValign(valign);
143
		}
144
		v = DwgUtil.getTextString(data, bitPos);
145
		bitPos = ((Integer) v.get(0)).intValue();
146
		String tag = (String) v.get(1);
147
		att.setTag(tag);
148
		v = DwgUtil.getBitShort(data, bitPos);
149
		bitPos = ((Integer) v.get(0)).intValue();
150
		int fl = ((Integer) v.get(1)).intValue();
151
		att.setFieldLength(fl);
152
		v = DwgUtil.getRawChar(data, bitPos);
153
		bitPos = ((Integer) v.get(0)).intValue();
154
		int flags = ((Integer) v.get(1)).intValue();
155
		att.setFlags(flags);
156
		bitPos = headTailReader.readObjectTailer(data, bitPos, att);
157
		DwgHandleReference styleHandle = new DwgHandleReference();
158
		bitPos = styleHandle.read(data, bitPos);
159
		att.setStyleHandle(styleHandle);
160
	}
161
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgSplineReader15.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.DwgSpline;
13

  
14

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

  
23
	/* (non-Javadoc)
24
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
25
	 */
26
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
27
		if(! (dwgObj instanceof DwgSpline))
28
			throw new RuntimeException("ArcReader 15 solo puede leer DwgSpline");
29
		DwgSpline spline = (DwgSpline) dwgObj;
30
		int bitPos = offset;
31
		bitPos = headTailReader.readObjectHeader(data, bitPos, spline);
32
		ArrayList v = DwgUtil.getBitShort(data, bitPos);
33
		bitPos = ((Integer)v.get(0)).intValue();
34
		int sc = ((Integer)v.get(1)).intValue();
35
		spline.setScenario(sc);
36
		v = DwgUtil.getBitShort(data, bitPos);
37
		bitPos = ((Integer)v.get(0)).intValue();
38
		int deg = ((Integer)v.get(1)).intValue();
39
		spline.setDegree(deg);
40
		int knotsNumber = 0;
41
		int controlPointsNumber = 0;
42
		int fitPointsNumber = 0;
43
		boolean weight = false;
44
		if (sc==2) {
45
			v = DwgUtil.getBitDouble(data, bitPos);
46
			bitPos = ((Integer)v.get(0)).intValue();
47
			double ft = ((Double)v.get(1)).doubleValue();
48
			spline.setFitTolerance(ft);
49
			v = DwgUtil.getBitDouble(data, bitPos);
50
			bitPos = ((Integer)v.get(0)).intValue();
51
			double x = ((Double)v.get(1)).doubleValue();
52
			v = DwgUtil.getBitDouble(data, bitPos);
53
			bitPos = ((Integer)v.get(0)).intValue();
54
			double y = ((Double)v.get(1)).doubleValue();
55
			v = DwgUtil.getBitDouble(data, bitPos);
56
			bitPos = ((Integer)v.get(0)).intValue();
57
			double z = ((Double)v.get(1)).doubleValue();
58
			double[] coord = new double[]{x, y, z};
59
			spline.setBeginTanVector(coord);
60
			v = DwgUtil.getBitDouble(data, bitPos);
61
			bitPos = ((Integer)v.get(0)).intValue();
62
			x = ((Double)v.get(1)).doubleValue();
63
			v = DwgUtil.getBitDouble(data, bitPos);
64
			bitPos = ((Integer)v.get(0)).intValue();
65
			y = ((Double)v.get(1)).doubleValue();
66
			v = DwgUtil.getBitDouble(data, bitPos);
67
			bitPos = ((Integer)v.get(0)).intValue();
68
			z = ((Double)v.get(1)).doubleValue();
69
			coord = new double[]{x, y, z};
70
			spline.setEndTanVector(coord);
71
			v = DwgUtil.getBitShort(data, bitPos);
72
			bitPos = ((Integer)v.get(0)).intValue();
73
			fitPointsNumber = ((Integer)v.get(1)).intValue();
74
		} else if (sc==1) {
75
			v = DwgUtil.testBit(data, bitPos);
76
			bitPos = ((Integer)v.get(0)).intValue();
77
			boolean rat = ((Boolean)v.get(1)).booleanValue();
78
			spline.setRational(rat);
79
			v = DwgUtil.testBit(data, bitPos);
80
			bitPos = ((Integer)v.get(0)).intValue();
81
			boolean closed = ((Boolean)v.get(1)).booleanValue();
82
			spline.setClosed(closed);
83
			v = DwgUtil.testBit(data, bitPos);
84
			bitPos = ((Integer)v.get(0)).intValue();
85
			boolean per = ((Boolean)v.get(1)).booleanValue();
86
			spline.setPeriodic(per);
87
			v = DwgUtil.getBitDouble(data, bitPos);
88
			bitPos = ((Integer)v.get(0)).intValue();
89
			double ktol = ((Double)v.get(1)).doubleValue();
90
			spline.setKnotTolerance(ktol);
91
			v = DwgUtil.getBitDouble(data, bitPos);
92
			bitPos = ((Integer)v.get(0)).intValue();
93
			double ctol = ((Double)v.get(1)).doubleValue();
94
			spline.setControlTolerance(ctol);
95
			v = DwgUtil.getBitLong(data, bitPos);
96
			bitPos = ((Integer)v.get(0)).intValue();
97
			knotsNumber = ((Integer)v.get(1)).intValue();
98
			v = DwgUtil.getBitLong(data, bitPos);
99
			bitPos = ((Integer)v.get(0)).intValue();
100
			controlPointsNumber = ((Integer)v.get(1)).intValue();
101
			v = DwgUtil.testBit(data, bitPos);
102
			bitPos = ((Integer)v.get(0)).intValue();
103
			weight = ((Boolean)v.get(1)).booleanValue();
104
		} else {
105
			System.out.println("ERROR: Escenario desconocido");
106
		}
107
		if (knotsNumber>0) {
108
			double[] knotpts = new double[knotsNumber];
109
			for (int i=0;i<knotsNumber;i++) {
110
				v = DwgUtil.getBitDouble(data, bitPos);
111
				bitPos = ((Integer)v.get(0)).intValue();
112
				knotpts[i] = ((Double)v.get(1)).doubleValue();
113
			}
114
			spline.setKnotPoints(knotpts);
115
		}
116
		if (controlPointsNumber>0) {
117
			// Si el n?mero de weights no coincide con el de ctrlpts habr? problemas ...
118
			double[][] ctrlpts = new double[controlPointsNumber][3];
119
			double[] weights = new double[controlPointsNumber];
120
			for (int i=0;i<controlPointsNumber;i++) {
121
				v = DwgUtil.getBitDouble(data, bitPos);
122
				bitPos = ((Integer)v.get(0)).intValue();
123
				double x = ((Double)v.get(1)).doubleValue();
124
				v = DwgUtil.getBitDouble(data, bitPos);
125
				bitPos = ((Integer)v.get(0)).intValue();
126
				double y = ((Double)v.get(1)).doubleValue();
127
				v = DwgUtil.getBitDouble(data, bitPos);
128
				bitPos = ((Integer)v.get(0)).intValue();
129
				double z = ((Double)v.get(1)).doubleValue();
130
				//double[] coord = new double[]{x, y, z};
131
				ctrlpts[i][0] = x;
132
				ctrlpts[i][1] = y;
133
				ctrlpts[i][2] = z;
134
				if (weight) {
135
					v = DwgUtil.getBitDouble(data, bitPos);
136
					bitPos = ((Integer)v.get(0)).intValue();
137
					weights[i] = ((Double)v.get(1)).doubleValue();
138
				}
139
			}
140
			spline.setControlPoints(ctrlpts);
141
			if (weight) {
142
				spline.setWeights(weights);
143
			}
144
		}
145
		if (fitPointsNumber>0) {
146
			double[][] fitpts = new double[fitPointsNumber][3];
147
			for (int i=0;i<fitPointsNumber;i++) {
148
				v = DwgUtil.getBitDouble(data, bitPos);
149
				bitPos = ((Integer)v.get(0)).intValue();
150
				double x = ((Double)v.get(1)).doubleValue();
151
				v = DwgUtil.getBitDouble(data, bitPos);
152
				bitPos = ((Integer)v.get(0)).intValue();
153
				double y = ((Double)v.get(1)).doubleValue();
154
				v = DwgUtil.getBitDouble(data, bitPos);
155
				bitPos = ((Integer)v.get(0)).intValue();
156
				double z = ((Double)v.get(1)).doubleValue();
157
				fitpts[i][0] = x;
158
				fitpts[i][1] = y;
159
				fitpts[i][2] = z;
160
			}
161
			spline.setFitPoints(fitpts);
162
		}
163
		bitPos = headTailReader.readObjectTailer(data, bitPos, spline);
164
	}
165

  
166

  
167
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgVertexPFaceFaceReader15.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: DwgVertexPFaceFaceReader15.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.DwgVertexPFaceFace;
64

  
65

  
66
public class DwgVertexPFaceFaceReader15 extends AbstractDwg15Reader {
67

  
68
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj)
69
			throws RuntimeException, CorruptedDwgEntityException {
70
		
71
		 if(! (dwgObj instanceof DwgVertexPFaceFace))
72
		    	throw new RuntimeException("ArcReader 15 solo puede leer DwgVertexPFaceFace");
73
		 DwgVertexPFaceFace v = (DwgVertexPFaceFace) dwgObj;
74
		 
75
		 int bitPos = offset;
76
		 
77
		 bitPos = headTailReader.readObjectHeader(data, offset, v);
78
		 
79
		 List val = DwgUtil.getBitShort(data, bitPos);
80
		 bitPos = ((Integer) val.get(0)).intValue();
81
		 int v1 = ((Integer) val.get(1)).intValue();
82
		 
83
		 val = DwgUtil.getBitShort(data, bitPos);
84
		 bitPos = ((Integer) val.get(0)).intValue();
85
		 int v2 = ((Integer) val.get(1)).intValue();
86
		 
87
		 val = DwgUtil.getBitShort(data, bitPos);
88
		 bitPos = ((Integer) val.get(0)).intValue();
89
		 int v3 = ((Integer) val.get(1)).intValue();
90
		 
91
		 val = DwgUtil.getBitShort(data, bitPos);
92
		 bitPos = ((Integer) val.get(0)).intValue();
93
		 int v4 = ((Integer) val.get(1)).intValue();
94
		 
95
		 v.setVerticesidx(new int[]{v1, v2, v3, v4});
96
		 
97
		 bitPos = headTailReader.readObjectTailer(data, bitPos, v);
98
	}
99

  
100
}
101

  
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgMeshReader15.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: DwgMeshReader15.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.DwgHandleReference;
62
import org.gvsig.dwg.lib.DwgObject;
63
import org.gvsig.dwg.lib.DwgUtil;
64
import org.gvsig.dwg.lib.objects.DwgMeshPolyline;
65

  
66

  
67
public class DwgMeshReader15 extends AbstractDwg15Reader {
68

  
69
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj)
70
			throws RuntimeException, CorruptedDwgEntityException {
71
		if(! (dwgObj instanceof DwgMeshPolyline))
72
	    	throw new RuntimeException("ArcReader 15 solo puede leer DwgMeshPolyline");
73
		DwgMeshPolyline m = (DwgMeshPolyline) dwgObj;
74
		int bitPos = offset;
75
		bitPos = headTailReader.readObjectHeader(data, bitPos, m);
76
		
77
		List val = DwgUtil.getBitShort(data, bitPos);
78
		bitPos = ((Integer) val.get(0)).intValue();
79
		int flags = ((Integer) val.get(1)).intValue();
80
		m.setFlags(flags);
81
		
82
		val = DwgUtil.getBitShort(data, bitPos);
83
		bitPos = ((Integer) val.get(0)).intValue();
84
		int curveType = ((Integer) val.get(1)).intValue();
85
		m.setCurveType(curveType);
86
		
87
		val = DwgUtil.getBitShort(data, bitPos);
88
		bitPos = ((Integer) val.get(0)).intValue();
89
		int mVerticies = ((Integer) val.get(1)).intValue();
90
		m.setMVerticies(mVerticies);
91
		
92
		val = DwgUtil.getBitShort(data, bitPos);
93
		bitPos = ((Integer) val.get(0)).intValue();
94
		int nVerticies = ((Integer) val.get(1)).intValue();
95
		m.setNVerticies(nVerticies);
96
		
97
		val = DwgUtil.getBitShort(data, bitPos);
98
		bitPos = ((Integer) val.get(0)).intValue();
99
		int mDensity = ((Integer) val.get(1)).intValue();
100
		m.setMDensity(mDensity);
101
		
102
		val = DwgUtil.getBitShort(data, bitPos);
103
		bitPos = ((Integer) val.get(0)).intValue();
104
		int nDensity = ((Integer) val.get(1)).intValue();
105
		m.setNDensity(nDensity);
106
		
107
		bitPos = headTailReader.readObjectTailer(data, bitPos, m);
108
		
109
		DwgHandleReference handle = new DwgHandleReference();
110
		bitPos = handle.read(data, bitPos);
111
		m.setFirstVertexHandle(handle);
112
		
113
		handle = new DwgHandleReference();
114
		bitPos = handle.read(data, bitPos);
115
		m.setLastVertexHandle(handle);
116
		
117
		handle = new DwgHandleReference();
118
		bitPos = handle.read(data, bitPos);
119
		m.setSeqendHandle(handle);
120
	}
121

  
122
}
123

  
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgEllipseReader15.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.DwgEllipse;
13

  
14

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

  
23
	/* (non-Javadoc)
24
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
25
	 */
26
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
27
		if(! (dwgObj instanceof DwgEllipse))
28
			throw new RuntimeException("ArcReader 15 solo puede leer DwgEllipse");
29
		DwgEllipse ell = (DwgEllipse) dwgObj;
30
		int bitPos = offset;
31
		bitPos = headTailReader.readObjectHeader(data, bitPos, ell);
32
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
33
		bitPos = ((Integer)v.get(0)).intValue();
34
		double x = ((Double)v.get(1)).doubleValue();
35
		v = DwgUtil.getBitDouble(data, bitPos);
36
		bitPos = ((Integer)v.get(0)).intValue();
37
		double y = ((Double)v.get(1)).doubleValue();
38
		v = DwgUtil.getBitDouble(data, bitPos);
39
		bitPos = ((Integer)v.get(0)).intValue();
40
		double z = ((Double)v.get(1)).doubleValue();
41
		double[] coord = new double[]{x, y, z};
42
		ell.setCenter(coord);
43
		v = DwgUtil.getBitDouble(data, bitPos);
44
		bitPos = ((Integer)v.get(0)).intValue();
45
		x = ((Double)v.get(1)).doubleValue();
46
		v = DwgUtil.getBitDouble(data, bitPos);
47
		bitPos = ((Integer)v.get(0)).intValue();
48
		y = ((Double)v.get(1)).doubleValue();
49
		v = DwgUtil.getBitDouble(data, bitPos);
50
		bitPos = ((Integer)v.get(0)).intValue();
51
		z = ((Double)v.get(1)).doubleValue();
52
		coord = new double[]{x, y, z};
53
		ell.setSemiMajorAxisVector(coord);
54
		v = DwgUtil.getBitDouble(data, bitPos);
55
		bitPos = ((Integer)v.get(0)).intValue();
56
		x = ((Double)v.get(1)).doubleValue();
57
		v = DwgUtil.getBitDouble(data, bitPos);
58
		bitPos = ((Integer)v.get(0)).intValue();
59
		y = ((Double)v.get(1)).doubleValue();
60
		v = DwgUtil.getBitDouble(data, bitPos);
61
		bitPos = ((Integer)v.get(0)).intValue();
62
		z = ((Double)v.get(1)).doubleValue();
63
		coord = new double[]{x, y, z};
64
		ell.setExtrusion(coord);
65
		v = DwgUtil.getBitDouble(data, bitPos);
66
		bitPos = ((Integer)v.get(0)).intValue();
67
		double val = ((Double)v.get(1)).doubleValue();
68
		ell.setAxisRatio(val);
69
		v = DwgUtil.getBitDouble(data, bitPos);
70
		bitPos = ((Integer)v.get(0)).intValue();
71
		val = ((Double)v.get(1)).doubleValue();
72
		ell.setInitAngle(val);
73
		v = DwgUtil.getBitDouble(data, bitPos);
74
		bitPos = ((Integer)v.get(0)).intValue();
75
		val = ((Double)v.get(1)).doubleValue();
76
		ell.setEndAngle(val);
77
		bitPos = headTailReader.readObjectTailer(data, bitPos, ell);
78
	}
79
}
tags/org.gvsig.dwg-2.0.46/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/readers/v15/DwgLwPolylineReader15.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
import java.util.List;
10

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

  
16

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

  
25
	/*
26
	 *TODO El metodo original de J.Morell daba excepciones (que eran
27
	 *ocultadas con un catch(Exception){}...BUF!
28
	 *
29
	 * Este metodo trata de copiar literalmente el de Python, para ver
30
	 * si somos capaces de resolver el bug.
31
	 * 
32
	 * */
33
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
34
		
35
			if (!(dwgObj instanceof DwgLwPolyline))
36
				throw new RuntimeException(
37
						"ArcReader 15 solo puede leer DwgLwPolyLine");
38
			DwgLwPolyline line = (DwgLwPolyline) dwgObj;
39
			List val = null;
40
			int bitPos = offset;
41
			bitPos = headTailReader.readObjectHeader(data, bitPos, dwgObj);
42
			val = DwgUtil.getBitShort(data, bitPos);
43
			bitPos = ((Integer) val.get(0)).intValue();
44
			int flag = ((Integer) val.get(1)).intValue();
45
			line.setFlag(flag);
46
			
47
			/*
48
			 * Flag son 4 bits que indican si la lwpline tiene ancho,
49
			 * (3er bit), elevacion (4o bit), grosor (2? bit) y vector
50
			 * de extrusion (1er bit).
51
			 * 5? bit -> n? de bulges
52
			 * 60 bit -> n? de widths
53
			 * 
54
			 * ahora se verifican y se van leyendo
55
			 * */
56
			
57
			
58
			double constWidth = 0d;
59
		    if( (flag & 0x4) > 0){
60
		    	val = DwgUtil.getBitDouble(data, bitPos);
61
				bitPos = ((Integer) val.get(0)).intValue();
62
				constWidth = ((Double) val.get(1)).doubleValue();
63
		    }//if
64
		    line.setConstWidth(constWidth);
65
		    
66
		    double elev = 0d;
67
		    if ( (flag & 0x8) > 0){
68
		    	val = DwgUtil.getBitDouble(data, bitPos);
69
		    	bitPos = ((Integer) val.get(0)).intValue();
70
		    	elev = ((Double) val.get(1)).doubleValue();
71
		    }
72
		    line.setElevation(elev);
73
		    
74
		    double thickness = 0d;
75
		    if ( (flag & 0x2) > 0){
76
		    	val = DwgUtil.getBitDouble(data, bitPos);
77
		    	bitPos = ((Integer) val.get(0)).intValue();
78
		    	thickness = ((Double) val.get(1)).doubleValue();
79
		    }
80
		    line.setThickness(thickness);
81
		    
82
		    double nx = 0d; 
83
		    double ny = 0d;
84
		    double nz = 0d;
85
		    if( (flag & 0x1) > 0){
86
		    	val = DwgUtil.getBitDouble(data, bitPos);
87
		    	bitPos = ((Integer) val.get(0)).intValue();
88
		    	nx = ((Double) val.get(1)).doubleValue();
89
		    	
90
		    	val = DwgUtil.getBitDouble(data, bitPos);
91
		    	bitPos = ((Integer) val.get(0)).intValue();
92
		    	ny = ((Double) val.get(1)).doubleValue();
93
		    	
94
		    	val = DwgUtil.getBitDouble(data, bitPos);
95
		    	bitPos = ((Integer) val.get(0)).intValue();
96
		    	nz = ((Double) val.get(1)).doubleValue();
97
		    }
98
		    line.setNormal(new double[]{nx, ny, nz});
99
		  
100
		    val = DwgUtil.getBitLong(data, bitPos);
101
		    bitPos = ((Integer) val.get(0)).intValue();
102
		    int numberOfPoints = ((Integer) val.get(1)).intValue();
103
		    
104
		    int numberOfBulges = 0;
105
		    if ((flag & 0x10) > 0){
106
		    	val = DwgUtil.getBitLong(data, bitPos);
107
		 	    bitPos = ((Integer) val.get(0)).intValue();
108
		 	    numberOfBulges = ((Integer) val.get(1)).intValue();
109
		    }
110
		    
111
		    int numberOfWidths = 0;
112
		    if ((flag & 0x20) > 0){
113
		    	val = DwgUtil.getBitLong(data, bitPos);
114
		 	    bitPos = ((Integer) val.get(0)).intValue();
115
		 	    numberOfWidths = ((Integer) val.get(1)).intValue();
116
		    }
117
		    
118
		    if(numberOfPoints > 0){
119
		    	//Esto es una chapuza, pero las LwPolylines no se est?n
120
		    	//leyendo bien y en ocasiones nos llegan entidades
121
		    	//con MILLONES de puntos (OutOfMemoryException)
122
		    	//Plantear en la lista de PythonCAD
123
		    	if(numberOfPoints > 10000)
124
		    		throw new CorruptedDwgEntityException("LwPolyline corrupta");
125
		    	List vertices = new ArrayList();
126
		  	    val = DwgUtil.getRawDouble(data, bitPos);
127
		  	    bitPos = ((Integer) val.get(0)).intValue();
128
		  		double x0 = ((Double) val.get(1)).doubleValue();
129
		  		
130
		  		val = DwgUtil.getRawDouble(data, bitPos);
131
		  		bitPos = ((Integer) val.get(0)).intValue();
132
		  		double y0 = ((Double) val.get(1)).doubleValue();
133
		  		
134
		  		vertices.add(new double[]{x0, y0});
135
		  		
136
		  		
137
		  		/*
138
		  		 * TODO azabala 
139
		  		 * Algunos metodos de DwgUtil lanzan excepciones inexperadas
140
		  		 * cuando trabajan para rellenar clases de LwPolyline:
141
		  		 * ->getDefaultDouble
142
		  		 * ->getBits
143
		  		 * etc
144
		  		 * 
145
		  		 * Estas excepciones son del tipo OutOfBounds (se intenta leer un bit
146
		  		 * cuyo orden excede de la capacidad del array)
147
		  		 * La especificaci?n 15 de DWG es seguida al pie de la letra por Pythoncad,
148
		  		 * (y por nosotros) as? que puede ser que el problema est? en los metodos
149
		  		 * de DwgUtil.
150
		  		 * 
151
		  		 * Intentar capturar la excepcion para que no se pierdan las entidades que las
152
		  		 * provocan, y luego solucionar el error
153
		  		 * 
154
		  		 * 
155
		  		 * */
156
		  		for (int i = 1; i < numberOfPoints; i++) {
157
		  			val = DwgUtil.getDefaultDouble(data, bitPos, x0);
158
		  			bitPos = ((Integer) val.get(0)).intValue();
159
		  			double x = ((Double) val.get(1)).doubleValue();
160
		  			
161
		  			val = DwgUtil.getDefaultDouble(data, bitPos, y0);
162
		  			bitPos = ((Integer) val.get(0)).intValue();
163
		  			double y = ((Double) val.get(1)).doubleValue();
164
		  			
165
		  			vertices.add(new double[]{x, y});
166
		  			
167
		  			x0 = x;//se proporcionan como valores por defecto las coordenadas del pto anterior
168
		  			y0 = y;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff