Revision 9974

View differences:

trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/DwgFile.java
510 510
	}
511 511
	
512 512
	
513

  
513 514
	
514
	public void blockManagement() {
515
		List dwgObjectsWithoutBlocks = new LinkedList();
516
    	boolean addingToBlock = false;
517
		for (int i=0;i<dwgObjects.size();i++) {
518
			DwgObject entity = (DwgObject)dwgObjects.get(i);
519
			if (entity instanceof DwgArc && !addingToBlock) {
520
				dwgObjectsWithoutBlocks.add(entity);
521
			} else if (entity instanceof DwgEllipse && !addingToBlock) {
522
				dwgObjectsWithoutBlocks.add(entity);
523
			} else if (entity instanceof DwgCircle && !addingToBlock) {
524
				dwgObjectsWithoutBlocks.add(entity);
525
			} else if (entity instanceof DwgPolyline2D && !addingToBlock) {
526
				dwgObjectsWithoutBlocks.add(entity);
527
			} else if (entity instanceof DwgPolyline3D && !addingToBlock) {
528
				dwgObjectsWithoutBlocks.add(entity);
529
			} else if (entity instanceof DwgLwPolyline && !addingToBlock) {
530
				dwgObjectsWithoutBlocks.add(entity);
531
			} else if (entity instanceof DwgSolid && !addingToBlock) {
532
				dwgObjectsWithoutBlocks.add(entity);
533
			} else if (entity instanceof DwgLine && !addingToBlock) {
534
				dwgObjectsWithoutBlocks.add(entity);
535
			} else if (entity instanceof DwgPoint && !addingToBlock) {
536
				dwgObjectsWithoutBlocks.add(entity);
537
			} else if (entity instanceof DwgMText && !addingToBlock) {
538
				dwgObjectsWithoutBlocks.add(entity);
539
			} else if (entity instanceof DwgText && !addingToBlock) {
540
				dwgObjectsWithoutBlocks.add(entity);
541
			} else if (entity instanceof DwgAttrib && !addingToBlock) {
542
				dwgObjectsWithoutBlocks.add(entity);
543
			} else if (entity instanceof DwgAttdef && !addingToBlock) {
544
				dwgObjectsWithoutBlocks.add(entity);
545
			} else if (entity instanceof DwgBlock) {
546
				addingToBlock = true;
547
			} else if (entity instanceof DwgEndblk) {
548
				addingToBlock = false;
549
			} else if (entity instanceof DwgBlockHeader) {
550
				addingToBlock = true;
551
			} else if (entity instanceof DwgInsert && !addingToBlock) {
552
				double[] p = ((DwgInsert)entity).getInsertionPoint();
553
				Point2D point = new Point2D.Double(p[0], p[1]);
554
				double[] scale = ((DwgInsert)entity).getScale();
555
				double rot = ((DwgInsert)entity).getRotation();
556
				int blockHandle = ((DwgInsert)entity).getBlockHeaderHandle();
557
				manageInsert(point, scale, rot, blockHandle, /*i,*/ dwgObjectsWithoutBlocks);
558
			} else {
559
				//System.out.println("Detectado dwgObject pendiente de implementar");
560
			}
561
		}
562
		dwgObjects = (LinkedList) dwgObjectsWithoutBlocks;
563
	}
564
	
565
	private void manageInsert(Point2D insPoint, double[] scale, double rot, int bHandle, List dwgObjectsWithoutBlocks) {
566
	    for (int i=0;i<dwgObjects.size();i++) {
567
			DwgObject obj = (DwgObject)dwgObjects.get(i);
568
			if (obj instanceof DwgBlockHeader) {
569
				int objHandle = ((DwgBlockHeader)obj).getHandle();
570
				if (objHandle==bHandle) {
571
                    //System.out.println("Encontrado DwgBlockHeader con handle = " + bHandle);
572
					double[] bPoint = ((DwgBlockHeader)obj).getBasePoint();
573
					String bname = ((DwgBlockHeader)obj).getName();
574
                    //System.out.println("Nombre del bloque = " + bname);
575
					if (!bname.startsWith("*")) {
576
						int firstObjectHandle = ((DwgBlockHeader)obj).getFirstEntityHandle();
577
                        //System.out.println("firstObjectHandle = " + firstObjectHandle);
578
						int lastObjectHandle = ((DwgBlockHeader)obj).getLastEntityHandle();
579
                        //System.out.println("lastObjectHandle = " + lastObjectHandle);
580
						DwgBlock block = null;
581
						for (int j=0;j<dwgObjects.size();j++) {
582
							DwgObject ent = (DwgObject)dwgObjects.get(j);
583
							if (ent instanceof DwgBlock) {
584
								String name = ((DwgBlock)ent).getName();
585
								if (bname.equals(name)) {
586
									block = (DwgBlock)ent;
587
                                    //System.out.println("Encontrado DwgBlock con bname = " + bname);
588
									break;
589
								}
590
							}
591
						}
592
						for (int j=0;j<dwgObjects.size();j++) {
593
							DwgObject fObj = (DwgObject)dwgObjects.get(j);
594
							if (fObj!=null) {
595
								int fObjHandle = fObj.getHandle();
596
								if (fObjHandle==firstObjectHandle) {
597
									int k=0;
598
									while (true) {
599
                                        //System.out.println("Encontrado elemento " + k + " del bloque");
600
										DwgObject iObj = (DwgObject)dwgObjects.get(j+k);
601
										int iObjHandle = iObj.getHandle();
602
//										System.out.println("iObj.getType() = " + iObj.getType());
603
//                                        System.out.println("insPoint.getX() = " + insPoint.getX());
604
//                                        System.out.println("insPoint.getY() = " + insPoint.getY());
605
//                                        System.out.println("rot = " + rot);
606
                                        manageBlockEntity(iObj, bPoint, insPoint, scale, rot, dwgObjectsWithoutBlocks);
607
										k++;
608
										if (iObjHandle==lastObjectHandle) break;
609
									}
610
								}
611
							}
612
						}
613
						break;
614
					}
615
				}
616
			}
617
		}
618
	}
619
	
620 515
    /**
621 516
     * Changes the location of an object extracted from a block. This location will be
622 517
     * obtained through the insertion parameters from the block and the corresponding
......
641 536
			double laZ = center[2] * scale[2];
642 537
			double[] transformedCenter = new double[]{laX, laY, laZ};
643 538
			double radius = ((DwgArc)entity).getRadius();
644
//            System.out.println("radius = " + radius);
645
//            System.out.println("scale[0] = " + scale[0]);
646
//            System.out.println("scale[1] = " + scale[1]);
647
//            System.out.println("rot = " + rot);
648 539
			double transformedRadius = radius * scale[0];
649 540
			double initAngle = ((DwgArc)entity).getInitAngle();
650 541
			double endAngle = ((DwgArc)entity).getEndAngle();
651
//            System.out.println("initAngle = " + initAngle);
652
//            System.out.println("endAngle = " + endAngle);
653
//            System.out.println("rot = " + rot);
654 542
            double transformedInitAngle = initAngle + rot;
655 543
            if (transformedInitAngle<0) {
656 544
                transformedInitAngle = transformedInitAngle + (2*Math.PI);
......
839 727
            } else if (newRot>(2*Math.PI)) {
840 728
                newRot = newRot - (2*Math.PI);
841 729
            }
842
			manageInsert(newInsPoint, newScale, newRot, newBlockHandle, dwgObjectsWithoutBlocks);
730
			manageInsert2(newInsPoint, newScale, newRot, newBlockHandle, dwgObjectsWithoutBlocks);
843 731
		}
844 732
	}
845 733
	
846
	
847
	
848
	
849
	
850
	
851
	
852
	
853 734
    /**
854 735
     * Modify the geometry of the objects contained in the blocks of a DWG file and
855 736
     * add these objects to the DWG object list.
856 737
     * 
857 738
     */
858
	public void blockManagement2() {
739
	public void blockManagement() {
859 740
		LinkedList dwgObjectsWithoutBlocks = new LinkedList();
860 741
    	boolean addingToBlock = false;
861 742
		for (int i=0; i < dwgObjects.size(); i++) {
......
901 782
				int blockHandle = ((DwgInsert)entity).getBlockHeaderHandle();
902 783
				manageInsert2(point, scale, rot, blockHandle, dwgObjectsWithoutBlocks);
903 784
			} else {
904
//				System.out.println("Detectado dwgObject pendiente de implementar");
905
//				System.out.println(entity.toString());
785
				System.out.println(entity.getClass().getName() +" en un bloque");
906 786
			}
907 787
		}
908 788
		dwgObjects = dwgObjectsWithoutBlocks;
......
921 801
     * @param dwgObjectsWithoutBlocks, a object list with the elements extracted from
922 802
     * the blocks.
923 803
     */
924
	//Hecho publico para manejar INSERT dentro de INSERT 
925 804
	public void manageInsert2(Point2D insPoint, double[] scale,
926 805
							double rot, int bHandle, 
927 806
							List dwgObjectsWithoutBlocks) {
......
930 809
		if(! (object instanceof DwgBlockHeader)){
931 810
			//Hay un problema con la asignaci?n de handle
932 811
			//Un INSERT tiene como handle de Block una entidad que no es block
812
			System.out.println("handle incorrecto." + object.getClass().getName() + " no es un blockheader");
933 813
			return;
934 814
		}
935 815
		DwgBlockHeader blockHeader = (DwgBlockHeader)object;
......
942 822
		
943 823
		//TODO Ver que hacia el metodo antiguo cuando llegaban handles a 0
944 824
		//como extremos de un bloque (sera bloque vacio, supongo)
945
		if(firstObjectHandle == 0 || lastObjectHandle == 0)
825
		if(firstObjectHandle == 0 || lastObjectHandle == 0){
826
			System.out.println("Problemas en el bloque "+bname);
827
			System.out.println("1er obj="+firstObjectHandle+" 2o obj="+lastObjectHandle);
946 828
			return;
829
		}	
947 830
		
948 831
		//Busca el bloque cuyo nombre sea bname
949 832
//		El bloque no se usa para nada DwgBlock block = (DwgBlock) names_blocks.get(bname);
......
962 845
		 int firstObjIdx = dwgObjects.indexOf(firstObj);
963 846
		 int lastObjIdx = dwgObjects.indexOf(lastObj);
964 847
		 if(firstObjIdx == -1 || lastObjIdx == -1){
965
			 System.out.println("1?="+firstObjIdx+",Ultimo="+lastObjIdx);
848
			 System.out.println("Problemas en la LinkedList: 1?="+firstObjIdx+",Ultimo="+lastObjIdx);
966 849
		 }
967 850
		 for(int i = firstObjIdx; i <= lastObjIdx; i++){
968 851
			 DwgObject obj = (DwgObject) dwgObjects.get(i);
969
			 manageBlockEntity2(obj, bPoint, 
852
			 manageBlockEntity(obj, bPoint, 
970 853
					 		  insPoint, scale, 
971 854
					 		  rot, dwgObjectsWithoutBlocks);
972 855
		 }//for

Also available in: Unified diff