Revision 1858 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgMemoryDriver.java

View differences:

DwgMemoryDriver.java
77 77
import com.iver.cit.gvsig.fmap.rendering.LegendFactory;
78 78
import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend;
79 79

  
80
import com.iver.cit.gvsig.fmap.drivers.dgn.ByteUtils;
81

  
80 82
public class DwgMemoryDriver extends MemoryDriver implements WithDefaultLegend {
81 83
	private final int ID_FIELD_ID=0;
82 84
	private final int ID_FIELD_ENTITY=1;
......
109 111
		attr.setLoadedInMemory(true);
110 112
		
111 113
		dwg = new DwgFile();
114
		long time = System.currentTimeMillis();
112 115
		dwg.read(m_Fich.getAbsolutePath());
116
		long timeElapsed = System.currentTimeMillis()-time;
117
		System.out.println("Tiempo empleado en leer el fichero dwg = " + timeElapsed);
113 118
		dwgObjects = dwg.getDwgObjects();
114 119
		
115 120
		/*for (int i=0;i<dwgObjects.size();i++) {
......
157 162
		
158 163
    	getTableModel().setColumnIdentifiers(arrayFields.toArray());
159 164
		
165
		time = System.currentTimeMillis();
160 166
		for (int i=0;i<dwgObjects.size();i++) {
161 167
			
162 168
            auxRow[ID_FIELD_HEIGHTTEXT] = ValueFactory.createValue(0);
......
277 283
				int flags = ((Integer)data.getValue()).intValue();
278 284
				data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE");
279 285
				int[] firstVertexHandle = (int[])data.getValue();
286
				byte[] firstHandleBytes = new byte[]{0,0,0,0};
287
				if (firstVertexHandle.length>2) firstHandleBytes[3] = (byte)firstVertexHandle[2];
288
				if (firstVertexHandle.length>3) firstHandleBytes[2] = (byte)firstVertexHandle[3];
289
				if (firstVertexHandle.length>4) firstHandleBytes[1] = (byte)firstVertexHandle[4];
290
				if (firstVertexHandle.length>5) firstHandleBytes[0] = (byte)firstVertexHandle[5];
291
				int firstHandle = ByteUtils.bytesToInt(firstHandleBytes, new int[]{0});
292
				/*System.out.println("firstVertexHandle[0] = " + firstVertexHandle[0]);
293
				System.out.println("firstVertexHandle[1] = " + firstVertexHandle[1]);
294
				if (firstVertexHandle.length>2) System.out.println("firstVertexHandle[2] = " + firstVertexHandle[2]);
295
				if (firstVertexHandle.length>3) System.out.println("firstVertexHandle[3] = " + firstVertexHandle[3]);
296
				if (firstVertexHandle.length>4) System.out.println("firstVertexHandle[4] = " + firstVertexHandle[4]);*/
280 297
				data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE");
281 298
				int[] lastVertexHandle = (int[])data.getValue();
299
				byte[] lastHandleBytes = new byte[]{0,0,0,0};
300
				if (lastVertexHandle.length>2) lastHandleBytes[3] = (byte)lastVertexHandle[2];
301
				if (lastVertexHandle.length>3) lastHandleBytes[2] = (byte)lastVertexHandle[3];
302
				if (lastVertexHandle.length>4) lastHandleBytes[1] = (byte)lastVertexHandle[4];
303
				if (lastVertexHandle.length>5) lastHandleBytes[0] = (byte)lastVertexHandle[5];
304
				int lastHandle = ByteUtils.bytesToInt(lastHandleBytes, new int[]{0});
305
				/*System.out.println("lastVertexHandle[0] = " + lastVertexHandle[0]);
306
				System.out.println("lastVertexHandle[1] = " + lastVertexHandle[1]);
307
				if (lastVertexHandle.length>2) System.out.println("lastVertexHandle[2] = " + lastVertexHandle[2]);
308
				if (lastVertexHandle.length>3) System.out.println("lastVertexHandle[3] = " + lastVertexHandle[3]);
309
				if (lastVertexHandle.length>4) System.out.println("lastVertexHandle[4] = " + lastVertexHandle[4]);*/
282 310
				data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE");
283 311
				int[] seqendHandle = (int[])data.getValue();
284 312
				//int vertexNumber = (lastVertexHandle-firstVertexHandle)+1;
285
				int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle);
286
				//System.out.println("vertexNumber = " + vertexNumber);
313
				//int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle);
314
				int vertexNumber = lastHandle - firstHandle + 1;
315
				System.out.println("vertexNumber = " + vertexNumber);
287 316
				Point2D[] pts = new Point2D[vertexNumber];
317
				//Vector pts = new Vector();
288 318
				double[] pt = new double[2];
289 319
				
290 320
				// Buscando el primer v?rtice ...
291
				for (int j=0;j<dwgObjects.size();j++) {
321
				/*for (int j=0;j<dwgObjects.size();j++) {
292 322
					DwgObject obj = (DwgObject)dwgObjects.get(j);
293 323
					Vector handle = obj.getHandle();
294 324
					if (handle.size()==firstVertexHandle.length) {
......
298 328
								data = vertex.getDwgObjectSpecificDataItem("POINT");
299 329
								pt = (double[])data.getValue();
300 330
								pts[k] = new Point2D.Double(pt[0], pt[1]);
301
							}
331
							}*/
332
							/*int cnt = 0;
333
							while (true) {
334
								DwgObject vertex = (DwgObject)dwgObjects.get(j+cnt);
335
								Vector vHandle = vertex.getHandle();
336
								data = vertex.getDwgObjectSpecificDataItem("POINT");
337
								pt = (double[])data.getValue();
338
								pts.add(new Point2D.Double(pt[0], pt[1]));
339
								if (((Integer)handle.get(handle.size()-2)).intValue()==firstVertexHandle[handle.size()-2] && ((Integer)handle.get(handle.size()-1)).intValue()==firstVertexHandle[handle.size()-1]) {
340
									break;
341
								}
342
								cnt++;
343
							}*/
344
						/*}
345
					}
346
				}*/
347
				for (int j=0;j<dwgObjects.size();j++) {
348
					DwgObject obj = (DwgObject)dwgObjects.get(j);
349
					Vector handle = obj.getHandle();
350
					//System.out.println("handleInts[0] = " + handleInts[0]);
351
					//System.out.println("handleInts[1] = " + handleInts[1]);
352
					//if (handle.size()>2) System.out.println("handleInts[2] = " + handleInts[2]);
353
					//if (handle.size()>3) System.out.println("handleInts[3] = " + handleInts[3]);
354
					byte[] handleBytes = new byte[]{0,0,0,0};
355
					if (handle.size()>2) handleBytes[3] = ((Integer)handle.get(2)).byteValue();
356
					if (handle.size()>3) handleBytes[2] = ((Integer)handle.get(3)).byteValue();
357
					if (handle.size()>4) handleBytes[1] = ((Integer)handle.get(4)).byteValue();
358
					if (handle.size()>5) handleBytes[0] = ((Integer)handle.get(5)).byteValue();
359
					int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0});
360
					System.out.println("objHandle = " + objHandle);
361
					if (objHandle==firstHandle) {
362
						for (int k=0; k<vertexNumber; k++) {
363
							DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
364
							data = vertex.getDwgObjectSpecificDataItem("POINT");
365
							pt = (double[])data.getValue();
366
							pts[k] = new Point2D.Double(pt[0], pt[1]);
302 367
						}
303 368
					}
304
					/*if (handle.size()==firstVertexHandle.length) {
305
						if (handle.size()==3) {
306
							if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2]) {
307
								for (int k=0; k<vertexNumber; k++) {
308
									DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
309
									data = vertex.getDwgObjectSpecificDataItem("POINT");
310
									pt = (double[])data.getValue();
311
									pts[k] = new Point2D.Double(pt[0], pt[1]);
312
								}
313
							}
314
						} else if (handle.size()==4) {
315
							if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) {
316
								for (int k=0; k<vertexNumber; k++) {
317
									DwgObject vertex = (DwgObject)dwgObjects.get(j+k);
318
									data = vertex.getDwgObjectSpecificDataItem("POINT");
319
									pt = (double[])data.getValue();
320
									pts[k] = new Point2D.Double(pt[0], pt[1]);
321
								}
322
							}
323
						} else {
324
							//
325
						}
326
					}*/
327 369
				}
328 370
				Point2D[] newPts = new Point2D[pts.length];
371
				//Point2D[] newPts = new Point2D[pts.size()];
329 372
				if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) {
330 373
					newPts = pts;
374
					/*for (int j=0;j<pts.size();j++) {
375
						newPts[j] = (Point2D)pts.get(j);
376
					}*/
331 377
				} else if (flags==1 || flags==3 || flags==5 || flags==9 || flags==17 || flags==33 || flags==65 || flags==129) {
332 378
					newPts = new Point2D[pts.length+1];
379
					//newPts = new Point2D[pts.size()+1];
333 380
					for (int j=0;j<pts.length;j++) {
334 381
						newPts[j] = pts[j];
335 382
					}
383
					/*for (int j=0;j<pts.size();j++) {
384
						newPts[j] = (Point2D)pts.get(j);
385
					}*/
336 386
					newPts[pts.length] = pts[0];
387
					//newPts[pts.size()] = (Point2D)pts.get(0);
337 388
				}
338 389
				FPolyline2D pline = createPolyline2D(newPts);
339 390
				//pto = (Point2D.Double)point.get(0);
......
688 739
				System.out.println("Detectado dwgObject pendiente de implementar");
689 740
			}
690 741
		}
742
		timeElapsed = System.currentTimeMillis()-time;
743
		System.out.println("Tiempo empleado por el driver en importar el contenido del dwg = " + timeElapsed);
691 744
		
692 745
		defaultLegend = LegendFactory.createVectorialUniqueValueLegend(getShapeType());
693 746
		defaultLegend.setFieldName("Color");
......
888 941
				int vn = aux + aux2 + aux3;
889 942
				return vn;
890 943
			}
891
		// Fallar? en polil?neas de m?s de 500 v?rtices ...
892 944
		} else if (firstVertexHandle.length==(lastVertexHandle.length-1)) {
893 945
			int aux = 255-firstVertexHandle[firstVertexHandle.length-1]+1;
894 946
			int aux2 = lastVertexHandle[firstVertexHandle.length]+1;
895
			int vn = aux + aux2;
947
			int aux3 = (lastVertexHandle[lastVertexHandle.length-2]-1)*255;
948
			int vn = aux + aux2 + aux3;
896 949
			return vn;
897 950
		} else {
898 951
			System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados");

Also available in: Unified diff