Revision 4507

View differences:

org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonMustNotOverlapPolygonRule.java
32 32
import org.gvsig.fmap.dal.feature.FeatureSet;
33 33
import org.gvsig.fmap.geom.Geometry;
34 34
import org.gvsig.fmap.geom.GeometryUtils;
35
import org.gvsig.fmap.geom.aggregate.Aggregate;
36
import org.gvsig.fmap.geom.complex.Complex;
35 37
import org.gvsig.tools.ToolsLocator;
36 38
import org.gvsig.tools.dynobject.DynObject;
37 39
import org.gvsig.tools.i18n.I18nManager;
......
217 219
                        if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
218 220
                            I18nManager i18n = ToolsLocator.getI18nManager();
219 221
                            Geometry error = polygon.intersection(otherPolygon);
220
                            report.addLine(this,
221
                                    theDataSet,
222
                                    null,
223
                                    polygon,
224
                                    error,
225
                                    feature1.getReference(),
226
                                    otherReference,
227
                                    false,
228
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
229
                            );
222
                            if(error != null){
223
                                if (error instanceof Complex) {
224
                                    error = ((Complex) error).createAggregate(
225
                                            Geometry.TYPES.MULTIPOLYGON,
226
                                            (Geometry g) -> GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, g.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, g.getGeometryType().getType())
227
                                    );
228
                                    if(((Aggregate)error).getPrimitivesNumber() == 0){
229
                                        continue;
230
                                    }
231
                                } else if(!(GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, error.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, error.getGeometryType().getType()))) {
232
                                    continue;
233
                                }
234

  
235
                                report.addLine(this,
236
                                        theDataSet,
237
                                        null,
238
                                        polygon,
239
                                        error,
240
                                        feature1.getReference(),
241
                                        otherReference,
242
                                        false,
243
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
244
                                );
245
                            }
230 246
                        }
231 247
                    }
232 248
                }
......
249 265
                            if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
250 266
                                I18nManager i18n = ToolsLocator.getI18nManager();
251 267
                                Geometry error = polygon.intersection(otherPolygon);
252
                                report.addLine(this,
253
                                        theDataSet,
254
                                        null,
255
                                        polygon,
256
                                        error,
257
                                        feature1.getReference(),
258
                                        feature.getReference(),
259
                                        false,
260
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
261
                                );
268
                                if (error != null) {
269
                                    if (error instanceof Complex) {
270
                                        error = ((Complex) error).createAggregate(
271
                                                Geometry.TYPES.MULTIPOLYGON,
272
                                                (Geometry g) -> GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, g.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, g.getGeometryType().getType())
273
                                        );
274
                                        if (((Aggregate) error).getPrimitivesNumber() == 0) {
275
                                            continue;
276
                                        }
277
                                    } else if (!(GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, error.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, error.getGeometryType().getType()))) {
278
                                        continue;
279
                                    }
280
                                    report.addLine(this,
281
                                            theDataSet,
282
                                            null,
283
                                            polygon,
284
                                            error,
285
                                            feature1.getReference(),
286
                                            feature.getReference(),
287
                                            false,
288
                                            i18n.getTranslation("_The_polygon_overlay_with_other")
289
                                    );
290
                                }
262 291
                            }
263 292
                        }
264 293
                    }
org.gvsig.topology/trunk/org.gvsig.topology/org.gvsig.topology.lib/org.gvsig.topology.lib.impl/src/main/java/org/gvsig/topology/rule/PolygonMustNotOverlapWithPolygonRule.java
32 32
import org.gvsig.fmap.dal.feature.FeatureSet;
33 33
import org.gvsig.fmap.geom.Geometry;
34 34
import org.gvsig.fmap.geom.GeometryUtils;
35
import org.gvsig.fmap.geom.aggregate.Aggregate;
36
import org.gvsig.fmap.geom.complex.Complex;
35 37
import org.gvsig.tools.ToolsLocator;
36 38
import org.gvsig.tools.dynobject.DynObject;
37 39
import org.gvsig.tools.i18n.I18nManager;
......
160 162
                        if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
161 163
                            I18nManager i18n = ToolsLocator.getI18nManager();
162 164
                            Geometry error = polygon.intersection(otherPolygon);
163
                            report.addLine(this,
164
                                    thisDataSet,
165
                                    otherDataSet,
166
                                    polygon,
167
                                    error,
168
                                    feature1.getReference(),
169
                                    otherFeature.getReference(),
170
                                    false,
171
                                    i18n.getTranslation("_The_polygon_overlay_with_other")
172
                            );
165

  
166
                            if (error != null) {
167
                                if (error instanceof Complex) {
168
                                    error = ((Complex) error).createAggregate(
169
                                            Geometry.TYPES.MULTIPOLYGON,
170
                                            (Geometry g) -> GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, g.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, g.getGeometryType().getType())
171
                                    );
172
                                    if (((Aggregate) error).getPrimitivesNumber() == 0) {
173
                                        continue;
174
                                    }
175
                                } else if (!(GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, error.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, error.getGeometryType().getType()))) {
176
                                    continue;
177
                                }
178

  
179
                                report.addLine(this,
180
                                        thisDataSet,
181
                                        otherDataSet,
182
                                        polygon,
183
                                        error,
184
                                        feature1.getReference(),
185
                                        otherFeature.getReference(),
186
                                        false,
187
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
188
                                );
189
                            }
173 190
                        }
174 191
                    }
175 192
                }
......
192 209
                            if (GeometryUtils.overlaps(polygon, otherPolygon, theTolerance)) {
193 210
                                I18nManager i18n = ToolsLocator.getI18nManager();
194 211
                                Geometry error = polygon.intersection(otherPolygon);
195
                                report.addLine(this,
196
                                        thisDataSet,
197
                                        otherDataSet,
198
                                        polygon,
199
                                        error,
200
                                        feature1.getReference(),
201
                                        otherFeature.getReference(),
202
                                        false,
203
                                        i18n.getTranslation("_The_polygon_overlay_with_other")
204
                                );
212
                                if (error != null) {
213
                                    if (error instanceof Complex) {
214
                                        error = ((Complex) error).createAggregate(
215
                                                Geometry.TYPES.MULTIPOLYGON,
216
                                                (Geometry g) -> GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, g.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, g.getGeometryType().getType())
217
                                        );
218
                                        if (((Aggregate) error).getPrimitivesNumber() == 0) {
219
                                            continue;
220
                                        }
221
                                    } else if (!(GeometryUtils.isSubtype(Geometry.TYPES.MULTISURFACE, error.getGeometryType().getType()) || GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, error.getGeometryType().getType()))) {
222
                                        continue;
223
                                    }
224
                                    report.addLine(this,
225
                                            thisDataSet,
226
                                            otherDataSet,
227
                                            polygon,
228
                                            error,
229
                                            feature1.getReference(),
230
                                            otherFeature.getReference(),
231
                                            false,
232
                                            i18n.getTranslation("_The_polygon_overlay_with_other")
233
                                    );
234
                                }
205 235
                            }
206 236
                        }
207 237
                    }

Also available in: Unified diff