Revision 328

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.split/src/main/java/org/gvsig/vectorediting/lib/prov/split/operation/splitsurface/SurfaceSplitOperation.java
35 35
import com.vividsolutions.jts.geom.LineString;
36 36
import com.vividsolutions.jts.geom.LinearRing;
37 37
import com.vividsolutions.jts.geom.Location;
38
import com.vividsolutions.jts.geom.MultiLineString;
38 39
import com.vividsolutions.jts.geom.Polygon;
39 40
import com.vividsolutions.jts.geomgraph.DirectedEdge;
40 41
import com.vividsolutions.jts.geomgraph.Node;
......
102 103
        com.vividsolutions.jts.geom.Geometry jtsSplitter =
103 104
            (com.vividsolutions.jts.geom.Geometry) splitter.invokeOperation(
104 105
                "toJTS", null);
106
        
107
        if(jtsSplitter instanceof MultiLineString && jtsSplitter.getNumGeometries() == 1){
108
            jtsSplitter = jtsSplitter.getGeometryN(0);
109
        }
105 110

  
106 111
        if (jtsGeom instanceof Polygon && jtsSplitter instanceof LineString) {
107 112
            SplitGraph graph =
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.split/src/main/java/org/gvsig/vectorediting/lib/prov/split/SplitEditingProvider.java
35 35
import org.gvsig.fmap.dal.feature.FeatureSelection;
36 36
import org.gvsig.fmap.dal.feature.FeatureStore;
37 37
import org.gvsig.fmap.geom.Geometry;
38
import org.gvsig.fmap.geom.Geometry.TYPES;
38 39
import org.gvsig.fmap.geom.aggregate.MultiCurve;
39 40
import org.gvsig.fmap.geom.aggregate.MultiPrimitive;
40
import org.gvsig.fmap.geom.aggregate.MultiSurface;
41 41
import org.gvsig.fmap.geom.exception.CreateGeometryException;
42 42
import org.gvsig.fmap.geom.operation.GeometryOperationException;
43 43
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
......
280 280
                    Feature feature = (Feature) it.next();
281 281
                    Geometry geometryToBeSplitted =
282 282
                        feature.getDefaultGeometry();
283
                    int type = geometryToBeSplitted.getType();
283
                    GeometryType geoType =
284
                        geometryToBeSplitted.getGeometryType();
284 285

  
285
                    switch (type) {
286
                    case SURFACE:
287
                    case CURVE:
286
                    if (geoType.isTypeOf(TYPES.SURFACE)
287
                        || geoType.isTypeOf(TYPES.CURVE)) {
288

  
288 289
                        MultiPrimitive splittedGeometries =
289 290
                            (MultiPrimitive) split(
290 291
                                (Primitive) geometryToBeSplitted, splitter);
291 292

  
292
                        EditableFeature eFeature =
293
                            editingProviderServices.getFeatureCopyWithoutPK(
294
                                featureStore, feature);
295
                        eFeature.setDefaultGeometry(splittedGeometries);
296
                        editingProviderServices.insertFeatureIntoFeatureStore(
297
                            eFeature, featureStore);
298
                        break;
299
                    case MULTICURVE:
300
                    case MULTISURFACE:
293
                        copyAlfanumericDataAndInsert(splittedGeometries,
294
                            feature);
301 295

  
296
                    } else if (geoType.isTypeOf(TYPES.MULTISURFACE)
297
                        || geoType.isTypeOf(TYPES.MULTICURVE)) {
298

  
302 299
                        MultiPrimitive multiPrimitive =
303 300
                            (MultiPrimitive) geometryToBeSplitted;
304 301

  
305 302
                        for (int i = 0; i < multiPrimitive
306 303
                            .getPrimitivesNumber(); i++) {
307 304

  
308
                            splittedGeometries =
305
                            MultiPrimitive splittedGeometries =
309 306
                                (MultiPrimitive) split(
310 307
                                    multiPrimitive.getPrimitiveAt(i), splitter);
311 308

  
312
                            for (int j = 0; j < splittedGeometries
313
                                .getPrimitivesNumber(); j++) {
314

  
315
                                eFeature =
316
                                    editingProviderServices
317
                                        .getFeatureCopyWithoutPK(featureStore,
318
                                            feature);
319
                                eFeature.setDefaultGeometry(splittedGeometries
320
                                    .getPrimitiveAt(j));
321
                                editingProviderServices
322
                                    .insertFeatureIntoFeatureStore(eFeature,
323
                                        featureStore);
324
                            }
309
                            copyAlfanumericDataAndInsert(splittedGeometries,
310
                                feature);
325 311
                        }
326
                        break;
327
                    default:
328 312
                    }
329 313
                    editingProviderServices.deleteFeatureFromFeatureStore(
330 314
                        feature, featureStore);
......
342 326
        }
343 327
    }
344 328

  
329
    private void copyAlfanumericDataAndInsert(MultiPrimitive multiPrimitive,
330
        Feature feature) throws DataException {
331
        EditingProviderServices editingProviderServices =
332
            (EditingProviderServices) getProviderServices();
333

  
334
        for (int j = 0; j < multiPrimitive.getPrimitivesNumber(); j++) {
335

  
336
            EditableFeature eFeature =
337
                editingProviderServices.getFeatureCopyWithoutPK(featureStore,
338
                    feature);
339
            eFeature.setDefaultGeometry(multiPrimitive.getPrimitiveAt(j));
340
            editingProviderServices.insertFeatureIntoFeatureStore(eFeature,
341
                featureStore);
342
        }
343
    }
344

  
345 345
    private Geometry split(Primitive geometry, Geometry splitter)
346 346
        throws CreateGeometryException, GeometryOperationNotSupportedException,
347 347
        GeometryOperationException {

Also available in: Unified diff