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

View differences:

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