Revision 2616 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.scale/src/main/java/org/gvsig/vectorediting/lib/prov/scale/ScaleEditingProvider.java
ScaleEditingProvider.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
|
27 | 27 |
|
28 |
import java.awt.Font; |
|
29 | 28 |
import java.awt.geom.AffineTransform; |
30 | 29 |
import java.util.ArrayList; |
31 | 30 |
import java.util.HashMap; |
32 | 31 |
import java.util.List; |
33 | 32 |
import java.util.Map; |
34 |
|
|
35 | 33 |
import org.gvsig.fmap.dal.exception.DataException; |
36 | 34 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
37 | 35 |
import org.gvsig.fmap.dal.feature.Feature; |
... | ... | |
62 | 60 |
import org.gvsig.tools.exception.BaseException; |
63 | 61 |
import org.gvsig.tools.i18n.I18nManager; |
64 | 62 |
import org.gvsig.tools.service.spi.ProviderServices; |
65 |
import org.gvsig.tools.visitor.VisitCanceledException; |
|
66 |
import org.gvsig.tools.visitor.Visitor; |
|
67 | 63 |
import org.gvsig.vectorediting.lib.api.DrawingStatus; |
68 | 64 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameter; |
69 | 65 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE; |
... | ... | |
83 | 79 |
public class ScaleEditingProvider extends AbstractEditingProvider implements |
84 | 80 |
EditingProvider { |
85 | 81 |
|
86 |
private I18nManager i18nManager = ToolsLocator.getI18nManager();
|
|
82 |
private final EditingServiceParameter selectionParameter;
|
|
87 | 83 |
|
88 |
private EditingServiceParameter selectionParameter;
|
|
84 |
private final EditingServiceParameter originPointParameter;
|
|
89 | 85 |
|
90 |
private EditingServiceParameter originPointParameter;
|
|
86 |
private final EditingServiceParameter scaleFactorOrReferencePointParameter;
|
|
91 | 87 |
|
92 |
private EditingServiceParameter scaleFactorOrReferencePointParameter;
|
|
88 |
private final EditingServiceParameter secondScalePointParameter;
|
|
93 | 89 |
|
94 |
private EditingServiceParameter secondScalePointParameter; |
|
95 |
|
|
96 | 90 |
private Map<EditingServiceParameter, Object> values; |
97 | 91 |
|
98 |
private FeatureStore featureStore; |
|
92 |
private final FeatureStore featureStore;
|
|
99 | 93 |
|
100 |
private MapContext mapContext; |
|
94 |
private final MapContext mapContext;
|
|
101 | 95 |
|
102 | 96 |
public ScaleEditingProvider(ProviderServices providerServices, |
103 | 97 |
DynObject parameters) { |
... | ... | |
110 | 104 |
(FeatureStore) parameters |
111 | 105 |
.getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD); |
112 | 106 |
|
107 |
I18nManager i18nManager = ToolsLocator.getI18nManager(); |
|
108 |
|
|
113 | 109 |
this.selectionParameter = |
114 | 110 |
new DefaultEditingServiceParameter("selection", |
115 | 111 |
i18nManager.getTranslation("selection"), TYPE.SELECTION); |
... | ... | |
127 | 123 |
i18nManager.getTranslation("second_scale_point"), TYPE.POSITION); |
128 | 124 |
} |
129 | 125 |
|
126 |
@Override |
|
130 | 127 |
public List<EditingServiceParameter> getParameters() { |
131 | 128 |
List<EditingServiceParameter> list = |
132 |
new ArrayList<EditingServiceParameter>();
|
|
129 |
new ArrayList<>(); |
|
133 | 130 |
list.add(selectionParameter); |
134 | 131 |
list.add(originPointParameter); |
135 | 132 |
list.add(secondScalePointParameter); |
... | ... | |
141 | 138 |
if (param == selectionParameter) { |
142 | 139 |
if (value instanceof FeatureSelection) { |
143 | 140 |
values.put(param, value); |
144 |
return; |
|
145 | 141 |
} |
146 | 142 |
} else if (param == originPointParameter) { |
147 | 143 |
if (value instanceof Point) { |
148 | 144 |
values.put(param, value); |
149 |
return; |
|
150 | 145 |
} |
151 | 146 |
} else if (param == scaleFactorOrReferencePointParameter) { |
152 | 147 |
if (value instanceof Point) { |
... | ... | |
154 | 149 |
throw new InvalidEntryException(null); |
155 | 150 |
} |
156 | 151 |
values.put(param, value); |
157 |
return; |
|
158 | 152 |
} else if (value instanceof Double) { |
159 | 153 |
if ((Double)value == 0.0){ |
160 | 154 |
throw new InvalidEntryException(null); |
161 | 155 |
} |
162 | 156 |
values.put(param, value); |
163 |
return; |
|
164 | 157 |
} |
165 | 158 |
} else if (param == secondScalePointParameter) { |
166 | 159 |
if (value instanceof Point) { |
167 | 160 |
values.put(param, value); |
168 |
return; |
|
169 | 161 |
} |
170 | 162 |
} |
171 | 163 |
} |
172 | 164 |
|
165 |
@Override |
|
173 | 166 |
public EditingServiceParameter next() { |
174 | 167 |
if (values.get(selectionParameter) == null) { |
175 | 168 |
return this.selectionParameter; |
... | ... | |
188 | 181 |
} |
189 | 182 |
|
190 | 183 |
|
184 |
@Override |
|
191 | 185 |
public DrawingStatus getDrawingStatus(Point mousePosition) |
192 | 186 |
throws DrawServiceException { |
193 | 187 |
DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus(); |
... | ... | |
317 | 311 |
// que por problemas de precisi?n de los n?meros en punto flotante |
318 | 312 |
// no se termine de dibujar la regla |
319 | 313 |
while (Math.abs(pos)<=Math.abs(length)*1.01) { |
320 |
Point mark = null; |
|
321 |
mark = geometryManager.createPoint(point.getX()+pos,point.getY(), subType); |
|
314 |
Point mark = geometryManager.createPoint(point.getX()+pos,point.getY(), subType); |
|
322 | 315 |
if (i%10==0){ |
323 | 316 |
drawingStatus.addStatus(mark, ruleUnitySymbol, ""); |
324 | 317 |
ISimpleTextSymbol textSymbol = getTextSymbol(); |
... | ... | |
346 | 339 |
final ISymbol polygonSymbolEditing = editingProviderManager.getSymbol("polygon-symbol-editing"); |
347 | 340 |
final ISymbol auxiliaryPointSymbolEditing = editingProviderManager.getSymbol("auxiliary-point-symbol-editing"); |
348 | 341 |
|
349 |
selected.accept(new Visitor() { |
|
350 |
|
|
351 |
public void visit(Object obj) throws VisitCanceledException, |
|
352 |
BaseException { |
|
353 |
Feature feature = (Feature) obj; |
|
354 |
|
|
355 |
Geometry transformedGeometry = feature.getDefaultGeometry().cloneGeometry(); |
|
356 |
transformedGeometry.transform(at); |
|
357 |
|
|
358 |
ISymbol symbol=null; |
|
359 |
if(transformedGeometry instanceof Curve || transformedGeometry instanceof MultiCurve){ |
|
360 |
symbol = lineSymbolEditing; |
|
361 |
} else if(transformedGeometry instanceof Surface || transformedGeometry instanceof MultiSurface){ |
|
362 |
symbol = polygonSymbolEditing; |
|
363 |
} else if(transformedGeometry instanceof Point || transformedGeometry instanceof MultiPoint){ |
|
364 |
symbol = auxiliaryPointSymbolEditing; |
|
342 |
selected.accept((Object obj) -> { |
|
343 |
Feature feature = (Feature) obj; |
|
344 |
|
|
345 |
ISymbol previewSymbol = getPreviewSymbol(feature); |
|
346 |
|
|
347 |
Geometry transformedGeometry = feature.getDefaultGeometry().cloneGeometry(); |
|
348 |
transformedGeometry.transform(at); |
|
349 |
|
|
350 |
ISymbol symbol=null; |
|
351 |
if(transformedGeometry instanceof Curve || transformedGeometry instanceof MultiCurve){ |
|
352 |
symbol = lineSymbolEditing; |
|
353 |
} else if(transformedGeometry instanceof Surface || transformedGeometry instanceof MultiSurface){ |
|
354 |
symbol = polygonSymbolEditing; |
|
355 |
} else if(transformedGeometry instanceof Point || transformedGeometry instanceof MultiPoint){ |
|
356 |
symbol = auxiliaryPointSymbolEditing; |
|
357 |
} |
|
358 |
if(transformedGeometry instanceof Aggregate){ |
|
359 |
int primitivesNumber = ((Aggregate)transformedGeometry).getPrimitivesNumber(); |
|
360 |
for (int i = 0; i < primitivesNumber; i++) { |
|
361 |
drawingStatus.addStatus(((Aggregate)transformedGeometry).getPrimitiveAt(i), symbol, ""); |
|
362 |
drawingStatus.addStatus(((Aggregate)transformedGeometry).getPrimitiveAt(i), previewSymbol, ""); |
|
365 | 363 |
} |
366 |
if(transformedGeometry instanceof Aggregate){ |
|
367 |
int primitivesNumber = ((Aggregate)transformedGeometry).getPrimitivesNumber(); |
|
368 |
for (int i = 0; i < primitivesNumber; i++) { |
|
369 |
drawingStatus.addStatus(((Aggregate)transformedGeometry).getPrimitiveAt(i), symbol, ""); |
|
370 |
} |
|
371 |
} else { |
|
372 |
drawingStatus.addStatus(transformedGeometry, symbol, ""); |
|
373 |
} |
|
374 |
|
|
375 |
|
|
364 |
} else { |
|
365 |
drawingStatus.addStatus(transformedGeometry, symbol, ""); |
|
366 |
drawingStatus.addStatus(transformedGeometry, previewSymbol, ""); |
|
376 | 367 |
} |
377 | 368 |
}); |
378 | 369 |
} |
... | ... | |
397 | 388 |
} |
398 | 389 |
|
399 | 390 |
|
391 |
@Override |
|
400 | 392 |
public void stop() { |
401 | 393 |
values.clear(); |
402 | 394 |
} |
... | ... | |
408 | 400 |
validateAndInsertValue(parameter, value); |
409 | 401 |
} |
410 | 402 |
|
403 |
@Override |
|
411 | 404 |
public void setValue(Object value) throws InvalidEntryException { |
412 | 405 |
EditingServiceParameter param = next(); |
413 | 406 |
validateAndInsertValue(param, value); |
414 | 407 |
} |
415 | 408 |
|
409 |
@Override |
|
416 | 410 |
public void finishAndStore() throws FinishServiceException { |
417 | 411 |
|
418 | 412 |
FeatureSelection selected = |
... | ... | |
446 | 440 |
final AffineTransform at; |
447 | 441 |
try { |
448 | 442 |
at = getScaleAffineTransform(origin, scale); |
449 |
} catch (GeometryOperationNotSupportedException e) { |
|
443 |
} catch (GeometryOperationNotSupportedException | GeometryOperationException e) {
|
|
450 | 444 |
throw new FinishServiceException(e); |
451 |
} catch (GeometryOperationException e) { |
|
452 |
throw new FinishServiceException(e); |
|
453 | 445 |
} |
454 | 446 |
|
455 | 447 |
try { |
456 |
selected.accept(new Visitor() { |
|
457 |
|
|
458 |
public void visit(Object obj) |
|
459 |
throws VisitCanceledException, BaseException { |
|
460 |
Feature feature = (Feature) obj; |
|
461 |
Geometry geom = |
|
448 |
selected.accept((Object obj) -> { |
|
449 |
Feature feature = (Feature) obj; |
|
450 |
Geometry geom = |
|
462 | 451 |
feature.getDefaultGeometry() |
463 |
.cloneGeometry(); |
|
464 |
geom.transform(at);
|
|
465 |
// Se sustituye la geometr?a original por la
|
|
466 |
// calculada
|
|
467 |
EditableFeature editableFeature =
|
|
452 |
.cloneGeometry();
|
|
453 |
geom.transform(at); |
|
454 |
// Se sustituye la geometr?a original por la |
|
455 |
// calculada |
|
456 |
EditableFeature editableFeature = |
|
468 | 457 |
feature.getEditable(); |
469 |
editableFeature.setDefaultGeometry(geom);
|
|
470 |
((EditingProviderServices) getProviderServices())
|
|
458 |
editableFeature.setDefaultGeometry(geom); |
|
459 |
((EditingProviderServices) getProviderServices()) |
|
471 | 460 |
.updateFeatureInFeatureStore( |
472 |
editableFeature, featureStore); |
|
473 |
} |
|
461 |
editableFeature, featureStore); |
|
474 | 462 |
}); |
475 | 463 |
} catch (BaseException e) { |
476 | 464 |
throw new FinishServiceException(e); |
... | ... | |
483 | 471 |
} |
484 | 472 |
} |
485 | 473 |
|
474 |
@Override |
|
486 | 475 |
public Geometry finish() throws FinishServiceException { |
487 | 476 |
return null; |
488 | 477 |
} |
489 | 478 |
|
479 |
@Override |
|
490 | 480 |
public void start() throws StartServiceException { |
491 |
this.values = new HashMap<EditingServiceParameter, Object>();
|
|
481 |
this.values = new HashMap<>(); |
|
492 | 482 |
FeatureSelection selected = null; |
493 | 483 |
if (featureStore != null) { |
494 | 484 |
try { |
... | ... | |
506 | 496 |
} |
507 | 497 |
} |
508 | 498 |
|
499 |
@Override |
|
509 | 500 |
public String getName() { |
510 | 501 |
return ScaleEditingProviderFactory.PROVIDER_NAME; |
511 | 502 |
} |
Also available in: Unified diff