Revision 75 org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/DGNStoreProvider.java
DGNStoreProvider.java | ||
---|---|---|
239 | 239 |
if (envelope == null) { |
240 | 240 |
return null; |
241 | 241 |
} |
242 |
Envelope newEnvelope; |
|
243 |
if (envelope.getDimension() == 2) { |
|
244 |
newEnvelope = geomManager.createEnvelope(SUBTYPES.GEOM2D); |
|
245 |
} else { |
|
246 |
newEnvelope = geomManager.createEnvelope(SUBTYPES.GEOM3D); |
|
247 |
|
|
242 |
try { |
|
243 |
return (Envelope) envelope.clone(); |
|
244 |
} catch (CloneNotSupportedException ex) { |
|
245 |
logger.warn("Can't clone envelope.",ex); |
|
246 |
return null; |
|
248 | 247 |
} |
249 |
newEnvelope.setLowerCorner(envelope.getLowerCorner()); |
|
250 |
newEnvelope.setUpperCorner(envelope.getUpperCorner()); |
|
251 |
return newEnvelope; |
|
252 | 248 |
} |
253 | 249 |
} |
254 | 250 |
|
... | ... | |
783 | 779 |
// } |
784 | 780 |
// return Double.valueOf(value); |
785 | 781 |
// } |
786 |
public void load() throws DataException { |
|
782 |
public void load() throws DataException, CreateEnvelopeException {
|
|
787 | 783 |
switch (getDGNParameters().getLoadMode()) { |
788 | 784 |
case LOAD_MODE_PLAIN: |
789 | 785 |
default: |
... | ... | |
801 | 797 |
BufferedWriter xmlbfw = null; |
802 | 798 |
|
803 | 799 |
this.envelope = null; |
800 |
|
|
804 | 801 |
boolean ignoreZs = getDGNParameters().ignoreZs(); |
805 |
|
|
802 |
boolean useZAsElevation = getDGNParameters().useZAsElevation(); |
|
803 |
boolean applyRoundToElevation = getDGNParameters().getApplyRoundToElevation(); |
|
804 |
double elevationFactor = getDGNParameters().geElevationFactor(); |
|
805 |
|
|
806 | 806 |
try { |
807 | 807 |
if (getDGNParameters().getXMLFile() != null) { |
808 | 808 |
File xmlfile = getDGNParameters().getXMLFile(); |
... | ... | |
827 | 827 |
|
828 | 828 |
DGNReader dgnReader = new DGNReader(file.getAbsolutePath(), getDGNParameters().logErrors()); |
829 | 829 |
|
830 |
if ( dgnReader.getInfo().dimension == 2 || getDGNParameters().ignoreZs() ) { |
|
831 |
envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D); |
|
832 |
} else { |
|
833 |
envelope = geomManager.createEnvelope(SUBTYPES.GEOM3D); |
|
834 |
} |
|
835 |
|
|
830 | 836 |
FeatureType type = getDefaultType().getNotEditableCopy(); |
831 | 837 |
|
832 | 838 |
filter = new Filter(getDGNParameters(), dgnReader); |
833 | 839 |
|
834 | 840 |
int counterOfElement = 0; |
835 | 841 |
DGNElemComplexHeader parentElement = null; |
842 |
|
|
843 |
double zvalue = 0; |
|
844 |
|
|
836 | 845 |
for (int id = 0; id < dgnReader.getNumEntities(); id++) { |
837 | 846 |
dgnReader.DGNGotoElement(id); |
838 | 847 |
|
... | ... | |
890 | 899 |
} else { |
891 | 900 |
data.set(ID_FIELD_PARENT, parentElement.getID()); |
892 | 901 |
} |
893 |
|
|
902 |
zvalue = 0; |
|
894 | 903 |
try { |
895 | 904 |
switch (elemento.stype) { |
896 | 905 |
case DGNFileHeader.DGNST_COMPLEX_HEADER: |
... | ... | |
902 | 911 |
DGNElemMultiPoint dgnmultipoint = (DGNElemMultiPoint) elemento; |
903 | 912 |
if (dgnmultipoint.isPoint()) { |
904 | 913 |
DGNPoint p = dgnmultipoint.getPoint(0); |
905 |
Point point = createPoint3D(p.x, p.y, ignoreZs ? 0 : p.z);
|
|
914 |
Point point = createPoint3D(p.getX(), p.getY(), ignoreZs ? 0 : p.getZ());
|
|
906 | 915 |
data.setDefaultGeometry(point); |
907 |
|
|
916 |
zvalue = p.getZ(); |
|
908 | 917 |
} else { |
909 | 918 |
OrientablePrimitive geom = null; |
910 | 919 |
if (dgnmultipoint.isPolygon()) { |
... | ... | |
933 | 942 |
// Invertimos el orden porque es un agujero |
934 | 943 |
for (int i = numVertices - 2; i >= first; i--) { |
935 | 944 |
DGNPoint p = dgnmultipoint.getVertex(i); |
936 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : p.getZ()); |
|
945 |
zvalue = p.getZ(); |
|
946 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : zvalue); |
|
937 | 947 |
} |
938 | 948 |
} else { |
939 | 949 |
for (int i = first; i < numVertices; i++) { |
940 | 950 |
DGNPoint p = dgnmultipoint.getVertex(i); |
941 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : p.getZ()); |
|
951 |
zvalue = p.getZ(); |
|
952 |
geom.addVertex(p.getX(), p.getY(), ignoreZs ? 0 : zvalue); |
|
942 | 953 |
} |
943 | 954 |
} |
944 | 955 |
data.setDefaultGeometry(geom); |
... | ... | |
973 | 984 |
-dgnarc.sweepang, |
974 | 985 |
Arc2D.OPEN); |
975 | 986 |
|
987 |
zvalue = dgnarc.origin.getZ(); |
|
988 |
|
|
976 | 989 |
GeneralPathX elShapeArc = new GeneralPathX(elArco.getPathIterator(null)); |
977 | 990 |
|
978 | 991 |
// Transformamos el GeneralPahtX porque si transformamos |
... | ... | |
1000 | 1013 |
|
1001 | 1014 |
case DGNFileHeader.DGNST_TEXT: |
1002 | 1015 |
DGNElemText dgntext = (DGNElemText) elemento; |
1016 |
zvalue = dgntext.getPoint().getZ(); |
|
1003 | 1017 |
Point point = createPoint3D( |
1004 | 1018 |
dgntext.getPoint().getX(), |
1005 | 1019 |
dgntext.getPoint().getY(), |
1006 |
ignoreZs ? 0 : dgntext.getPoint().getZ()
|
|
1020 |
ignoreZs ? 0 : zvalue
|
|
1007 | 1021 |
); |
1008 | 1022 |
data.set(ID_FIELD_HEIGHTTEXT, dgntext.getHeight()); |
1009 | 1023 |
data.set(ID_FIELD_HEIGHTTEXTRAW, dgntext.getRawHeight()); |
... | ... | |
1020 | 1034 |
} catch (Exception ex) { |
1021 | 1035 |
logger.warn("Can't process element", ex); |
1022 | 1036 |
} |
1037 |
if( useZAsElevation ) { |
|
1038 |
if( !DGNStoreProvider.equals(elevationFactor, 1, 0.00001) ) { |
|
1039 |
zvalue = zvalue*elevationFactor; |
|
1040 |
} |
|
1041 |
if( applyRoundToElevation ) { |
|
1042 |
zvalue = Math.round(zvalue); |
|
1043 |
} |
|
1044 |
data.set(ID_FIELD_ELEVATION, zvalue); |
|
1045 |
} |
|
1023 | 1046 |
addFeature(data, dgnReader); |
1024 | 1047 |
} // for |
1025 | 1048 |
|
... | ... | |
1116 | 1139 |
|
1117 | 1140 |
} |
1118 | 1141 |
|
1119 |
public void load_group1() throws DataException { |
|
1142 |
public void load_group1() throws DataException, CreateEnvelopeException {
|
|
1120 | 1143 |
|
1121 | 1144 |
this.envelope = null; |
1122 | 1145 |
|
... | ... | |
1143 | 1166 |
|
1144 | 1167 |
} |
1145 | 1168 |
DGNReader dgnReader = new DGNReader(file.getAbsolutePath()); |
1169 |
if ( dgnReader.getInfo().dimension == 2) { |
|
1170 |
envelope = geomManager.createEnvelope(Geometry.SUBTYPES.GEOM2D); |
|
1171 |
} else { |
|
1172 |
envelope = geomManager.createEnvelope(SUBTYPES.GEOM3D); |
|
1173 |
} |
|
1146 | 1174 |
|
1147 | 1175 |
FeatureType type = getDefaultType().getNotEditableCopy(); |
1148 | 1176 |
int fTypeSize = type.size(); |
... | ... | |
1834 | 1862 |
return resource; |
1835 | 1863 |
} |
1836 | 1864 |
|
1865 |
public static boolean equals(double a, double b, double precision) { |
|
1866 |
double v = Math.abs(a-b); |
|
1867 |
return v < precision; |
|
1868 |
} |
|
1837 | 1869 |
} |
Also available in: Unified diff