Revision 75 org.gvsig.dgn/trunk/org.gvsig.dgn/org.gvsig.dgn.provider/src/main/java/org/gvsig/fmap/dal/store/dgn/DGNStoreProvider.java

View differences:

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