Revision 1897
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/dwg/DwgMemoryDriver.java | ||
---|---|---|
59 | 59 |
import net.jmorell.jdwglib.dwg.DwgObjectSpecificDataItem; |
60 | 60 |
import net.jmorell.jdwglib.dwg.DxfName; |
61 | 61 |
import net.jmorell.jdwglib.dwg.objects.DwgArc; |
62 |
import net.jmorell.jdwglib.dwg.objects.DwgBlock; |
|
63 |
import net.jmorell.jdwglib.dwg.objects.DwgBlockHeader; |
|
62 | 64 |
import net.jmorell.jdwglib.dwg.objects.DwgCircle; |
65 |
import net.jmorell.jdwglib.dwg.objects.DwgInsert; |
|
63 | 66 |
import net.jmorell.jdwglib.dwg.objects.DwgLayer; |
64 | 67 |
import net.jmorell.jdwglib.dwg.objects.DwgLine; |
68 |
import net.jmorell.jdwglib.dwg.objects.DwgLwPolyline; |
|
69 |
import net.jmorell.jdwglib.dwg.objects.DwgMText; |
|
70 |
import net.jmorell.jdwglib.dwg.objects.DwgPoint; |
|
71 |
import net.jmorell.jdwglib.dwg.objects.DwgPolyline2D; |
|
72 |
import net.jmorell.jdwglib.dwg.objects.DwgPolyline3D; |
|
73 |
import net.jmorell.jdwglib.dwg.objects.DwgSolid; |
|
74 |
import net.jmorell.jdwglib.dwg.objects.DwgText; |
|
75 |
import net.jmorell.jdwglib.dwg.objects.DwgVertex2D; |
|
65 | 76 |
|
66 | 77 |
import com.hardcode.gdbms.engine.data.driver.DriverException; |
67 | 78 |
import com.hardcode.gdbms.engine.data.driver.ObjectDriver; |
... | ... | |
183 | 194 |
double[] c = ((DwgArc)entity).getCenter(); |
184 | 195 |
Point2D center = new Point2D.Double(c[0], c[1]); |
185 | 196 |
double radius = ((DwgArc)entity).getRadius(); |
186 |
double initAngle = ((DwgArc)entity).getInitAngle();
|
|
187 |
double endAngle = ((DwgArc)entity).getEndAngle();
|
|
197 |
double initAngle = Math.toDegrees(((DwgArc)entity).getInitAngle());
|
|
198 |
double endAngle = Math.toDegrees(((DwgArc)entity).getEndAngle());
|
|
188 | 199 |
//Point2D[] arc = createArc(center, radius, startAngle, endAngle); |
189 | 200 |
Point2D[] arc = GisModelCurveCalculator.calculateGisModelArc(center, radius, initAngle, endAngle); |
190 |
FPolyline2D arcc = convToFpline2D(arc);
|
|
201 |
FPolyline2D arcc = points2DToFPolyline2D(arc);
|
|
191 | 202 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
192 | 203 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Arc")); |
193 | 204 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
220 | 231 |
//double radius = ((Double)data.getValue()).doubleValue(); |
221 | 232 |
double radius = ((DwgCircle)entity).getRadius(); |
222 | 233 |
Point2D[] c = GisModelCurveCalculator.calculateGisModelCircle(new Point2D.Double(center[0], center[1]), radius); |
223 |
FPolyline2D circle = convToFpline2D(c);
|
|
234 |
FPolyline2D circle = points2DToFPolyline2D(c);
|
|
224 | 235 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
225 | 236 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Circle")); |
226 | 237 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
254 | 265 |
//Point2D p2 = new Point2D.Double(coord[0], coord[1]); |
255 | 266 |
double[] p2 = ((DwgLine)entity).getP2(); |
256 | 267 |
Point2D[] l = new Point2D[]{new Point2D.Double(p1[0], p1[1]), new Point2D.Double(p2[0], p2[1])}; |
257 |
FPolyline2D line = convToFpline2D(l);
|
|
268 |
FPolyline2D line = points2DToFPolyline2D(l);
|
|
258 | 269 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
259 | 270 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Line")); |
260 | 271 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
279 | 290 |
addShape(line, auxRow); |
280 | 291 |
} else if (entity.getType()==0x1B && !addingToBlock) { |
281 | 292 |
//System.out.println("Encuentra un Point ..."); |
282 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("POINT"); |
|
283 |
double[] coord = (double[])data.getValue(); |
|
284 |
Point2D p = new Point2D.Double(coord[0], coord[1]); |
|
285 |
FPoint2D point = createPoint(p); |
|
293 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("POINT"); |
|
294 |
//double[] coord = (double[])data.getValue(); |
|
295 |
//Point2D p = new Point2D.Double(coord[0], coord[1]); |
|
296 |
double[] p = ((DwgPoint)entity).getPoint(); |
|
297 |
FPoint2D point = new FPoint2D(p[0], p[1]); |
|
286 | 298 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
287 | 299 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Point")); |
288 | 300 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
307 | 319 |
addShape(point, auxRow); |
308 | 320 |
} else if (entity.getType()==0x0F && !addingToBlock) { |
309 | 321 |
//System.out.println("Encuentra una Polyline2D ..."); |
310 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("FLAGS"); |
|
311 |
int flags = ((Integer)data.getValue()).intValue(); |
|
312 |
data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
322 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("FLAGS"); |
|
323 |
//int flags = ((Integer)data.getValue()).intValue(); |
|
324 |
int flags = ((DwgPolyline2D)entity).getFlags(); |
|
325 |
/*data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
313 | 326 |
int[] firstVertexHandle = (int[])data.getValue(); |
314 | 327 |
byte[] firstHandleBytes = new byte[]{0,0,0,0}; |
315 | 328 |
if (firstVertexHandle.length>2) firstHandleBytes[3] = (byte)firstVertexHandle[2]; |
316 | 329 |
if (firstVertexHandle.length>3) firstHandleBytes[2] = (byte)firstVertexHandle[3]; |
317 | 330 |
if (firstVertexHandle.length>4) firstHandleBytes[1] = (byte)firstVertexHandle[4]; |
318 | 331 |
if (firstVertexHandle.length>5) firstHandleBytes[0] = (byte)firstVertexHandle[5]; |
319 |
int firstHandle = ByteUtils.bytesToInt(firstHandleBytes, new int[]{0}); |
|
320 |
data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE"); |
|
332 |
int firstHandle = ByteUtils.bytesToInt(firstHandleBytes, new int[]{0});*/ |
|
333 |
int firstHandle = ((DwgPolyline2D)entity).getFirstVertexHandle(); |
|
334 |
/*data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE"); |
|
321 | 335 |
int[] lastVertexHandle = (int[])data.getValue(); |
322 | 336 |
byte[] lastHandleBytes = new byte[]{0,0,0,0}; |
323 | 337 |
if (lastVertexHandle.length>2) lastHandleBytes[3] = (byte)lastVertexHandle[2]; |
324 | 338 |
if (lastVertexHandle.length>3) lastHandleBytes[2] = (byte)lastVertexHandle[3]; |
325 | 339 |
if (lastVertexHandle.length>4) lastHandleBytes[1] = (byte)lastVertexHandle[4]; |
326 | 340 |
if (lastVertexHandle.length>5) lastHandleBytes[0] = (byte)lastVertexHandle[5]; |
327 |
int lastHandle = ByteUtils.bytesToInt(lastHandleBytes, new int[]{0}); |
|
341 |
int lastHandle = ByteUtils.bytesToInt(lastHandleBytes, new int[]{0});*/ |
|
342 |
int lastHandle = ((DwgPolyline2D)entity).getLastVertexHandle(); |
|
328 | 343 |
Vector pts = new Vector(); |
329 | 344 |
Vector bulges = new Vector(); |
330 | 345 |
double[] pt = new double[2]; |
331 | 346 |
|
332 | 347 |
for (int j=0;j<dwgObjects.size();j++) { |
333 | 348 |
DwgObject obj = (DwgObject)dwgObjects.get(j); |
334 |
Vector handle = obj.getHandle(); |
|
349 |
/*Vector handle = obj.getHandle();
|
|
335 | 350 |
byte[] handleBytes = new byte[]{0,0,0,0}; |
336 | 351 |
if (handle.size()>2) handleBytes[3] = ((Integer)handle.get(2)).byteValue(); |
337 | 352 |
if (handle.size()>3) handleBytes[2] = ((Integer)handle.get(3)).byteValue(); |
338 | 353 |
if (handle.size()>4) handleBytes[1] = ((Integer)handle.get(4)).byteValue(); |
339 | 354 |
if (handle.size()>5) handleBytes[0] = ((Integer)handle.get(5)).byteValue(); |
340 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0}); |
|
341 |
if (objHandle==firstHandle && ((Integer)handle.get(1)).intValue()==firstVertexHandle[1]) { |
|
355 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0});*/ |
|
356 |
int objHandle = obj.getHandle(); |
|
357 |
//if (objHandle==firstHandle && ((Integer)handle.get(1)).intValue()==firstVertexHandle[1]) { |
|
358 |
if (objHandle==firstHandle && obj instanceof DwgVertex2D) { |
|
342 | 359 |
int k=0; |
343 | 360 |
while (true) { |
344 | 361 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
345 |
Vector vertexHandle = vertex.getHandle(); |
|
362 |
/*Vector vertexHandle = vertex.getHandle();
|
|
346 | 363 |
byte[] vHandleBytes = new byte[]{0,0,0,0}; |
347 | 364 |
if (vertexHandle.size()>2) vHandleBytes[3] = ((Integer)vertexHandle.get(2)).byteValue(); |
348 | 365 |
if (vertexHandle.size()>3) vHandleBytes[2] = ((Integer)vertexHandle.get(3)).byteValue(); |
349 | 366 |
if (vertexHandle.size()>4) vHandleBytes[1] = ((Integer)vertexHandle.get(4)).byteValue(); |
350 | 367 |
if (vertexHandle.size()>5) vHandleBytes[0] = ((Integer)vertexHandle.get(5)).byteValue(); |
351 |
int vHandle = ByteUtils.bytesToInt(vHandleBytes, new int[]{0}); |
|
352 |
data = vertex.getDwgObjectSpecificDataItem("POINT"); |
|
353 |
pt = (double[])data.getValue(); |
|
368 |
int vHandle = ByteUtils.bytesToInt(vHandleBytes, new int[]{0});*/ |
|
369 |
int vHandle = vertex.getHandle(); |
|
370 |
//data = vertex.getDwgObjectSpecificDataItem("POINT"); |
|
371 |
//pt = (double[])data.getValue(); |
|
372 |
pt = ((DwgVertex2D)vertex).getPoint(); |
|
354 | 373 |
pts.add(new Point2D.Double(pt[0], pt[1])); |
355 |
data = vertex.getDwgObjectSpecificDataItem("BULGE"); |
|
356 |
double bulge = ((Double)data.getValue()).doubleValue(); |
|
374 |
//data = vertex.getDwgObjectSpecificDataItem("BULGE"); |
|
375 |
//double bulge = ((Double)data.getValue()).doubleValue(); |
|
376 |
double bulge = ((DwgVertex2D)vertex).getBulge(); |
|
357 | 377 |
bulges.add(new Double(bulge)); |
358 | 378 |
k++; |
359 |
if (vHandle==lastHandle && ((Integer)vertexHandle.get(1)).intValue()==lastVertexHandle[1]) { |
|
379 |
//if (vHandle==lastHandle && ((Integer)vertexHandle.get(1)).intValue()==lastVertexHandle[1]) { |
|
380 |
if (vHandle==lastHandle) { |
|
360 | 381 |
break; |
361 | 382 |
} |
362 | 383 |
} |
... | ... | |
402 | 423 |
// Implementaci?n parcial ... |
403 | 424 |
} else if (entity.getType()==0x10 && !addingToBlock) { |
404 | 425 |
//System.out.println("Encuentra una Polyline3D ..."); |
405 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CLOSED_FLAGS"); |
|
406 |
int flags = ((Integer)data.getValue()).intValue(); |
|
407 |
data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
426 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CLOSED_FLAGS"); |
|
427 |
//int flags = ((Integer)data.getValue()).intValue(); |
|
428 |
int flags = ((DwgPolyline3D)entity).getClosedFlags(); |
|
429 |
/*data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
408 | 430 |
int[] firstVertexHandle = (int[])data.getValue(); |
431 |
int = fi |
|
409 | 432 |
data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE"); |
410 | 433 |
int[] lastVertexHandle = (int[])data.getValue(); |
411 | 434 |
data = entity.getDwgObjectSpecificDataItem("SEQEND_HANDLE"); |
... | ... | |
448 | 471 |
if (color==256) color = colorByLayer; |
449 | 472 |
auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(color); |
450 | 473 |
auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(0.0); |
451 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0); |
|
474 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(0.0);*/
|
|
452 | 475 |
// Attributes |
453 | 476 |
/*for (int j=0;j<nAtt;j++) { |
454 | 477 |
String[] attributes = new String[2]; |
... | ... | |
458 | 481 |
auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0]))); |
459 | 482 |
} |
460 | 483 |
}*/ |
461 |
addShape(pline3d, auxRow); |
|
484 |
//addShape(pline3d, auxRow);
|
|
462 | 485 |
} else if (entity.getType()==0x1 && !addingToBlock) { |
463 | 486 |
//System.out.println("Encuentra un Text ..."); |
464 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
465 |
Point2D p = (Point2D)data.getValue(); |
|
466 |
FPoint2D point = createPoint(p); |
|
487 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
488 |
//Point2D p = (Point2D)data.getValue(); |
|
489 |
Point2D p = ((DwgText)entity).getInsertionPoint(); |
|
490 |
FPoint2D point = new FPoint2D(p.getX(), p.getY()); |
|
467 | 491 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
468 | 492 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Text")); |
469 | 493 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
474 | 498 |
//if (color==0) color ByBlock |
475 | 499 |
if (color==256) color = colorByLayer; |
476 | 500 |
auxRow[ID_FIELD_COLOR] = ValueFactory.createValue(color); |
477 |
data = entity.getDwgObjectSpecificDataItem("TEXT"); |
|
478 |
String text = (String)data.getValue(); |
|
501 |
//data = entity.getDwgObjectSpecificDataItem("TEXT"); |
|
502 |
//String text = (String)data.getValue(); |
|
503 |
String text = ((DwgText)entity).getText(); |
|
479 | 504 |
auxRow[ID_FIELD_TEXT] = ValueFactory.createValue(new String(text)); |
480 |
data = entity.getDwgObjectSpecificDataItem("HEIGHT"); |
|
481 |
heightText = ((Float)data.getValue()).floatValue(); |
|
482 |
auxRow[ID_FIELD_HEIGHTTEXT] = ValueFactory.createValue(heightText); |
|
483 |
data = entity.getDwgObjectSpecificDataItem("DATA_FLAG"); |
|
484 |
int dflag = ((Integer)data.getValue()).intValue(); |
|
485 |
if ((dflag & 0x8) == 0) { |
|
486 |
data = entity.getDwgObjectSpecificDataItem("ROTATION_ANGLE"); |
|
487 |
double textRot = ((Double)data.getValue()).doubleValue(); |
|
488 |
auxRow[ID_FIELD_ROTATIONTEXT] = ValueFactory.createValue(Math.toDegrees(textRot)); |
|
505 |
//data = entity.getDwgObjectSpecificDataItem("HEIGHT"); |
|
506 |
//heightText = ((Float)data.getValue()).floatValue(); |
|
507 |
heightText = (float)((DwgText)entity).getHeight(); |
|
508 |
auxRow[ID_FIELD_HEIGHTTEXT] = ValueFactory.createValue(heightText); |
|
509 |
//data = entity.getDwgObjectSpecificDataItem("DATA_FLAG"); |
|
510 |
//int dflag = ((Integer)data.getValue()).intValue(); |
|
511 |
int dflag = ((DwgText)entity).getDataFlag(); |
|
512 |
if ((dflag & 0x8) == 0) { |
|
513 |
//data = entity.getDwgObjectSpecificDataItem("ROTATION_ANGLE"); |
|
514 |
//double textRot = ((Double)data.getValue()).doubleValue(); |
|
515 |
double textRot = ((DwgText)entity).getRotationAngle(); |
|
516 |
auxRow[ID_FIELD_ROTATIONTEXT] = ValueFactory.createValue(Math.toDegrees(textRot)); |
|
489 | 517 |
} else { |
490 | 518 |
auxRow[ID_FIELD_ROTATIONTEXT] = ValueFactory.createValue(0.0); |
491 | 519 |
} |
492 | 520 |
if ((dflag & 0x1)==0) { |
493 |
data = entity.getDwgObjectSpecificDataItem("ELEVATION"); |
|
494 |
double elev = ((Double)data.getValue()).doubleValue(); |
|
521 |
//data = entity.getDwgObjectSpecificDataItem("ELEVATION"); |
|
522 |
//double elev = ((Double)data.getValue()).doubleValue(); |
|
523 |
double elev = ((DwgText)entity).getElevation(); |
|
495 | 524 |
auxRow[ID_FIELD_ELEVATION] = ValueFactory.createValue(elev); |
496 | 525 |
} |
497 |
data = entity.getDwgObjectSpecificDataItem("THICKNESS"); |
|
498 |
double thickness = ((Double)data.getValue()).doubleValue(); |
|
499 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(thickness); |
|
526 |
//data = entity.getDwgObjectSpecificDataItem("THICKNESS"); |
|
527 |
//double thickness = ((Double)data.getValue()).doubleValue(); |
|
528 |
double thickness = ((DwgText)entity).getThickness(); |
|
529 |
auxRow[ID_FIELD_THICKNESS] = ValueFactory.createValue(thickness); |
|
500 | 530 |
// Attributes |
501 | 531 |
/*for (int j=0;j<nAtt;j++) { |
502 | 532 |
String[] attributes = new String[2]; |
... | ... | |
509 | 539 |
addShape(point, auxRow); |
510 | 540 |
} else if (entity.getType()==0x4) { |
511 | 541 |
//System.out.println("Encuentra un Block ..."); |
512 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("NAME"); |
|
513 |
String blockName = (String)data.getValue(); |
|
542 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("NAME"); |
|
543 |
//String blockName = (String)data.getValue(); |
|
544 |
String blockName = ((DwgBlock)entity).getName(); |
|
514 | 545 |
addingToBlock = true; |
515 | 546 |
//pto = (Point2D.Double)point.get(0); |
516 | 547 |
//FShape nuevoShp; |
... | ... | |
619 | 650 |
//addShape(point, auxRow); |
620 | 651 |
} else if (entity.getType()==0x7 && !addingToBlock) { |
621 | 652 |
//System.out.println("Encuentra un Insert ..."); |
622 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
623 |
double[] p = (double[])data.getValue(); |
|
653 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
654 |
//double[] p = (double[])data.getValue(); |
|
655 |
double[] p = ((DwgInsert)entity).getInsertionPoint(); |
|
624 | 656 |
Point2D point = new Point2D.Double(p[0], p[1]); |
625 |
data = entity.getDwgObjectSpecificDataItem("SCALE"); |
|
626 |
double[] scale = (double[])data.getValue(); |
|
627 |
data = entity.getDwgObjectSpecificDataItem("ROTATION"); |
|
628 |
double rot = ((Double)data.getValue()).doubleValue(); |
|
629 |
data = entity.getDwgObjectSpecificDataItem("BLOCK_HEADER_HANDLE"); |
|
630 |
int[] blockHandle = (int[])data.getValue(); |
|
657 |
//data = entity.getDwgObjectSpecificDataItem("SCALE"); |
|
658 |
//double[] scale = (double[])data.getValue(); |
|
659 |
double[] scale = ((DwgInsert)entity).getScale(); |
|
660 |
//data = entity.getDwgObjectSpecificDataItem("ROTATION"); |
|
661 |
//double rot = ((Double)data.getValue()).doubleValue(); |
|
662 |
double rot = ((DwgInsert)entity).getRotation(); |
|
663 |
//data = entity.getDwgObjectSpecificDataItem("BLOCK_HEADER_HANDLE"); |
|
664 |
//int[] blockHandle = (int[])data.getValue(); |
|
665 |
int blockHandle = ((DwgInsert)entity).getBlockHeaderHandle(); |
|
631 | 666 |
|
632 | 667 |
manageInsert(dwgObjects, layerTable, point, scale, rot, blockHandle, i, auxRow); |
633 | 668 |
|
... | ... | |
652 | 687 |
auxRow[9+j] = ValueFactory.createValue(new String(fea.getProp(attributes[0]))); |
653 | 688 |
} |
654 | 689 |
}*/ |
655 |
FPoint2D fPoint = createPoint(point);
|
|
690 |
FPoint2D fPoint = new FPoint2D(point.getX(), point.getY());
|
|
656 | 691 |
addShape(fPoint, auxRow); |
657 | 692 |
} else if (entity.getType()==0x2C && !addingToBlock) { |
658 | 693 |
//System.out.println("Encuentra un MText ..."); |
659 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
660 |
double[] coord = (double[])data.getValue(); |
|
661 |
Point2D p = new Point2D.Double(coord[0], coord[1]); |
|
662 |
FPoint2D point = createPoint(p); |
|
694 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
695 |
//double[] coord = (double[])data.getValue(); |
|
696 |
//Point2D p = new Point2D.Double(coord[0], coord[1]); |
|
697 |
double[] p = ((DwgMText)entity).getInsertionPoint(); |
|
698 |
FPoint2D point = new FPoint2D(p[0], p[1]); |
|
663 | 699 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
664 | 700 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("MText")); |
665 | 701 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
684 | 720 |
addShape(point, auxRow); |
685 | 721 |
} else if (entity.getType()==0x1F && !addingToBlock) { |
686 | 722 |
//System.out.println("Encuentra un Solid ..."); |
687 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CORNER1"); |
|
688 |
double[] coord = (double[])data.getValue(); |
|
689 |
Point2D p1 = new Point2D.Double(coord[0], coord[1]); |
|
690 |
data = entity.getDwgObjectSpecificDataItem("CORNER2"); |
|
691 |
coord = (double[])data.getValue(); |
|
692 |
Point2D p2 = new Point2D.Double(coord[0], coord[1]); |
|
693 |
data = entity.getDwgObjectSpecificDataItem("CORNER3"); |
|
694 |
coord = (double[])data.getValue(); |
|
695 |
Point2D p3 = new Point2D.Double(coord[0], coord[1]); |
|
696 |
data = entity.getDwgObjectSpecificDataItem("CORNER4"); |
|
697 |
coord = (double[])data.getValue(); |
|
698 |
Point2D p4 = new Point2D.Double(coord[0], coord[1]); |
|
699 |
FPolygon2D solid = createSolid(new Point2D[]{p1, p2, p4, p3}); |
|
723 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CORNER1"); |
|
724 |
//double[] coord = (double[])data.getValue(); |
|
725 |
//Point2D p1 = new Point2D.Double(coord[0], coord[1]); |
|
726 |
double[] p1 = ((DwgSolid)entity).getCorner1(); |
|
727 |
//data = entity.getDwgObjectSpecificDataItem("CORNER2"); |
|
728 |
//coord = (double[])data.getValue(); |
|
729 |
//Point2D p2 = new Point2D.Double(coord[0], coord[1]); |
|
730 |
double[] p2 = ((DwgSolid)entity).getCorner2(); |
|
731 |
//data = entity.getDwgObjectSpecificDataItem("CORNER3"); |
|
732 |
//coord = (double[])data.getValue(); |
|
733 |
//Point2D p3 = new Point2D.Double(coord[0], coord[1]); |
|
734 |
double[] p3 = ((DwgSolid)entity).getCorner3(); |
|
735 |
//data = entity.getDwgObjectSpecificDataItem("CORNER4"); |
|
736 |
//coord = (double[])data.getValue(); |
|
737 |
//Point2D p4 = new Point2D.Double(coord[0], coord[1]); |
|
738 |
double[] p4 = ((DwgSolid)entity).getCorner4(); |
|
739 |
FPolygon2D solid = createSolid(new Point2D[]{new Point2D.Double(p1[0], p1[1]), new Point2D.Double(p2[0], p2[1]), new Point2D.Double(p4[0], p4[1]), new Point2D.Double(p3[0], p3[1])}); |
|
700 | 740 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
701 | 741 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Solid")); |
702 | 742 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
733 | 773 |
} |
734 | 774 |
} |
735 | 775 |
if (entity.getType()==type) { |
736 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("VERTICES"); |
|
737 |
Vector vertices = (Vector)data.getValue(); |
|
738 |
Point2D[] pts = new Point2D[vertices.size()]; |
|
739 |
double[] pt = new double[2]; |
|
776 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("VERTICES"); |
|
777 |
//Vector vertices = (Vector)data.getValue(); |
|
778 |
//Point2D[] pts = new Point2D[vertices.size()]; |
|
779 |
Point2D[] pts = ((DwgLwPolyline)entity).getVertices(); |
|
780 |
/*double[] pt = new double[2]; |
|
740 | 781 |
for (int j=0; j<vertices.size(); j++) { |
741 | 782 |
pt = (double[])vertices.get(j); |
742 | 783 |
pts[j] = new Point2D.Double(pt[0], pt[1]); |
743 |
} |
|
744 |
FPolyline2D lwpline = createLwPolyline(pts);
|
|
784 |
}*/
|
|
785 |
FPolyline2D lwpline = points2DToFPolyline2D(pts);
|
|
745 | 786 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(i); |
746 | 787 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("LwPolyline")); |
747 | 788 |
//int[] layerHandle = (int[])entity.getLayer(); |
... | ... | |
911 | 952 |
* @param p2 |
912 | 953 |
* @return |
913 | 954 |
*/ |
914 |
private FPolyline2D createLine(Point2D p1, Point2D p2) { |
|
955 |
/*private FPolyline2D createLine(Point2D p1, Point2D p2) {
|
|
915 | 956 |
Point2D[] pts = new Point2D[]{p1, p2}; |
916 | 957 |
GeneralPathX genPathX = new GeneralPathX(); |
917 | 958 |
genPathX.moveTo(pts[0].getX(), pts[0].getY()); |
... | ... | |
919 | 960 |
genPathX.lineTo(pts[i].getX(), pts[i].getY()); |
920 | 961 |
} |
921 | 962 |
return new FPolyline2D(genPathX); |
922 |
} |
|
963 |
}*/
|
|
923 | 964 |
|
924 |
private FPoint2D createPoint(Point2D p) { |
|
965 |
/*private FPoint2D createPoint(Point2D p) {
|
|
925 | 966 |
return new FPoint2D(p.getX(), p.getY()); |
926 |
} |
|
967 |
}*/
|
|
927 | 968 |
|
928 |
private FPolyline2D createLwPolyline(Point2D[] pts) { |
|
969 |
/*private FPolyline2D createLwPolyline(Point2D[] pts) {
|
|
929 | 970 |
GeneralPathX genPathX = new GeneralPathX(); |
930 | 971 |
genPathX.moveTo(pts[0].getX(), pts[0].getY()); |
931 | 972 |
for (int i=1; i<pts.length; i++) { |
932 | 973 |
genPathX.lineTo(pts[i].getX(), pts[i].getY()); |
933 | 974 |
} |
934 | 975 |
return new FPolyline2D(genPathX); |
935 |
} |
|
976 |
}*/
|
|
936 | 977 |
|
937 | 978 |
//private FPolyline2D createPolyline3D(Point2D[] pts) { |
938 |
private FPolyline2D convToFpline2D(Point2D[] pts) {
|
|
979 |
private FPolyline2D points2DToFPolyline2D(Point2D[] pts) {
|
|
939 | 980 |
GeneralPathX genPathX = new GeneralPathX(); |
940 | 981 |
genPathX.moveTo(pts[0].getX(), pts[0].getY()); |
941 | 982 |
for (int i=1; i<pts.length; i++) { |
... | ... | |
980 | 1021 |
return new FPolygon2D(genPathX); |
981 | 1022 |
} |
982 | 1023 |
|
983 |
private int calculateVertexNumber(int[] firstVertexHandle, int[] lastVertexHandle) { |
|
1024 |
/*private int calculateVertexNumber(int[] firstVertexHandle, int[] lastVertexHandle) {
|
|
984 | 1025 |
if (firstVertexHandle.length==lastVertexHandle.length) { |
985 | 1026 |
if (firstVertexHandle[firstVertexHandle.length-2]==lastVertexHandle[firstVertexHandle.length-2]) { |
986 | 1027 |
return (lastVertexHandle[firstVertexHandle.length-1]-firstVertexHandle[firstVertexHandle.length-1]+1); |
... | ... | |
1001 | 1042 |
System.out.println("ERROR: firstVertexHandle y lastVertexHandle tienen tama?os inesperados"); |
1002 | 1043 |
return 0; |
1003 | 1044 |
} |
1004 |
} |
|
1045 |
}*/
|
|
1005 | 1046 |
|
1006 |
private void manageInsert(Vector dwgObjects, Vector layerTable, Point2D insPoint, double[] scale, double rot, int[] blockHandle, int id, Value[] auxRow) {
|
|
1007 |
byte[] blockHandleBytes = new byte[]{0,0,0,0}; |
|
1047 |
private void manageInsert(Vector dwgObjects, Vector layerTable, Point2D insPoint, double[] scale, double rot, int bHandle, int id, Value[] auxRow) {
|
|
1048 |
/*byte[] blockHandleBytes = new byte[]{0,0,0,0};
|
|
1008 | 1049 |
if (blockHandle.length>2) blockHandleBytes[3] = (byte)blockHandle[2]; |
1009 | 1050 |
if (blockHandle.length>3) blockHandleBytes[2] = (byte)blockHandle[3]; |
1010 | 1051 |
if (blockHandle.length>4) blockHandleBytes[1] = (byte)blockHandle[4]; |
1011 | 1052 |
if (blockHandle.length>5) blockHandleBytes[0] = (byte)blockHandle[5]; |
1012 |
int bHandle = ByteUtils.bytesToInt(blockHandleBytes, new int[]{0}); |
|
1053 |
int bHandle = ByteUtils.bytesToInt(blockHandleBytes, new int[]{0});*/
|
|
1013 | 1054 |
for (int j=0;j<dwgObjects.size();j++) { |
1014 | 1055 |
DwgObject obj = (DwgObject)dwgObjects.get(j); |
1015 |
DwgObjectSpecificDataItem dataa = obj.getDwgObjectSpecificDataItem("BLOCK_ENTITY_HANDLE"); |
|
1056 |
//DwgObjectSpecificDataItem dataa = obj.getDwgObjectSpecificDataItem("BLOCK_ENTITY_HANDLE");
|
|
1016 | 1057 |
//System.out.println("obj.getType() = " + obj.getType()); |
1017 | 1058 |
//System.out.println("dataa = " + dataa); |
1018 |
if (dataa!=null) { |
|
1019 |
int[] handle = (int[])dataa.getValue(); |
|
1059 |
//if (dataa!=null) { |
|
1060 |
if (obj instanceof DwgBlockHeader) { |
|
1061 |
/*int[] handle = (int[])dataa.getValue(); |
|
1020 | 1062 |
byte[] handleBytes = new byte[]{0,0,0,0}; |
1021 | 1063 |
if (handle.length>2) handleBytes[3] = (byte)handle[2]; |
1022 | 1064 |
if (handle.length>3) handleBytes[2] = (byte)handle[3]; |
1023 | 1065 |
if (handle.length>4) handleBytes[1] = (byte)handle[4]; |
1024 | 1066 |
if (handle.length>5) handleBytes[0] = (byte)handle[5]; |
1025 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0}); |
|
1067 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0});*/ |
|
1068 |
int objHandle = ((DwgBlockHeader)obj).getBlockEntityHandle(); |
|
1026 | 1069 |
//System.out.println("objHandle = " + objHandle); |
1027 | 1070 |
//System.out.println("bHandle = " + bHandle); |
1028 |
if (objHandle==bHandle+1 && handle[1]==blockHandle[1]) { |
|
1071 |
//if (objHandle==bHandle+1 && handle[1]==blockHandle[1]) { |
|
1072 |
if (objHandle==bHandle+1) { |
|
1029 | 1073 |
//obj = (DwgObject)dwgObjects.get(j+1); |
1030 | 1074 |
//System.out.println("Hemos encontrado el bloque"); |
1031 | 1075 |
//System.out.println("obj.getType() = " + obj.getType()); |
1032 |
DwgObjectSpecificDataItem data = obj.getDwgObjectSpecificDataItem("BASE_POINT"); |
|
1033 |
double[] bPoint = (double[])data.getValue(); |
|
1076 |
//DwgObjectSpecificDataItem data = obj.getDwgObjectSpecificDataItem("BASE_POINT"); |
|
1077 |
//double[] bPoint = (double[])data.getValue(); |
|
1078 |
double[] bPoint = ((DwgBlockHeader)obj).getBasePoint(); |
|
1034 | 1079 |
//System.out.println("bPoint[0] = " + bPoint[0]); |
1035 | 1080 |
//System.out.println("bPoint[1] = " + bPoint[1]); |
1036 |
data = obj.getDwgObjectSpecificDataItem("FIRST_ENTITY_HANDLE"); |
|
1037 |
int[] firstEntityHandle = (int[])data.getValue(); |
|
1038 |
//System.out.println("firstEntityHandle[0] = " + firstEntityHandle[0]); |
|
1039 |
//System.out.println("firstEntityHandle[1] = " + firstEntityHandle[1]); |
|
1040 |
//if (firstEntityHandle.length>2) System.out.println("firstEntityHandle[2] = " + firstEntityHandle[2]); |
|
1041 |
//if (firstEntityHandle.length>3) System.out.println("firstEntityHandle[3] = " + firstEntityHandle[3]); |
|
1081 |
//data = obj.getDwgObjectSpecificDataItem("FIRST_ENTITY_HANDLE"); |
|
1082 |
/*int[] firstEntityHandle = (int[])data.getValue(); |
|
1042 | 1083 |
byte[] firstEntityBytes = new byte[]{0,0,0,0}; |
1043 | 1084 |
if (firstEntityHandle.length>2) firstEntityBytes[3] = (byte)firstEntityHandle[2]; |
1044 | 1085 |
if (firstEntityHandle.length>3) firstEntityBytes[2] = (byte)firstEntityHandle[3]; |
1045 | 1086 |
if (firstEntityHandle.length>4) firstEntityBytes[1] = (byte)firstEntityHandle[4]; |
1046 | 1087 |
if (firstEntityHandle.length>5) firstEntityBytes[0] = (byte)firstEntityHandle[5]; |
1047 |
int firstHandle = ByteUtils.bytesToInt(firstEntityBytes, new int[]{0}); |
|
1088 |
int firstHandle = ByteUtils.bytesToInt(firstEntityBytes, new int[]{0});*/
|
|
1048 | 1089 |
//System.out.println("firstHandle = " + firstHandle); |
1049 |
data = obj.getDwgObjectSpecificDataItem("LAST_ENTITY_HANDLE"); |
|
1090 |
int firstHandle = ((DwgBlockHeader)obj).getFirstEntityHandle(); |
|
1091 |
/*data = obj.getDwgObjectSpecificDataItem("LAST_ENTITY_HANDLE"); |
|
1050 | 1092 |
int[] lastEntityHandle = (int[])data.getValue(); |
1051 | 1093 |
byte[] lastEntityBytes = new byte[]{0,0,0,0}; |
1052 | 1094 |
if (lastEntityHandle.length>2) lastEntityBytes[3] = (byte)lastEntityHandle[2]; |
1053 | 1095 |
if (lastEntityHandle.length>3) lastEntityBytes[2] = (byte)lastEntityHandle[3]; |
1054 | 1096 |
if (lastEntityHandle.length>4) lastEntityBytes[1] = (byte)lastEntityHandle[4]; |
1055 | 1097 |
if (lastEntityHandle.length>5) lastEntityBytes[0] = (byte)lastEntityHandle[5]; |
1056 |
int lastHandle = ByteUtils.bytesToInt(lastEntityBytes, new int[]{0}); |
|
1057 |
//System.out.println("lastHandle = " + lastHandle);
|
|
1098 |
int lastHandle = ByteUtils.bytesToInt(lastEntityBytes, new int[]{0});*/
|
|
1099 |
int lastHandle = ((DwgBlockHeader)obj).getLastEntityHandle();
|
|
1058 | 1100 |
// Buscando la capa y el color del bloque ... |
1059 |
String bname = (String)obj.getDwgObjectSpecificDataItem("NAME").getValue(); |
|
1101 |
//String bname = (String)obj.getDwgObjectSpecificDataItem("NAME").getValue(); |
|
1102 |
String bname = ((DwgBlockHeader)obj).getName(); |
|
1060 | 1103 |
//int[] blockHandleLayer = null; |
1061 | 1104 |
//int blockColor = 0; |
1062 | 1105 |
DwgObject block = null; |
1063 | 1106 |
for (int k=0;k<dwgObjects.size();k++) { |
1064 | 1107 |
DwgObject ent = (DwgObject)dwgObjects.get(k); |
1065 | 1108 |
if (ent.getType()==0x4) { |
1066 |
String name = (String)obj.getDwgObjectSpecificDataItem("NAME").getValue(); |
|
1109 |
//String name = (String)obj.getDwgObjectSpecificDataItem("NAME").getValue(); |
|
1110 |
String name = ((DwgBlockHeader)obj).getName(); |
|
1067 | 1111 |
if (bname.equals(name)) { |
1068 | 1112 |
//blockHandleLayer = ent.getLayer(); |
1069 | 1113 |
//blockColor = ent.getColor(); |
... | ... | |
1074 | 1118 |
|
1075 | 1119 |
for (int k=0;k<dwgObjects.size();k++) { |
1076 | 1120 |
DwgObject ent = (DwgObject)dwgObjects.get(k); |
1077 |
Vector entHandle = ent.getHandle(); |
|
1121 |
/*Vector entHandle = ent.getHandle();
|
|
1078 | 1122 |
byte[] entHandleBytes = new byte[]{0,0,0,0}; |
1079 | 1123 |
if (entHandle.size()>2) entHandleBytes[3] = ((Integer)entHandle.get(2)).byteValue(); |
1080 | 1124 |
if (entHandle.size()>3) entHandleBytes[2] = ((Integer)entHandle.get(3)).byteValue(); |
1081 | 1125 |
if (entHandle.size()>4) entHandleBytes[1] = ((Integer)entHandle.get(4)).byteValue(); |
1082 | 1126 |
if (entHandle.size()>5) entHandleBytes[0] = ((Integer)entHandle.get(5)).byteValue(); |
1083 |
int eHandle = ByteUtils.bytesToInt(entHandleBytes, new int[]{0}); |
|
1127 |
int eHandle = ByteUtils.bytesToInt(entHandleBytes, new int[]{0});*/ |
|
1128 |
int eHandle = ent.getHandle(); |
|
1084 | 1129 |
//System.out.println("eHandle = " + eHandle); |
1085 |
if (eHandle==firstHandle && ((Integer)entHandle.get(1)).intValue()==firstEntityHandle[1]) { |
|
1130 |
//if (eHandle==firstHandle && ((Integer)entHandle.get(1)).intValue()==firstEntityHandle[1]) { |
|
1131 |
if (eHandle==firstHandle) { |
|
1086 | 1132 |
//System.out.println("Hemos encontrado el primer elemento"); |
1087 | 1133 |
int l=0; |
1088 | 1134 |
while (true) { |
1089 | 1135 |
DwgObject blockEntity = (DwgObject)dwgObjects.get(k+l); |
1090 |
Vector blockEntityHandle = blockEntity.getHandle(); |
|
1136 |
/*Vector blockEntityHandle = blockEntity.getHandle();
|
|
1091 | 1137 |
byte[] blockEntityHandleBytes = new byte[]{0,0,0,0}; |
1092 | 1138 |
if (blockEntityHandle.size()>2) blockEntityHandleBytes[3] = ((Integer)blockEntityHandle.get(2)).byteValue(); |
1093 | 1139 |
if (blockEntityHandle.size()>3) blockEntityHandleBytes[2] = ((Integer)blockEntityHandle.get(3)).byteValue(); |
1094 | 1140 |
if (blockEntityHandle.size()>4) blockEntityHandleBytes[1] = ((Integer)blockEntityHandle.get(4)).byteValue(); |
1095 | 1141 |
if (blockEntityHandle.size()>5) blockEntityHandleBytes[0] = ((Integer)blockEntityHandle.get(5)).byteValue(); |
1096 |
int bEntityHandle = ByteUtils.bytesToInt(blockEntityHandleBytes, new int[]{0}); |
|
1142 |
int bEntityHandle = ByteUtils.bytesToInt(blockEntityHandleBytes, new int[]{0});*/ |
|
1143 |
int bEntityHandle = blockEntity.getHandle(); |
|
1097 | 1144 |
manageBlockEntity(blockEntity, layerTable, bPoint, insPoint, scale, rot, block, id, auxRow); |
1098 | 1145 |
l++; |
1099 |
if (bEntityHandle==lastHandle && ((Integer)entHandle.get(1)).intValue()==lastEntityHandle[1]) { |
|
1146 |
//if (bEntityHandle==lastHandle && ((Integer)entHandle.get(1)).intValue()==lastEntityHandle[1]) { |
|
1147 |
if (bEntityHandle==lastHandle) { |
|
1100 | 1148 |
break; |
1101 | 1149 |
} |
1102 | 1150 |
} |
... | ... | |
1110 | 1158 |
private void manageBlockEntity(DwgObject entity, Vector layerTable, double[] bPoint, Point2D insPoint, double[] scale, double rot, DwgObject block, int id, Value[] auxRow) { |
1111 | 1159 |
if (entity.getType()==0x11) { |
1112 | 1160 |
//System.out.println("Encuentra un arco dentro de un bloque ..."); |
1113 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CENTER"); |
|
1114 |
double[] coord = (double[])data.getValue(); |
|
1115 |
Point2D center = new Point2D.Double(coord[0], coord[1]); |
|
1116 |
data = entity.getDwgObjectSpecificDataItem("RADIUS"); |
|
1117 |
double radius = ((Double)data.getValue()).doubleValue(); |
|
1118 |
data = entity.getDwgObjectSpecificDataItem("START_ANGLE"); |
|
1119 |
double startAngle = Math.toDegrees(((Double)data.getValue()).doubleValue()); |
|
1120 |
data = entity.getDwgObjectSpecificDataItem("END_ANGLE"); |
|
1121 |
double endAngle = Math.toDegrees(((Double)data.getValue()).doubleValue()); |
|
1161 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CENTER"); |
|
1162 |
//double[] coord = (double[])data.getValue(); |
|
1163 |
//Point2D center = new Point2D.Double(coord[0], coord[1]); |
|
1164 |
double[] center = ((DwgArc)entity).getCenter(); |
|
1165 |
//data = entity.getDwgObjectSpecificDataItem("RADIUS"); |
|
1166 |
//double radius = ((Double)data.getValue()).doubleValue(); |
|
1167 |
double radius = ((DwgArc)entity).getRadius(); |
|
1168 |
//data = entity.getDwgObjectSpecificDataItem("START_ANGLE"); |
|
1169 |
//double startAngle = Math.toDegrees(((Double)data.getValue()).doubleValue()); |
|
1170 |
double initAngle = ((DwgArc)entity).getInitAngle(); |
|
1171 |
//data = entity.getDwgObjectSpecificDataItem("END_ANGLE"); |
|
1172 |
//double endAngle = Math.toDegrees(((Double)data.getValue()).doubleValue()); |
|
1173 |
double endAngle = ((DwgArc)entity).getEndAngle(); |
|
1122 | 1174 |
//FPolyline2D arc = createArc(center, radius, startAngle, endAngle); |
1123 |
Point2D[] arc = createArc(center, radius, startAngle, endAngle);
|
|
1175 |
Point2D[] arc = GisModelCurveCalculator.calculateGisModelArc(new Point2D.Double(center[0], center[1]), radius, initAngle, endAngle);
|
|
1124 | 1176 |
for (int i=0;i<arc.length;i++) { |
1125 | 1177 |
Point2D pointAux = new Point2D.Double(arc[i].getX() - bPoint[0], arc[i].getY() - bPoint[1]); |
1126 | 1178 |
double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot)); |
1127 | 1179 |
double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot)); |
1128 | 1180 |
arc[i] = new Point2D.Double(laX, laY); |
1129 | 1181 |
} |
1130 |
FPolyline2D arcc = createPolyline3D(arc);
|
|
1182 |
FPolyline2D arcc = points2DToFPolyline2D(arc);
|
|
1131 | 1183 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(id); |
1132 | 1184 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Arc")); |
1133 | 1185 |
String layerName = getLayerName(block, layerTable); |
... | ... | |
1152 | 1204 |
addShape(arcc, auxRow); |
1153 | 1205 |
} else if (entity.getType()==0x12) { |
1154 | 1206 |
//System.out.println("Encuentra un c?rculo dentro de un bloque ..."); |
1155 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CENTER"); |
|
1156 |
double[] coord = (double[])data.getValue(); |
|
1157 |
Point2D center = new Point2D.Double(coord[0], coord[1]); |
|
1158 |
data = entity.getDwgObjectSpecificDataItem("RADIUS"); |
|
1159 |
double radius = ((Double)data.getValue()).doubleValue(); |
|
1160 |
|
|
1207 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("CENTER"); |
|
1208 |
//double[] coord = (double[])data.getValue(); |
|
1209 |
//Point2D center = new Point2D.Double(coord[0], coord[1]); |
|
1210 |
double[] c = ((DwgCircle)entity).getCenter(); |
|
1211 |
//data = entity.getDwgObjectSpecificDataItem("RADIUS"); |
|
1212 |
//double radius = ((Double)data.getValue()).doubleValue(); |
|
1213 |
double radius = ((DwgCircle)entity).getRadius(); |
|
1214 |
Point2D center = new Point2D.Double(c[0], c[1]); |
|
1161 | 1215 |
Point2D pointAux = new Point2D.Double(center.getX() - bPoint[0], center.getY() - bPoint[1]); |
1162 | 1216 |
double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(Math.toRadians(rot)) + (pointAux.getY()*scale[1])*(-1)*Math.sin(Math.toRadians(rot))); |
1163 | 1217 |
double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(Math.toRadians(rot)) + (pointAux.getY()*scale[1])*Math.cos(Math.toRadians(rot))); |
... | ... | |
1165 | 1219 |
// Escala en X = escala en Y ... |
1166 | 1220 |
radius = radius * scale[0]; |
1167 | 1221 |
|
1168 |
FPolyline2D circle = createCircle(center, radius); |
|
1169 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(id); |
|
1222 |
Point2D[] circlePts = GisModelCurveCalculator.calculateGisModelCircle(center, radius); |
|
1223 |
FPolyline2D circle = points2DToFPolyline2D(circlePts); |
|
1224 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(id); |
|
1170 | 1225 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Circle")); |
1171 | 1226 |
String layerName = getLayerName(block, layerTable); |
1172 | 1227 |
auxRow[ID_FIELD_LAYER] = ValueFactory.createValue(layerName); |
... | ... | |
1190 | 1245 |
addShape(circle, auxRow); |
1191 | 1246 |
} else if (entity.getType()==0x13) { |
1192 | 1247 |
//System.out.println("Encuentra una l?nea dentro de un bloque ..."); |
1193 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("P1"); |
|
1194 |
double[] coord = (double[])data.getValue(); |
|
1195 |
Point2D p1 = new Point2D.Double(coord[0], coord[1]); |
|
1196 |
data = entity.getDwgObjectSpecificDataItem("P2"); |
|
1197 |
coord = (double[])data.getValue(); |
|
1198 |
Point2D p2 = new Point2D.Double(coord[0], coord[1]); |
|
1199 |
|
|
1248 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("P1"); |
|
1249 |
//double[] coord = (double[])data.getValue(); |
|
1250 |
//Point2D p1 = new Point2D.Double(coord[0], coord[1]); |
|
1251 |
double[] p1d = ((DwgLine)entity).getP1(); |
|
1252 |
Point2D p1 = new Point2D.Double(p1d[0], p1d[1]); |
|
1253 |
//data = entity.getDwgObjectSpecificDataItem("P2"); |
|
1254 |
//coord = (double[])data.getValue(); |
|
1255 |
//Point2D p2 = new Point2D.Double(coord[0], coord[1]); |
|
1256 |
double[] p2d = ((DwgLine)entity).getP2(); |
|
1257 |
Point2D p2 = new Point2D.Double(p2d[0], p2d[1]); |
|
1200 | 1258 |
Point2D pointAux = new Point2D.Double(p1.getX() - bPoint[0], p1.getY() - bPoint[1]); |
1201 | 1259 |
double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot)); |
1202 | 1260 |
double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot)); |
... | ... | |
1205 | 1263 |
laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot)); |
1206 | 1264 |
laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot)); |
1207 | 1265 |
p2 = new Point2D.Double(laX, laY); |
1208 |
|
|
1209 |
FPolyline2D line = createLine(p1, p2); |
|
1266 |
//FPolyline2D line = createLine(p1, p2); |
|
1267 |
Point2D[] l = new Point2D[]{p1, p2}; |
|
1268 |
FPolyline2D line = points2DToFPolyline2D(l); |
|
1210 | 1269 |
auxRow[ID_FIELD_ID] = ValueFactory.createValue(id); |
1211 | 1270 |
auxRow[ID_FIELD_ENTITY] = ValueFactory.createValue(new String("Line")); |
1212 | 1271 |
String layerName = getLayerName(block, layerTable); |
... | ... | |
1232 | 1291 |
addShape(line, auxRow); |
1233 | 1292 |
} else if (entity.getType()==0x7) { |
1234 | 1293 |
//System.out.println("Encuentra un insert dentro de un bloque ..."); |
1235 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
1236 |
double[] p = (double[])data.getValue(); |
|
1294 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("INSERTION_POINT"); |
|
1295 |
//double[] p = (double[])data.getValue(); |
|
1296 |
//Point2D newInsPoint = new Point2D.Double(p[0], p[1]); |
|
1297 |
double[] p = ((DwgInsert)entity).getInsertionPoint(); |
|
1237 | 1298 |
Point2D newInsPoint = new Point2D.Double(p[0], p[1]); |
1238 |
data = entity.getDwgObjectSpecificDataItem("SCALE"); |
|
1239 |
double[] newScale = (double[])data.getValue(); |
|
1240 |
data = entity.getDwgObjectSpecificDataItem("ROTATION"); |
|
1241 |
double newRot = ((Double)data.getValue()).doubleValue(); |
|
1242 |
data = entity.getDwgObjectSpecificDataItem("BLOCK_HEADER_HANDLE"); |
|
1243 |
int[] newBlockHandle = (int[])data.getValue(); |
|
1244 |
|
|
1299 |
//data = entity.getDwgObjectSpecificDataItem("SCALE"); |
|
1300 |
//double[] newScale = (double[])data.getValue(); |
|
1301 |
double[] newScale = ((DwgInsert)entity).getScale(); |
|
1302 |
//data = entity.getDwgObjectSpecificDataItem("ROTATION"); |
|
1303 |
//double newRot = ((Double)data.getValue()).doubleValue(); |
|
1304 |
double newRot = ((DwgInsert)entity).getRotation(); |
|
1305 |
//data = entity.getDwgObjectSpecificDataItem("BLOCK_HEADER_HANDLE"); |
|
1306 |
//int[] newBlockHandle = (int[])data.getValue(); |
|
1307 |
int newBlockHandle = ((DwgInsert)entity).getBlockHeaderHandle(); |
|
1245 | 1308 |
Point2D pointAux = new Point2D.Double(newInsPoint.getX() - bPoint[0], newInsPoint.getY() - bPoint[1]); |
1246 | 1309 |
double laX = insPoint.getX() + ((pointAux.getX()*scale[0])*Math.cos(rot) + (pointAux.getY()*scale[1])*(-1)*Math.sin(rot)); |
1247 | 1310 |
double laY = insPoint.getY() + ((pointAux.getX()*scale[0])*Math.sin(rot) + (pointAux.getY()*scale[1])*Math.cos(rot)); |
... | ... | |
1270 | 1333 |
addShape(fPoint, auxRow);*/ |
1271 | 1334 |
} else if (entity.getType()==0x0F) { |
1272 | 1335 |
//System.out.println("Encuentra una polil?nea dentro de un bloque ..."); |
1273 |
DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("FLAGS"); |
|
1274 |
int flags = ((Integer)data.getValue()).intValue(); |
|
1275 |
data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
1336 |
//DwgObjectSpecificDataItem data = entity.getDwgObjectSpecificDataItem("FLAGS"); |
|
1337 |
//int flags = ((Integer)data.getValue()).intValue(); |
|
1338 |
int flags = ((DwgPolyline2D)entity).getFlags(); |
|
1339 |
/*data = entity.getDwgObjectSpecificDataItem("FIRST_VERTEX_HANDLE"); |
|
1276 | 1340 |
int[] firstVertexHandle = (int[])data.getValue(); |
1277 | 1341 |
byte[] firstHandleBytes = new byte[]{0,0,0,0}; |
1278 | 1342 |
if (firstVertexHandle.length>2) firstHandleBytes[3] = (byte)firstVertexHandle[2]; |
1279 | 1343 |
if (firstVertexHandle.length>3) firstHandleBytes[2] = (byte)firstVertexHandle[3]; |
1280 | 1344 |
if (firstVertexHandle.length>4) firstHandleBytes[1] = (byte)firstVertexHandle[4]; |
1281 | 1345 |
if (firstVertexHandle.length>5) firstHandleBytes[0] = (byte)firstVertexHandle[5]; |
1282 |
int firstHandle = ByteUtils.bytesToInt(firstHandleBytes, new int[]{0}); |
|
1283 |
data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE"); |
|
1346 |
int firstHandle = ByteUtils.bytesToInt(firstHandleBytes, new int[]{0});*/ |
|
1347 |
int firstHandle = ((DwgPolyline2D)entity).getFirstVertexHandle(); |
|
1348 |
/*data = entity.getDwgObjectSpecificDataItem("LAST_VERTEX_HANDLE"); |
|
1284 | 1349 |
int[] lastVertexHandle = (int[])data.getValue(); |
1285 | 1350 |
byte[] lastHandleBytes = new byte[]{0,0,0,0}; |
1286 | 1351 |
if (lastVertexHandle.length>2) lastHandleBytes[3] = (byte)lastVertexHandle[2]; |
1287 | 1352 |
if (lastVertexHandle.length>3) lastHandleBytes[2] = (byte)lastVertexHandle[3]; |
1288 | 1353 |
if (lastVertexHandle.length>4) lastHandleBytes[1] = (byte)lastVertexHandle[4]; |
1289 | 1354 |
if (lastVertexHandle.length>5) lastHandleBytes[0] = (byte)lastVertexHandle[5]; |
1290 |
int lastHandle = ByteUtils.bytesToInt(lastHandleBytes, new int[]{0}); |
|
1355 |
int lastHandle = ByteUtils.bytesToInt(lastHandleBytes, new int[]{0});*/ |
|
1356 |
int lastHandle = ((DwgPolyline2D)entity).getLastVertexHandle(); |
|
1291 | 1357 |
Vector pts = new Vector(); |
1292 | 1358 |
Vector bulges = new Vector(); |
1293 | 1359 |
double[] pt = new double[2]; |
1294 | 1360 |
|
1295 | 1361 |
for (int j=0;j<dwgObjects.size();j++) { |
1296 | 1362 |
DwgObject obj = (DwgObject)dwgObjects.get(j); |
1297 |
Vector handle = obj.getHandle(); |
|
1363 |
/*Vector handle = obj.getHandle();
|
|
1298 | 1364 |
byte[] handleBytes = new byte[]{0,0,0,0}; |
1299 | 1365 |
if (handle.size()>2) handleBytes[3] = ((Integer)handle.get(2)).byteValue(); |
1300 | 1366 |
if (handle.size()>3) handleBytes[2] = ((Integer)handle.get(3)).byteValue(); |
1301 | 1367 |
if (handle.size()>4) handleBytes[1] = ((Integer)handle.get(4)).byteValue(); |
1302 | 1368 |
if (handle.size()>5) handleBytes[0] = ((Integer)handle.get(5)).byteValue(); |
1303 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0}); |
|
1304 |
if (objHandle==firstHandle && ((Integer)handle.get(1)).intValue()==firstVertexHandle[1]) { |
|
1369 |
int objHandle = ByteUtils.bytesToInt(handleBytes, new int[]{0});*/ |
|
1370 |
int objHandle = obj.getHandle(); |
|
1371 |
//if (objHandle==firstHandle && ((Integer)handle.get(1)).intValue()==firstVertexHandle[1]) { |
|
1372 |
if (objHandle==firstHandle) { |
|
1305 | 1373 |
int k=0; |
1306 | 1374 |
while (true) { |
1307 | 1375 |
DwgObject vertex = (DwgObject)dwgObjects.get(j+k); |
... | ... | |
1315 | 1383 |
int vHandle = vertex.getHandle(); |
1316 | 1384 |
/*data = vertex.getDwgObjectSpecificDataItem("POINT"); |
1317 | 1385 |
pt = (double[])data.getValue();*/ |
1318 |
pt = vertex.getPoint();
|
|
1386 |
pt = ((DwgVertex2D)vertex).getPoint();
|
|
1319 | 1387 |
pts.add(new Point2D.Double(pt[0], pt[1])); |
1320 | 1388 |
/*data = vertex.getDwgObjectSpecificDataItem("BULGE"); |
1321 | 1389 |
double bulge = ((Double)data.getValue()).doubleValue();*/ |
1322 |
double bulge = vertex.getBulge();
|
|
1390 |
double bulge = ((DwgVertex2D)vertex).getBulge();
|
|
1323 | 1391 |
bulges.add(new Double(bulge)); |
1324 | 1392 |
k++; |
1325 |
if (vHandle==lastHandle && ((Integer)vertexHandle.get(1)).intValue()==lastVertexHandle[1]) { |
|
1393 |
//if (vHandle==lastHandle && ((Integer)vertexHandle.get(1)).intValue()==lastVertexHandle[1]) { |
|
1394 |
if (vHandle==lastHandle) { |
|
1326 | 1395 |
break; |
1327 | 1396 |
} |
1328 | 1397 |
} |
... | ... | |
1395 | 1464 |
layerTableRecord.add(new Integer(obj.getHandle())); |
1396 | 1465 |
//layerTableRecord.add(((String)obj.getDwgObjectSpecificDataItem("NAME").getValue())); |
1397 | 1466 |
//layerTableRecord.add(((Integer)obj.getDwgObjectSpecificDataItem("COLOR").getValue())); |
1398 |
layerTableRecord.add(((DwgLayer)obj.getName()));
|
|
1399 |
layerTableRecord.add(((DwgLayer)obj.getColorByLayer()));
|
|
1467 |
layerTableRecord.add(((DwgLayer)obj).getName());
|
|
1468 |
layerTableRecord.add(new Integer(((DwgLayer)obj).getColor()));
|
|
1400 | 1469 |
layerTable.add(layerTableRecord); |
1401 | 1470 |
} |
1402 | 1471 |
} |
... | ... | |
1416 | 1485 |
int layer = entity.getLayerHandle(); |
1417 | 1486 |
for (int j=0;j<layerTable.size();j++) { |
1418 | 1487 |
Vector layerTableRecord = (Vector)layerTable.get(j); |
1419 |
Vector layerHandleVect = (Vector)layerTableRecord.get(0); |
|
1420 |
/*System.out.println("layerHandleVect.get(0) = " + layerHandleVect.get(0)); |
|
1421 |
if (layerHandleVect.size()>1) System.out.println("layerHandleVect.get(1) = " + layerHandleVect.get(1)); |
|
1422 |
if (layerHandleVect.size()>2) System.out.println("layerHandleVect.get(2) = " + layerHandleVect.get(2)); |
|
1423 |
if (layerHandleVect.size()>3) System.out.println("layerHandleVect.get(3) = " + layerHandleVect.get(3));*/ |
|
1488 |
/*Vector layerHandleVect = (Vector)layerTableRecord.get(0); |
|
1424 | 1489 |
byte[] layerHandleBytes = new byte[]{0,0,0,0}; |
1425 | 1490 |
if (layerHandleVect.size()>2) layerHandleBytes[3] = (byte)((Integer)layerHandleVect.get(2)).intValue(); |
1426 | 1491 |
if (layerHandleVect.size()>3) layerHandleBytes[2] = (byte)((Integer)layerHandleVect.get(3)).intValue(); |
1427 | 1492 |
if (layerHandleVect.size()>4) layerHandleBytes[1] = (byte)((Integer)layerHandleVect.get(4)).intValue(); |
1428 | 1493 |
if (layerHandleVect.size()>5) layerHandleBytes[0] = (byte)((Integer)layerHandleVect.get(5)).intValue(); |
1429 |
int lHandle = ByteUtils.bytesToInt(layerHandleBytes, new int[]{0}); |
|
1430 |
//System.out.println("lHandle = " + lHandle); |
|
1431 |
//System.out.println("layer = " + layer); |
|
1494 |
int lHandle = ByteUtils.bytesToInt(layerHandleBytes, new int[]{0});*/ |
|
1495 |
int lHandle = ((Integer)layerTableRecord.get(0)).intValue(); |
|
1432 | 1496 |
if (lHandle==layer) { |
1433 | 1497 |
layerName = (String)layerTableRecord.get(1); |
1434 | 1498 |
//System.out.println("layerName = " + layerName); |
... | ... | |
1449 | 1513 |
int layer = entity.getLayerHandle(); |
1450 | 1514 |
for (int j=0;j<layerTable.size();j++) { |
1451 | 1515 |
Vector layerTableRecord = (Vector)layerTable.get(j); |
1452 |
Vector layerHandleVect = (Vector)layerTableRecord.get(0); |
|
1516 |
/*Vector layerHandleVect = (Vector)layerTableRecord.get(0);
|
|
1453 | 1517 |
byte[] layerHandleBytes = new byte[]{0,0,0,0}; |
1454 | 1518 |
if (layerHandleVect.size()>2) layerHandleBytes[3] = (byte)((Integer)layerHandleVect.get(2)).intValue(); |
1455 | 1519 |
if (layerHandleVect.size()>3) layerHandleBytes[2] = (byte)((Integer)layerHandleVect.get(3)).intValue(); |
1456 | 1520 |
if (layerHandleVect.size()>4) layerHandleBytes[1] = (byte)((Integer)layerHandleVect.get(4)).intValue(); |
1457 | 1521 |
if (layerHandleVect.size()>5) layerHandleBytes[0] = (byte)((Integer)layerHandleVect.get(5)).intValue(); |
1458 |
int lHandle = ByteUtils.bytesToInt(layerHandleBytes, new int[]{0}); |
|
1459 |
//System.out.println("layerHandle = " + layerHandle); |
|
1460 |
//System.out.println("layer = " + layer); |
|
1522 |
int lHandle = ByteUtils.bytesToInt(layerHandleBytes, new int[]{0});*/ |
|
1523 |
int lHandle = ((Integer)layerTableRecord.get(0)).intValue(); |
|
1461 | 1524 |
if (lHandle==layer) { |
1462 | 1525 |
colorByLayer = ((Integer)layerTableRecord.get(2)).intValue(); |
1463 | 1526 |
//System.out.println("colorByLayer = " + colorByLayerObj.intValue()); |
Also available in: Unified diff