Revision 1853
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgMemoryDriver.java | ||
---|---|---|
281 | 281 |
int[] lastVertexHandle = (int[])data.getValue(); |
282 | 282 |
data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE"); |
283 | 283 |
int[] seqendHandle = (int[])data.getValue(); |
284 |
if (firstVertexHandle.length==4) { |
|
285 |
//System.out.println("firstVertexHandle[3] = " + firstVertexHandle[3]); |
|
286 |
//System.out.println("lastVertexHandle[3] = " + lastVertexHandle[3]); |
|
287 |
} else if (firstVertexHandle.length==3) { |
|
288 |
//System.out.println("firstVertexHandle[2] = " + firstVertexHandle[2]); |
|
289 |
//System.out.println("lastVertexHandle[2] = " + lastVertexHandle[2]); |
|
290 |
} |
|
291 | 284 |
//int vertexNumber = (lastVertexHandle-firstVertexHandle)+1; |
292 | 285 |
int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle); |
293 |
// Este if es para evitar algunas poil?neas raras. Luego habr? que |
|
294 |
// quitarlo y afrontar el problema ... |
|
295 |
if (vertexNumber>0) { |
|
296 |
System.out.println("vertexNumber = " + vertexNumber); |
|
297 |
Point2D[] pts = new Point2D[vertexNumber]; |
|
298 |
double[] pt = new double[2]; |
|
299 |
|
|
300 |
// Buscando el primer v?rtice ... |
|
301 |
for (int j=0;j<dwgObjects.size();j++) { |
|
302 |
DwgObject obj = (DwgObject)dwgObjects.get(j); |
|
303 |
Vector handle = obj.getHandle(); |
|
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 |
// Este if es para evitar algunas poil?neas raras. Luego habr? que |
|
312 |
// quitarlo y afrontar el problema ... |
|
313 |
/*if (data==null) { |
|
314 |
pt = new double[]{0.0, 0.0}; |
|
315 |
} else { |
|
316 |
pt = (double[])data.getValue(); |
|
317 |
}*/ |
|
318 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
|
319 |
} |
|
286 |
//System.out.println("vertexNumber = " + vertexNumber); |
|
287 |
Point2D[] pts = new Point2D[vertexNumber]; |
|
288 |
double[] pt = new double[2]; |
|
289 |
|
|
290 |
// Buscando el primer v?rtice ... |
|
291 |
for (int j=0;j<dwgObjects.size();j++) { |
|
292 |
DwgObject obj = (DwgObject)dwgObjects.get(j); |
|
293 |
Vector handle = obj.getHandle(); |
|
294 |
if (handle.size()==firstVertexHandle.length) { |
|
295 |
if (((Integer)handle.get(handle.size()-2)).intValue()==firstVertexHandle[handle.size()-2] && ((Integer)handle.get(handle.size()-1)).intValue()==firstVertexHandle[handle.size()-1]) { |
|
296 |
for (int k=0; k<vertexNumber; k++) { |
|
297 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
|
298 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
|
299 |
pt = (double[])data.getValue(); |
|
300 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
|
301 |
} |
|
302 |
} |
|
303 |
} |
|
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]); |
|
320 | 312 |
} |
321 |
} else if (handle.size()==4) { |
|
322 |
if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) { |
|
323 |
for (int k=0; k<vertexNumber; k++) { |
|
324 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
|
325 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
|
326 |
pt = (double[])data.getValue(); |
|
327 |
// Este if es para evitar algunas poil?neas raras. Luego habr? que |
|
328 |
// quitarlo y afrontar el problema ... |
|
329 |
/*if (data==null) { |
|
330 |
pt = new double[]{0.0, 0.0}; |
|
331 |
} else { |
|
332 |
pt = (double[])data.getValue(); |
|
333 |
}*/ |
|
334 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
|
335 |
} |
|
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]); |
|
336 | 321 |
} |
337 |
} else { |
|
338 |
// |
|
339 | 322 |
} |
323 |
} else { |
|
324 |
// |
|
340 | 325 |
} |
326 |
}*/ |
|
327 |
} |
|
328 |
Point2D[] newPts = new Point2D[pts.length]; |
|
329 |
if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) { |
|
330 |
newPts = pts; |
|
331 |
} else if (flags==1 || flags==3 || flags==5 || flags==9 || flags==17 || flags==33 || flags==65 || flags==129) { |
|
332 |
newPts = new Point2D[pts.length+1]; |
|
333 |
for (int j=0;j<pts.length;j++) { |
|
334 |
newPts[j] = pts[j]; |
|
341 | 335 |
} |
342 |
Point2D[] newPts = new Point2D[pts.length]; |
|
343 |
if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) { |
|
344 |
newPts = pts; |
|
345 |
} else if (flags==1 || flags==3 || flags==5 || flags==9 || flags==17 || flags==33 || flags==65 || flags==129) { |
|
346 |
newPts = new Point2D[pts.length+1]; |
|
347 |
for (int j=0;j<pts.length;j++) { |
|
348 |
newPts[j] = pts[j]; |
|
349 |
} |
|
350 |
newPts[pts.length] = pts[0]; |
|
351 |
} |
|
352 |
FPolyline2D pline = createPolyline2D(newPts); |
|
353 |
//pto = (Point2D.Double)point.get(0); |
|
354 |
//FShape nuevoShp; |
|
355 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
|
356 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("dxfEntity")); |
|
357 |
auxRow[ID_FIELD_LAYER] = ValueFactory.createValue(new String("layer")); |
|
358 |
auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(0); |
|
359 |
auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(0.0); |
|
360 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0); |
|
361 |
// Attributes |
|
362 |
/*for (int j=0;j<nAtt;j++) { |
|
363 |
String[] attributes = new String[2]; |
|
364 |
attributes = (String[])featureMaker.getAttributes().get(j); |
|
365 |
auxRow[9+j] = ValueFactory.createValue(new String((String)attributes[1])); |
|
366 |
if (!fea.getProp(attributes[0]).equals(attributes[1])) { |
|
367 |
auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0]))); |
|
368 |
} |
|
369 |
}*/ |
|
370 |
addShape(pline, auxRow); |
|
336 |
newPts[pts.length] = pts[0]; |
|
371 | 337 |
} |
338 |
FPolyline2D pline = createPolyline2D(newPts); |
|
339 |
//pto = (Point2D.Double)point.get(0); |
|
340 |
//FShape nuevoShp; |
|
341 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
|
342 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("dxfEntity")); |
|
343 |
auxRow[ID_FIELD_LAYER] = ValueFactory.createValue(new String("layer")); |
|
344 |
auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(0); |
|
345 |
auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(0.0); |
|
346 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0); |
|
347 |
// Attributes |
|
348 |
/*for (int j=0;j<nAtt;j++) { |
|
349 |
String[] attributes = new String[2]; |
|
350 |
attributes = (String[])featureMaker.getAttributes().get(j); |
|
351 |
auxRow[9+j] = ValueFactory.createValue(new String((String)attributes[1])); |
|
352 |
if (!fea.getProp(attributes[0]).equals(attributes[1])) { |
|
353 |
auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0]))); |
|
354 |
} |
|
355 |
}*/ |
|
356 |
addShape(pline, auxRow); |
|
372 | 357 |
} else if (entity.getType()==0x10) { |
373 | 358 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CLOSED_FLAGS"); |
374 | 359 |
int flags = ((Integer)data.getValue()).intValue(); |
... | ... | |
378 | 363 |
int[] lastVertexHandle = (int[])data.getValue(); |
379 | 364 |
data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE"); |
380 | 365 |
int[] seqendHandle = (int[])data.getValue(); |
381 |
if (firstVertexHandle.length==4) { |
|
382 |
//System.out.println("firstVertexHandle[3] = " + firstVertexHandle[3]); |
|
383 |
//System.out.println("lastVertexHandle[3] = " + lastVertexHandle[3]); |
|
384 |
} else if (firstVertexHandle.length==3) { |
|
385 |
//System.out.println("firstVertexHandle[2] = " + firstVertexHandle[2]); |
|
386 |
//System.out.println("lastVertexHandle[2] = " + lastVertexHandle[2]); |
|
387 |
} |
|
388 | 366 |
//int vertexNumber = (lastVertexHandle-firstVertexHandle)+1; |
389 | 367 |
int vertexNumber = calculateVertexNumber(firstVertexHandle, lastVertexHandle); |
390 | 368 |
Point2D[] pts = new Point2D[vertexNumber]; |
... | ... | |
394 | 372 |
for (int j=0;j<dwgObjects.size();j++) { |
395 | 373 |
DwgObject v = (DwgObject)dwgObjects.get(j); |
396 | 374 |
Vector handle = v.getHandle(); |
397 |
if (handle.size()==4) { |
|
375 |
if (((Integer)handle.get(handle.size()-2)).intValue()==firstVertexHandle[handle.size()-2] && ((Integer)handle.get(handle.size()-1)).intValue()==firstVertexHandle[handle.size()-1]) { |
|
376 |
for (int k=0; k<vertexNumber; k++) { |
|
377 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
|
378 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
|
379 |
pt = (double[])data.getValue(); |
|
380 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
|
381 |
} |
|
382 |
} |
|
383 |
/*if (handle.size()==4) { |
|
398 | 384 |
if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2] && ((Integer)handle.get(3)).intValue()==firstVertexHandle[3]) { |
399 | 385 |
for (int k=0; k<vertexNumber; k++) { |
400 |
//System.out.println("k = " + k); |
|
401 | 386 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
402 | 387 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
403 |
//System.out.println("pt = " + pt); |
|
404 |
//System.out.println("data = " + data); |
|
405 |
//System.out.println("(double[])data.getValue() = " + (double[])data.getValue()); |
|
406 | 388 |
pt = (double[])data.getValue(); |
407 | 389 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
408 | 390 |
} |
... | ... | |
410 | 392 |
} else if (handle.size()==3) { |
411 | 393 |
if (((Integer)handle.get(2)).intValue()==firstVertexHandle[2]) { |
412 | 394 |
for (int k=0; k<vertexNumber; k++) { |
413 |
//System.out.println("k = " + k); |
|
414 | 395 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
415 | 396 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
416 |
//System.out.println("pt = " + pt); |
|
417 |
//System.out.println("data = " + data); |
|
418 |
//System.out.println("(double[])data.getValue() = " + (double[])data.getValue()); |
|
419 | 397 |
pt = (double[])data.getValue(); |
420 | 398 |
pts[k] = new Point2D.Double(pt[0], pt[1]); |
421 | 399 |
} |
422 | 400 |
} |
423 |
} |
|
401 |
}*/
|
|
424 | 402 |
} |
425 | 403 |
Point2D[] newPts = new Point2D[pts.length]; |
426 | 404 |
if (flags==0 || flags==2 || flags==4 || flags==8 || flags==16 || flags==32 || flags==64 || flags==128) { |
... | ... | |
873 | 851 |
} |
874 | 852 |
|
875 | 853 |
private FPolyline2D createPolyline2D(Point2D[] pts) { |
876 |
//System.out.println("pts.length = " + pts.length); |
|
877 | 854 |
GeneralPathX genPathX = new GeneralPathX(); |
878 | 855 |
genPathX.moveTo(pts[0].getX(), pts[0].getY()); |
879 | 856 |
for (int i=1; i<pts.length; i++) { |
880 |
//System.out.println("pts[i].getX() = " + pts[i].getX()); |
|
881 | 857 |
genPathX.lineTo(pts[i].getX(), pts[i].getY()); |
882 | 858 |
} |
883 | 859 |
return new FPolyline2D(genPathX); |
... | ... | |
894 | 870 |
} |
895 | 871 |
|
896 | 872 |
private int calculateVertexNumber(int[] firstVertexHandle, int[] lastVertexHandle) { |
897 |
if (firstVertexHandle.length==3 && lastVertexHandle.length==3) { |
|
873 |
/*System.out.println("firstVertexHandle[0]" + firstVertexHandle[0]); |
|
874 |
System.out.println("firstVertexHandle[1]" + firstVertexHandle[1]); |
|
875 |
System.out.println("firstVertexHandle[2]" + firstVertexHandle[2]); |
|
876 |
System.out.println("firstVertexHandle[3]" + firstVertexHandle[3]); |
|
877 |
System.out.println("lastVertexHandle[0]" + lastVertexHandle[0]); |
|
878 |
System.out.println("lastVertexHandle[1]" + lastVertexHandle[1]); |
|
879 |
System.out.println("lastVertexHandle[2]" + lastVertexHandle[2]); |
|
880 |
System.out.println("lastVertexHandle[3]" + lastVertexHandle[3]);*/ |
|
881 |
if (firstVertexHandle.length==lastVertexHandle.length) { |
|
882 |
if (firstVertexHandle[firstVertexHandle.length-2]==lastVertexHandle[firstVertexHandle.length-2]) { |
|
883 |
return (lastVertexHandle[firstVertexHandle.length-1]-firstVertexHandle[firstVertexHandle.length-1]+1); |
|
884 |
} else { |
|
885 |
int aux = 255-firstVertexHandle[firstVertexHandle.length-1]+1; |
|
886 |
int aux2 = lastVertexHandle[firstVertexHandle.length-1]+1; |
|
887 |
int aux3 = (lastVertexHandle[firstVertexHandle.length-2]-firstVertexHandle[firstVertexHandle.length-2]-1)*255; |
|
888 |
int vn = aux + aux2 + aux3; |
|
889 |
return vn; |
|
890 |
} |
|
891 |
// Fallar? en polil?neas de m?s de 500 v?rtices ... |
|
892 |
} else if (firstVertexHandle.length==(lastVertexHandle.length-1)) { |
|
893 |
int aux = 255-firstVertexHandle[firstVertexHandle.length-1]+1; |
|
894 |
int aux2 = lastVertexHandle[firstVertexHandle.length]+1; |
|
895 |
int vn = aux + aux2; |
|
896 |
return vn; |
|
897 |
} else { |
|
898 |
System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados"); |
|
899 |
return 0; |
|
900 |
} |
|
901 |
/*if (firstVertexHandle.length==3 && lastVertexHandle.length==3) { |
|
898 | 902 |
return (lastVertexHandle[2]-firstVertexHandle[2]+1); |
899 | 903 |
} else if (firstVertexHandle.length==4 && lastVertexHandle.length==4) { |
900 | 904 |
if (firstVertexHandle[2]==lastVertexHandle[2]) { |
901 |
System.out.println("firstVertexHandle[2]" + firstVertexHandle[2]); |
|
902 |
System.out.println("firstVertexHandle[3]" + firstVertexHandle[3]); |
|
903 |
System.out.println("lastVertexHandle[2]" + lastVertexHandle[2]); |
|
904 |
System.out.println("lastVertexHandle[3]" + lastVertexHandle[3]); |
|
905 |
System.out.println("lastVertexHandle[3]-firstVertexHandle[3]+1 = " + (lastVertexHandle[3]-firstVertexHandle[3]+1)); |
|
906 | 905 |
return (lastVertexHandle[3]-firstVertexHandle[3]+1); |
907 | 906 |
} else { |
908 | 907 |
int vn = 0; |
909 |
int aux = 255-firstVertexHandle[3]; |
|
910 |
int aux2 = lastVertexHandle[3]; |
|
908 |
int aux = 255-firstVertexHandle[3]+1;
|
|
909 |
int aux2 = lastVertexHandle[3]+1;
|
|
911 | 910 |
int aux3 = (lastVertexHandle[2]-firstVertexHandle[2]-1)*255; |
912 | 911 |
vn = aux + aux2 + aux3; |
913 |
System.out.println("vn = " + vn); |
|
914 |
return vn-1; |
|
912 |
return vn; |
|
915 | 913 |
} |
916 | 914 |
} else if (firstVertexHandle.length==3 && lastVertexHandle.length==4) { |
917 | 915 |
int vn = 0; |
918 |
int aux = 255-firstVertexHandle[2]; |
|
919 |
int aux2 = lastVertexHandle[3]; |
|
916 |
int aux = 255-firstVertexHandle[2]+1;
|
|
917 |
int aux2 = lastVertexHandle[3]+1;
|
|
920 | 918 |
vn = aux + aux2; |
921 |
return vn-1; |
|
919 |
//System.out.println("vn = " + vn); |
|
920 |
return vn; |
|
922 | 921 |
} else { |
923 | 922 |
System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados"); |
924 | 923 |
return 0; |
925 |
} |
|
924 |
}*/
|
|
926 | 925 |
} |
927 | 926 |
|
928 | 927 |
/* (non-Javadoc) |
Also available in: Unified diff