Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / org / gvsig / app / project / documents / view / toolListeners / snapping / snappers / IntersectionPointSnapper.java @ 30349

History | View | Annotate | Download (3.29 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 Geometry[] geometries;
24
    public IntersectionPointSnapper() {
25
        System.err.println("Construido IntersectionPoinSnapper");
26
    }
27

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

    
39
        if (geometries == null) {
40
            return null;
41
        }
42

    
43
        for (int i = 0; i < geometries.length; i++) {
44
                Point2D r = intersects(geom, geometries[i], point, tolerance);
45

    
46
            if (r != null) {
47
                result = r;
48
            }
49
        }
50

    
51
        return result;
52
    }
53

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

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

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

    
98
        public void setGeometries(List geoms) {
99
                // TODO Auto-generated method stub
100
                
101
        }
102
}