Revision 9927

View differences:

trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgArc.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39 38
import java.util.List;
40 39

  
41 40
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
42 41
import com.iver.cit.gvsig.fmap.core.FShape;
43 42
import com.iver.cit.jdwglib.dwg.DwgFile;
44 43
import com.iver.cit.jdwglib.dwg.DwgObject;
45
import com.iver.cit.jdwglib.dwg.DwgUtil;
46 44
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
47 45
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
48 46
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
......
70 68
		super(index);
71 69
	}
72 70
	
71
	
73 72
	/**
74
	 * Read an Arc in the DWG format Version 15
75
	 * 
76
	 * @param data Array of unsigned bytes obtained from the DWG binary file
77
	 * @param offset The current bit offset where the value begins
78
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
79
	 * 		   when we are looking for LwPolylines.
80
	 */
81
	public void readDwgArcV15(int[] data, int offset) throws Exception {
82
		//System.out.println("readDwgArc() executed ...");
83
		int bitPos = offset;
84
		bitPos = readObjectHeaderV15(data, bitPos);
85
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
86
		bitPos = ((Integer)v.get(0)).intValue();
87
		double x = ((Double)v.get(1)).doubleValue();
88
		v = DwgUtil.getBitDouble(data, bitPos);
89
		bitPos = ((Integer)v.get(0)).intValue();
90
		double y = ((Double)v.get(1)).doubleValue();
91
		v = DwgUtil.getBitDouble(data, bitPos);
92
		bitPos = ((Integer)v.get(0)).intValue();
93
		double z = ((Double)v.get(1)).doubleValue();
94
		double[] coord = new double[]{x, y, z};
95
		center = coord;
96
		v = DwgUtil.getBitDouble(data, bitPos);
97
		bitPos = ((Integer)v.get(0)).intValue();
98
		double val = ((Double)v.get(1)).doubleValue();
99
		radius = val;
100
		v = DwgUtil.testBit(data, bitPos);
101
		bitPos = ((Integer)v.get(0)).intValue();
102
		boolean flag = ((Boolean)v.get(1)).booleanValue();
103
		if (flag) {
104
			val=0.0;
105
		} else {
106
			v = DwgUtil.getBitDouble(data, bitPos);
107
			bitPos = ((Integer)v.get(0)).intValue();
108
			val = ((Double)v.get(1)).doubleValue();
109
		}
110
	    thickness = val;
111
		v = DwgUtil.testBit(data, bitPos);
112
		bitPos = ((Integer)v.get(0)).intValue();
113
		flag = ((Boolean)v.get(1)).booleanValue();
114
		if (flag) {
115
			 x = y = 0.0;
116
			 z = 1.0;
117
		} else {
118
			v = DwgUtil.getBitDouble(data, bitPos);
119
			bitPos = ((Integer)v.get(0)).intValue();
120
			x = ((Double)v.get(1)).doubleValue();
121
			v = DwgUtil.getBitDouble(data, bitPos);
122
			bitPos = ((Integer)v.get(0)).intValue();
123
			y = ((Double)v.get(1)).doubleValue();
124
			v = DwgUtil.getBitDouble(data, bitPos);
125
			bitPos = ((Integer)v.get(0)).intValue();
126
			z = ((Double)v.get(1)).doubleValue();
127
		}
128
		coord = new double[]{x, y, z};
129
		extrusion = coord;
130
		v = DwgUtil.getBitDouble(data, bitPos);
131
		bitPos = ((Integer)v.get(0)).intValue();
132
		val = ((Double)v.get(1)).doubleValue();
133
	    initAngle = val;
134
		v = DwgUtil.getBitDouble(data, bitPos);
135
		bitPos = ((Integer)v.get(0)).intValue();
136
		val = ((Double)v.get(1)).doubleValue();
137
	    endAngle = val;
138
		bitPos = readObjectTailV15(data, bitPos);
139
	}
140
	/**
141 73
	 * @return Returns the center.
142 74
	 */
143 75
	public double[] getCenter() {
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgAttdef.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39
import java.util.Vector;
40 38

  
41 39
import com.iver.cit.jdwglib.dwg.DwgObject;
42
import com.iver.cit.jdwglib.dwg.DwgUtil;
43 40

  
44 41
/**
45 42
 * The DwgAttdef class represents a DWG Attdef
......
70 67
	private String prompt;
71 68
	private int styleHandle;
72 69
	
73
	/**
74
	 * Read an Attdef in the DWG format Version 15
75
	 * 
76
	 * @param data Array of unsigned bytes obtained from the DWG binary file
77
	 * @param offset The current bit offset where the value begins
78
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
79
	 * 		   when we are looking for LwPolylines.
80
	 */
81
	public void readDwgAttdefV15(int[] data, int offset) throws Exception {
82
		//System.out.println("readDwgAttdef() executed ...");
83
		int bitPos = offset;
84
		bitPos = readObjectHeaderV15(data, bitPos);
85
		ArrayList v = DwgUtil.getRawChar(data, bitPos);
86
		bitPos = ((Integer)v.get(0)).intValue();
87
		int dflag = ((Integer)v.get(1)).intValue();
88
		dataFlag = dflag;
89
		if ((dflag & 0x1)==0) {
90
			v = DwgUtil.getRawDouble(data, bitPos);
91
			bitPos = ((Integer)v.get(0)).intValue();
92
			double elev = ((Double)v.get(1)).doubleValue();
93
			elevation = elev;
94
		}
95
		v = DwgUtil.getRawDouble(data, bitPos);
96
		bitPos = ((Integer)v.get(0)).intValue();
97
		double x1 = ((Double)v.get(1)).doubleValue();
98
		v = DwgUtil.getRawDouble(data, bitPos);
99
		bitPos = ((Integer)v.get(0)).intValue();
100
		double y1 = ((Double)v.get(1)).doubleValue();
101
		insertionPoint = new Point2D.Double(x1, y1);
102
		double x=0, y=0, z=0;
103
		if ((dflag & 0x2)==0) {
104
			v = DwgUtil.getDefaultDouble(data, bitPos, x1);
105
			bitPos = ((Integer)v.get(0)).intValue();
106
			x = ((Double)v.get(1)).doubleValue();
107
			v = DwgUtil.getDefaultDouble(data, bitPos, y1);
108
			bitPos = ((Integer)v.get(0)).intValue();
109
			y = ((Double)v.get(1)).doubleValue();
110
		}
111
		alignmentPoint = new Point2D.Double(x, y);
112
		v = DwgUtil.testBit(data, bitPos);
113
		bitPos = ((Integer)v.get(0)).intValue();
114
		boolean flag = ((Boolean)v.get(1)).booleanValue();
115
		if (flag) {
116
			y = 0.0;
117
			x = y;
118
			z = 1.0;
119
		} else {
120
			v = DwgUtil.getBitDouble(data, bitPos);
121
			bitPos = ((Integer)v.get(0)).intValue();
122
			x = ((Double)v.get(1)).doubleValue();
123
			v = DwgUtil.getBitDouble(data, bitPos);
124
			bitPos = ((Integer)v.get(0)).intValue();
125
			y = ((Double)v.get(1)).doubleValue();
126
			v = DwgUtil.getBitDouble(data, bitPos);
127
			bitPos = ((Integer)v.get(0)).intValue();
128
			z = ((Double)v.get(1)).doubleValue();
129
		}
130
		extrusion = new double[]{x, y, z};
131
		v = DwgUtil.testBit(data, bitPos);
132
		bitPos = ((Integer)v.get(0)).intValue();
133
		flag = ((Boolean)v.get(1)).booleanValue();
134
	    double th;
135
		if (flag) {
136
			th=0.0;
137
		} else {
138
			v = DwgUtil.getBitDouble(data, bitPos);
139
			bitPos = ((Integer)v.get(0)).intValue();
140
			th = ((Double)v.get(1)).doubleValue();
141
		}
142
		thickness = th;
143
		if ((dflag & 0x4)==0) {
144
			v = DwgUtil.getRawDouble(data, bitPos);
145
			bitPos = ((Integer)v.get(0)).intValue();
146
			double oblique = ((Double)v.get(1)).doubleValue();
147
			obliqueAngle = oblique;
148
		}
149
		if ((dflag & 0x8)==0) {
150
			v = DwgUtil.getRawDouble(data, bitPos);
151
			bitPos = ((Integer)v.get(0)).intValue();
152
			double rot = ((Double)v.get(1)).doubleValue();
153
			rotationAngle = rot;
154
		}
155
		v = DwgUtil.getRawDouble(data, bitPos);
156
		bitPos = ((Integer)v.get(0)).intValue();
157
		double height = ((Double)v.get(1)).doubleValue();
158
		this.height = height;
159
		if ((dflag & 0x10)==0) {
160
			v = DwgUtil.getRawDouble(data, bitPos);
161
			bitPos = ((Integer)v.get(0)).intValue();
162
			double width = ((Double)v.get(1)).doubleValue();
163
			widthFactor = width;
164
		}
165
		v = DwgUtil.getTextString(data, bitPos);
166
		bitPos = ((Integer)v.get(0)).intValue();
167
		String text = (String)v.get(1);
168
		this.text = text;
169
		if ((dflag & 0x20)==0) {
170
			v = DwgUtil.getBitShort(data, bitPos);
171
			bitPos = ((Integer)v.get(0)).intValue();
172
			int gen = ((Integer)v.get(1)).intValue();
173
			generation = gen;
174
		}
175
		if ((dflag & 0x40)==0) {
176
			v = DwgUtil.getBitShort(data, bitPos);
177
			bitPos = ((Integer)v.get(0)).intValue();
178
			int halign = ((Integer)v.get(1)).intValue();
179
			this.halign = halign;
180
		}
181
		if ((dflag & 0x80)==0) {
182
			v = DwgUtil.getBitShort(data, bitPos);
183
			bitPos = ((Integer)v.get(0)).intValue();
184
			int valign = ((Integer)v.get(1)).intValue();
185
			this.valign = valign;
186
		}
187
		v = DwgUtil.getTextString(data, bitPos);
188
		bitPos = ((Integer)v.get(0)).intValue();
189
		String tag = (String)v.get(1);
190
		this.tag = tag;
191
		v = DwgUtil.getBitShort(data, bitPos);
192
		bitPos = ((Integer)v.get(0)).intValue();
193
		int fl = ((Integer)v.get(1)).intValue();
194
		fieldLength = fl;
195
		v = DwgUtil.getRawChar(data, bitPos);
196
		bitPos = ((Integer)v.get(0)).intValue();
197
		int flags = ((Integer)v.get(1)).intValue();
198
		this.flags = flags;
199
		v = DwgUtil.getTextString(data, bitPos);
200
		bitPos = ((Integer)v.get(0)).intValue();
201
		String prompt = (String)v.get(1);
202
		this.prompt = prompt;
203
		bitPos = readObjectTailV15(data, bitPos);
204
		v = DwgUtil.getHandle(data, bitPos);
205
		bitPos = ((Integer)v.get(0)).intValue();
206
		int[] handle = new int[v.size()-1];
207
	    for (int j=1;j<v.size();j++) {
208
		    handle[j-1] = ((Integer)v.get(j)).intValue();
209
	    }
210
	    ArrayList handleVect = new ArrayList();
211
	    for (int i=0;i<handle.length;i++) {
212
	    	handleVect.add(new Integer(handle[i]));
213
	    }
214
	    styleHandle = DwgUtil.handleBinToHandleInt(handleVect);
215
	}
70
	
216 71
	/* (non-Javadoc)
217 72
	 * @see java.lang.Object#clone()
218 73
	 */
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgLayerControl.java
47 47
		super(index);
48 48
		// TODO Auto-generated constructor stub
49 49
	}
50

  
51
	/**
52
	 * Read a Layer control in the DWG format Version 15
53
	 * 
54
	 * @param data Array of unsigned bytes obtained from the DWG binary file
55
	 * @param offset The current bit offset where the value begins
56
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
57
	 * 		   when we are looking for LwPolylines.
58
	 */
59
	public void readDwgLayerControlV15(int[] data, int offset) throws Exception {
60
	}
61 50
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgAttrib.java
74 74
	private String prompt;
75 75
	private int styleHandle;
76 76
	
77
	/**
78
	 * Read an Attrib in the DWG format Version 15
79
	 * 
80
	 * @param data Array of unsigned bytes obtained from the DWG binary file
81
	 * @param offset The current bit offset where the value begins
82
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
83
	 * 		   when we are looking for LwPolylines.
84
	 */
85
	public void readDwgAttribV15(int[] data, int offset) throws Exception {
86
		//System.out.println("readDwgAttdef() executed ...");
87
		int bitPos = offset;
88
		bitPos = readObjectHeaderV15(data, bitPos);
89
		ArrayList v = DwgUtil.getRawChar(data, bitPos);
90
		bitPos = ((Integer)v.get(0)).intValue();
91
		int dflag = ((Integer)v.get(1)).intValue();
92
		dataFlag = dflag;
93
		if ((dflag & 0x1)==0) {
94
			v = DwgUtil.getRawDouble(data, bitPos);
95
			bitPos = ((Integer)v.get(0)).intValue();
96
			double elev = ((Double)v.get(1)).doubleValue();
97
			elevation = elev;
98
		}
99
		v = DwgUtil.getRawDouble(data, bitPos);
100
		bitPos = ((Integer)v.get(0)).intValue();
101
		double x1 = ((Double)v.get(1)).doubleValue();
102
		v = DwgUtil.getRawDouble(data, bitPos);
103
		bitPos = ((Integer)v.get(0)).intValue();
104
		double y1 = ((Double)v.get(1)).doubleValue();
105
		insertionPoint = new Point2D.Double(x1, y1);
106
		double x=0, y=0, z=0;
107
		if ((dflag & 0x2)==0) {
108
			v = DwgUtil.getDefaultDouble(data, bitPos, x1);
109
			bitPos = ((Integer)v.get(0)).intValue();
110
			x = ((Double)v.get(1)).doubleValue();
111
			v = DwgUtil.getDefaultDouble(data, bitPos, y1);
112
			bitPos = ((Integer)v.get(0)).intValue();
113
			y = ((Double)v.get(1)).doubleValue();
114
		}
115
		alignmentPoint = new Point2D.Double(x, y);
116
		v = DwgUtil.testBit(data, bitPos);
117
		bitPos = ((Integer)v.get(0)).intValue();
118
		boolean flag = ((Boolean)v.get(1)).booleanValue();
119
		if (flag) {
120
			y = 0.0;
121
			x = y;
122
			z = 1.0;
123
		} else {
124
			v = DwgUtil.getBitDouble(data, bitPos);
125
			bitPos = ((Integer)v.get(0)).intValue();
126
			x = ((Double)v.get(1)).doubleValue();
127
			v = DwgUtil.getBitDouble(data, bitPos);
128
			bitPos = ((Integer)v.get(0)).intValue();
129
			y = ((Double)v.get(1)).doubleValue();
130
			v = DwgUtil.getBitDouble(data, bitPos);
131
			bitPos = ((Integer)v.get(0)).intValue();
132
			z = ((Double)v.get(1)).doubleValue();
133
		}
134
		extrusion = new double[]{x, y, z};
135
		v = DwgUtil.testBit(data, bitPos);
136
		bitPos = ((Integer)v.get(0)).intValue();
137
		flag = ((Boolean)v.get(1)).booleanValue();
138
	    double th;
139
		if (flag) {
140
			th=0.0;
141
		} else {
142
			v = DwgUtil.getBitDouble(data, bitPos);
143
			bitPos = ((Integer)v.get(0)).intValue();
144
			th = ((Double)v.get(1)).doubleValue();
145
		}
146
		thickness = th;
147
		if ((dflag & 0x4)==0) {
148
			v = DwgUtil.getRawDouble(data, bitPos);
149
			bitPos = ((Integer)v.get(0)).intValue();
150
			double oblique = ((Double)v.get(1)).doubleValue();
151
			obliqueAngle = oblique;
152
		}
153
		if ((dflag & 0x8)==0) {
154
			v = DwgUtil.getRawDouble(data, bitPos);
155
			bitPos = ((Integer)v.get(0)).intValue();
156
			double rot = ((Double)v.get(1)).doubleValue();
157
			rotationAngle = rot;
158
		}
159
		v = DwgUtil.getRawDouble(data, bitPos);
160
		bitPos = ((Integer)v.get(0)).intValue();
161
		double height = ((Double)v.get(1)).doubleValue();
162
		this.height = height;
163
		if ((dflag & 0x10)==0) {
164
			v = DwgUtil.getRawDouble(data, bitPos);
165
			bitPos = ((Integer)v.get(0)).intValue();
166
			double width = ((Double)v.get(1)).doubleValue();
167
			widthFactor = width;
168
		}
169
		v = DwgUtil.getTextString(data, bitPos);
170
		bitPos = ((Integer)v.get(0)).intValue();
171
		String text = (String)v.get(1);
172
		this.text = text;
173
		if ((dflag & 0x20)==0) {
174
			v = DwgUtil.getBitShort(data, bitPos);
175
			bitPos = ((Integer)v.get(0)).intValue();
176
			int gen = ((Integer)v.get(1)).intValue();
177
			generation = gen;
178
		}
179
		if ((dflag & 0x40)==0) {
180
			v = DwgUtil.getBitShort(data, bitPos);
181
			bitPos = ((Integer)v.get(0)).intValue();
182
			int halign = ((Integer)v.get(1)).intValue();
183
			this.halign = halign;
184
		}
185
		if ((dflag & 0x80)==0) {
186
			v = DwgUtil.getBitShort(data, bitPos);
187
			bitPos = ((Integer)v.get(0)).intValue();
188
			int valign = ((Integer)v.get(1)).intValue();
189
			this.valign = valign;
190
		}
191
		v = DwgUtil.getTextString(data, bitPos);
192
		bitPos = ((Integer)v.get(0)).intValue();
193
		String tag = (String)v.get(1);
194
		this.tag = tag;
195
		v = DwgUtil.getBitShort(data, bitPos);
196
		bitPos = ((Integer)v.get(0)).intValue();
197
		int fl = ((Integer)v.get(1)).intValue();
198
		fieldLength = fl;
199
		v = DwgUtil.getRawChar(data, bitPos);
200
		bitPos = ((Integer)v.get(0)).intValue();
201
		int flags = ((Integer)v.get(1)).intValue();
202
		this.flags = flags;
203
		bitPos = readObjectTailV15(data, bitPos);
204
	    v = DwgUtil.getHandle(data, bitPos);
205
		bitPos = ((Integer)v.get(0)).intValue();
206
		int[] handle = new int[v.size()-1];
207
	    for (int j=1;j<v.size();j++) {
208
		    handle[j-1] = ((Integer)v.get(j)).intValue();
209
	    }
210
	    ArrayList handleVect = new ArrayList();
211
	    for (int i=0;i<handle.length;i++) {
212
	    	handleVect.add(new Integer(handle[i]));
213
	    }
214
	    styleHandle = DwgUtil.handleBinToHandleInt(handleVect);
215
	}
77
	
216 78
    /**
217 79
     * @return Returns the elevation.
218 80
     */
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgLine.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39 38
import java.util.List;
40 39

  
41 40
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
42 41
import com.iver.cit.gvsig.fmap.core.FShape;
43 42
import com.iver.cit.jdwglib.dwg.DwgFile;
44 43
import com.iver.cit.jdwglib.dwg.DwgObject;
45
import com.iver.cit.jdwglib.dwg.DwgUtil;
46 44
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
47 45
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
48 46
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
......
68 66
	private boolean zflag = false;
69 67
	
70 68
	/**
71
	 * Read a Line in the DWG format Version 15
72
	 * 
73
	 * @param data Array of unsigned bytes obtained from the DWG binary file
74
	 * @param offset The current bit offset where the value begins
75
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
76
	 * 		   when we are looking for LwPolylines.
77
	 */
78
	public void readDwgLineV15(int[] data, int offset) throws Exception {
79
		int bitPos = offset;
80
		bitPos = readObjectHeaderV15(data, bitPos);
81
		ArrayList v = DwgUtil.testBit(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		zflag = ((Boolean)v.get(1)).booleanValue();
84
		v = DwgUtil.getRawDouble(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		double x1 = ((Double)v.get(1)).doubleValue();
87
		v = DwgUtil.getDefaultDouble(data, bitPos, x1);
88
		bitPos = ((Integer)v.get(0)).intValue();
89
		double x2 = ((Double)v.get(1)).doubleValue();
90
		v = DwgUtil.getRawDouble(data, bitPos);
91
		bitPos = ((Integer)v.get(0)).intValue();
92
		double y1 = ((Double)v.get(1)).doubleValue();
93
		v = DwgUtil.getDefaultDouble(data, bitPos, y1);
94
		bitPos = ((Integer)v.get(0)).intValue();
95
		double y2 = ((Double)v.get(1)).doubleValue();
96
		double[] p1;
97
		double[] p2;
98
	    if (!zflag) {
99
			v = DwgUtil.getRawDouble(data, bitPos);
100
			bitPos = ((Integer)v.get(0)).intValue();
101
			double z1 = ((Double)v.get(1)).doubleValue();
102
			v = DwgUtil.getDefaultDouble(data, bitPos, z1);
103
			bitPos = ((Integer)v.get(0)).intValue();
104
			double z2 = ((Double)v.get(1)).doubleValue();
105
			p1 = new double[]{x1, y1, z1};
106
			p2 = new double[]{x2, y2, z2};
107
		} else {
108
			p1 = new double[]{x1, y1};
109
			p2 = new double[]{x2, y2};
110
		}
111
	    this.p1 = p1;
112
	    this.p2 = p2;
113
		v = DwgUtil.testBit(data, bitPos);
114
		bitPos = ((Integer)v.get(0)).intValue();
115
		boolean flag = ((Boolean)v.get(1)).booleanValue();
116
	    double val;
117
		if (flag) {
118
			val=0.0;
119
		} else {
120
			v = DwgUtil.getBitDouble(data, bitPos);
121
			bitPos = ((Integer)v.get(0)).intValue();
122
			val = ((Double)v.get(1)).doubleValue();
123
		}
124
		thickness = val;
125
		v = DwgUtil.testBit(data, bitPos);
126
		bitPos = ((Integer)v.get(0)).intValue();
127
		flag = ((Boolean)v.get(1)).booleanValue();
128
		double x, y, z;
129
	    if (flag) {
130
			 x = y = 0.0;
131
			 z = 1.0;
132
		} else {
133
			v = DwgUtil.getBitDouble(data, bitPos);
134
			bitPos = ((Integer)v.get(0)).intValue();
135
			x = ((Double)v.get(1)).doubleValue();
136
			v = DwgUtil.getBitDouble(data, bitPos);
137
			bitPos = ((Integer)v.get(0)).intValue();
138
			y = ((Double)v.get(1)).doubleValue();
139
			v = DwgUtil.getBitDouble(data, bitPos);
140
			bitPos = ((Integer)v.get(0)).intValue();
141
			z = ((Double)v.get(1)).doubleValue();
142
		}
143
		double[] coord = new double[]{x, y, z};
144
		extrusion = coord;
145
		bitPos = readObjectTailV15(data, bitPos);
146
	}
147
	/**
148 69
	 * @return Returns the p1.
149 70
	 */
150 71
	public double[] getP1() {
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgBlock.java
34 34
 */
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37
import java.util.ArrayList;
38

  
39 37
import com.iver.cit.jdwglib.dwg.DwgObject;
40
import com.iver.cit.jdwglib.dwg.DwgUtil;
41 38

  
42 39
/**
43 40
 * The DwgBlock class represents a DWG Block
......
52 49
	private String name;
53 50
	
54 51
	/**
55
	 * Read a Block in the DWG format Version 15
56
	 * 
57
	 * @param data Array of unsigned bytes obtained from the DWG binary file
58
	 * @param offset The current bit offset where the value begins
59
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
60
	 * 		   when we are looking for LwPolylines.
61
	 */
62
	public void readDwgBlockV15(int[] data, int offset) throws Exception {
63
		int bitPos = offset;
64
		bitPos = readObjectHeaderV15(data, bitPos);
65
		ArrayList v = DwgUtil.getTextString(data, bitPos);
66
		bitPos = ((Integer)v.get(0)).intValue();
67
		String text = (String)v.get(1);
68
		name = text;
69
		bitPos = readObjectTailV15(data, bitPos);
70
	}
71
	/**
72 52
	 * @return Returns the name.
73 53
	 */
74 54
	public String getName() {
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgBlockControl.java
34 34
 */
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37
import java.util.ArrayList;
38 37
import java.util.Vector;
39 38

  
40 39
import com.iver.cit.jdwglib.dwg.DwgObject;
41
import com.iver.cit.jdwglib.dwg.DwgUtil;
42 40

  
43 41
/**
44 42
 * The DwgBlockControl class represents a DWG Block control
......
46 44
 * @author jmorell
47 45
 */
48 46
public class DwgBlockControl extends DwgObject {
49
	public DwgBlockControl(int index) {
50
		super(index);
51
		// TODO Auto-generated constructor stub
52
	}
53 47

  
54 48
	private int nullHandle;
55 49
	private Vector code2Handles;
56 50
	private int modelSpaceHandle;
57 51
	private int paperSpaceHandle;
58 52
	
59
	/**
60
	 * Read a Block control in the DWG format Version 15
61
	 * 
62
	 * @param data Array of unsigned bytes obtained from the DWG binary file
63
	 * @param offset The current bit offset where the value begins
64
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
65
	 * 		   when we are looking for LwPolylines.
66
	 */
67
	public void readDwgBlockControlV15(int[] data, int offset) throws Exception {
68
		//System.out.println("readDwgBlockControl() executed ...");
69
		int bitPos = offset;
70
		ArrayList v = DwgUtil.getBitLong(data, bitPos);
71
		bitPos = ((Integer)v.get(0)).intValue();
72
		int numReactors = ((Integer)v.get(1)).intValue();
73
		setNumReactors(numReactors);
74
		v = DwgUtil.getBitShort(data, bitPos);
75
		bitPos = ((Integer)v.get(0)).intValue();
76
		int enum = ((Integer)v.get(1)).intValue();
77
		v = DwgUtil.getHandle(data, bitPos);
78
		bitPos = ((Integer)v.get(0)).intValue();
79
		int[] handle = new int[v.size()-1];
80
	    for (int i=1;i<v.size();i++) {
81
		    handle[i-1] = ((Integer)v.get(i)).intValue();
82
	    }
83
		ArrayList handleVect = new ArrayList();
84
	    for (int i=0;i<handle.length;i++) {
85
	    	handleVect.add(new Integer(handle[i]));
86
	    }
87
	    nullHandle = DwgUtil.handleBinToHandleInt(handleVect);
88
		v = DwgUtil.getHandle(data, bitPos);
89
		bitPos = ((Integer)v.get(0)).intValue();
90
		handle = new int[v.size()-1];
91
	    for (int i=1;i<v.size();i++) {
92
		    handle[i-1] = ((Integer)v.get(i)).intValue();
93
	    }
94
		if (enum>0) {
95
			Vector handles = new Vector();
96
			for (int i=0;i<enum;i++) {
97
				v = DwgUtil.getHandle(data, bitPos);
98
				bitPos = ((Integer)v.get(0)).intValue();
99
				handle = new int[v.size()-1];
100
			    for (int j=1;j<v.size();j++) {
101
				    handle[j-1] = ((Integer)v.get(j)).intValue();
102
			    }
103
				handles.add(handle);
104
			}
105
			code2Handles = handles;
106
		}
107
		v = DwgUtil.getHandle(data, bitPos);
108
		bitPos = ((Integer)v.get(0)).intValue();
109
		handle = new int[v.size()-1];
110
	    for (int j=1;j<v.size();j++) {
111
		    handle[j-1] = ((Integer)v.get(j)).intValue();
112
	    }
113
	    handleVect = new ArrayList();
114
	    for (int i=0;i<handle.length;i++) {
115
	    	handleVect.add(new Integer(handle[i]));
116
	    }
117
	    modelSpaceHandle = DwgUtil.handleBinToHandleInt(handleVect);
118
		v = DwgUtil.getHandle(data, bitPos);
119
		bitPos = ((Integer)v.get(0)).intValue();
120
		handle = new int[v.size()-1];
121
	    for (int j=1;j<v.size();j++) {
122
		    handle[j-1] = ((Integer)v.get(j)).intValue();
123
	    }
124
	    handleVect = new ArrayList();
125
	    for (int i=0;i<handle.length;i++) {
126
	    	handleVect.add(new Integer(handle[i]));
127
	    }
128
	    paperSpaceHandle = DwgUtil.handleBinToHandleInt(handleVect);
53
	public DwgBlockControl(int index) {
54
		super(index);
129 55
	}
56
	
57
	public Vector getCode2Handles() {
58
		return code2Handles;
59
	}
60
	public void setCode2Handles(Vector code2Handles) {
61
		this.code2Handles = code2Handles;
62
	}
63
	public int getModelSpaceHandle() {
64
		return modelSpaceHandle;
65
	}
66
	public void setModelSpaceHandle(int modelSpaceHandle) {
67
		this.modelSpaceHandle = modelSpaceHandle;
68
	}
69
	public int getNullHandle() {
70
		return nullHandle;
71
	}
72
	public void setNullHandle(int nullHandle) {
73
		this.nullHandle = nullHandle;
74
	}
75
	public int getPaperSpaceHandle() {
76
		return paperSpaceHandle;
77
	}
78
	public void setPaperSpaceHandle(int paperSpaceHandle) {
79
		this.paperSpaceHandle = paperSpaceHandle;
80
	}
130 81
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgEllipse.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39 38
import java.util.List;
40 39

  
41 40
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
42 41
import com.iver.cit.gvsig.fmap.core.FShape;
43 42
import com.iver.cit.jdwglib.dwg.DwgFile;
44 43
import com.iver.cit.jdwglib.dwg.DwgObject;
45
import com.iver.cit.jdwglib.dwg.DwgUtil;
46 44
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
47 45
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
48 46
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
......
67 65
	private double initAngle;
68 66
	private double endAngle;
69 67
	
70
	/**
71
	 * Read a Ellipse in the DWG format Version 15
72
	 * 
73
	 * @param data Array of unsigned bytes obtained from the DWG binary file
74
	 * @param offset The current bit offset where the value begins
75
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
76
	 * 		   when we are looking for LwPolylines.
77
	 */
78
	public void readDwgEllipseV15(int[] data, int offset) throws Exception {
79
		int bitPos = offset;
80
		bitPos = readObjectHeaderV15(data, bitPos);
81
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		double x = ((Double)v.get(1)).doubleValue();
84
		v = DwgUtil.getBitDouble(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		double y = ((Double)v.get(1)).doubleValue();
87
		v = DwgUtil.getBitDouble(data, bitPos);
88
		bitPos = ((Integer)v.get(0)).intValue();
89
		double z = ((Double)v.get(1)).doubleValue();
90
		double[] coord = new double[]{x, y, z};
91
		center = coord;
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
		coord = new double[]{x, y, z};
102
		majorAxisVector = coord;
103
		v = DwgUtil.getBitDouble(data, bitPos);
104
		bitPos = ((Integer)v.get(0)).intValue();
105
		x = ((Double)v.get(1)).doubleValue();
106
		v = DwgUtil.getBitDouble(data, bitPos);
107
		bitPos = ((Integer)v.get(0)).intValue();
108
		y = ((Double)v.get(1)).doubleValue();
109
		v = DwgUtil.getBitDouble(data, bitPos);
110
		bitPos = ((Integer)v.get(0)).intValue();
111
		z = ((Double)v.get(1)).doubleValue();
112
		coord = new double[]{x, y, z};
113
		extrusion = coord;
114
		v = DwgUtil.getBitDouble(data, bitPos);
115
		bitPos = ((Integer)v.get(0)).intValue();
116
		double val = ((Double)v.get(1)).doubleValue();
117
		axisRatio = val;
118
		v = DwgUtil.getBitDouble(data, bitPos);
119
		bitPos = ((Integer)v.get(0)).intValue();
120
		val = ((Double)v.get(1)).doubleValue();
121
	    initAngle = val;
122
		v = DwgUtil.getBitDouble(data, bitPos);
123
		bitPos = ((Integer)v.get(0)).intValue();
124
		val = ((Double)v.get(1)).doubleValue();
125
	    endAngle = val;
126
		bitPos = readObjectTailV15(data, bitPos);
127
	}
128 68
    /**
129 69
     * @return Returns the axisRatio.
130 70
     */
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgEndblk.java
47 47
		super(index);
48 48
		// TODO Auto-generated constructor stub
49 49
	}
50

  
51
	/**
52
	 * Read a Endblk in the DWG format Version 15
53
	 * 
54
	 * @param data Array of unsigned bytes obtained from the DWG binary file
55
	 * @param offset The current bit offset where the value begins
56
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
57
	 * 		   when we are looking for LwPolylines.
58
	 */
59
	public void readDwgEndblkV15(int[] data, int offset) throws Exception {
60
		int bitPos = offset;
61
		bitPos = readObjectHeaderV15(data, bitPos);
62
		bitPos = readObjectTailV15(data, bitPos);
63
	}
64 50
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgCircle.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39 38
import java.util.List;
40 39

  
41 40
import com.iver.cit.gvsig.fmap.core.FPolyline2D;
42 41
import com.iver.cit.gvsig.fmap.core.FShape;
43 42
import com.iver.cit.jdwglib.dwg.DwgFile;
44 43
import com.iver.cit.jdwglib.dwg.DwgObject;
45
import com.iver.cit.jdwglib.dwg.DwgUtil;
46 44
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
47 45
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
48 46
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
......
68 66
	private double[] extrusion;
69 67
	
70 68
	/**
71
	 * Read a Circle in the DWG format Version 15
72
	 * 
73
	 * @param data Array of unsigned bytes obtained from the DWG binary file
74
	 * @param offset The current bit offset where the value begins
75
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
76
	 * 		   when we are looking for LwPolylines.
77
	 */
78
	public void readDwgCircleV15(int[] data, int offset) throws Exception {
79
		int bitPos = offset;
80
		bitPos = readObjectHeaderV15(data, bitPos);
81
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
82
		bitPos = ((Integer)v.get(0)).intValue();
83
		double x = ((Double)v.get(1)).doubleValue();
84
		v = DwgUtil.getBitDouble(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		double y = ((Double)v.get(1)).doubleValue();
87
		v = DwgUtil.getBitDouble(data, bitPos);
88
		bitPos = ((Integer)v.get(0)).intValue();
89
		double z = ((Double)v.get(1)).doubleValue();
90
		double[] coord = new double[]{x, y, z};
91
		center = coord;
92
		v = DwgUtil.getBitDouble(data, bitPos);
93
		bitPos = ((Integer)v.get(0)).intValue();
94
		double val = ((Double)v.get(1)).doubleValue();
95
		radius = val;
96
		v = DwgUtil.testBit(data, bitPos);
97
		bitPos = ((Integer)v.get(0)).intValue();
98
		boolean flag = ((Boolean)v.get(1)).booleanValue();
99
	    if (flag) {
100
			val=0.0;
101
		} else {
102
			v = DwgUtil.getBitDouble(data, bitPos);
103
			bitPos = ((Integer)v.get(0)).intValue();
104
			val = ((Double)v.get(1)).doubleValue();
105
		}
106
	    thickness = val;
107
		v = DwgUtil.testBit(data, bitPos);
108
		bitPos = ((Integer)v.get(0)).intValue();
109
		flag = ((Boolean)v.get(1)).booleanValue();
110
		if (flag) {
111
			 x = y = 0.0;
112
			 z = 1.0;
113
		} else {
114
			v = DwgUtil.getBitDouble(data, bitPos);
115
			bitPos = ((Integer)v.get(0)).intValue();
116
			x = ((Double)v.get(1)).doubleValue();
117
			v = DwgUtil.getBitDouble(data, bitPos);
118
			bitPos = ((Integer)v.get(0)).intValue();
119
			y = ((Double)v.get(1)).doubleValue();
120
			v = DwgUtil.getBitDouble(data, bitPos);
121
			bitPos = ((Integer)v.get(0)).intValue();
122
			z = ((Double)v.get(1)).doubleValue();
123
		}
124
		coord = new double[]{x, y, z};
125
		extrusion = coord;
126
		bitPos = readObjectTailV15(data, bitPos);
127
	}
128
	/**
129 69
	 * @return Returns the center.
130 70
	 */
131 71
	public double[] getCenter() {
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgBlockHeader.java
77 77
		super(index);
78 78
		objects = new Vector();
79 79
	}
80
	
80 81
	/**
81
	 * Read a Block header in the DWG format Version 15
82
	 * 
83
	 * @param data Array of unsigned bytes obtained from the DWG binary file
84
	 * @param offset The current bit offset where the value begins
85
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
86
	 * 		   when we are looking for LwPolylines.
87
	 */
88
	public void readDwgBlockHeaderV15(int[] data, int offset) throws Exception {
89
		int bitPos = offset;
90
		ArrayList v = DwgUtil.getBitLong(data, bitPos);
91
		bitPos = ((Integer)v.get(0)).intValue();
92
		int numReactors = ((Integer)v.get(1)).intValue();
93
		setNumReactors(numReactors);
94
		v = DwgUtil.getTextString(data, bitPos);
95
		bitPos = ((Integer)v.get(0)).intValue();
96
		String name = (String)v.get(1);
97
		this.name = name;
98
		v = DwgUtil.testBit(data, bitPos);
99
		bitPos = ((Integer)v.get(0)).intValue();
100
		boolean flag = ((Boolean)v.get(1)).booleanValue();
101
		flag64 = flag;
102
		v = DwgUtil.getBitShort(data, bitPos);
103
		bitPos = ((Integer)v.get(0)).intValue();
104
		int xrefplus1 = ((Integer)v.get(1)).intValue();
105
		xRefPlus = xrefplus1;
106
		v = DwgUtil.testBit(data, bitPos);
107
		bitPos = ((Integer)v.get(0)).intValue();
108
		boolean xdep = ((Boolean)v.get(1)).booleanValue();
109
		this.xdep = xdep;
110
		v = DwgUtil.testBit(data, bitPos);
111
		bitPos = ((Integer)v.get(0)).intValue();
112
		boolean anon = ((Boolean)v.get(1)).booleanValue();
113
		anonymous = anon;
114
		v = DwgUtil.testBit(data, bitPos);
115
		bitPos = ((Integer)v.get(0)).intValue();
116
		boolean hasatts = ((Boolean)v.get(1)).booleanValue();
117
		hasAttrs = hasatts;
118
		v = DwgUtil.testBit(data, bitPos);
119
		bitPos = ((Integer)v.get(0)).intValue();
120
		boolean bxref = ((Boolean)v.get(1)).booleanValue();
121
		blkIsXRef = bxref;
122
		v = DwgUtil.testBit(data, bitPos);
123
		bitPos = ((Integer)v.get(0)).intValue();
124
		boolean xover = ((Boolean)v.get(1)).booleanValue();
125
		xRefOverLaid = xover;
126
		v = DwgUtil.testBit(data, bitPos);
127
		bitPos = ((Integer)v.get(0)).intValue();
128
		boolean loaded = ((Boolean)v.get(1)).booleanValue();
129
		this.loaded = loaded;
130
		v = DwgUtil.getBitDouble(data, bitPos);
131
		bitPos = ((Integer)v.get(0)).intValue();
132
		double bx = ((Double)v.get(1)).doubleValue();
133
		v = DwgUtil.getBitDouble(data, bitPos);
134
		bitPos = ((Integer)v.get(0)).intValue();
135
		double by = ((Double)v.get(1)).doubleValue();
136
		v = DwgUtil.getBitDouble(data, bitPos);
137
		bitPos = ((Integer)v.get(0)).intValue();
138
		double bz = ((Double)v.get(1)).doubleValue();
139
		double[] coord = new double[]{bx, by, bz};
140
		basePoint = coord;
141
		v = DwgUtil.getTextString(data, bitPos);
142
		bitPos = ((Integer)v.get(0)).intValue();
143
		String pname = (String)v.get(1);
144
		xRefPName = pname;
145
		int icount = 0;
146
		while (true) {
147
			v = DwgUtil.getRawChar(data, bitPos);
148
			bitPos = ((Integer)v.get(0)).intValue();
149
			int val = ((Integer)v.get(1)).intValue();
150
			if (val==0) {
151
				break;
152
			}
153
			icount++;
154
		}
155
		v = DwgUtil.getTextString(data, bitPos);
156
		bitPos = ((Integer)v.get(0)).intValue();
157
		String desc = (String)v.get(1);
158
		blockDescription = desc;
159
		v = DwgUtil.getBitLong(data, bitPos);
160
		bitPos = ((Integer)v.get(0)).intValue();
161
		int pdsize = ((Integer)v.get(1)).intValue();
162
		if (pdsize>0) {
163
			int count = pdsize + icount;
164
			//int pdata = ((Integer)DwgUtil.getBits(data, count, bitPos)).intValue();
165
			//previewData = pdata;
166
			bitPos = bitPos + count;
167
		}
168
		v = DwgUtil.getHandle(data, bitPos);
169
		bitPos = ((Integer)v.get(0)).intValue();
170
		int[] handle = new int[v.size()-1];
171
	    for (int j=1;j<v.size();j++) {
172
		    handle[j-1] = ((Integer)v.get(j)).intValue();
173
	    }
174
	    ArrayList handleVect = new ArrayList();
175
	    for (int i=0;i<handle.length;i++) {
176
	    	handleVect.add(new Integer(handle[i]));
177
	    }
178
	    blockControlHandle = DwgUtil.handleBinToHandleInt(handleVect);
179
		for (int i=0;i<numReactors;i++) {
180
			v = DwgUtil.getHandle(data, bitPos);
181
			bitPos = ((Integer)v.get(0)).intValue();
182
			handle = new int[v.size()-1];
183
		    for (int j=1;j<v.size();j++) {
184
			    handle[j-1] = ((Integer)v.get(j)).intValue();
185
		    }
186
		}
187
		v = DwgUtil.getHandle(data, bitPos);
188
		bitPos = ((Integer)v.get(0)).intValue();
189
		handle = new int[v.size()-1];
190
	    for (int j=1;j<v.size();j++) {
191
		    handle[j-1] = ((Integer)v.get(j)).intValue();
192
	    }
193
		v = DwgUtil.getHandle(data, bitPos);
194
		bitPos = ((Integer)v.get(0)).intValue();
195
		handle = new int[v.size()-1];
196
	    for (int j=1;j<v.size();j++) {
197
		    handle[j-1] = ((Integer)v.get(j)).intValue();
198
	    }
199
	    handleVect = new ArrayList();
200
	    for (int i=0;i<handle.length;i++) {
201
	    	handleVect.add(new Integer(handle[i]));
202
	    }
203
	    nullHandle = DwgUtil.handleBinToHandleInt(handleVect);
204
		v = DwgUtil.getHandle(data, bitPos);
205
		bitPos = ((Integer)v.get(0)).intValue();
206
		handle = new int[v.size()-1];
207
	    for (int j=1;j<v.size();j++) {
208
		    handle[j-1] = ((Integer)v.get(j)).intValue();
209
	    }
210
	    handleVect = new ArrayList();
211
	    for (int i=0;i<handle.length;i++) {
212
	    	handleVect.add(new Integer(handle[i]));
213
	    }
214
	    blockEntityHandle = DwgUtil.handleBinToHandleInt(handleVect);
215
		if ((!bxref) && (!xover)) {
216
			v = DwgUtil.getHandle(data, bitPos);
217
			bitPos = ((Integer)v.get(0)).intValue();
218
			handle = new int[v.size()-1];
219
		    for (int j=1;j<v.size();j++) {
220
			    handle[j-1] = ((Integer)v.get(j)).intValue();
221
		    }
222
		    handleVect = new ArrayList();
223
		    for (int i=0;i<handle.length;i++) {
224
		    	handleVect.add(new Integer(handle[i]));
225
		    }
226
		    firstEntityHandle = DwgUtil.handleBinToHandleInt(handleVect);
227
			v = DwgUtil.getHandle(data, bitPos);
228
			bitPos = ((Integer)v.get(0)).intValue();
229
			handle = new int[v.size()-1];
230
		    for (int j=1;j<v.size();j++) {
231
			    handle[j-1] = ((Integer)v.get(j)).intValue();
232
		    }
233
		    handleVect = new ArrayList();
234
		    for (int i=0;i<handle.length;i++) {
235
		    	handleVect.add(new Integer(handle[i]));
236
		    }
237
		    lastEntityHandle = DwgUtil.handleBinToHandleInt(handleVect);
238
		}
239
		v = DwgUtil.getHandle(data, bitPos);
240
		bitPos = ((Integer)v.get(0)).intValue();
241
		handle = new int[v.size()-1];
242
	    for (int j=1;j<v.size();j++) {
243
		    handle[j-1] = ((Integer)v.get(j)).intValue();
244
	    }
245
	    handleVect = new ArrayList();
246
	    for (int i=0;i<handle.length;i++) {
247
	    	handleVect.add(new Integer(handle[i]));
248
	    }
249
	    endBlkEntityHandle = DwgUtil.handleBinToHandleInt(handleVect);
250
		if (icount>0) {
251
			Vector handles = new Vector();
252
			for (int i=0;i<icount;i++) {
253
				v = DwgUtil.getHandle(data, bitPos);
254
				bitPos = ((Integer)v.get(0)).intValue();
255
				handle = new int[v.size()-1];
256
			    for (int j=1;j<v.size();j++) {
257
				    handle[j-1] = ((Integer)v.get(j)).intValue();
258
			    }
259
				handles.add(handle);
260
			}
261
		    insertHandles = handles;
262
		}
263
		v = DwgUtil.getHandle(data, bitPos);
264
		bitPos = ((Integer)v.get(0)).intValue();
265
		handle = new int[v.size()-1];
266
	    for (int j=1;j<v.size();j++) {
267
		    handle[j-1] = ((Integer)v.get(j)).intValue();
268
	    }
269
	    handleVect = new ArrayList();
270
	    for (int i=0;i<handle.length;i++) {
271
	    	handleVect.add(new Integer(handle[i]));
272
	    }
273
	    layoutHandle = DwgUtil.handleBinToHandleInt(handleVect);
274
	}
275
	/**
276 82
	 * @return Returns the basePoint.
277 83
	 */
278 84
	public double[] getBasePoint() {
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/objects/DwgInsert.java
35 35
package com.iver.cit.jdwglib.dwg.objects;
36 36

  
37 37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39 38
import java.util.List;
40 39

  
41 40
import com.iver.cit.gvsig.fmap.core.FPoint2D;
......
43 42
import com.iver.cit.gvsig.fmap.core.FShape;
44 43
import com.iver.cit.jdwglib.dwg.DwgFile;
45 44
import com.iver.cit.jdwglib.dwg.DwgObject;
46
import com.iver.cit.jdwglib.dwg.DwgUtil;
47 45
import com.iver.cit.jdwglib.dwg.IDwg2FMap;
48 46
import com.iver.cit.jdwglib.dwg.IDwg3DTestable;
49 47
import com.iver.cit.jdwglib.dwg.IDwgBlockMember;
......
69 67
	private int lastAttribHandle;
70 68
	private int seqendHandle;
71 69
	
70

  
72 71
	/**
73
	 * Read a Insert in the DWG format Version 15
74
	 * 
75
	 * @param data Array of unsigned bytes obtained from the DWG binary file
76
	 * @param offset The current bit offset where the value begins
77
	 * @throws Exception If an unexpected bit value is found in the DWG file. Occurs
78
	 * 		   when we are looking for LwPolylines.
79
	 */
80
	public void readDwgInsertV15(int[] data, int offset) throws Exception {
81
		//System.out.println("readDwgInsert() executed ...");
82
		int bitPos = offset;
83
		bitPos = readObjectHeaderV15(data, bitPos);
84
		ArrayList v = DwgUtil.getBitDouble(data, bitPos);
85
		bitPos = ((Integer)v.get(0)).intValue();
86
		double x = ((Double)v.get(1)).doubleValue();
87
		v = DwgUtil.getBitDouble(data, bitPos);
88
		bitPos = ((Integer)v.get(0)).intValue();
89
		double y = ((Double)v.get(1)).doubleValue();
90
		v = DwgUtil.getBitDouble(data, bitPos);
91
		bitPos = ((Integer)v.get(0)).intValue();
92
		double z = ((Double)v.get(1)).doubleValue();
93
		double[] coord = new double[]{x, y, z};
94
		insertionPoint = coord;
95
		int dflag = ((Integer)DwgUtil.getBits(data, 2, bitPos)).intValue();
96
		bitPos = bitPos + 2;
97
		if (dflag==0x0) {
98
			v = DwgUtil.getRawDouble(data, bitPos);
99
			bitPos = ((Integer)v.get(0)).intValue();
100
			x = ((Double)v.get(1)).doubleValue();
101
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
102
			bitPos = ((Integer)v.get(0)).intValue();
103
			y = ((Double)v.get(1)).doubleValue();
104
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
105
			bitPos = ((Integer)v.get(0)).intValue();
106
			z = ((Double)v.get(1)).doubleValue();
107
		} else if (dflag==0x1) {
108
			x = 1.0;
109
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
110
			bitPos = ((Integer)v.get(0)).intValue();
111
			y = ((Double)v.get(1)).doubleValue();
112
			v = DwgUtil.getDefaultDouble(data, bitPos, x);
113
			bitPos = ((Integer)v.get(0)).intValue();
114
			z = ((Double)v.get(1)).doubleValue();
115
		} else if (dflag==0x2) {
116
			v = DwgUtil.getRawDouble(data, bitPos);
117
			bitPos = ((Integer)v.get(0)).intValue();
118
			x = ((Double)v.get(1)).doubleValue();
119
			z = x;
120
			y = z;
121
		} else {
122
			z = 1.0;
123
			y = z;
124
			x = y;
125
		}
126
		coord = new double[]{x, y, z};
127
		scale = coord;
128
		v = DwgUtil.getBitDouble(data, bitPos);
129
		bitPos = ((Integer)v.get(0)).intValue();
130
		double rot = ((Double)v.get(1)).doubleValue();
131
		rotation = rot;
132
		v = DwgUtil.getBitDouble(data, bitPos);
133
		bitPos = ((Integer)v.get(0)).intValue();
134
		x = ((Double)v.get(1)).doubleValue();
135
		v = DwgUtil.getBitDouble(data, bitPos);
136
		bitPos = ((Integer)v.get(0)).intValue();
137
		y = ((Double)v.get(1)).doubleValue();
138
		v = DwgUtil.getBitDouble(data, bitPos);
139
		bitPos = ((Integer)v.get(0)).intValue();
140
		z = ((Double)v.get(1)).doubleValue();
141
		coord = new double[]{x, y, z};
142
		extrusion = coord;
143
		v = DwgUtil.testBit(data, bitPos);
144
		bitPos = ((Integer)v.get(0)).intValue();
145
		boolean hasattr = ((Boolean)v.get(1)).booleanValue();
146
		bitPos = readObjectTailV15(data, bitPos);
147
		v = DwgUtil.getHandle(data, bitPos);
148
		bitPos = ((Integer)v.get(0)).intValue();
149
		int[] handle = new int[v.size()-1];
150
	    for (int i=1;i<v.size();i++) {
151
		    handle[i-1] = ((Integer)v.get(i)).intValue();
152
	    }
153
	    ArrayList handleVect = new ArrayList();
154
	    for (int i=0;i<handle.length;i++) {
155
	    	handleVect.add(new Integer(handle[i]));
156
	    }
157
	    blockHeaderHandle = DwgUtil.handleBinToHandleInt(handleVect);
158
		if (hasattr) {
159
			v = DwgUtil.getHandle(data, bitPos);
160
			bitPos = ((Integer)v.get(0)).intValue();
161
			handle = new int[v.size()-1];
162
		    for (int i=1;i<v.size();i++) {
163
			    handle[i-1] = ((Integer)v.get(i)).intValue();
164
		    }
165
		    handleVect = new ArrayList();
166
		    for (int i=0;i<handle.length;i++) {
167
		    	handleVect.add(new Integer(handle[i]));
168
		    }
169
		    firstAttribHandle = DwgUtil.handleBinToHandleInt(handleVect);
170
			v = DwgUtil.getHandle(data, bitPos);
171
			bitPos = ((Integer)v.get(0)).intValue();
172
			handle = new int[v.size()-1];
173
		    for (int i=1;i<v.size();i++) {
174
			    handle[i-1] = ((Integer)v.get(i)).intValue();
175
		    }
176
		    handleVect = new ArrayList();
177
		    for (int i=0;i<handle.length;i++) {
178
		    	handleVect.add(new Integer(handle[i]));
179
		    }
180
		    lastAttribHandle = DwgUtil.handleBinToHandleInt(handleVect);
181
			v = DwgUtil.getHandle(data, bitPos);
182
			bitPos = ((Integer)v.get(0)).intValue();
183
			handle = new int[v.size()-1];
184
		    for (int i=1;i<v.size();i++) {
185
			    handle[i-1] = ((Integer)v.get(i)).intValue();
186
		    }
187
		    handleVect = new ArrayList();
188
		    for (int i=0;i<handle.length;i++) {
189
		    	handleVect.add(new Integer(handle[i]));
190
		    }
191
		    seqendHandle = DwgUtil.handleBinToHandleInt(handleVect);
192
		}
193
	}
194
	/**
195 72
	 * @return Returns the blockHeaderHandle.
196 73
	 */
197 74
	public int getBlockHeaderHandle() {

Also available in: Unified diff