Statistics
| Revision:

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

History | View | Annotate | Download (3.31 KB)

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

    
3
import java.awt.Graphics;
4
import java.awt.geom.PathIterator;
5
import java.awt.geom.Point2D;
6
import java.util.ArrayList;
7
import java.util.List;
8

    
9
import org.gvsig.fmap.geom.Geometry;
10
import org.gvsig.fmap.geom.exception.CreateGeometryException;
11
import org.gvsig.fmap.geom.primitive.Curve;
12
import org.gvsig.fmap.geom.util.Converter;
13
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.AbstractSnapper;
14
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapperGeometriesVectorial;
15

    
16
import com.vividsolutions.jts.geom.Coordinate;
17
import com.vividsolutions.jts.geom.LineSegment;
18

    
19

    
20
/**
21
 * Intersection point snapper.
22
 *
23
 * @author Vicente Caballero Navarro
24
 */
25
public class IntersectionPointSnapper extends AbstractSnapper
26
    implements ISnapperGeometriesVectorial {
27
        private static int maxPointsGeom=200;
28
        private Geometry[] geometries;
29
    public IntersectionPointSnapper() {
30
        System.err.println("Construido IntersectionPoinSnapper");
31
    }
32

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

    
44
        if (geometries == null) {
45
            return null;
46
        }
47

    
48
        for (int i = 0; i < geometries.length; i++) {
49
                Point2D r = intersects(geom, geometries[i], point, tolerance);
50

    
51
            if (r != null) {
52
                result = r;
53
            }
54
        }
55

    
56
        return result;
57
    }
58

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

    
85
        int half = getSizePixels() / 2;
86
        int x1 = (int) (pPixels.getX() - half);
87
        int x2 = (int) (pPixels.getX() + half);
88
        int y1 = (int) (pPixels.getY() - half);
89
        int y2 = (int) (pPixels.getY() + half);
90

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

    
101
        public void setGeometries(List geoms) {
102
                // TODO Auto-generated method stub
103
                
104
        }
105
}