Revision 2616 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.extendline/src/main/java/org/gvsig/vectorediting/lib/prov/extendline/ExtendLineEditingProvider.java
ExtendLineEditingProvider.java | ||
---|---|---|
123 | 123 |
"geometry_to_extend_to", TYPE.POSITION); |
124 | 124 |
} |
125 | 125 |
|
126 |
@Override |
|
126 | 127 |
public EditingServiceParameter next() { |
127 | 128 |
if (values.get(selectionParameter) == null) { |
128 | 129 |
return selectionParameter; |
... | ... | |
218 | 219 |
return operation.extendLine(curve, mousePosition, boundaryGeometry); |
219 | 220 |
} |
220 | 221 |
|
222 |
@Override |
|
221 | 223 |
public void stop() throws StopServiceException { |
222 | 224 |
values.clear(); |
223 | 225 |
} |
224 | 226 |
|
227 |
@Override |
|
225 | 228 |
public List<EditingServiceParameter> getParameters() { |
226 | 229 |
List<EditingServiceParameter> parameters = new ArrayList<>(); |
227 | 230 |
parameters.add(selectionParameter); |
... | ... | |
234 | 237 |
validateAndInsertValue(parameter, value); |
235 | 238 |
} |
236 | 239 |
|
240 |
@Override |
|
237 | 241 |
public void setValue(Object value) throws InvalidEntryException { |
238 | 242 |
EditingServiceParameter parameter = next(); |
239 | 243 |
validateAndInsertValue(parameter, value); |
... | ... | |
248 | 252 |
FeatureSelection featureSelection = (FeatureSelection) value; |
249 | 253 |
if (featureSelection.getSelectedCount() > 0) { |
250 | 254 |
try { |
251 |
featureSelection.accept(new Visitor() { |
|
252 |
|
|
253 |
public void visit(Object obj) |
|
254 |
throws VisitCanceledException, BaseException { |
|
255 |
Feature feature = (Feature) obj; |
|
256 |
Geometry geometry |
|
257 |
= feature.getDefaultGeometry(); |
|
258 |
|
|
259 |
if (!isValidGeometryToSelect(geometry)) { |
|
260 |
throw new InvalidEntryException(null); |
|
261 |
} |
|
255 |
featureSelection.accept((Object obj) -> { |
|
256 |
Feature feature = (Feature) obj; |
|
257 |
Geometry geometry |
|
258 |
= feature.getDefaultGeometry(); |
|
259 |
|
|
260 |
if (!isValidGeometryToSelect(geometry)) { |
|
261 |
throw new InvalidEntryException(null); |
|
262 | 262 |
} |
263 | 263 |
}); |
264 | 264 |
values.put(parameter, featureSelection); |
... | ... | |
295 | 295 |
if (geoType.isTypeOf(CURVE)) { |
296 | 296 |
if (geometry instanceof Line ) { |
297 | 297 |
Line line = (Line) geometry; |
298 |
if (line.isClosed()) { |
|
299 |
return false; |
|
300 |
} |
|
301 |
return true; |
|
298 |
return !line.isClosed(); |
|
302 | 299 |
} |
303 | 300 |
if (geometry instanceof Arc ) { |
304 | 301 |
Arc arc = (Arc) geometry; |
305 |
if (arc.getInitPoint().equals(arc.getEndPoint())) { |
|
306 |
return false; |
|
307 |
} |
|
308 |
return true; |
|
302 |
return !arc.getInitPoint().equals(arc.getEndPoint()); |
|
309 | 303 |
} |
310 | 304 |
return false; |
311 | 305 |
} |
... | ... | |
346 | 340 |
return this.featureStore.getFeatureSet(queryByGeometry); |
347 | 341 |
} |
348 | 342 |
|
343 |
@Override |
|
349 | 344 |
public Geometry finish() throws FinishServiceException { |
350 | 345 |
return null; |
351 | 346 |
} |
352 | 347 |
|
348 |
@Override |
|
353 | 349 |
public void finishAndStore() throws FinishServiceException { |
354 | 350 |
FeatureSelection selection = (FeatureSelection) values.get(selectionParameter); |
355 | 351 |
Geometry geometryToExtendTo = (Geometry) values.get(geometryToExtendToParameter); |
356 | 352 |
if (selection != null && geometryToExtendTo != null) { |
357 | 353 |
|
358 | 354 |
try { |
359 |
selection.accept(new Visitor() { |
|
360 |
@Override |
|
361 |
public void visit(Object obj) throws VisitCanceledException, BaseException { |
|
362 |
Feature feature = (Feature) obj; |
|
363 |
Geometry geometry = feature.getDefaultGeometry(); |
|
364 |
EditableFeature eFeature = feature.getEditable(); |
|
365 |
|
|
366 |
if (geometry instanceof MultiCurve) { |
|
367 |
|
|
368 |
// Create new multicurve geometry |
|
369 |
MultiCurve extendedMultiCurve |
|
370 |
= createMultiCurve(geometry); |
|
371 |
|
|
372 |
// Iterate overs primitives and execute extend |
|
373 |
// line operation |
|
374 |
MultiCurve multiCurve = (MultiCurve) geometry; |
|
375 |
|
|
376 |
for (int i = 0; i < multiCurve |
|
377 |
.getPrimitivesNumber(); i++) { |
|
378 |
|
|
379 |
Curve curve = multiCurve.getCurveAt(i); |
|
380 |
Curve extendedCurve |
|
381 |
= extendLine(insertedPoint, curve, geometryToExtendTo); |
|
382 |
extendedMultiCurve.addCurve(extendedCurve); |
|
383 |
} |
|
384 |
|
|
385 |
eFeature.setDefaultGeometry(extendedMultiCurve); |
|
386 |
|
|
387 |
} else if (geometry instanceof Curve) { |
|
355 |
selection.accept((Object obj) -> { |
|
356 |
Feature feature = (Feature) obj; |
|
357 |
Geometry geometry = feature.getDefaultGeometry(); |
|
358 |
EditableFeature eFeature = feature.getEditable(); |
|
359 |
|
|
360 |
if (geometry instanceof MultiCurve) { |
|
361 |
|
|
362 |
// Create new multicurve geometry |
|
363 |
MultiCurve extendedMultiCurve |
|
364 |
= createMultiCurve(geometry); |
|
365 |
|
|
366 |
// Iterate overs primitives and execute extend |
|
367 |
// line operation |
|
368 |
MultiCurve multiCurve = (MultiCurve) geometry; |
|
369 |
|
|
370 |
for (int i = 0; i < multiCurve |
|
371 |
.getPrimitivesNumber(); i++) { |
|
372 |
|
|
373 |
Curve curve = multiCurve.getCurveAt(i); |
|
388 | 374 |
Curve extendedCurve |
389 |
= extendLine(insertedPoint, (Curve) geometry, geometryToExtendTo);
|
|
390 |
eFeature.setDefaultGeometry(extendedCurve);
|
|
375 |
= extendLine(insertedPoint, curve, geometryToExtendTo);
|
|
376 |
extendedMultiCurve.addCurve(extendedCurve);
|
|
391 | 377 |
} |
392 |
|
|
393 |
selection.update(eFeature); |
|
378 |
|
|
379 |
eFeature.setDefaultGeometry(extendedMultiCurve); |
|
380 |
|
|
381 |
} else if (geometry instanceof Curve) { |
|
382 |
Curve extendedCurve |
|
383 |
= extendLine(insertedPoint, (Curve) geometry, geometryToExtendTo); |
|
384 |
eFeature.setDefaultGeometry(extendedCurve); |
|
394 | 385 |
} |
395 | 386 |
|
387 |
selection.update(eFeature); |
|
396 | 388 |
}); |
397 | 389 |
|
398 | 390 |
} catch (BaseException e) { |
... | ... | |
416 | 408 |
return extendedMultiCurve; |
417 | 409 |
} |
418 | 410 |
|
411 |
@Override |
|
419 | 412 |
public void start() throws StartServiceException, InvalidEntryException { |
420 | 413 |
this.values = new HashMap<>(); |
421 | 414 |
FeatureSelection selected = null; |
... | ... | |
435 | 428 |
} |
436 | 429 |
} |
437 | 430 |
|
431 |
@Override |
|
438 | 432 |
public String getName() { |
439 | 433 |
return ExtendLineEditingProviderFactory.PROVIDER_NAME; |
440 | 434 |
} |
Also available in: Unified diff