Revision 9974
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