Revision 2141 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingProviderServices.java
DefaultEditingProviderServices.java | ||
---|---|---|
26 | 26 |
import java.util.Iterator; |
27 | 27 |
import java.util.List; |
28 | 28 |
import java.util.Map; |
29 |
import org.geotools.measure.AngleFormat; |
|
29 | 30 |
import org.gvsig.euclidean.EuclideanLine2D; |
30 | 31 |
import org.gvsig.expressionevaluator.GeometryExpressionBuilder; |
31 | 32 |
import org.gvsig.fmap.dal.DALLocator; |
... | ... | |
61 | 62 |
import org.gvsig.fmap.mapcontext.layers.CancelationException; |
62 | 63 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
63 | 64 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
65 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol; |
|
64 | 66 |
import org.gvsig.tools.ToolsLocator; |
65 | 67 |
import org.gvsig.tools.exception.BaseException; |
66 | 68 |
import org.gvsig.tools.i18n.I18nManager; |
67 | 69 |
import org.gvsig.tools.service.spi.AbstractProviderServices; |
70 |
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus; |
|
71 |
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator; |
|
72 |
import org.gvsig.vectorediting.lib.spi.EditingProviderManager; |
|
68 | 73 |
import org.gvsig.vectorediting.lib.spi.EditingProviderServices; |
69 | 74 |
import org.slf4j.Logger; |
70 | 75 |
import org.slf4j.LoggerFactory; |
... | ... | |
462 | 467 |
} else { |
463 | 468 |
//return the director vector of the line |
464 | 469 |
res[0] = createPoint(0.0, b1, subtype); |
465 |
Double mod = Math.sqrt(1+Math.pow(m1,2));
|
|
466 |
Double x = 1/mod;
|
|
467 |
Double y = m1*x + b1;
|
|
470 |
Double mod = Math.sqrt(1 + Math.pow(m1, 2));
|
|
471 |
Double x = 1 / mod;
|
|
472 |
Double y = m1 * x + b1;
|
|
468 | 473 |
res[1] = createPoint(x, y, subtype); |
469 | 474 |
} |
470 | 475 |
|
... | ... | |
611 | 616 |
try { |
612 | 617 |
double tolerance = mapContext.getViewPort().toMapDistance(mapContext.getLayers().getDefaultTolerance()); |
613 | 618 |
Geometry buffer = point.buffer(tolerance); |
614 |
|
|
619 |
|
|
615 | 620 |
DataManager dataManager = DALLocator.getDataManager(); |
616 | 621 |
DALExpressionBuilder dalBuilder = dataManager.createDALExpressionBuilder(); |
617 | 622 |
GeometryExpressionBuilder builder = dalBuilder.expression(); |
... | ... | |
619 | 624 |
String sortBy = builder.ST_Distance(builder.geometry(buffer), dalBuilder.geometry()).toString(); |
620 | 625 |
|
621 | 626 |
Feature f; |
622 |
f = store.findFirst(filter, sortBy, true);
|
|
623 |
if(f!=null){
|
|
627 |
f = store.findFirst(filter, sortBy, true); |
|
628 |
if (f != null) {
|
|
624 | 629 |
geometry = f.getDefaultGeometry(); |
625 | 630 |
} |
626 |
|
|
631 |
|
|
627 | 632 |
} catch (Exception ex) { |
628 |
LOGGER.warn("Can't get geometry on point ("+point.getX()+","+point.getY(), ex);
|
|
633 |
LOGGER.warn("Can't get geometry on point (" + point.getX() + "," + point.getY(), ex);
|
|
629 | 634 |
} |
630 |
|
|
635 |
|
|
631 | 636 |
return geometry; |
632 | 637 |
} |
633 | 638 |
|
634 | 639 |
@Override |
635 | 640 |
public Geometry getGeometryOfVisibleLayers(Point point, FeatureStore store, MapContext mapContext) { |
636 |
|
|
641 |
|
|
637 | 642 |
// Search in the store itself |
638 | 643 |
Geometry geometry = this.getGeometry(point, store, mapContext); |
639 | 644 |
// Search in the store for the layers that are in edit |
640 |
if(geometry == null){
|
|
641 |
for( Iterator<FLayer> iterator = mapContext.getLayers().deepiterator(); iterator.hasNext(); ) {
|
|
645 |
if (geometry == null) {
|
|
646 |
for (Iterator<FLayer> iterator = mapContext.getLayers().deepiterator(); iterator.hasNext();) {
|
|
642 | 647 |
FLayer layer = iterator.next(); |
643 |
if(layer instanceof FLyrVect){
|
|
648 |
if (layer instanceof FLyrVect) {
|
|
644 | 649 |
FLyrVect vectLayer = (FLyrVect) layer; |
645 |
if(vectLayer.getFeatureStore()!=store && vectLayer.isEditing()){
|
|
646 |
geometry = this.getGeometry(point, vectLayer.getFeatureStore(), mapContext);
|
|
647 |
if(geometry != null){
|
|
650 |
if (vectLayer.getFeatureStore() != store && vectLayer.isEditing()) {
|
|
651 |
geometry = this.getGeometry(point, vectLayer.getFeatureStore(), mapContext); |
|
652 |
if (geometry != null) {
|
|
648 | 653 |
break; |
649 | 654 |
} |
650 | 655 |
} |
... | ... | |
652 | 657 |
} |
653 | 658 |
} |
654 | 659 |
// Search in the store for the active layers |
655 |
if(geometry == null){
|
|
660 |
if (geometry == null) {
|
|
656 | 661 |
FLayer[] activeLayers = mapContext.getLayers().getActives(); |
657 | 662 |
for (FLayer activeLayer : activeLayers) { |
658 |
if(activeLayer instanceof FLyrVect){
|
|
663 |
if (activeLayer instanceof FLyrVect) {
|
|
659 | 664 |
FLyrVect activeVectLayer = (FLyrVect) activeLayer; |
660 |
if(activeVectLayer.getFeatureStore()!=store && !activeVectLayer.isEditing()){
|
|
661 |
geometry = this.getGeometry(point, activeVectLayer.getFeatureStore(), mapContext);
|
|
662 |
if(geometry != null){
|
|
665 |
if (activeVectLayer.getFeatureStore() != store && !activeVectLayer.isEditing()) {
|
|
666 |
geometry = this.getGeometry(point, activeVectLayer.getFeatureStore(), mapContext); |
|
667 |
if (geometry != null) {
|
|
663 | 668 |
break; |
664 | 669 |
} |
665 | 670 |
} |
... | ... | |
668 | 673 |
} |
669 | 674 |
return geometry; |
670 | 675 |
} |
671 |
|
|
672 |
|
|
676 |
|
|
677 |
@Override |
|
678 |
public void addAngleToDrawingStatus(DefaultDrawingStatus drawingStatus, ISymbol textSymbol, Point vertex, Point ray1, Point ray2, int subtype) throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException { |
|
679 |
EditingProviderManager editingProviderManager |
|
680 |
= EditingProviderLocator.getProviderManager(); |
|
681 |
ISymbol auxiliaryLineSymbolEditing = editingProviderManager.getSymbol("auxiliary-line-symbol-editing"); |
|
682 |
|
|
683 |
double angleRay1 = GeometryUtils.calculateAngle(vertex, ray1); |
|
684 |
double angle = GeometryUtils.calculateAngle(vertex, ray1, ray2); |
|
685 |
double radius = vertex.distance(ray1) / 4; |
|
686 |
Arc auxArc = GeometryUtils.createArc( |
|
687 |
vertex, |
|
688 |
radius, |
|
689 |
GeometryUtils.calculateAngle(vertex, ray1), |
|
690 |
angle, |
|
691 |
subtype |
|
692 |
); |
|
693 |
drawingStatus.addStatus(auxArc, auxiliaryLineSymbolEditing, ""); |
|
694 |
|
|
695 |
Point measurePoint = GeometryUtils.createPoint(vertex, radius, angleRay1 + angle / 2); |
|
696 |
|
|
697 |
// drawingStatus.addStatus(measurePoint, textSymbol, new AngleFormat("DD?MM'").format(Math.toDegrees(angle))); |
|
698 |
drawingStatus.addStatus(measurePoint, textSymbol, new AngleFormat("DD.ddd?").format(Math.toDegrees(angle))); |
|
699 |
|
|
700 |
} |
|
673 | 701 |
} |
Also available in: Unified diff