Revision 1858 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgMemoryDriver.java
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