43 |
43 |
import org.apache.log4j.Logger;
|
44 |
44 |
|
45 |
45 |
import com.iver.cit.gvsig.fmap.drivers.dgn.ByteUtils;
|
|
46 |
import com.iver.cit.jdwglib.dwg.DwgClass;
|
46 |
47 |
import com.iver.cit.jdwglib.dwg.DwgFile;
|
47 |
48 |
import com.iver.cit.jdwglib.dwg.DwgObject;
|
48 |
49 |
import com.iver.cit.jdwglib.dwg.DwgObjectFactory;
|
... | ... | |
85 |
86 |
protected DwgFile dwgFile;
|
86 |
87 |
protected ByteBuffer bb;
|
87 |
88 |
|
|
89 |
private boolean debug = false;
|
|
90 |
|
88 |
91 |
private static Logger logger = Logger.
|
89 |
92 |
getLogger(DwgFileV14Reader.class.getName());
|
90 |
93 |
|
... | ... | |
97 |
100 |
public void read(DwgFile dwgFile, ByteBuffer bb) throws IOException {
|
98 |
101 |
this.dwgFile = dwgFile;
|
99 |
102 |
this.bb = bb;
|
100 |
|
readDwgSectionOffsets();
|
101 |
103 |
try {
|
|
104 |
readDwgSectionOffsets();
|
|
105 |
if(debug){
|
|
106 |
readHeaders();
|
|
107 |
readDwgClasses();
|
|
108 |
}
|
102 |
109 |
readDwgObjectOffsets();
|
103 |
|
//readDwgClasses(bb);
|
|
110 |
readDwgObjects();
|
104 |
111 |
} catch (Exception e) {
|
105 |
112 |
logger.error(e);
|
106 |
113 |
}
|
107 |
|
readDwgObjects();
|
|
114 |
|
108 |
115 |
}
|
109 |
116 |
|
110 |
117 |
/**
|
... | ... | |
275 |
282 |
bitPos = ((Integer)val.get(0)).intValue();
|
276 |
283 |
dwgFile.setHeader("SHORT1", val.get(1));
|
277 |
284 |
|
|
285 |
//TODO Los handle se leen asi??
|
278 |
286 |
val = DwgUtil.getHandle(intData, bitPos);
|
279 |
287 |
bitPos = ((Integer)val.get(0)).intValue();
|
280 |
288 |
dwgFile.setHeader("HANDLE1", val.get(1));
|
... | ... | |
708 |
716 |
spaces3[2] = ((Double)val.get(1)).doubleValue();
|
709 |
717 |
dwgFile.setHeader("PSPACE_EXTMAX", spaces2);
|
710 |
718 |
|
|
719 |
double[] spaces4 = new double[2];
|
|
720 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
721 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
722 |
spaces4[0] = ((Double)val.get(1)).doubleValue();
|
|
723 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
724 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
725 |
spaces4[1] = ((Double)val.get(1)).doubleValue();
|
|
726 |
dwgFile.setHeader("PSPACE_LIMMIN", spaces4);
|
|
727 |
|
|
728 |
double[] spaces5 = new double[2];
|
|
729 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
730 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
731 |
spaces5[0] = ((Double)val.get(1)).doubleValue();
|
|
732 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
733 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
734 |
spaces5[1] = ((Double)val.get(1)).doubleValue();
|
|
735 |
dwgFile.setHeader("PSPACE_LIMMAX", spaces5);
|
|
736 |
|
|
737 |
|
|
738 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
739 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
740 |
dwgFile.setHeader("PSPACE_ELEVATION", val.get(1));
|
|
741 |
|
|
742 |
double[] spaces6 = new double[6];
|
|
743 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
744 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
745 |
spaces6[0] = ((Double)val.get(1)).doubleValue();
|
|
746 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
747 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
748 |
spaces6[1] = ((Double)val.get(1)).doubleValue();
|
|
749 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
750 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
751 |
spaces6[2] = ((Double)val.get(1)).doubleValue();
|
|
752 |
dwgFile.setHeader("PSPACE_UCSORG", spaces6);
|
|
753 |
|
|
754 |
double[] spaces7 = new double[6];
|
|
755 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
756 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
757 |
spaces7[0] = ((Double)val.get(1)).doubleValue();
|
|
758 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
759 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
760 |
spaces7[1] = ((Double)val.get(1)).doubleValue();
|
|
761 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
762 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
763 |
spaces7[2] = ((Double)val.get(1)).doubleValue();
|
|
764 |
dwgFile.setHeader("PSPACE_UCSXDIR", spaces7);
|
|
765 |
|
|
766 |
double[] spaces8 = new double[6];
|
|
767 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
768 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
769 |
spaces8[0] = ((Double)val.get(1)).doubleValue();
|
|
770 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
771 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
772 |
spaces8[1] = ((Double)val.get(1)).doubleValue();
|
|
773 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
774 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
775 |
spaces8[2] = ((Double)val.get(1)).doubleValue();
|
|
776 |
dwgFile.setHeader("PSPACE_UCSYDIR", spaces8);
|
|
777 |
|
|
778 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
779 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
780 |
intHandle = DwgUtil.handleToInt(val);
|
|
781 |
dwgFile.setHeader("PSPACE_UCSNAME", new Integer(intHandle));
|
|
782 |
|
|
783 |
double[] spaces9 = new double[6];
|
|
784 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
785 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
786 |
spaces9[0] = ((Double)val.get(1)).doubleValue();
|
|
787 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
788 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
789 |
spaces9[1] = ((Double)val.get(1)).doubleValue();
|
|
790 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
791 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
792 |
spaces9[2] = ((Double)val.get(1)).doubleValue();
|
|
793 |
dwgFile.setHeader("MSPACE_INSBASE", spaces9);
|
|
794 |
|
|
795 |
double[] spaces10 = new double[6];
|
|
796 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
797 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
798 |
spaces10[0] = ((Double)val.get(1)).doubleValue();
|
|
799 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
800 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
801 |
spaces10[1] = ((Double)val.get(1)).doubleValue();
|
|
802 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
803 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
804 |
spaces10[2] = ((Double)val.get(1)).doubleValue();
|
|
805 |
dwgFile.setHeader("MSPACE_EXTMIN", spaces10);
|
|
806 |
|
|
807 |
double[] spaces11 = new double[3];
|
|
808 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
809 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
810 |
spaces11[0] = ((Double)val.get(1)).doubleValue();
|
|
811 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
812 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
813 |
spaces11[1] = ((Double)val.get(1)).doubleValue();
|
|
814 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
815 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
816 |
spaces11[2] = ((Double)val.get(1)).doubleValue();
|
|
817 |
dwgFile.setHeader("MSPACE_EXTMAX", spaces11);
|
|
818 |
|
|
819 |
double[] spaces12= new double[2];
|
|
820 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
821 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
822 |
spaces12[0] = ((Double)val.get(1)).doubleValue();
|
|
823 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
824 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
825 |
spaces12[1] = ((Double)val.get(1)).doubleValue();
|
|
826 |
dwgFile.setHeader("MSPACE_LIMMIN", spaces12);
|
|
827 |
|
|
828 |
double[] spaces13= new double[2];
|
|
829 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
830 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
831 |
spaces13[0] = ((Double)val.get(1)).doubleValue();
|
|
832 |
val = DwgUtil.getRawDouble(intData, bitPos);
|
|
833 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
834 |
spaces13[1] = ((Double)val.get(1)).doubleValue();
|
|
835 |
dwgFile.setHeader("MSPACE_LIMMAX", spaces13);
|
|
836 |
|
|
837 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
838 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
839 |
dwgFile.setHeader("MSPACE_ELEVATION", (Double)val.get(1));
|
|
840 |
|
|
841 |
double[] spaces14 = new double[3];
|
|
842 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
843 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
844 |
spaces14[0] = ((Double)val.get(1)).doubleValue();
|
|
845 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
846 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
847 |
spaces14[1] = ((Double)val.get(1)).doubleValue();
|
|
848 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
849 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
850 |
spaces14[2] = ((Double)val.get(1)).doubleValue();
|
|
851 |
dwgFile.setHeader("MSPACE_UCSORG", spaces14);
|
|
852 |
|
|
853 |
double[] spaces15 = new double[3];
|
|
854 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
855 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
856 |
spaces15[0] = ((Double)val.get(1)).doubleValue();
|
|
857 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
858 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
859 |
spaces15[1] = ((Double)val.get(1)).doubleValue();
|
|
860 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
861 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
862 |
spaces15[2] = ((Double)val.get(1)).doubleValue();
|
|
863 |
dwgFile.setHeader("MSPACE_UCSXDIR", spaces15);
|
|
864 |
|
|
865 |
double[] spaces16 = new double[3];
|
|
866 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
867 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
868 |
spaces16[0] = ((Double)val.get(1)).doubleValue();
|
|
869 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
870 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
871 |
spaces16[1] = ((Double)val.get(1)).doubleValue();
|
|
872 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
873 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
874 |
spaces16[2] = ((Double)val.get(1)).doubleValue();
|
|
875 |
dwgFile.setHeader("MSPACE_UCSYDIR", spaces16);
|
|
876 |
|
|
877 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
878 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
879 |
intHandle = DwgUtil.handleToInt(val);
|
|
880 |
dwgFile.setHeader("MSPACE_UCSNAME", new Integer(intHandle));
|
|
881 |
|
|
882 |
val = DwgUtil.testBit(intData, bitPos);
|
|
883 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
884 |
dwgFile.setHeader("DIMTOL", val.get(1));
|
|
885 |
|
|
886 |
val = DwgUtil.testBit(intData, bitPos);
|
|
887 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
888 |
dwgFile.setHeader("DIMLIM", val.get(1));
|
|
889 |
|
|
890 |
val = DwgUtil.testBit(intData, bitPos);
|
|
891 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
892 |
dwgFile.setHeader("DIMTIH", val.get(1));
|
|
893 |
|
|
894 |
val = DwgUtil.testBit(intData, bitPos);
|
|
895 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
896 |
dwgFile.setHeader("DIMTOH", val.get(1));
|
|
897 |
|
|
898 |
val = DwgUtil.testBit(intData, bitPos);
|
|
899 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
900 |
dwgFile.setHeader("DIMSE1", val.get(1));
|
|
901 |
|
|
902 |
val = DwgUtil.testBit(intData, bitPos);
|
|
903 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
904 |
dwgFile.setHeader("DIMTSE2", val.get(1));
|
|
905 |
|
|
906 |
val = DwgUtil.testBit(intData, bitPos);
|
|
907 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
908 |
dwgFile.setHeader("DIMALT", val.get(1));
|
|
909 |
|
|
910 |
val = DwgUtil.testBit(intData, bitPos);
|
|
911 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
912 |
dwgFile.setHeader("DIMTOFL", val.get(1));
|
|
913 |
|
|
914 |
val = DwgUtil.testBit(intData, bitPos);
|
|
915 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
916 |
dwgFile.setHeader("DIMSAH", val.get(1));
|
|
917 |
|
|
918 |
val = DwgUtil.testBit(intData, bitPos);
|
|
919 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
920 |
dwgFile.setHeader("DIMTIX", val.get(1));
|
|
921 |
|
|
922 |
val = DwgUtil.testBit(intData, bitPos);
|
|
923 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
924 |
dwgFile.setHeader("DIMSOXD", val.get(1));
|
|
925 |
|
|
926 |
|
|
927 |
|
|
928 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
929 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
930 |
dwgFile.setHeader("DIMALTD", val.get(1));
|
|
931 |
|
|
932 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
933 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
934 |
dwgFile.setHeader("DIMZIN", val.get(1));
|
|
935 |
|
|
936 |
val = DwgUtil.testBit(intData, bitPos);
|
|
937 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
938 |
dwgFile.setHeader("DIMSD1", val.get(1));
|
|
939 |
|
|
940 |
val = DwgUtil.testBit(intData, bitPos);
|
|
941 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
942 |
dwgFile.setHeader("DIMSD2", val.get(1));
|
|
943 |
|
|
944 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
945 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
946 |
dwgFile.setHeader("DIMTOLJ", val.get(1));
|
|
947 |
|
|
948 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
949 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
950 |
dwgFile.setHeader("DIMJUST", val.get(1));
|
|
951 |
|
|
952 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
953 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
954 |
dwgFile.setHeader("DIMFINT", val.get(1));
|
|
955 |
|
|
956 |
val = DwgUtil.testBit(intData, bitPos);
|
|
957 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
958 |
dwgFile.setHeader("DIMUPT", val.get(1));
|
|
959 |
|
|
960 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
961 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
962 |
dwgFile.setHeader("DIMZIN", val.get(1));
|
|
963 |
|
|
964 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
965 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
966 |
dwgFile.setHeader("DIMALTZ", val.get(1));
|
|
967 |
|
|
968 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
969 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
970 |
dwgFile.setHeader("DIMALTTZ", val.get(1));
|
|
971 |
|
|
972 |
val = DwgUtil.getRawChar(intData, bitPos);
|
|
973 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
974 |
dwgFile.setHeader("DIMTAD", val.get(1));
|
|
975 |
|
|
976 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
977 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
978 |
dwgFile.setHeader("DIMUNIT", val.get(1));
|
|
979 |
|
|
980 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
981 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
982 |
dwgFile.setHeader("DIMAUNIT", val.get(1));
|
|
983 |
|
|
984 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
985 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
986 |
dwgFile.setHeader("DIMDEC", val.get(1));
|
|
987 |
|
|
988 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
989 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
990 |
dwgFile.setHeader("DIMTDEC", val.get(1));
|
|
991 |
|
|
992 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
993 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
994 |
dwgFile.setHeader("DIMALTU", val.get(1));
|
|
995 |
|
|
996 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
997 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
998 |
dwgFile.setHeader("DIMALTTD", val.get(1));
|
|
999 |
|
|
1000 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1001 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1002 |
intHandle = DwgUtil.handleToInt(val);
|
|
1003 |
dwgFile.setHeader("DIMTXSTY", new Integer(intHandle));
|
|
1004 |
|
|
1005 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1006 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1007 |
dwgFile.setHeader("DIMSCALE", val.get(1));
|
|
1008 |
|
|
1009 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1010 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1011 |
dwgFile.setHeader("DIMASZ", val.get(1));
|
|
1012 |
|
|
1013 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1014 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1015 |
dwgFile.setHeader("DIMEXO", val.get(1));
|
|
1016 |
|
|
1017 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1018 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1019 |
dwgFile.setHeader("DIMDLI", val.get(1));
|
|
1020 |
|
|
1021 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1022 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1023 |
dwgFile.setHeader("DIMEXE", val.get(1));
|
|
1024 |
|
|
1025 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1026 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1027 |
dwgFile.setHeader("DIMAND", val.get(1));
|
|
1028 |
|
|
1029 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1030 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1031 |
dwgFile.setHeader("DIMDLE", val.get(1));
|
|
1032 |
|
|
1033 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1034 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1035 |
dwgFile.setHeader("DIMTP", val.get(1));
|
|
1036 |
|
|
1037 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1038 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1039 |
dwgFile.setHeader("DIMTM", val.get(1));
|
|
1040 |
|
|
1041 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1042 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1043 |
dwgFile.setHeader("DIMTXT", val.get(1));
|
|
1044 |
|
|
1045 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1046 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1047 |
dwgFile.setHeader("DIMCEN", val.get(1));
|
|
1048 |
|
|
1049 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1050 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1051 |
dwgFile.setHeader("DIMSZ", val.get(1));
|
|
1052 |
|
|
1053 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1054 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1055 |
dwgFile.setHeader("DIMALTF", val.get(1));
|
|
1056 |
|
|
1057 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1058 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1059 |
dwgFile.setHeader("DIMLFAC", val.get(1));
|
|
1060 |
|
|
1061 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1062 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1063 |
dwgFile.setHeader("DIMTVP", val.get(1));
|
|
1064 |
|
|
1065 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1066 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1067 |
dwgFile.setHeader("DIMTFAC", val.get(1));
|
|
1068 |
|
|
1069 |
val = DwgUtil.getBitDouble(intData, bitPos);
|
|
1070 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1071 |
dwgFile.setHeader("DIMGAP", val.get(1));
|
|
1072 |
|
|
1073 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1074 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1075 |
dwgFile.setHeader("DIMPOST", val.get(1));
|
|
1076 |
|
|
1077 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1078 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1079 |
dwgFile.setHeader("DIMAPOST", val.get(1));
|
|
1080 |
|
|
1081 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1082 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1083 |
dwgFile.setHeader("DIMBLK", val.get(1));
|
|
1084 |
|
|
1085 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1086 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1087 |
dwgFile.setHeader("DIMBLK1", val.get(1));
|
|
1088 |
|
|
1089 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1090 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1091 |
dwgFile.setHeader("DIMBLK2", val.get(1));
|
|
1092 |
|
|
1093 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1094 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1095 |
dwgFile.setHeader("DIMCLRD", val.get(1));
|
|
1096 |
|
|
1097 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1098 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1099 |
dwgFile.setHeader("DIMCLRE", val.get(1));
|
|
1100 |
|
|
1101 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1102 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1103 |
dwgFile.setHeader("DIMCLRT", val.get(1));
|
|
1104 |
|
|
1105 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1106 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1107 |
intHandle = DwgUtil.handleToInt(val);
|
|
1108 |
dwgFile.setHeader("BLOCK_CONTROL_OBJECT", new Integer(intHandle));
|
|
1109 |
|
|
1110 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1111 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1112 |
intHandle = DwgUtil.handleToInt(val);
|
|
1113 |
dwgFile.setHeader("LAYER_CONTROL_OBJECT", new Integer(intHandle));
|
|
1114 |
|
|
1115 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1116 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1117 |
intHandle = DwgUtil.handleToInt(val);
|
|
1118 |
dwgFile.setHeader("STYLE_CONTROL_OBJECT", new Integer(intHandle));
|
|
1119 |
|
|
1120 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1121 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1122 |
intHandle = DwgUtil.handleToInt(val);
|
|
1123 |
dwgFile.setHeader("LINETYPE_CONTROL_OBJECT", new Integer(intHandle));
|
|
1124 |
|
|
1125 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1126 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1127 |
intHandle = DwgUtil.handleToInt(val);
|
|
1128 |
dwgFile.setHeader("VIEW_CONTROL_OBJECT", new Integer(intHandle));
|
|
1129 |
|
|
1130 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1131 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1132 |
intHandle = DwgUtil.handleToInt(val);
|
|
1133 |
dwgFile.setHeader("UCS_CONTROL_OBJECT", new Integer(intHandle));
|
|
1134 |
|
|
1135 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1136 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1137 |
intHandle = DwgUtil.handleToInt(val);
|
|
1138 |
dwgFile.setHeader("VPORT_CONTROL_OBJECT", new Integer(intHandle));
|
|
1139 |
|
|
1140 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1141 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1142 |
intHandle = DwgUtil.handleToInt(val);
|
|
1143 |
dwgFile.setHeader("APPID_CONTROL_OBJECT", new Integer(intHandle));
|
|
1144 |
|
|
1145 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1146 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1147 |
intHandle = DwgUtil.handleToInt(val);
|
|
1148 |
dwgFile.setHeader("DIMSTYLE_CONTROL_OBJECT", new Integer(intHandle));
|
|
1149 |
|
|
1150 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1151 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1152 |
intHandle = DwgUtil.handleToInt(val);
|
|
1153 |
dwgFile.setHeader("VIEWPORT_ENTITY_HEADER", new Integer(intHandle));
|
|
1154 |
|
|
1155 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1156 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1157 |
intHandle = DwgUtil.handleToInt(val);
|
|
1158 |
dwgFile.setHeader("ACAD_GROUP_DICTIONARY", new Integer(intHandle));
|
|
1159 |
|
|
1160 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1161 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1162 |
intHandle = DwgUtil.handleToInt(val);
|
|
1163 |
dwgFile.setHeader("ACAD_MLINE_DICTIONARY", new Integer(intHandle));
|
|
1164 |
|
|
1165 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1166 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1167 |
intHandle = DwgUtil.handleToInt(val);
|
|
1168 |
dwgFile.setHeader("NAMED_OBJECT_DICTIONARY", new Integer(intHandle));
|
|
1169 |
|
|
1170 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1171 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1172 |
intHandle = DwgUtil.handleToInt(val);
|
|
1173 |
dwgFile.setHeader("PAPER_BLOCK_RECORD", new Integer(intHandle));
|
|
1174 |
|
|
1175 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1176 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1177 |
intHandle = DwgUtil.handleToInt(val);
|
|
1178 |
dwgFile.setHeader("MODEL_BLOCK_RECORD", new Integer(intHandle));
|
|
1179 |
|
|
1180 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1181 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1182 |
intHandle = DwgUtil.handleToInt(val);
|
|
1183 |
dwgFile.setHeader("LTYPE_BYLAYER", new Integer(intHandle));
|
|
1184 |
|
|
1185 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1186 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1187 |
intHandle = DwgUtil.handleToInt(val);
|
|
1188 |
dwgFile.setHeader("LTYPE_BYBLOCK", new Integer(intHandle));
|
|
1189 |
|
|
1190 |
val = DwgUtil.getHandle(intData, bitPos);
|
|
1191 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1192 |
intHandle = DwgUtil.handleToInt(val);
|
|
1193 |
dwgFile.setHeader("LTYPE_CONTINUOUS", new Integer(intHandle));
|
|
1194 |
|
|
1195 |
// # remaing bits are unknown, and they end with possible
|
|
1196 |
// # padding bits so that 16-bit CRC value after the data
|
|
1197 |
// # is on a byte boundary - ignore them for now ...
|
|
1198 |
|
711 |
1199 |
} catch (Exception e) {
|
712 |
1200 |
logger.error(e);
|
713 |
|
}
|
714 |
|
|
715 |
|
|
716 |
|
//
|
717 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
718 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
719 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
720 |
|
// dwg.setHeader('PSPACE_EXTMAX', (_val1, _val2, _val3))
|
721 |
|
|
722 |
|
|
723 |
|
|
724 |
|
// _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
|
725 |
|
// _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
|
726 |
|
// dwg.setHeader('PSPACE_LIMMIN', (_val1, _val2))
|
727 |
|
|
728 |
|
|
729 |
|
// _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
|
730 |
|
// _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
|
731 |
|
// dwg.setHeader('PSPACE_LIMMAX', (_val1, _val2))
|
732 |
|
|
733 |
|
|
734 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
735 |
|
// dwg.setHeader('PSPACE_ELEVATION', _val)
|
736 |
|
|
737 |
|
|
738 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
739 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
740 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
741 |
|
// dwg.setHeader('PSPACE_UCSORG', (_val1, _val2, _val3))
|
742 |
|
|
743 |
|
|
744 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
745 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
746 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
747 |
|
// dwg.setHeader('PSPACE_UCSXDIR', (_val1, _val2, _val3))
|
748 |
|
|
749 |
|
|
750 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
751 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
752 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
753 |
|
// dwg.setHeader('PSPACE_UCSYDIR', (_val1, _val2, _val3))
|
754 |
|
|
755 |
|
|
756 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
757 |
|
// dwg.setHeader('PSPACE_UCSNAME', _handle)
|
758 |
|
// #print "bitpos: %d" % _bitpos
|
759 |
|
|
760 |
|
|
761 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
762 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
763 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
764 |
|
// dwg.setHeader('MSPACE_INSBASE', (_val1, _val2, _val3))
|
765 |
|
|
766 |
|
|
767 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
768 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
769 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
770 |
|
// dwg.setHeader('MSPACE_EXTMIN', (_val1, _val2, _val3))
|
771 |
|
|
772 |
|
|
773 |
|
|
774 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
775 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
776 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
777 |
|
// dwg.setHeader('MSPACE_EXTMAX', (_val1, _val2, _val3))
|
778 |
|
|
779 |
|
|
780 |
|
// _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
|
781 |
|
// _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
|
782 |
|
// dwg.setHeader('MSPACE_LIMMIN', (_val1, _val2))
|
783 |
|
|
784 |
|
|
785 |
|
// _bitpos, _val1 = dwgutil.get_raw_double(_data, _bitpos)
|
786 |
|
// _bitpos, _val2 = dwgutil.get_raw_double(_data, _bitpos)
|
787 |
|
// dwg.setHeader('MSPACE_LIMMAX', (_val1, _val2))
|
788 |
|
|
789 |
|
|
790 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
791 |
|
// dwg.setHeader('MSPACE_ELEVATION', _val)
|
792 |
|
|
793 |
|
|
794 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
795 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
796 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
797 |
|
// dwg.setHeader('MSPACE_UCSORG', (_val1, _val2, _val3))
|
798 |
|
|
799 |
|
|
800 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
801 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
802 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
803 |
|
// dwg.setHeader('MSPACE_UCSXDIR', (_val1, _val2, _val3))
|
804 |
|
|
805 |
|
|
806 |
|
// _bitpos, _val1 = dwgutil.get_bit_double(_data, _bitpos)
|
807 |
|
// _bitpos, _val2 = dwgutil.get_bit_double(_data, _bitpos)
|
808 |
|
// _bitpos, _val3 = dwgutil.get_bit_double(_data, _bitpos)
|
809 |
|
// dwg.setHeader('MSPACE_UCSYDIR', (_val1, _val2, _val3))
|
810 |
|
|
811 |
|
|
812 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
813 |
|
// dwg.setHeader('MSPACE_UCSNAME', _handle)
|
814 |
|
|
815 |
|
|
816 |
|
// # print "bitpos: %d" % _bitpos
|
817 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
818 |
|
// dwg.setHeader('DIMTOL', _val)
|
819 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
820 |
|
// dwg.setHeader('DIMLIM', _val)
|
821 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
822 |
|
// dwg.setHeader('DIMTIH', _val)
|
823 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
824 |
|
// dwg.setHeader('DIMTOH', _val)
|
825 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
826 |
|
// dwg.setHeader('DIMSE1', _val)
|
827 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
828 |
|
// dwg.setHeader('DIMSE2', _val)
|
829 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
830 |
|
// dwg.setHeader('DIMALT', _val)
|
831 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
832 |
|
// dwg.setHeader('DIMTOFL', _val)
|
833 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
834 |
|
// dwg.setHeader('DIMSAH', _val)
|
835 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
836 |
|
// dwg.setHeader('DIMTIX', _val)
|
837 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
838 |
|
// dwg.setHeader('DIMSOXD', _val)
|
839 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
840 |
|
// dwg.setHeader('DIMALTD', _val)
|
841 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
842 |
|
// dwg.setHeader('DIMZIN', _val)
|
843 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
844 |
|
// dwg.setHeader('DIMSD1', _val)
|
845 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
846 |
|
// dwg.setHeader('DIMSD2', _val)
|
847 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
848 |
|
// dwg.setHeader('DIMTOLJ', _val)
|
849 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
850 |
|
// dwg.setHeader('DIMJUST', _val)
|
851 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
852 |
|
// dwg.setHeader('DIMFINT', _val)
|
853 |
|
// _bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
854 |
|
// dwg.setHeader('DIMUPT', _val)
|
855 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
856 |
|
// dwg.setHeader('DIMTZIN', _val)
|
857 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
858 |
|
// dwg.setHeader('DIMMALTZ', _val)
|
859 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
860 |
|
// dwg.setHeader('DIMMALTTZ', _val)
|
861 |
|
// _bitpos, _val = dwgutil.get_raw_char(_data, _bitpos)
|
862 |
|
// dwg.setHeader('DIMTAD', _val)
|
863 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
864 |
|
// dwg.setHeader('DIMUNIT', _val)
|
865 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
866 |
|
// dwg.setHeader('DIMAUNIT', _val)
|
867 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
868 |
|
// dwg.setHeader('DIMDEC', _val)
|
869 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
870 |
|
// dwg.setHeader('DIMTDEC', _val)
|
871 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
872 |
|
// dwg.setHeader('DIMALTU', _val)
|
873 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
874 |
|
// dwg.setHeader('DIMALTTD', _val)
|
875 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
876 |
|
// dwg.setHeader('DIMTXSTY', _handle)
|
877 |
|
// # print "bitpos: %d" % _bitpos
|
878 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
879 |
|
// dwg.setHeader('DIMSCALE', _val)
|
880 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
881 |
|
// dwg.setHeader('DIMASZ', _val)
|
882 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
883 |
|
// dwg.setHeader('DIMEXO', _val)
|
884 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
885 |
|
// dwg.setHeader('DIMDLI', _val)
|
886 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
887 |
|
// dwg.setHeader('DIMEXE', _val)
|
888 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
889 |
|
// dwg.setHeader('DIMAND', _val)
|
890 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
891 |
|
// dwg.setHeader('DIMDLE', _val)
|
892 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
893 |
|
// dwg.setHeader('DIMTP', _val)
|
894 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
895 |
|
// dwg.setHeader('DIMTM', _val)
|
896 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
897 |
|
// dwg.setHeader('DIMTXT', _val)
|
898 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
899 |
|
// dwg.setHeader('DIMCEN', _val)
|
900 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
901 |
|
// dwg.setHeader('DIMSZ', _val)
|
902 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
903 |
|
// dwg.setHeader('DIMALTF', _val)
|
904 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
905 |
|
// dwg.setHeader('DIMLFAC', _val)
|
906 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
907 |
|
// dwg.setHeader('DIMTVP', _val)
|
908 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
909 |
|
// dwg.setHeader('DIMTFAC', _val)
|
910 |
|
// _bitpos, _val = dwgutil.get_bit_double(_data, _bitpos)
|
911 |
|
// dwg.setHeader('DIMGAP', _val)
|
912 |
|
// _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
|
913 |
|
// dwg.setHeader('DIMPOST', _val)
|
914 |
|
// _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
|
915 |
|
// dwg.setHeader('DIMAPOST', _val)
|
916 |
|
// _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
|
917 |
|
// dwg.setHeader('DIMBLK', _string)
|
918 |
|
// _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
|
919 |
|
// dwg.setHeader('DIMBLK1', _string)
|
920 |
|
// _bitpos, _string = dwgutil.get_text_string(_data, _bitpos)
|
921 |
|
// dwg.setHeader('DIMBLK2', _string)
|
922 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
923 |
|
// dwg.setHeader('DIMCLRD', _val)
|
924 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
925 |
|
// dwg.setHeader('DIMCLRE', _val)
|
926 |
|
// _bitpos, _val = dwgutil.get_bit_short(_data, _bitpos)
|
927 |
|
// dwg.setHeader('DIMCLRT', _val)
|
928 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
929 |
|
// dwg.setHeader('BLOCK_CONTROL_OBJECT', _handle)
|
930 |
|
// # print "bitpos: %d" % _bitpos
|
931 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
932 |
|
// dwg.setHeader('LAYER_CONTROL_OBJECT', _handle)
|
933 |
|
// # print "bitpos: %d" % _bitpos
|
934 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
935 |
|
// dwg.setHeader('STYLE_CONTROL_OBJECT', _handle)
|
936 |
|
// # print "bitpos: %d" % _bitpos
|
937 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
938 |
|
// dwg.setHeader('LINETYPE_CONTROL_OBJECT', _handle)
|
939 |
|
// # print "bitpos: %d" % _bitpos
|
940 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
941 |
|
// dwg.setHeader('VIEW_CONTROL_OBJECT', _handle)
|
942 |
|
// # print "bitpos: %d" % _bitpos
|
943 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
944 |
|
// dwg.setHeader('UCS_CONTROL_OBJECT', _handle)
|
945 |
|
// # print "bitpos: %d" % _bitpos
|
946 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
947 |
|
// dwg.setHeader('VPORT_CONTROL_OBJECT', _handle)
|
948 |
|
// # print "bitpos: %d" % _bitpos
|
949 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
950 |
|
// dwg.setHeader('APPID_CONTROL_OBJECT', _handle)
|
951 |
|
// # print "bitpos: %d" % _bitpos
|
952 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
953 |
|
// dwg.setHeader('DIMSTYLE_CONTROL_OBJECT', _handle)
|
954 |
|
// # print "bitpos: %d" % _bitpos
|
955 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
956 |
|
// dwg.setHeader('VIEWPORT_ENTITY_HEADER', _handle)
|
957 |
|
// # print "bitpos: %d" % _bitpos
|
958 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
959 |
|
// dwg.setHeader('ACAD_GROUP_DICTIONARY', _handle)
|
960 |
|
// # print "bitpos: %d" % _bitpos
|
961 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
962 |
|
// dwg.setHeader('ACAD_MLINE_DICTIONARY', _handle)
|
963 |
|
// # print "bitpos: %d" % _bitpos
|
964 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
965 |
|
// dwg.setHeader('NAMED_OBJECT_DICTONARY', _handle)
|
966 |
|
// # print "bitpos: %d" % _bitpos
|
967 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
968 |
|
// dwg.setHeader('PAPER_BLOCK_RECORD', _handle)
|
969 |
|
// # print "bitpos: %d" % _bitpos
|
970 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
971 |
|
// dwg.setHeader('MODEL_BLOCK_RECORD', _handle)
|
972 |
|
// # print "bitpos: %d" % _bitpos
|
973 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
974 |
|
// dwg.setHeader('LTYPE_BYLAYER', _handle)
|
975 |
|
// # print "bitpos: %d" % _bitpos
|
976 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
977 |
|
// dwg.setHeader('LTYPE_BYBLOCK', _handle)
|
978 |
|
// # print "bitpos: %d" % _bitpos
|
979 |
|
// _bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
980 |
|
// dwg.setHeader('LTYPE_CONTINUOUS', _handle)
|
981 |
|
// # print "bitpos: %d" % _bitpos
|
982 |
|
// # print "bitpos after LTYPE (CONTINUOUS): %d" % _bitpos
|
983 |
|
// #
|
984 |
|
// # remaing bits are unknown, and they end with possible
|
985 |
|
// # padding bits so that 16-bit CRC value after the data
|
986 |
|
// # is on a byte boundary - ignore them for now ...
|
987 |
|
// #
|
988 |
|
//
|
989 |
|
|
|
1201 |
}
|
990 |
1202 |
}
|
991 |
1203 |
|
992 |
1204 |
|
993 |
1205 |
|
994 |
1206 |
|
995 |
1207 |
|
|
1208 |
|
|
1209 |
|
|
1210 |
|
|
1211 |
|
996 |
1212 |
/**
|
997 |
1213 |
* It read the SECTIONS from the header of the DWG file
|
998 |
1214 |
*
|
... | ... | |
1149 |
1365 |
logger.warn("c2[14] != 0x4d");
|
1150 |
1366 |
if(c2[15] != 0x00)
|
1151 |
1367 |
logger.warn("c2[15] != 0x00");
|
1152 |
|
|
1153 |
|
|
1154 |
|
|
1155 |
1368 |
}
|
1156 |
1369 |
|
1157 |
|
|
1158 |
|
|
1159 |
|
|
1160 |
|
/**
|
1161 |
|
* OpenDWG spec says:
|
1162 |
|
* This section -object map- is a table which gives the location of
|
1163 |
|
* each object in the DWG file.
|
1164 |
|
* This table is broken into sections. It is basically a list of
|
1165 |
|
* handle/file loc pairs. It could be readed with this pseudocode:
|
1166 |
|
*
|
1167 |
|
* Set lastHandle to all 0 and last loc to 0L.
|
1168 |
|
* Repeat until section size == 2
|
1169 |
|
* section size = read short (in bigendian order)
|
1170 |
|
* Repeat until out of data for this section
|
1171 |
|
* offset of this handle form last handle as modular char
|
1172 |
|
* offset of location in file from last location as modular char
|
1173 |
|
* End repeat
|
1174 |
|
* End repeat
|
1175 |
|
*
|
|
1370 |
/*
|
|
1371 |
* TODO Probar, y si no va, meter el codigo del lector de V15
|
|
1372 |
* (es SIMILAR, llevar a clase abstracta comun)
|
1176 |
1373 |
* */
|
1177 |
1374 |
protected void readDwgObjectOffsets() throws Exception {
|
1178 |
1375 |
int offset = dwgFile.getDwgSectionOffset("OBJECTS");
|
1179 |
1376 |
bb.position(offset);
|
1180 |
1377 |
while (true) {
|
1181 |
1378 |
bb.order(ByteOrder.BIG_ENDIAN);
|
1182 |
|
/*
|
1183 |
|
* We read the size of the next section.
|
1184 |
|
* If size == 2, break (it is the last empty -except crc- section)
|
1185 |
|
* */
|
1186 |
1379 |
short size = bb.getShort();
|
1187 |
1380 |
if (size==2)
|
1188 |
1381 |
break;
|
1189 |
|
bb.order(ByteOrder.LITTLE_ENDIAN);
|
|
1382 |
//TODO Cuando en Python no pone < ni >, es nativeOrder o little_endian??
|
|
1383 |
// bb.order(ByteOrder.LITTLE_ENDIAN);
|
|
1384 |
bb.order(ByteOrder.nativeOrder());
|
1190 |
1385 |
byte[] dataBytes = new byte[size];
|
1191 |
|
for (int i=0; i<dataBytes.length; i++) {
|
1192 |
|
dataBytes[i] = bb.get();
|
1193 |
|
}
|
|
1386 |
bb.get(dataBytes);
|
|
1387 |
|
|
1388 |
|
|
1389 |
/*TODO Creo q esto no hace falta, al estar en bytes nativos
|
|
1390 |
* (no en LITTLE_ENDIAN)
|
1194 |
1391 |
int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
|
|
1392 |
*/
|
|
1393 |
int[] data = DwgUtil.toIntArray(dataBytes);
|
|
1394 |
/*
|
|
1395 |
the spec says 'last_handle' and 'last_loc' are initialized outside
|
|
1396 |
the outer for loop - postings on OpenDWG forum say these variables
|
|
1397 |
must be initialized for each section
|
|
1398 |
*/
|
1195 |
1399 |
int lastHandle=0;
|
1196 |
1400 |
int lastLoc=0;
|
1197 |
1401 |
int bitPos=0;
|
1198 |
|
int bitMax= (size - 2) * 8;
|
|
1402 |
int bitMax= (size - 2) * 8;//se quitan 2 bytes por el CRC final
|
1199 |
1403 |
while (bitPos < bitMax) {
|
1200 |
|
ArrayList v = DwgUtil.getModularChar(data, bitPos);
|
|
1404 |
List v = DwgUtil.getModularChar(data, bitPos);
|
1201 |
1405 |
bitPos = ((Integer)v.get(0)).intValue();
|
1202 |
1406 |
lastHandle = lastHandle + ((Integer)v.get(1)).intValue();
|
1203 |
1407 |
v = DwgUtil.getModularChar(data, bitPos);
|
... | ... | |
1208 |
1412 |
}//while
|
1209 |
1413 |
}
|
1210 |
1414 |
|
1211 |
|
/*
|
1212 |
|
* Unused.
|
1213 |
|
*
|
1214 |
|
* Dwg spec says that drawing entities (objects) that has not
|
1215 |
|
* a fixed type must read its type from this section
|
1216 |
|
*
|
1217 |
|
*
|
1218 |
|
* */
|
|
1415 |
|
1219 |
1416 |
protected void readDwgClasses() throws Exception {
|
1220 |
1417 |
int offset = dwgFile.getDwgSectionOffset("CLASSES");
|
1221 |
|
// Por ahora nos saltamos los 16 bytes de control
|
1222 |
|
bb.position(offset+16);
|
|
1418 |
bb.position(offset);
|
|
1419 |
//1? leemos el sentinnel inicial
|
|
1420 |
bb.order(ByteOrder.nativeOrder());
|
|
1421 |
byte[] sentinel = new byte[16];
|
|
1422 |
bb.get(sentinel);
|
|
1423 |
if(sentinel[0] != 0x8d)
|
|
1424 |
logger.warn("sentinel[0] != 0x8d");
|
|
1425 |
if(sentinel[1] != 0xa1)
|
|
1426 |
logger.warn("sentinel[1] != 0xa1");
|
|
1427 |
if(sentinel[2] != 0xc4)
|
|
1428 |
logger.warn("sentinel[2] != 0xc4");
|
|
1429 |
if(sentinel[3] != 0xb8)
|
|
1430 |
logger.warn("sentinel[3] != 0xb8");
|
|
1431 |
if(sentinel[4] != 0xc4)
|
|
1432 |
logger.warn("sentinel[4] != 0xc4");
|
|
1433 |
if(sentinel[5] != 0xa9)
|
|
1434 |
logger.warn("sentinel[5] != 0xa9");
|
|
1435 |
if(sentinel[6] != 0xf8)
|
|
1436 |
logger.warn("sentinel[6] != 0xf8");
|
|
1437 |
if(sentinel[7] != 0xc5)
|
|
1438 |
logger.warn("sentinel[7] != 0xc5");
|
|
1439 |
if(sentinel[8] != 0xc0)
|
|
1440 |
logger.warn("sentinel[8] != 0xc0");
|
|
1441 |
if(sentinel[9] != 0xdc)
|
|
1442 |
logger.warn("sentinel[9] != 0xdc");
|
|
1443 |
if(sentinel[10] != 0xf4)
|
|
1444 |
logger.warn("sentinel[10] != 0xf4");
|
|
1445 |
if(sentinel[11] != 0x5f)
|
|
1446 |
logger.warn("sentinel[11] != 0x5f");
|
|
1447 |
if(sentinel[12] != 0xe7)
|
|
1448 |
logger.warn("sentinel[12] != 0xe7");
|
|
1449 |
if(sentinel[13] != 0xcf)
|
|
1450 |
logger.warn("sentinel[13] != 0xcf");
|
|
1451 |
if(sentinel[14] != 0xb6)
|
|
1452 |
logger.warn("sentinel[14] != 0xb6");
|
|
1453 |
if(sentinel[15] != 0x8a)
|
|
1454 |
logger.warn("sentinel[15] != 0x8a");
|
|
1455 |
|
1223 |
1456 |
bb.order(ByteOrder.LITTLE_ENDIAN);
|
1224 |
1457 |
int size = bb.getInt();
|
1225 |
|
byte[] dataBytes = new byte[size];
|
1226 |
|
for (int i=0; i<dataBytes.length; i++) {
|
1227 |
|
dataBytes[i] = bb.get();
|
1228 |
|
}
|
1229 |
|
int[] data = DwgUtil.bytesToMachineBytes(dataBytes);
|
1230 |
|
for (int i=0; i<data.length; i++) {
|
1231 |
|
data[i] = (byte)ByteUtils.getUnsigned((byte)data[i]);
|
1232 |
|
}
|
1233 |
|
bb.position(bb.position()+2+16);
|
1234 |
|
int maxbit = size * 8;
|
|
1458 |
byte[] data = new byte[size];
|
|
1459 |
bb.get(data);
|
|
1460 |
int[] intData = DwgUtil.toIntArray(data);
|
|
1461 |
short crc = bb.getShort();
|
|
1462 |
|
|
1463 |
int maxBit = size * 8;
|
1235 |
1464 |
int bitPos = 0;
|
1236 |
|
while ((bitPos+8) < maxbit) {
|
1237 |
|
ArrayList v = DwgUtil.getBitShort(data, bitPos);
|
1238 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1239 |
|
v = DwgUtil.getBitShort(data, bitPos);
|
1240 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1241 |
|
v = DwgUtil.getTextString(data, bitPos);
|
1242 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1243 |
|
v = DwgUtil.getTextString(data, bitPos);
|
1244 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1245 |
|
v = DwgUtil.getTextString(data, bitPos);
|
1246 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1247 |
|
v = DwgUtil.testBit(data, bitPos);
|
1248 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1249 |
|
v = DwgUtil.getBitShort(data, bitPos);
|
1250 |
|
bitPos = ((Integer)v.get(0)).intValue();
|
1251 |
|
}
|
|
1465 |
List val = null;
|
|
1466 |
while ( (bitPos + 8) < maxBit){
|
|
1467 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1468 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1469 |
int classNum = ((Integer)val.get(1)).intValue();
|
|
1470 |
|
|
1471 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1472 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1473 |
int version = ((Integer)val.get(1)).intValue();
|
|
1474 |
|
|
1475 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1476 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1477 |
String appName = (String)val.get(1);
|
|
1478 |
|
|
1479 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1480 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1481 |
String cPlusPlusName = (String)val.get(1);
|
|
1482 |
|
|
1483 |
val = DwgUtil.getTextString(intData, bitPos);
|
|
1484 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1485 |
String dxfName = (String)val.get(1);
|
|
1486 |
|
|
1487 |
val = DwgUtil.testBit(intData, bitPos);
|
|
1488 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1489 |
boolean isZombie = ((Boolean)val.get(0)).booleanValue();
|
|
1490 |
|
|
1491 |
val = DwgUtil.getBitShort(intData, bitPos);
|
|
1492 |
bitPos = ((Integer)val.get(0)).intValue();
|
|
1493 |
int id = ((Integer)val.get(1)).intValue();
|
|
1494 |
|
|
1495 |
DwgClass dwgClass = new DwgClass(classNum, version, appName,
|
|
1496 |
cPlusPlusName, dxfName, isZombie, id);
|
|
1497 |
dwgFile.addDwgClass(dwgClass);
|
|
1498 |
|
|
1499 |
}//while
|
|
1500 |
// Por ultimo, el sentinnel final
|
|
1501 |
bb.order(ByteOrder.nativeOrder());
|
|
1502 |
byte[] lastSentinnel = new byte[16];
|
|
1503 |
bb.get(lastSentinnel);
|
|
1504 |
if(lastSentinnel[0] != 0x72)
|
|
1505 |
logger.warn("lastSentinnel[0] != 0x72");
|
|
1506 |
if(lastSentinnel[1] != 0x5e)
|
|
1507 |
logger.warn("lastSentinnel[1] != 0x5e");
|
|
1508 |
if(lastSentinnel[2] != 0x3b)
|
|
1509 |
logger.warn("lastSentinnel[2] != 0x3b");
|
|
1510 |
if(lastSentinnel[3] != 0x47)
|
|
1511 |
logger.warn("lastSentinnel[3] != 0x47");
|
|
1512 |
if(lastSentinnel[4] != 0x3b)
|
|
1513 |
logger.warn("lastSentinnel[4] != 0x3b");
|
|
1514 |
if(lastSentinnel[5] != 0x56)
|
|
1515 |
logger.warn("lastSentinnel[5] != 0x56");
|
|
1516 |
if(lastSentinnel[6] != 0x07)
|
|
1517 |
logger.warn("lastSentinnel[6] != 0x07");
|
|
1518 |
if(lastSentinnel[7] != 0x3a)
|
|
1519 |
logger.warn("lastSentinnel[7] != 0x3a");
|
|
1520 |
if(lastSentinnel[8] != 0x3f)
|
|
1521 |
logger.warn("lastSentinnel[8] != 0x3f");
|
|
1522 |
if(lastSentinnel[9] != 0x23)
|
|
1523 |
logger.warn("lastSentinnel[9] != 0x23");
|
|
1524 |
if(lastSentinnel[10] != 0x0b)
|
|
1525 |
logger.warn("lastSentinnel[10] != 0x0b");
|
|
1526 |
if(lastSentinnel[11] != 0xa0)
|
|
1527 |
logger.warn("lastSentinnel[11] != 0xa0");
|
|
1528 |
if(lastSentinnel[12] != 0x18)
|
|
1529 |
logger.warn("lastSentinnel[12] != 0x18");
|
|
1530 |
if(lastSentinnel[13] != 0x30)
|
|
1531 |
logger.warn("lastSentinnel[13] != 0x30");
|
|
1532 |
if(lastSentinnel[14] != 0x49)
|
|
1533 |
logger.warn("lastSentinnel[14] != 0x49");
|
|
1534 |
if(lastSentinnel[15] != 0x75)
|
|
1535 |
logger.warn("lastSentinnel[15] != 0x75");
|
1252 |
1536 |
}
|
1253 |
1537 |
|
1254 |
1538 |
|
|
1539 |
|
|
1540 |
|
|
1541 |
|
|
1542 |
|
1255 |
1543 |
/**
|
1256 |
1544 |
* Reads all the object referenced in the object map section of the
|
1257 |
1545 |
* DWG file (using their object file obsets)
|
1258 |
1546 |
* */
|
1259 |
1547 |
protected void readDwgObjects() {
|
|
1548 |
List dwgClasses = dwgFile.getDwgClasses();
|
|
1549 |
for (int i = 0; i <= dwgClasses.size(); i++){
|
|
1550 |
DwgClass dwgClass = (DwgClass) dwgClasses.get(i);
|
|
1551 |
}
|
|
1552 |
|
|
1553 |
|
|
1554 |
|
|
1555 |
|
1260 |
1556 |
for (int i=0; i<dwgFile.getDwgObjectOffsets().size(); i++) {
|
1261 |
1557 |
DwgObjectOffset doo = (DwgObjectOffset)dwgFile.getDwgObjectOffsets().get(i);
|
1262 |
1558 |
DwgObject obj = readDwgObject(doo.getOffset(), i);
|
... | ... | |
1271 |
1567 |
if(obj != null && obj.getClass() != DwgObject.class){
|
1272 |
1568 |
dwgFile.addDwgObject(obj);
|
1273 |
1569 |
}
|
1274 |
|
}
|
|
1570 |
}//for
|
1275 |
1571 |
}
|
1276 |
1572 |
|
1277 |
1573 |
/**
|
... | ... | |
1284 |
1580 |
return readDwgObject(doo.getOffset(), index);
|
1285 |
1581 |
}
|
1286 |
1582 |
|
|
1583 |
|
|
1584 |
|
|
1585 |
|
|
1586 |
|
|
1587 |
|
|
1588 |
|
|
1589 |
|
|
1590 |
|
|
1591 |
|
|
1592 |
|
|
1593 |
/*
|
|
1594 |
|
|
1595 |
|
|
1596 |
def read_objects(handle, objmap, cmap):
|
|
1597 |
|
|
1598 |
|
|
1599 |
# print "read_objects() ..."
|
|
1600 |
#
|
|
1601 |
# use the classmap to tie the variable object numbers
|
|
1602 |
# to the type of object for use in the vobjmap dict
|
|
1603 |
|
|
1604 |
|
|
1605 |
_vmap = {}
|
|
1606 |
for _key in cmap.keys():
|
|
1607 |
_type = cmap[_key][3] # classdxfclassname field
|
|
1608 |
_vmap[_key] = _type
|
|
1609 |
# print "mapping type %d to %s" % (_key, _type)
|
|
1610 |
|
|
1611 |
|
|
1612 |
_objkeys = objmap.keys()
|
|
1613 |
_objkeys.sort()
|
|
1614 |
_objlist = []
|
|
1615 |
|
|
1616 |
|
|
1617 |
|
|
1618 |
|
|
1619 |
for _obj in _objkeys:
|
|
1620 |
_ent = dwgbase.dwgEntity()
|
|
1621 |
|
|
1622 |
_last_handle, _foffset, _last_loc = objmap[_obj]
|
|
1623 |
|
|
1624 |
|
|
1625 |
|
|
1626 |
handle.seek(_last_loc, 0) # use absolete offset
|
|
1627 |
_size = dwgbase.get_modular_short(handle)
|
|
1628 |
_data = array.array('B')
|
|
1629 |
_data.fromfile(handle, _size)
|
|
1630 |
|
|
1631 |
|
|
1632 |
# _ent.setEntityData('bitstream', _data)
|
|
1633 |
|
|
1634 |
|
|
1635 |
_bitpos = 0
|
|
1636 |
_bitpos, _type = dwgutil.get_bit_short(_data, _bitpos)
|
|
1637 |
_ent.setType(_type)
|
|
1638 |
|
|
1639 |
_bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
|
1640 |
_ent.setHandle(_handle)
|
|
1641 |
|
|
1642 |
_eexdata = []
|
|
1643 |
while True:
|
|
1644 |
_bitpos, _exsize = dwgutil.get_bit_short(_data, _bitpos)
|
|
1645 |
# print "extended data size: %d" % _exsize
|
|
1646 |
if _exsize == 0:
|
|
1647 |
break
|
|
1648 |
# print "bitpos: %d" % _bitpos
|
|
1649 |
_bitpos, _handle = dwgutil.get_handle(_data, _bitpos)
|
|
1650 |
# print "eed handle: " + str(_handle)
|
|
1651 |
_count = 0
|
|
1652 |
_eedata = []
|
|
1653 |
|
|
1654 |
|
|
1655 |
|
|
1656 |
while (_count < _exsize):
|
|
1657 |
# print "count: %d" % _count
|
|
1658 |
_bitpos, _cb = dwgutil.get_raw_char(_data, _bitpos)
|
|
1659 |
# print "code byte: %#x" % _cb
|
|
1660 |
_count = _count + 1
|
|
1661 |
|
|
1662 |
if _cb == 0x0:
|
|
1663 |
_bitpos, _slen = dwgutil.get_raw_char(_data, _bitpos)
|
|
1664 |
_bitpos, _cp = dwgutil.get_raw_short(_data, _bitpos)
|
|
1665 |
# print "code page: %d" % _cp
|
|
1666 |
_chars = []
|
|
1667 |
for _i in range(_slen):
|
|
1668 |
_bitpos, _char = dwgutil.get_raw_char(_data, _bitpos)
|
|
1669 |
_chars.append(chr(_char))
|
|
1670 |
_string = "".join(_chars)
|
|
1671 |
_eedata.append(_string)
|
|
1672 |
_count = _count + 3 + _slen
|
|
1673 |
|
|
1674 |
|
|
1675 |
elif _cb == 0x1:
|
|
1676 |
raise ValueError, "Invalid EEX code byte: 0x1"
|
|
1677 |
|
|
1678 |
|
|
1679 |
elif _cb == 0x2:
|
|
1680 |
_bitpos, _char = dwgutil.get_raw_char(_data, _bitpos)
|
|
1681 |
if _char == 0x0:
|
|
1682 |
_eedata.append("{")
|
|
1683 |
elif _char == 0x1:
|
|
1684 |
_eedata.append("}")
|
|
1685 |
else:
|
|
1686 |
raise ValueError, "Unexpected EEX char: %#02x" % _char
|
|
1687 |
_count = _count + 1
|
|
1688 |
|
|
1689 |
|
|
1690 |
|
|
1691 |
elif _cb == 0x3:
|
|
1692 |
# print "layer table reference"
|
|
1693 |
_chars = []
|
|
1694 |
for _i in range(8):
|
|
1695 |
_bitpos, _char = dwgutil.get_raw_char(_data, _bitpos)
|
|
1696 |
_chars.append(_char)
|
|
1697 |
_eedata.append(_chars)
|
|
1698 |
_count = _count + 8
|
|
1699 |
|
|
1700 |
|
|
1701 |
|
|
1702 |
|
|
1703 |
elif _cb == 0x4:
|
|
1704 |
# print "binary chunk"
|
|
1705 |
_bitpos, _len = dwgutil.get_raw_char(_data, _bitpos)
|
|
1706 |
_chars = []
|
|
1707 |
for _i in range(_len):
|
|
1708 |
_bitpos, _char = dwgutil.get_raw_char(_data, _bitpos)
|
|
1709 |
_chars.append(_char)
|
|
1710 |
_eedata.append(_chars)
|
|
1711 |
_count = _count + 1 + _len
|
|
1712 |
|
|
1713 |
|
|
1714 |
|
|
1715 |
elif _cb == 0x5:
|
|
1716 |
# print "entity handle reference"
|
|
1717 |
_chars = []
|
|
1718 |
for _i in range(8):
|
|
1719 |
_bitpos, _char = dwgutil.get_raw_char(_data, _bitpos)
|
|
1720 |
_chars.append(_char)
|
|
1721 |
_eedata.append(_chars)
|
|
1722 |
_count = _count + 8
|
|
1723 |
|
|
1724 |
|
|
1725 |
|
|
1726 |
|
|
1727 |
elif (0xa <= _cb <= 0xd):
|
|
1728 |
# print "three doubles"
|
|
1729 |
_bitpos, _d1 = dwgutil.get_raw_double(_data, _bitpos)
|
|
1730 |
_bitpos, _d2 = dwgutil.get_raw_double(_data, _bitpos)
|
|
1731 |
_bitpos, _d3 = dwgutil.get_raw_double(_data, _bitpos)
|
|
1732 |
_eedata.append((_d1, _d2, _d3))
|
|
1733 |
_count = _count + 24
|
|
1734 |
|
|
1735 |
|
|
1736 |
|
|
1737 |
|
|
1738 |
elif (0x28 <= _cb <= 0x2a):
|
|
1739 |
# print "one double"
|
|
1740 |
_bitpos, _d = dwgutil.get_raw_double(_data, _bitpos)
|
|
1741 |
_eedata.append(_d)
|
|
1742 |
_count = _count + 8
|
|
1743 |
|
|
1744 |
|
|
1745 |
|
|
1746 |
elif _cb == 0x46:
|
|
1747 |
# print "short int"
|
|
1748 |
_bitpos, _short = dwgutil.get_raw_short(_data, _bitpos)
|
|
1749 |
_eedata.append(_short)
|
|
1750 |
_count = _count + 2
|
|
1751 |
|
|
1752 |
|
|
1753 |
|
|
1754 |
elif _cb == 0x47:
|
|
1755 |
# print "long int"
|
|
1756 |
_bitpos, _long = dwgutil.get_raw_long(_data, _bitpos)
|
|
1757 |
_eedata.append(_long)
|
|
1758 |
print "long: %d" % _long
|
|
1759 |
_count = _count + 4
|
|
1760 |
|
|
1761 |
|
|
1762 |
else:
|
|
1763 |
raise ValueError, "Unexpected code byte: %#02x" % _cb
|
|
1764 |
|
|
1765 |
|
|
1766 |
|
|
1767 |
|
|
1768 |
# These objects may have the graphics bit
|
|
1769 |
#
|
|
1770 |
_gflag = False
|
|
1771 |
_reader = None
|
|
1772 |
|
|
1773 |
if _type < len(_objflags):
|
|
1774 |
_gflag, _reader = _objflags[_type]
|
|
1775 |
|
|
1776 |
|
|
1777 |
if _gflag:
|
|
1778 |
_bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
|
1779 |
|
|
1780 |
if _val is True:
|
|
1781 |
_bitpos, _gsize = dwgutil.get_raw_long(_data, _bitpos)
|
|
1782 |
# print "graphic data bit size: %d" % _gsize
|
|
1783 |
# print "bitpos: %d" % _bitpos
|
|
1784 |
_bgsize = _gsize * 8
|
|
1785 |
_gidata = dwgutil.get_bits(_data, _bgsize, _bitpos)
|
|
1786 |
_bitpos = _bitpos + _bgsize
|
|
1787 |
_ent.setEntityData('graphic_data', _gidata)
|
|
1788 |
|
|
1789 |
|
|
1790 |
_bitpos, _objbsize = dwgutil.get_raw_long(_data, _bitpos)
|
|
1791 |
|
|
1792 |
|
|
1793 |
if _reader is not None:
|
|
1794 |
_reader(_ent, _data, _bitpos)
|
|
1795 |
elif _type in _vmap:
|
|
1796 |
_stype = _vmap[_type]
|
|
1797 |
if _stype == 'HATCH': # where is the data kept?
|
|
1798 |
_bitpos, _val = dwgutil.test_bit(_data, _bitpos)
|
|
1799 |
# print "graphic flag: " + str(_val)
|
|
1800 |
if _stype in _vobjmap:
|
|
1801 |
_vobjmap[_stype](_ent, _data, _bitpos)
|
|
1802 |
else:
|
|
1803 |
# print "unhandled object type: %d" % _type
|
|
1804 |
pass
|
|
1805 |
_objlist.append(_ent)
|
|
1806 |
|
|
1807 |
|
|
1808 |
|
|
1809 |
return _objlist
|
|
1810 |
|
|
1811 |
|
|
1812 |
|
|
1813 |
* */
|
1287 |
1814 |
/**
|
1288 |
1815 |
* Reads a dwg drawing entity (dwg object) given its offset in the file
|
1289 |
1816 |
* */
|
|
1817 |
|
1290 |
1818 |
|
1291 |
|
|
1292 |
1819 |
protected DwgObject readDwgObject(int offset, int index) {
|
1293 |
|
try {
|
|
1820 |
|
|
1821 |
|
|
1822 |
|
|
1823 |
|
|
1824 |
|
|
1825 |
|
|
1826 |
|
|
1827 |
|
|
1828 |
|
|
1829 |
|
|
1830 |
|
|
1831 |
|
|
1832 |
|
|
1833 |
try {
|
1294 |
1834 |
bb.position(offset);
|
1295 |
1835 |
int size = DwgUtil.getModularShort(bb);
|
1296 |
1836 |
|
... | ... | |
1305 |
1845 |
data[i] = dataMachValShort.byteValue();
|
1306 |
1846 |
data[i] = ByteUtils.getUnsigned((byte)data[i]);
|
1307 |
1847 |
}
|
1308 |
|
|
1309 |
|
|
1310 |
1848 |
int bitPos = 0;
|
1311 |
1849 |
ArrayList v = DwgUtil.getBitShort(data, bitPos);
|
1312 |
1850 |
bitPos = ((Integer)v.get(0)).intValue();
|
... | ... | |
1367 |
1905 |
}
|
1368 |
1906 |
}
|
1369 |
1907 |
|
|
1908 |
|
1370 |
1909 |
/*
|
1371 |
1910 |
* TODO Esto est? pesimamente dise?ado.
|
1372 |
1911 |
* Cada objeto DwgObject debe tener un metodo
|
... | ... | |
1453 |
1992 |
//logger.warn("Tipo de objeto pendiente de implementaci�n");
|
1454 |
1993 |
}
|
1455 |
1994 |
}
|
|
1995 |
|
1456 |
1996 |
}
|