Revision 23942

View differences:

trunk/libraries/libDwg/src/com/iver/cit/jdwglib/util/FMapUtil.java
1
/*
2
 * Created on 18-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.util;
6

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

  
10
import com.iver.cit.gvsig.fmap.core.FPolygon2D;
11
import com.iver.cit.gvsig.fmap.core.FPolygon3D;
12
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
13
import com.iver.cit.gvsig.fmap.core.FPolyline3D;
14
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
15
import com.iver.cit.jdwglib.dwg.objects.DwgVertexPFace;
16

  
17
/**
18
 * @author alzabord
19
 *
20
 */
21
public class FMapUtil {
22
	/**
23
	 * Method that changes a Point3D array to a FPolyline3D. Is useful to
24
	 * convert a polyline given by it points to a FPolyline3D, a polyline 3D in
25
	 * the FMap model object
26
	 *
27
	 * @param pts
28
	 *            Array of Point3D that defines the polyline 3D that will be
29
	 *            converted in a FPolyline3D
30
	 * @return FPolyline3D This FPolyline3D is build using the array of Point3D
31
	 *         that is the argument of the method
32
	 */
33
	public static FPolyline3D points3DToFPolyline3D(List pts) {
34
		GeneralPathX genPathX = getGeneralPathX(pts);
35
		double[] elevations = new double[pts.size()];
36
		for (int i = 0; i < pts.size(); i++) {
37
			elevations[i] = ((double[])pts.get(i))[2];
38
		}
39
		return new FPolyline3D(genPathX, elevations);
40
	}
41

  
42
	private static  GeneralPathX getGeneralPathX(List pts){
43
		GeneralPathX genPathX = new GeneralPathX();
44

  
45
		Object firstVertex = pts.get(0);
46
		double[] coordinate = null;
47
		if(firstVertex instanceof double[])
48
			coordinate = (double[])firstVertex;
49
		else if(firstVertex instanceof DwgVertexPFace){
50
			DwgVertexPFace v = (DwgVertexPFace)firstVertex;
51
			coordinate = v.getPoint();
52
		}else if(firstVertex instanceof Point2D){
53
			Point2D point = (Point2D)firstVertex;
54
			coordinate = new double[]{point.getX(), point.getY()};
55
		}
56
		genPathX.moveTo(coordinate[0],
57
						coordinate[1]);
58

  
59
		//TODO ESTE LIO SE DEBE A QUE EN ALGUNOS CASOS SE GUARDAN
60
		//double[] y en otros el IDwgVertex UNIFICAR
61
		for (int i = 1; i < pts.size(); i++) {
62
			Object vertex = pts.get(i);
63
			double[] vertexCoordinate = null;
64
			if(vertex instanceof double[])
65
				vertexCoordinate = (double[])vertex;
66
			else if(vertex instanceof DwgVertexPFace){
67
				DwgVertexPFace v = (DwgVertexPFace)vertex;
68
				vertexCoordinate = v.getPoint();
69
			}else if(vertex instanceof Point2D){
70
				Point2D point = (Point2D)vertex;
71
				vertexCoordinate = new double[]{point.getX(), point.getY()};
72
			}
73
			genPathX.lineTo(vertexCoordinate[0],
74
							vertexCoordinate[1]);
75
		}
76
		return genPathX;
77
	}
78

  
79
	public static FPolygon3D ptsTo3DPolygon(List pts){
80
		GeneralPathX genPathX = getGeneralPathX(pts);
81
		double[] elevations = new double[pts.size()];
82
		for (int i = 0; i < pts.size(); i++) {
83
//			TODO ESTE LIO SE DEBE A QUE EN ALGUNOS CASOS SE GUARDAN
84
			//double[] y en otros el IDwgVertex UNIFICAR
85
			Object vertex = pts.get(i);
86
			double[] vertexCoordinate = null;
87
			if(vertex instanceof double[])
88
				vertexCoordinate = (double[])vertex;
89
			else{
90
				DwgVertexPFace v = (DwgVertexPFace)vertex;
91
				vertexCoordinate = v.getPoint();
92
			}
93
			elevations[i] = vertexCoordinate[2];
94
		}
95
		return new FPolygon3D(genPathX, elevations);
96
	}
97
	/**
98
	 * Method that changes a Point2D array to a FPolyline2D. Is useful to
99
	 * convert a polyline given by it points to a FPolyline2D, a polyline in the
100
	 * FMap model object
101
	 *
102
	 * @param pts
103
	 *            Array of Point2D that defines the polyline that will be
104
	 *            converted in a FPolyline2D
105
	 * @return FPolyline2D This FPolyline2D is build using the array of Point2D
106
	 *         that is the argument of the method
107
	 */
108
	public static FPolyline2D points2DToFPolyline2D(List pts) {
109
		GeneralPathX genPathX = getGeneralPathX(pts);
110
		return new FPolyline2D(genPathX);
111
	}
112

  
113
	public static FPolygon2D ptsTo2DPolygon(List pts){
114
		GeneralPathX genPathX = getGeneralPathX(pts);
115
		return new FPolygon2D(genPathX);
116
	}
117
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/util/ArcFromBulgeCalculator.java
104 104
	 * @param inc Distance between points in the arc
105 105
	 * @return Vector Vector with the set of Point2D that represents the arc
106 106
	 */
107
	public Vector<double[]> getPoints(double inc) {
108
		Vector<double[]> arc = new Vector<double[]>();
107
	public Vector getPoints(double inc) {
108
		Vector arc = new Vector();
109 109
		double angulo;
110 110
		int iempieza = (int) empieza + 1;
111 111
		int iacaba = (int) acaba;
......
125 125
			}
126 126
			addNode(arc, angulo);
127 127
		}
128
//		Point2D aux = (Point2D)arc.get(arc.size()-1);
129
		double[] aux = arc.get(arc.size() -1);
130
		double aux1 = Math.abs(aux[0]-coord2[0]);
131
		double aux2 = Math.abs(aux[1]-coord2[1]);
128
		Point2D aux = (Point2D)arc.get(arc.size()-1);
129
		double aux1 = Math.abs(aux.getX()-coord2[0]);
130
		double aux2 = Math.abs(aux.getY()-coord2[1]);
132 131
		return arc;
133 132
	}
134 133
	
......
136 135
	 * Method that allows to obtain a set of points located in the central zone of 
137 136
	 * this arc object
138 137
	 */
139
	public Vector<double[]> getCentralPoint() {
140
		Vector<double[]> arc = new Vector<double[]>();
138
	public Vector getCentralPoint() {
139
		Vector arc = new Vector();
141 140
		if (empieza <= acaba) {
142 141
			addNode(arc, (empieza+acaba)/2.0);
143 142
		} else {
......
155 154
		return arc;
156 155
	}
157 156
	
158
	private void addNode(Vector<double[]> arc, double angulo) {
157
	private void addNode(Vector arc, double angulo) {
159 158
		double yy = center[1] + radio * Math.sin(angulo*Math.PI/180.0);
160
		double xx = center[0] + radio * Math.cos(angulo*Math.PI/180.0);	
161
		arc.add(new double[]{xx, yy});
162
	//	arc.add(new Point2D.Double(xx,yy));
159
		double xx = center[0] + radio * Math.cos(angulo*Math.PI/180.0);		
160
		arc.add(new Point2D.Double(xx,yy));
163 161
	}
164 162
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/util/GisModelCurveCalculator.java
56 56
     * @param r double value that represents the radius of the circle
57 57
     * @return Point2D[] An array of Point2D that represents the shape of the circle
58 58
     */
59
	public static List<double[]> calculateGisModelCircle(Point2D c, double r) {
60
		List<double[]> pts = new ArrayList<double[]>();
59
	public static List calculateGisModelCircle(Point2D c, double r) {
60
		List pts = new ArrayList();
61 61
		int angulo = 0;
62 62
		for (angulo=0; angulo<360; angulo++) {
63 63
			double[] pt = new double[]{c.getX(), c.getY()};
......
89 89
		int isa = (int)initAngle;
90 90
		int iea = (int)endAngle;
91 91
		double angulo;
92
		List<double[]> pts = new ArrayList<double[]>();
92
		List pts = new ArrayList();
93 93
		if (initAngle <= endAngle) {
94 94
			angulo = initAngle;
95 95
			double r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
......
189 189
		int isa = (int)sa;
190 190
		int iea = (int)ea;
191 191
		double angulo;
192
		List<double[]> pts = new ArrayList<double[]>();
192
		List pts = new ArrayList();
193 193
		if (sa <= ea) {
194 194
			angulo = sa;
195 195
			pts.add(new double[]{center[0] + r * Math.cos(angulo*Math.PI/(double)180.0), 
......
239 239
	 * @param bulges Array of bulge parameters
240 240
	 * @return Polyline with a new set of arcs added and defined by the bulge parameters
241 241
	 */
242
	public static List calculateGisModelBulge(List<double[]> newPts, double[] bulges) {
243
		Vector<double[]> ptspol = new Vector<double[]>();
242
	public static List calculateGisModelBulge(List newPts, double[] bulges) {
243
		Vector ptspol = new Vector();
244 244
		double[] init = null;
245 245
		double[] end = null;
246 246
		for (int j=0; j<newPts.size(); j++) {
......
255 255
				Vector arc = arcCalculator.getPoints(1);
256 256
				if (bulges[j]<0) {
257 257
					for (int k=arc.size()-1; k>=0; k--) {
258
						ptspol.add((double[]) arc.get(k));
258
						ptspol.add(arc.get(k));
259 259
					}
260 260
					ptspol.remove(ptspol.size()-1);
261 261
				} else {
262 262
					for (int k=0;k<arc.size();k++) {
263
						ptspol.add((double[]) arc.get(k));
263
						ptspol.add(arc.get(k));
264 264
					}
265 265
					ptspol.remove(ptspol.size()-1);
266 266
				}
267 267
			}
268 268
		}
269
		List<double[]> points = new ArrayList<double[]>();
269
		List points = new ArrayList();
270 270
		for (int j=0;j<ptspol.size();j++) {
271 271
			points.add(ptspol.get(j));
272 272
		}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgPFaceReader15.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-03-20 19:57:08  azabala
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
49 52
* source code cleaning
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgVertexPFaceFaceReader15.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-03-20 19:57:08  azabala
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
49 52
* source code cleaning
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgMeshReader15.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-03-20 19:57:08  azabala
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
49 52
* source code cleaning
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgBlockHeaderReader15.java
5 5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v15;
6 6

  
7 7
import java.util.ArrayList;
8
import java.util.Vector;
9 8

  
10 9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
11 10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
......
33 32
		bitPos = ((Integer)v.get(0)).intValue();
34 33
		int numReactors = ((Integer)v.get(1)).intValue();
35 34
		hdr.setNumReactors(numReactors);
36
		
35

  
37 36
		v = DwgUtil.getTextString(data, bitPos);
38 37
		bitPos = ((Integer)v.get(0)).intValue();
39 38
		String name = (String)v.get(1);
40 39
		hdr.setName(name);
41
		
40

  
42 41
		v = DwgUtil.testBit(data, bitPos);
43 42
		bitPos = ((Integer)v.get(0)).intValue();
44 43
		boolean flag = ((Boolean)v.get(1)).booleanValue();
45 44
		hdr.setFlag64(flag);
46
		
45

  
47 46
		v = DwgUtil.getBitShort(data, bitPos);
48 47
		bitPos = ((Integer)v.get(0)).intValue();
49 48
		int xrefplus1 = ((Integer)v.get(1)).intValue();
50 49
		hdr.setXRefPlus(xrefplus1);
51
		
50

  
52 51
		v = DwgUtil.testBit(data, bitPos);
53 52
		bitPos = ((Integer)v.get(0)).intValue();
54 53
		boolean xdep = ((Boolean)v.get(1)).booleanValue();
55 54
		hdr.setXdep(xdep);
56
		
55

  
57 56
		v = DwgUtil.testBit(data, bitPos);
58 57
		bitPos = ((Integer)v.get(0)).intValue();
59 58
		boolean anon = ((Boolean)v.get(1)).booleanValue();
60 59
		hdr.setAnonymous(anon);
61
		
60

  
62 61
		v = DwgUtil.testBit(data, bitPos);
63 62
		bitPos = ((Integer)v.get(0)).intValue();
64 63
		boolean hasatts = ((Boolean)v.get(1)).booleanValue();
65 64
		hdr.setHasAttrs(hasatts);
66
		
65

  
67 66
		v = DwgUtil.testBit(data, bitPos);
68 67
		bitPos = ((Integer)v.get(0)).intValue();
69 68
		boolean bxref = ((Boolean)v.get(1)).booleanValue();
70 69
		hdr.setBlkIsXRef(bxref);
71
		
70

  
72 71
		v = DwgUtil.testBit(data, bitPos);
73 72
		bitPos = ((Integer)v.get(0)).intValue();
74 73
		boolean xover = ((Boolean)v.get(1)).booleanValue();
75 74
		hdr.setXRefOverLaid(xover);
76
		
75

  
77 76
		v = DwgUtil.testBit(data, bitPos);
78 77
		bitPos = ((Integer)v.get(0)).intValue();
79 78
		boolean loaded = ((Boolean)v.get(1)).booleanValue();
80 79
		hdr.setLoaded(loaded);
81
		
80

  
82 81
		v = DwgUtil.getBitDouble(data, bitPos);
83 82
		bitPos = ((Integer)v.get(0)).intValue();
84 83
		double bx = ((Double)v.get(1)).doubleValue();
85
		
84

  
86 85
		v = DwgUtil.getBitDouble(data, bitPos);
87 86
		bitPos = ((Integer)v.get(0)).intValue();
88 87
		double by = ((Double)v.get(1)).doubleValue();
89
		
88

  
90 89
		v = DwgUtil.getBitDouble(data, bitPos);
91 90
		bitPos = ((Integer)v.get(0)).intValue();
92 91
		double bz = ((Double)v.get(1)).doubleValue();
93 92
		double[] coord = new double[]{bx, by, bz};
94 93
		hdr.setBasePoint(coord);
95
		
94

  
96 95
		v = DwgUtil.getTextString(data, bitPos);
97 96
		bitPos = ((Integer)v.get(0)).intValue();
98 97
		String pname = (String)v.get(1);
......
107 106
			}
108 107
			icount++;
109 108
		}
110
		
109

  
111 110
		v = DwgUtil.getTextString(data, bitPos);
112 111
		bitPos = ((Integer)v.get(0)).intValue();
113 112
		String desc = (String)v.get(1);
......
121 120
			//previewData = pdata;
122 121
			bitPos = bitPos + count;
123 122
		}
124
		
123

  
125 124
		DwgHandleReference blkCtrlHdl = new DwgHandleReference();
126 125
		bitPos = blkCtrlHdl.read(data, bitPos);
127 126
		hdr.setBlockControlHandle(blkCtrlHdl);
128
	    
127

  
129 128
		for (int i=0;i<numReactors;i++) {
130 129
			DwgHandleReference reactor = new DwgHandleReference();
131 130
			bitPos = reactor.read(data, bitPos);
132
	
131

  
133 132
		}
134
		
133

  
135 134
		DwgHandleReference xdicObjHdl = new DwgHandleReference();
136 135
		bitPos = xdicObjHdl.read(data, bitPos);
137 136
		hdr.setXDicObjHandle(xdicObjHdl);
138
		
137

  
139 138
		DwgHandleReference handle = new DwgHandleReference();
140 139
		bitPos = handle.read(data, bitPos);
141 140
		hdr.setNullHandle(handle);
142
		
141

  
143 142
		handle = new DwgHandleReference();
144 143
		bitPos = handle.read(data, bitPos);
145 144
		hdr.setBlockEntityHandle(handle);
146
		
145

  
147 146
		if ((!bxref) && (!xover)) {
148 147
			handle = new DwgHandleReference();
149 148
			bitPos = handle.read(data, bitPos);
150 149
			hdr.setFirstEntityHandle(handle);
151
			
150

  
152 151
			handle = new DwgHandleReference();
153 152
			bitPos = handle.read(data, bitPos);
154 153
			hdr.setLastEntityHandle(handle);
155 154
		}//si el bloque es una referencia externa, es un fichero entero
156 155
		//(no ninguna entidad del fichero actual)
157
		
156

  
158 157
		handle = new DwgHandleReference();
159 158
		bitPos = handle.read(data, bitPos);
160 159
		hdr.setEndBlkEntityHandle(handle);
161
		
160

  
162 161
		if(icount > 0){
163 162
			DwgHandleReference[] insertHandles = new
164 163
				DwgHandleReference[icount];
......
168 167
			}
169 168
			hdr.setInsertHandles(insertHandles);
170 169
		}
171
		
170

  
172 171
		handle = new DwgHandleReference();
173 172
		bitPos = handle.read(data, bitPos);
174 173
		hdr.setLayoutHandle(handle);
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgVertexPFaceReader15.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-03-20 19:57:08  azabala
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
49 52
* source code cleaning
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgVertexMeshReader15.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-03-20 19:57:08  azabala
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
49 52
* source code cleaning
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/DwgBlockControlReader15.java
14 14
import com.iver.cit.jdwglib.dwg.objects.DwgBlockControl;
15 15

  
16 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
17
 * @author azabala
21 18
 */
22 19
public class DwgBlockControlReader15 extends AbstractDwg15Reader{
23 20

  
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v15/AbstractDwg15Reader.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.1  2007-01-25 20:05:58  azabala
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
49 52
* start of implementation of specific versions' object readers
50 53
*
51 54
*
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgLineReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgLine;
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 DwgLineReader2004 extends AbstractDwg2004Reader{
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 DwgLine))
28
			throw new RuntimeException("LineReader 2004 solo puede leer DwgLine");
29
		DwgLine line = (DwgLine) dwgObj;
30
		line.inserta();
31

  
32
		int bitPos = offset;
33
		ArrayList v;
34

  
35
		bitPos = readObjectHeader(data, bitPos, line);
36

  
37
		v = DwgUtil.testBit(data, bitPos);
38
		bitPos = ((Integer)v.get(0)).intValue();
39
		line.setZflag(((Boolean)v.get(1)).booleanValue());
40

  
41
		v = DwgUtil.getRawDouble(data, bitPos);
42
		bitPos = ((Integer)v.get(0)).intValue();
43
		double x1 = ((Double)v.get(1)).doubleValue();
44
		v = DwgUtil.getDefaultDouble(data, bitPos, x1);
45
		bitPos = ((Integer)v.get(0)).intValue();
46
		double x2 = ((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
		v = DwgUtil.getDefaultDouble(data, bitPos, y1);
51
		bitPos = ((Integer)v.get(0)).intValue();
52
		double y2 = ((Double)v.get(1)).doubleValue();
53
		double[] p1;
54
		double[] p2;
55
	    if (!line.isZflag()) {
56
			v = DwgUtil.getRawDouble(data, bitPos);
57
			bitPos = ((Integer)v.get(0)).intValue();
58
			double z1 = ((Double)v.get(1)).doubleValue();
59
			v = DwgUtil.getDefaultDouble(data, bitPos, z1);
60
			bitPos = ((Integer)v.get(0)).intValue();
61
			double z2 = ((Double)v.get(1)).doubleValue();
62
			p1 = new double[]{x1, y1, z1};
63
			p2 = new double[]{x2, y2, z2};
64
		} else {
65
			p1 = new double[]{x1, y1, 0d};
66
			p2 = new double[]{x2, y2, 0d};
67
		}
68
	    line.setP1(p1);
69
	    line.setP2(p2);
70

  
71
		v = DwgUtil.testBit(data, bitPos);
72
		bitPos = ((Integer)v.get(0)).intValue();
73
		boolean flag = ((Boolean)v.get(1)).booleanValue();
74
	    double val;
75
		if (flag) {
76
			val=0.0;
77
		} else {
78
			v = DwgUtil.getBitDouble(data, bitPos);
79
			bitPos = ((Integer)v.get(0)).intValue();
80
			val = ((Double)v.get(1)).doubleValue();
81
		}
82
		line.setThickness(val);
83

  
84
		v = DwgUtil.testBit(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		flag = ((Boolean)v.get(1)).booleanValue();
87
		double x, y, z;
88
	    if (flag) {
89
			 x = y = 0.0;
90
			 z = 1.0;
91
		} else {
92
			v = DwgUtil.getBitDouble(data, bitPos);
93
			bitPos = ((Integer)v.get(0)).intValue();
94
			x = ((Double)v.get(1)).doubleValue();
95
			v = DwgUtil.getBitDouble(data, bitPos);
96
			bitPos = ((Integer)v.get(0)).intValue();
97
			y = ((Double)v.get(1)).doubleValue();
98
			v = DwgUtil.getBitDouble(data, bitPos);
99
			bitPos = ((Integer)v.get(0)).intValue();
100
			z = ((Double)v.get(1)).doubleValue();
101
		}
102
		double[] coord = new double[]{x, y, z};
103
		line.setExtrusion(coord);
104
		if(line.getAvanzar()) bitPos++;
105
		bitPos = readObjectTailer(data, bitPos, line);
106
	}
107

  
108
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgPointReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgPoint;
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 DwgPointReader2004 extends AbstractDwg2004Reader{
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 DwgPoint))
28
			throw new RuntimeException("PointReader 2004 solo puede leer DwgPoint");
29
		DwgPoint pt = (DwgPoint) dwgObj;
30
		pt.inserta();
31

  
32
		int bitPos = offset;
33

  
34
		ArrayList v;
35

  
36
		bitPos = readObjectHeader(data, bitPos, pt);
37

  
38
		v = DwgUtil.getBitDouble(data, bitPos);
39
		bitPos = ((Integer)v.get(0)).intValue();
40
		double x = ((Double)v.get(1)).doubleValue();
41
		v = DwgUtil.getBitDouble(data, bitPos);
42
		bitPos = ((Integer)v.get(0)).intValue();
43
		double y = ((Double)v.get(1)).doubleValue();
44
		v = DwgUtil.getBitDouble(data, bitPos);
45
		bitPos = ((Integer)v.get(0)).intValue();
46
		double z = ((Double)v.get(1)).doubleValue();
47
		double[] coord = new double[]{x, y, z};
48
		pt.setPoint(coord);
49

  
50
		v = DwgUtil.testBit(data, bitPos);
51
		bitPos = ((Integer)v.get(0)).intValue();
52
		boolean flag = ((Boolean)v.get(1)).booleanValue();
53
	    double val;
54
		if (flag) {
55
			val=0.0;
56
		} else {
57
			v = DwgUtil.getBitDouble(data, bitPos);
58
			bitPos = ((Integer)v.get(0)).intValue();
59
			val = ((Double)v.get(1)).doubleValue();
60
		}
61
		pt.setThickness(val);
62

  
63
		v = DwgUtil.testBit(data, bitPos);
64
		bitPos = ((Integer)v.get(0)).intValue();
65
		flag = ((Boolean)v.get(1)).booleanValue();
66
		if (flag) {
67
			 x = y = 0.0;
68
			 z = 1.0;
69
		} else {
70
			v = DwgUtil.getBitDouble(data, bitPos);
71
			bitPos = ((Integer)v.get(0)).intValue();
72
			x = ((Double)v.get(1)).doubleValue();
73
			v = DwgUtil.getBitDouble(data, bitPos);
74
			bitPos = ((Integer)v.get(0)).intValue();
75
			y = ((Double)v.get(1)).doubleValue();
76
			v = DwgUtil.getBitDouble(data, bitPos);
77
			bitPos = ((Integer)v.get(0)).intValue();
78
			z = ((Double)v.get(1)).doubleValue();
79
		}
80
		coord = new double[]{x, y, z};
81
		pt.setExtrusion(coord);
82

  
83
		v = DwgUtil.getBitDouble(data, bitPos);
84
		bitPos = ((Integer)v.get(0)).intValue();
85
		val = ((Double)v.get(1)).doubleValue();
86
		pt.setXAxisAngle(val);
87

  
88
		bitPos = readObjectTailer(data, bitPos, pt);
89
	}
90
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgBlockReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgBlock;
14

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

  
23
	/*
24
	 * (non-Javadoc)
25
	 *
26
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[],
27
	 *      int, com.iver.cit.jdwglib.dwg.DwgObject)
28
	 */
29
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException{
30
			if(! (dwgObj instanceof DwgBlock))
31
				throw new RuntimeException("DwgBlockReader2004 solo puede leer DwgBlock");
32
			DwgBlock blk = (DwgBlock) dwgObj;
33
			int bitPos = offset;
34
			ArrayList v;
35

  
36
			bitPos = readObjectHeader(data, bitPos, dwgObj);
37

  
38
			v = DwgUtil.getTextString(data, bitPos);
39
			bitPos = ((Integer)v.get(0)).intValue();
40
			String text = (String)v.get(1);
41
			blk.setName(text);
42

  
43

  
44
			bitPos = readObjectTailer(data, bitPos, dwgObj);
45
			blk.inserta();
46
	}
47
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgVertexMeshReader2004.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: DwgVertexMeshReader15.java,v 1.1.2.1 2007/03/21 19:49:16 azabala Exp $
47
* $Log: DwgVertexMeshReader15.java,v $
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 com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
57

  
58
import java.util.List;
59

  
60
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
61
import com.iver.cit.jdwglib.dwg.DwgObject;
62
import com.iver.cit.jdwglib.dwg.DwgUtil;
63
import com.iver.cit.jdwglib.dwg.objects.DwgVertexMesh;
64

  
65
public class DwgVertexMeshReader2004 extends AbstractDwg2004Reader {
66

  
67
    //similar to DwgVertex3D (and all derived vertices...
68
	//apply inheritance
69
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj)
70
			throws RuntimeException, CorruptedDwgEntityException {
71
		 if(! (dwgObj instanceof DwgVertexMesh))
72
		    	throw new RuntimeException("DwgVertexMeshReader2004 solo puede leer DwgVertexMesh");
73
		 DwgVertexMesh v = (DwgVertexMesh) dwgObj;
74
		 int bitPos = offset;
75
		 bitPos = readObjectHeader(data, bitPos, v);
76

  
77
		 List val = DwgUtil.getRawChar(data, bitPos);
78
		 bitPos = ((Integer) val.get(0)).intValue();
79
		 int flag = ((Integer) val.get(1)).intValue();
80
		 v.setFlags(flag);
81

  
82
		 val = DwgUtil.getBitDouble(data, bitPos);
83
		 bitPos = ((Integer) val.get(0)).intValue();
84
		 double x = ((Double) val.get(1)).doubleValue();
85

  
86
		 val = DwgUtil.getBitDouble(data, bitPos);
87
		 bitPos = ((Integer) val.get(0)).intValue();
88
		 double y = ((Double) val.get(1)).doubleValue();
89

  
90
		 val = DwgUtil.getBitDouble(data, bitPos);
91
		 bitPos = ((Integer) val.get(0)).intValue();
92
		 double z = ((Double) val.get(1)).doubleValue();
93
		 v.setPoint(new double[]{x, y, z});
94

  
95
		 bitPos = readObjectTailer(data, bitPos, v);
96
	}
97

  
98
}
99

  
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgBlockControlReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8
import java.util.Vector;
9

  
10
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
11
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
12
import com.iver.cit.jdwglib.dwg.DwgObject;
13
import com.iver.cit.jdwglib.dwg.DwgUtil;
14
import com.iver.cit.jdwglib.dwg.objects.DwgBlockControl;
15

  
16
/**
17
 * @author azabala
18
 */
19
public class DwgBlockControlReader2004 extends AbstractDwg2004Reader{
20

  
21
	/* (non-Javadoc)
22
	 * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
23
	 */
24
	public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException{
25

  
26
		 if(! (dwgObj instanceof DwgBlockControl))
27
		    	throw new RuntimeException("ArcReader 2004 solo puede leer DwgBlockControl");
28
		    DwgBlockControl blk = (DwgBlockControl) dwgObj;
29
		    blk.inserta();
30
			int bitPos = offset;
31

  
32
			ArrayList v;
33

  
34

  
35
			v = DwgUtil.getBitLong(data, bitPos);
36
			bitPos = ((Integer)v.get(0)).intValue();
37
			int numReactors = ((Integer)v.get(1)).intValue();
38
			blk.setNumReactors(numReactors);
39

  
40
//			FIXME: Asegurarse de esto
41
			v = DwgUtil.testBit(data, bitPos);
42
			bitPos = ((Integer)v.get(0)).intValue();
43
			boolean xdicFlag = ((Boolean)v.get(1)).booleanValue();
44

  
45
			v = DwgUtil.getBitShort(data, bitPos);
46
			bitPos = ((Integer)v.get(0)).intValue();
47
			int enumeration = ((Integer)v.get(1)).intValue();
48

  
49
			DwgHandleReference hr = new DwgHandleReference();
50
			bitPos = hr.read(data, bitPos);
51
			blk.setNullHandle(hr);
52

  
53
			if(!xdicFlag){
54
				hr = new DwgHandleReference();
55
				bitPos = hr.read(data, bitPos);
56
				blk.setXDicObjHandle(hr);
57
			}
58

  
59
			if (enumeration>0) {
60
				Vector handles = new Vector();
61
				for (int i=0;i<enumeration;i++) {
62
					hr = new DwgHandleReference();
63
					bitPos = hr.read(data, bitPos);
64
					handles.add(hr);
65
				}
66
				blk.setCode2Handles(handles);
67
			}
68

  
69
			hr = new DwgHandleReference();
70
			bitPos = hr.read(data, bitPos);
71
			blk.setModelSpaceHandle(hr);
72

  
73
			hr = new DwgHandleReference();
74
			bitPos = hr.read(data, bitPos);
75
			blk.setPaperSpaceHandle(hr);
76
		}
77
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgEndBlkReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgEndblk;
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 DwgEndBlkReader2004 extends AbstractDwg2004Reader{
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 DwgEndblk))
28
			throw new RuntimeException("ArcReader 2004 solo puede leer DwgEndBlk");
29
		DwgEndblk blk = (DwgEndblk) dwgObj;
30
		int bitPos = offset;
31
		ArrayList v;
32

  
33
		bitPos = readObjectHeader(data, bitPos, blk);
34
		bitPos = readObjectTailer(data, bitPos, blk);
35
		blk.inserta();
36
	}
37
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgMTextReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
10
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgMText;
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 DwgMTextReader2004 extends AbstractDwg2004Reader{
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 DwgMText))
28
			throw new RuntimeException("ArcReader 2004 solo puede leer DwgMText");
29

  
30
		DwgMText txt = (DwgMText) dwgObj;
31
		int bitPos = offset;
32
		ArrayList v;
33

  
34

  
35
		bitPos =readObjectHeader(data, bitPos, txt);
36

  
37
		v = DwgUtil.getBitDouble(data, bitPos);
38
		bitPos = ((Integer)v.get(0)).intValue();
39
		double x = ((Double)v.get(1)).doubleValue();
40
		v = DwgUtil.getBitDouble(data, bitPos);
41
		bitPos = ((Integer)v.get(0)).intValue();
42
		double y = ((Double)v.get(1)).doubleValue();
43
		v = DwgUtil.getBitDouble(data, bitPos);
44
		bitPos = ((Integer)v.get(0)).intValue();
45
		double z = ((Double)v.get(1)).doubleValue();
46
		double[] coord = new double[]{x, y, z};
47
		txt.setInsertionPoint(coord);
48

  
49
		v = DwgUtil.getBitDouble(data, bitPos);
50
		bitPos = ((Integer)v.get(0)).intValue();
51
		x = ((Double)v.get(1)).doubleValue();
52
		v = DwgUtil.getBitDouble(data, bitPos);
53
		bitPos = ((Integer)v.get(0)).intValue();
54
		y = ((Double)v.get(1)).doubleValue();
55
		v = DwgUtil.getBitDouble(data, bitPos);
56
		bitPos = ((Integer)v.get(0)).intValue();
57
		z = ((Double)v.get(1)).doubleValue();
58
		coord = new double[]{x, y, z};
59
		txt.setExtrusion(coord);
60

  
61
		v = DwgUtil.getBitDouble(data, bitPos);
62
		bitPos = ((Integer)v.get(0)).intValue();
63
		x = ((Double)v.get(1)).doubleValue();
64
		v = DwgUtil.getBitDouble(data, bitPos);
65
		bitPos = ((Integer)v.get(0)).intValue();
66
		y = ((Double)v.get(1)).doubleValue();
67
		v = DwgUtil.getBitDouble(data, bitPos);
68
		bitPos = ((Integer)v.get(0)).intValue();
69
		z = ((Double)v.get(1)).doubleValue();
70
		coord = new double[]{x, y, z};
71
		txt.setXAxisDirection(coord);
72

  
73
		v = DwgUtil.getBitDouble(data, bitPos);
74
		bitPos = ((Integer)v.get(0)).intValue();
75
		double val = ((Double)v.get(1)).doubleValue();
76
		txt.setWidth(val);
77

  
78
		v = DwgUtil.getBitDouble(data, bitPos);
79
		bitPos = ((Integer)v.get(0)).intValue();
80
		val = ((Double)v.get(1)).doubleValue();
81
		txt.setHeight(val);
82

  
83
		v = DwgUtil.getBitShort(data, bitPos);
84
		bitPos = ((Integer)v.get(0)).intValue();
85
		int ival = ((Integer)v.get(1)).intValue();
86
		txt.setAttachment(ival);
87

  
88
		v = DwgUtil.getBitShort(data, bitPos);
89
		bitPos = ((Integer)v.get(0)).intValue();
90
		ival = ((Integer)v.get(1)).intValue();
91
		txt.setDrawingDir(ival);
92

  
93
		v = DwgUtil.getBitDouble(data, bitPos);
94
		bitPos = ((Integer)v.get(0)).intValue();
95
		val = ((Double)v.get(1)).doubleValue();
96
		txt.setExtHeight(val);
97

  
98
		v = DwgUtil.getBitDouble(data, bitPos);
99
		bitPos = ((Integer)v.get(0)).intValue();
100
		val = ((Double)v.get(1)).doubleValue();
101
		txt.setExtWidth(val);
102

  
103
		v = DwgUtil.getTextString(data, bitPos);
104
		bitPos = ((Integer)v.get(0)).intValue();
105
		String text = (String)v.get(1);
106
		txt.setText(text);
107

  
108
		v = DwgUtil.getBitShort(data, bitPos);
109
		bitPos = ((Integer)v.get(0)).intValue();
110
		ival = ((Integer)v.get(1)).intValue();
111
		txt.setLineSpacingStyle(ival);
112

  
113
		v = DwgUtil.getBitDouble(data, bitPos);
114
		bitPos = ((Integer)v.get(0)).intValue();
115
		val = ((Double)v.get(1)).doubleValue();
116
		txt.setLineSpacingFactor(val);
117

  
118
		v = DwgUtil.testBit(data, bitPos);
119
		bitPos = ((Integer)v.get(0)).intValue();
120
		boolean flag = ((Boolean)v.get(1)).booleanValue(); //unknow
121

  
122
		v = DwgUtil.getBitLong(data, bitPos); //UNKNOWN LONG DE MOMENTO NO SALE
123
		bitPos = ((Integer)v.get(0)).intValue();
124
		int Unknown  = ((Integer)v.get(1)).intValue();
125
		bitPos = readObjectTailer(data, bitPos, txt);
126

  
127
		DwgHandleReference hr = new DwgHandleReference();
128
		bitPos = hr.read(data, bitPos);
129
		txt.setStyleHandle(hr);
130

  
131
		txt.inserta();
132

  
133
	}
134
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/AbstractDwg2004Reader.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,v 1.1.2.2 2007/03/21 19:49:16 azabala Exp $
47
* $Log: AbstractDwg15Reader.java,v $
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 com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
57

  
58
import java.util.ArrayList;
59

  
60
import org.apache.log4j.Logger;
61

  
62
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
63
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
64
import com.iver.cit.jdwglib.dwg.DwgObject;
65
import com.iver.cit.jdwglib.dwg.DwgUtil;
66
import com.iver.cit.jdwglib.dwg.objects.DwgArc;
67
import com.iver.cit.jdwglib.dwg.objects.DwgAttrib;
68
import com.iver.cit.jdwglib.dwg.objects.DwgBlock;
69
import com.iver.cit.jdwglib.dwg.objects.DwgCircle;
70
import com.iver.cit.jdwglib.dwg.objects.DwgEllipse;
71
import com.iver.cit.jdwglib.dwg.objects.DwgEndblk;
72
import com.iver.cit.jdwglib.dwg.objects.DwgInsert;
73
import com.iver.cit.jdwglib.dwg.objects.DwgLine;
74
import com.iver.cit.jdwglib.dwg.objects.DwgLwPolyline;
75
import com.iver.cit.jdwglib.dwg.objects.DwgMText;
76
import com.iver.cit.jdwglib.dwg.objects.DwgPoint;
77
import com.iver.cit.jdwglib.dwg.objects.DwgPolyline3D;
78
import com.iver.cit.jdwglib.dwg.objects.DwgSeqend;
79
import com.iver.cit.jdwglib.dwg.objects.DwgSpline;
80
import com.iver.cit.jdwglib.dwg.objects.DwgText;
81
import com.iver.cit.jdwglib.dwg.objects.DwgVertex3D;
82
import com.iver.cit.jdwglib.dwg.objects.DwgAttdef;
83
import com.iver.cit.jdwglib.dwg.objects.DwgSolid;
84
import com.iver.cit.jdwglib.dwg.readers.DwgFileVR2004Reader;
85
import com.iver.cit.jdwglib.dwg.readers.IDwgFileReader;
86
import com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader;
87

  
88
public abstract class AbstractDwg2004Reader implements IDwgObjectReader{
89

  
90
	private static Logger logger = Logger.getLogger(AbstractDwg2004Reader.class.getName());
91

  
92
	/**
93
	 * Reads the header of a dwg object2004
94
	 * */
95
	public int readObjectHeader(int[] data, int offset, DwgObject dwgObject) throws RuntimeException, CorruptedDwgEntityException{
96
		int bitPos = offset;
97

  
98

  
99
		Integer mode = (Integer) DwgUtil.getBits(data, 2, bitPos);
100
		bitPos = bitPos + 2;
101
		dwgObject.setMode(mode.intValue());
102

  
103

  
104
//		ArrayList v = DwgUtil.getBitShort(data, bitPos);
105
		ArrayList v = DwgUtil.getBitLong(data, bitPos); //Según especificaciones
106
		bitPos = ((Integer) v.get(0)).intValue();
107
		int rnum = ((Integer) v.get(1)).intValue();
108
		dwgObject.setNumReactors(rnum);
109

  
110
		//FIXME: ¿Por qué hace esto? Si entra en cualquiera de las condiciones
111
		// se perdería un bit.
112
		// ¿Es correcto o, tal vez están equivocadas las especificaciones en este punto?
113
		// Vale, en otro punto de las especificaciones dice "Only entities have this flag"
114
		if(dwgObject instanceof DwgLine) dwgObject.setXDicObjFlag(true);
115
		else if(dwgObject instanceof DwgPoint) dwgObject.setXDicObjFlag(true);
116
		else if(dwgObject instanceof DwgCircle) dwgObject.setXDicObjFlag(true);
117
		else if(dwgObject instanceof DwgArc) dwgObject.setXDicObjFlag(true);
118
		else if(dwgObject instanceof DwgLwPolyline) dwgObject.setXDicObjFlag(true);
119
		else if(dwgObject instanceof DwgEllipse) dwgObject.setXDicObjFlag(true);
120
		else if(dwgObject instanceof DwgMText) dwgObject.setXDicObjFlag(true);
121
		else if(dwgObject instanceof DwgText) dwgObject.setXDicObjFlag(true);
122
		else if(dwgObject instanceof DwgBlock) dwgObject.setXDicObjFlag(true);
123
		else if(dwgObject instanceof DwgEndblk) dwgObject.setXDicObjFlag(true);
124
		else if(dwgObject instanceof DwgPolyline3D) dwgObject.setXDicObjFlag(true);
125
		else if(dwgObject instanceof DwgVertex3D) dwgObject.setXDicObjFlag(true);
126
		else if(dwgObject instanceof DwgSeqend) dwgObject.setXDicObjFlag(true);
127
		else if(dwgObject instanceof DwgInsert) dwgObject.setXDicObjFlag(true);
128
		else if(dwgObject instanceof DwgAttrib) dwgObject.setXDicObjFlag(true);
129
		else if(dwgObject instanceof DwgSpline) dwgObject.setXDicObjFlag(true);
130
		else if(dwgObject instanceof DwgAttdef) dwgObject.setXDicObjFlag(true);
131
		else if(dwgObject instanceof DwgSolid) dwgObject.setXDicObjFlag(true);
132
		else {
133
			v = DwgUtil.testBit(data, bitPos);
134
			bitPos = ((Integer)v.get(0)).intValue();
135
			boolean XdicFlag = ((Boolean) v.get(1)).booleanValue();
136
			dwgObject.setXDicObjFlag(XdicFlag);
137
		}
138
		v = DwgUtil.testBit(data, bitPos);
139
		bitPos = ((Integer) v.get(0)).intValue();
140
		boolean nolinks = ((Boolean) v.get(1)).booleanValue();
141
		dwgObject.setNoLinks(nolinks);
142

  
143
//		Segun las especificaciones, en R2004+ el color se debe leer como un
144
//		CMC, sin embargo aquí no parece que sea así
145
//		v = DwgUtil.getCmColor(data, bitPos, dwgObject.getVersion());
146
		v = DwgUtil.getBitShort(data, bitPos);
147
		bitPos = ((Integer) v.get(0)).intValue();
148
		int color = ((Integer) v.get(1)).intValue();
149
		dwgObject.setColor(color);
150

  
151
		v = DwgUtil.getBitDouble(data, bitPos);
152
		bitPos = ((Integer) v.get(0)).intValue();
153
		float ltscale = ((Double) v.get(1)).floatValue();
154

  
155
		Integer ltflag = (Integer) DwgUtil.getBits(data, 2, bitPos);
156
		/*
157
		 * 00: bylayer;
158
		 * 01: byblock;
159
		 * 10: continuous;
160
		 * 11: linetype handlen present at end of object
161
		 */
162
		bitPos = bitPos + 2;
163

  
164
		Integer psflag = (Integer) DwgUtil.getBits(data, 2, bitPos);
165
		/*
166
		 * 00: bylayer;
167
		 * 01: byblock;
168
		 * 10: continuous;
169
		 * 11: linetype handlen present at end of object
170
		 */
171
		bitPos = bitPos + 2;
172

  
173
		v = DwgUtil.getBitShort(data, bitPos);
174
		bitPos = ((Integer) v.get(0)).intValue();
175
		int invis = ((Integer) v.get(1)).intValue();
176

  
177
		v = DwgUtil.getRawChar(data, bitPos);
178
		bitPos = ((Integer) v.get(0)).intValue();
179
		int weight = ((Integer) v.get(1)).intValue();
180

  
181
		return bitPos;
182
	}
183

  
184
	/**
185
	 * Reads the tailer of a dwg object2004
186
	 * */
187
	public int readObjectTailer(int[] data, int offset, DwgObject dwgObject) throws RuntimeException, CorruptedDwgEntityException{
188
		int bitPos = offset;
189
		/*
190
		 * Subentity ref handle. Esto se aplica sobre VERTEX, ATTRIB, SEQEND
191
		 */
192
		if (dwgObject.getMode() == 0x0) {
193
			DwgHandleReference subEntityHandle = new DwgHandleReference();
194
			bitPos = subEntityHandle.read(data, bitPos);
195
			dwgObject.setSubEntityHandle(subEntityHandle);
196
//		} else {
197
//			logger.warn("entMode != 0 : "+dwgObject.getMode()+ " " + dwgObject.getClass().getName());
198
		}
199

  
200
		/*
201
		 * Reactors handles TODO No se están usando para setear nada en
202
		 * DwgObject
203
		 */
204
		DwgHandleReference reactorHandle;
205
		for (int i = 0; i < dwgObject.getNumReactors(); i++) {
206
			reactorHandle = new DwgHandleReference();
207
			bitPos = reactorHandle.read(data, bitPos);
208
			dwgObject.addReactorHandle(reactorHandle);
209
		}
210

  
211
		/*
212
		 * XDICOBJHANDLE
213
		 */
214
		if(dwgObject.isXDicObjFlag()!= true){
215
			DwgHandleReference xDicObjHandle = new DwgHandleReference();
216
			bitPos = xDicObjHandle.read(data, bitPos);
217
			dwgObject.setXDicObjHandle(xDicObjHandle);
218
		}
219

  
220
		if (!dwgObject.isNoLinks()) {
221

  
222
			DwgHandleReference previousHandle = new DwgHandleReference();
223
			bitPos = previousHandle.read(data, bitPos);
224
			dwgObject.setPreviousHandle(previousHandle);
225

  
226
			DwgHandleReference nextHandle = new DwgHandleReference();
227
			bitPos = nextHandle.read(data, bitPos);
228
			dwgObject.setNextHandle(nextHandle);
229

  
230
		}
231

  
232

  
233
		/*
234
		 * Layer Handle code
235
		 */
236

  
237
		DwgHandleReference handle = new DwgHandleReference();
238
		bitPos = handle.read(data, bitPos);
239
		dwgObject.setLayerHandle(handle);
240

  
241

  
242

  
243
		if (dwgObject.getLinetypeFlags() == 0x3) {
244
			DwgHandleReference lineTypeHandle = new DwgHandleReference();
245
			bitPos = lineTypeHandle.read(data, bitPos);
246
			dwgObject.setLineTypeHandle(lineTypeHandle);
247

  
248
		}
249

  
250
		if (dwgObject.getPlotstyleFlags() == 0x3) {
251
			DwgHandleReference plotStyleHandle = new DwgHandleReference();
252
			bitPos = plotStyleHandle.read(data, bitPos);
253
			dwgObject.setPlotStyleHandle(plotStyleHandle);
254
		}
255
		return bitPos;
256
	}
257

  
258
	protected IDwgFileReader headTailReader;
259
	public void setFileReader(IDwgFileReader headTailReader) {
260
		if( ! (headTailReader instanceof DwgFileVR2004Reader))
261
			throw new RuntimeException("Tratando de leer entidad de DWG 2004 con"+
262
					headTailReader.getClass().getName());
263
		this.headTailReader = headTailReader;
264
	}
265
}
266

  
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/objreaders/v2004/DwgVertex2DReader2004.java
1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

  
7
import java.util.ArrayList;
8

  
9
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
10
import com.iver.cit.jdwglib.dwg.DwgHandleReference;
11
import com.iver.cit.jdwglib.dwg.DwgObject;
12
import com.iver.cit.jdwglib.dwg.DwgUtil;
13
import com.iver.cit.jdwglib.dwg.objects.DwgVertex2D;
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 DwgVertex2DReader2004 extends AbstractDwg2004Reader{
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("Vertex2D 2004 solo puede leer DwgVertex2D");
29
		 DwgVertex2D ver = (DwgVertex2D) dwgObj;
30

  
31
		 int bitPos = offset;
32
		 ArrayList v;
33

  
34
		bitPos = readObjectHeader(data, bitPos, ver);
35

  
36
		v = DwgUtil.getRawChar(data, bitPos);
37
		bitPos = ((Integer)v.get(0)).intValue();
38
		int flags = ((Integer)v.get(1)).intValue();
39
		ver.setFlags(flags);
40

  
41
		v = DwgUtil.getBitDouble(data, bitPos);
42
		bitPos = ((Integer)v.get(0)).intValue();
43
		double x = ((Double)v.get(1)).doubleValue();
44
		v = DwgUtil.getBitDouble(data, bitPos);
45
		bitPos = ((Integer)v.get(0)).intValue();
46
		double y = ((Double)v.get(1)).doubleValue();
47
		v = DwgUtil.getBitDouble(data, bitPos);
48
		bitPos = ((Integer)v.get(0)).intValue();
49
		double z = ((Double)v.get(1)).doubleValue();
50
		ver.setPoint(new double[]{x, y, z});
51
		v = DwgUtil.getBitDouble(data, bitPos);
52
		bitPos = ((Integer)v.get(0)).intValue();
53
		double sw = ((Double)v.get(1)).doubleValue();
54
		double ew = 0.0;
55
		if (sw<0.0) {
56
			ew = Math.abs(sw);
57
			sw = ew;
58
		} else {
59
			v = DwgUtil.getBitDouble(data, bitPos);
60
			bitPos = ((Integer)v.get(0)).intValue();
61
			ew = ((Double)v.get(1)).doubleValue();
62
		}
63
		ver.setInitWidth(sw);
64
		ver.setEndWidth(ew);
65

  
66
		v = DwgUtil.getBitDouble(data, bitPos);
67
		bitPos = ((Integer)v.get(0)).intValue();
68
		double bulge = ((Double)v.get(1)).doubleValue();
69
		ver.setBulge(bulge);
70

  
71
		v = DwgUtil.getBitDouble(data, bitPos);
72
		bitPos = ((Integer)v.get(0)).intValue();
73
		double tandir = ((Double)v.get(1)).doubleValue();
74
		ver.setTangentDir(tandir);
75

  
76
		bitPos = readObjectTailer(data, bitPos, ver);
77
	}
78
}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff