Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2031 / applications / appgvSIG / src / org / gvsig / app / project / documents / view / toolListeners / snapping / snappers / IntersectionPointSnapper.java @ 36052

History | View | Annotate | Download (3.31 KB)

1
package org.gvsig.app.project.documents.view.toolListeners.snapping.snappers;
2

    
3
import java.awt.geom.Point2D;
4
import java.util.List;
5

    
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.exception.CreateGeometryException;
8
import org.gvsig.fmap.geom.primitive.Curve;
9
import org.gvsig.fmap.geom.util.Converter;
10
import org.gvsig.fmap.mapcontrol.PrimitivesDrawer;
11
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperGeometriesVectorial;
12
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.impl.AbstractSnapper;
13

    
14

    
15
/**
16
 * Intersection point snapper.
17
 *
18
 * @author Vicente Caballero Navarro
19
 */
20
public class IntersectionPointSnapper extends AbstractSnapper
21
    implements ISnapperGeometriesVectorial {
22
        private static int maxPointsGeom=200;
23
        private List<Geometry> geometries;
24

    
25
    /* (non-Javadoc)
26
     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getSnapPoint(Point2D point,
27
     * IGeometry geom,double tolerance, Point2D lastPointEntered)
28
     */
29
    public Point2D getSnapPoint(Point2D point, Geometry geom,
30
        double tolerance, Point2D lastPointEntered) {
31
            if (!(geom instanceof Curve)){
32
                    return null;
33
            }
34
            Point2D result = null;
35

    
36
        if (geometries == null) {
37
            return null;
38
        }
39

    
40
        for (int i = 0; i < geometries.size(); i++) {
41
                Point2D r = intersects(geom, geometries.get(i), point, tolerance);
42

    
43
            if (r != null) {
44
                result = r;
45
            }
46
        }
47

    
48
        return result;
49
    }
50

    
51
    private Point2D intersects(Geometry g1, Geometry g2, Point2D point,
52
            double tolerance) {
53
            com.vividsolutions.jts.geom.Geometry g1JTS = Converter.geometryToJts(g1);
54
            com.vividsolutions.jts.geom.Geometry g2JTS = Converter.geometryToJts(g2);
55
            //If there is a topology error don't intersects
56
            if ((g1JTS == null) || (g2JTS == null)){
57
                return null;
58
            }
59
            if (g1JTS.getNumPoints()>maxPointsGeom || g2JTS.getNumPoints()>maxPointsGeom){
60
                    return null;
61
            }
62
            com.vividsolutions.jts.geom.Geometry intersection=g1JTS.intersection(g2JTS);
63
            Geometry g =null;
64
                try {
65
                        g = Converter.jtsToGeometry(intersection);
66
                } catch (CreateGeometryException e) {
67
                        e.printStackTrace();
68
                }
69
            if (g!=null && g.getType()==Geometry.TYPES.POINT){
70
                    return g.getHandlers(Geometry.SELECTHANDLER)[0].getPoint();
71
            }
72
            return null;
73
    }
74
    
75
    /*
76
     * (non-Javadoc)
77
     * @see org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper#draw(org.gvsig.fmap.mapcontrol.PrimitivesDrawer, java.awt.geom.Point2D)
78
     */
79
    public void draw(PrimitivesDrawer primitivesDrawer, Point2D pPixels) {
80
            primitivesDrawer.setColor(getColor());
81

    
82
        int half = getSizePixels() / 2;
83
        int x1 = (int) (pPixels.getX() - half);
84
        int x2 = (int) (pPixels.getX() + half);
85
        int y1 = (int) (pPixels.getY() - half);
86
        int y2 = (int) (pPixels.getY() + half);
87

    
88
        primitivesDrawer.drawLine(x1, y1, x2, y2);
89
        primitivesDrawer.drawLine(x1, y2, x2, y1);
90
    }
91
    
92
   /* (non-Javadoc)
93
     * @see com.iver.cit.gvsig.gui.cad.snapping.ISnapper#getToolTipText()
94
     */
95
    public String getToolTipText() {
96
        return "intersection_point";
97
    }
98

    
99
        public void setGeometries(List geoms) {
100
            this.geometries = geoms;                
101
        }
102
}