Revision 9889

View differences:

trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/readers/DwgFileV14Reader.java
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
}
trunk/libraries/libDwg/src/com/iver/cit/jdwglib/dwg/DwgClass.java
35 35
package com.iver.cit.jdwglib.dwg;
36 36

  
37 37
/**
38
 * This class implements a DWG Class
39
 * 
40
 * @author jmorell
38
 * Entry in the CLASSES section of a dwg file.
39
 * @author azabala
41 40
 */
42 41
public class DwgClass {
42
	
43
	int classNum;
44
    int version;
45
    String appName;
46
    String cPlusPlusName;
47
    String dxfName;
48
    boolean isZombie;
49
    int id;
43 50
    
51
    
52
    public DwgClass(int classNum, int version, String appName,
53
    		String cPlusPlusName, String dxfName, boolean isZombie, int id){
54
    	
55
    	this.classNum = classNum;
56
        this.version = version;
57
        this.appName = appName;
58
        this.cPlusPlusName = cPlusPlusName;
59
        this.dxfName = dxfName;
60
        this.isZombie = isZombie;
61
        this.id = id;
62
    }
63
    
64
    
65
    
66
    
67
	/**
68
	 * @return Returns the appName.
69
	 */
70
	public String getAppName() {
71
		return appName;
72
	}
73
	/**
74
	 * @param appName The appName to set.
75
	 */
76
	public void setAppName(String appName) {
77
		this.appName = appName;
78
	}
79
	/**
80
	 * @return Returns the classNum.
81
	 */
82
	public int getClassNum() {
83
		return classNum;
84
	}
85
	/**
86
	 * @param classNum The classNum to set.
87
	 */
88
	public void setClassNum(int classNum) {
89
		this.classNum = classNum;
90
	}
91
	/**
92
	 * @return Returns the cPlusPlusName.
93
	 */
94
	public String getCPlusPlusName() {
95
		return cPlusPlusName;
96
	}
97
	/**
98
	 * @param plusPlusName The cPlusPlusName to set.
99
	 */
100
	public void setCPlusPlusName(String plusPlusName) {
101
		cPlusPlusName = plusPlusName;
102
	}
103
	/**
104
	 * @return Returns the dxfName.
105
	 */
106
	public String getDxfName() {
107
		return dxfName;
108
	}
109
	/**
110
	 * @param dxfName The dxfName to set.
111
	 */
112
	public void setDxfName(String dxfName) {
113
		this.dxfName = dxfName;
114
	}
115
	/**
116
	 * @return Returns the id.
117
	 */
118
	public int getId() {
119
		return id;
120
	}
121
	/**
122
	 * @param id The id to set.
123
	 */
124
	public void setId(int id) {
125
		this.id = id;
126
	}
127
	/**
128
	 * @return Returns the isZombie.
129
	 */
130
	public boolean isZombie() {
131
		return isZombie;
132
	}
133
	/**
134
	 * @param isZombie The isZombie to set.
135
	 */
136
	public void setZombie(boolean isZombie) {
137
		this.isZombie = isZombie;
138
	}
139
	/**
140
	 * @return Returns the version.
141
	 */
142
	public int getVersion() {
143
		return version;
144
	}
145
	/**
146
	 * @param version The version to set.
147
	 */
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff