Revision 494 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.splitline/src/main/java/org/gvsig/vectorediting/lib/prov/splitline/SplitLineEditingProvider.java
SplitLineEditingProvider.java | ||
---|---|---|
341 | 341 |
|
342 | 342 |
MultiCurve multiCurve = (MultiCurve) lineToSplit; |
343 | 343 |
|
344 |
multiCurve = |
|
345 |
splitMultiCurve(multiCurve, projectedPoint); |
|
344 |
List<Geometry> result = splitMultiCurve(multiCurve, projectedPoint); |
|
346 | 345 |
|
347 |
if (multiCurve != null) { |
|
348 |
// Copy alfanumeric data and insert new feature |
|
349 |
EditableFeature eFeature = |
|
350 |
feature.getEditable(); |
|
351 |
eFeature.setDefaultGeometry(multiCurve); |
|
352 |
|
|
346 |
if (result != null && result.size() > 0) { |
|
347 |
|
|
348 |
// Deletes old feature |
|
353 | 349 |
editingProviderService |
354 |
.updateFeatureInFeatureStore(eFeature,
|
|
350 |
.deleteFeatureFromFeatureStore(feature,
|
|
355 | 351 |
featureStore); |
352 |
|
|
353 |
for (Geometry geometry : result) { |
|
354 |
// Copy alfanumeric data and insert new feature |
|
355 |
EditableFeature eFeature = |
|
356 |
editingProviderService.getFeatureCopyWithoutPK( |
|
357 |
featureStore, feature); |
|
358 |
|
|
359 |
eFeature.setDefaultGeometry(geometry); |
|
360 |
editingProviderService |
|
361 |
.insertFeatureIntoFeatureStore(eFeature, |
|
362 |
featureStore); |
|
363 |
} |
|
356 | 364 |
} |
357 | 365 |
} |
358 | 366 |
} |
... | ... | |
366 | 374 |
} |
367 | 375 |
} |
368 | 376 |
|
369 |
private MultiCurve splitMultiCurve(MultiCurve multiCurveToSplit,
|
|
377 |
private List<Geometry> splitMultiCurve(MultiCurve multiCurveToSplit,
|
|
370 | 378 |
Point projectedPoint) throws GeometryOperationNotSupportedException, |
371 | 379 |
GeometryOperationException, CreateGeometryException, LocatorException, |
372 | 380 |
DataException { |
373 |
|
|
381 |
|
|
382 |
List<Geometry> result = new ArrayList<Geometry>(); |
|
383 |
|
|
374 | 384 |
Curve curveToSplit = null; |
375 | 385 |
|
376 | 386 |
for (int i = 0; i < multiCurveToSplit.getPrimitivesNumber(); i++) { |
... | ... | |
381 | 391 |
} |
382 | 392 |
|
383 | 393 |
Curve[] splitedCurves = splitCurve(curveToSplit, projectedPoint); |
394 |
|
|
395 |
for(int i = 0; i < splitedCurves.length; i++){ |
|
396 |
result.add(splitedCurves[i]); |
|
397 |
} |
|
384 | 398 |
|
385 | 399 |
EditingProviderServices editingProviderService = |
386 | 400 |
(EditingProviderServices) getProviderServices(); |
... | ... | |
390 | 404 |
|
391 | 405 |
for (int i = 0; i < multiCurveToSplit.getPrimitivesNumber(); i++) { |
392 | 406 |
|
393 |
if (intersects(multiCurveToSplit.getCurveAt(i), projectedPoint)) { |
|
394 |
multiCurve.addCurve(splitedCurves[0]); |
|
395 |
multiCurve.addCurve(splitedCurves[1]); |
|
396 |
} else { |
|
407 |
if (!intersects(multiCurveToSplit.getCurveAt(i), projectedPoint)) { |
|
397 | 408 |
multiCurve.addCurve(multiCurveToSplit.getCurveAt(i)); |
398 | 409 |
} |
399 | 410 |
} |
400 |
|
|
401 |
return multiCurve; |
|
411 |
|
|
412 |
result.add(multiCurve); |
|
413 |
|
|
414 |
return result; |
|
402 | 415 |
} |
403 | 416 |
|
404 | 417 |
private Curve[] splitCurve(Curve curveToSplit, Point projectedPoint) |
Also available in: Unified diff