Revision 8712 trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/util/SnappingCoordinateMap.java

View differences:

SnappingCoordinateMap.java
45 45
 *
46 46
 * $Id$
47 47
 * $Log$
48
 * Revision 1.1  2006-11-09 21:08:32  azabala
48
 * Revision 1.2  2006-11-13 20:41:08  azabala
49 49
 * *** empty log message ***
50 50
 *
51
 * Revision 1.1  2006/11/09 21:08:32  azabala
52
 * *** empty log message ***
51 53
 *
54
 *
52 55
 */
53 56
package com.iver.cit.gvsig.util;
54 57

  
......
65 68
		}
66 69

  
67 70
		public boolean equals(Object obj) {
71
			if(! (obj instanceof SnapCoordinate))
72
				return false;
68 73
			SnapCoordinate other = (SnapCoordinate) obj;
69 74
			return other.distance(this) <= snapTolerance;
70 75
		}
71 76

  
72 77
		public int hashCode() {
73
			return 1; // esto no es eficiente
78
			 int result = 17;
79
			 double xs = simplify(x);
80
			 double ys = simplify(y);
81
			 result = 37 * result + hashCode(xs);
82
			 result = 37 * result + hashCode(ys);
83
			 return result;
84
				
85
//			return 1; // esto no es eficiente
74 86
		}
87
		
88
		public double simplify(double coordinate){
89
			if(scaleFactor == 0d)
90
				return coordinate;
91
			return Math.round(coordinate * scaleFactor) / scaleFactor;
92
		}
75 93
	}
94
	
95
	
76 96

  
77 97
	private double snapTolerance;
98
	private double scaleFactor;
78 99

  
79 100
	public SnappingCoordinateMap(double snapTolerance) {
80 101
		super();
81 102
		this.snapTolerance = snapTolerance;
103
		if(snapTolerance != 0d)
104
			this.scaleFactor = 1d / snapTolerance;
82 105
	}
83 106

  
84 107
	class MinDistCoordComparator implements Comparator {
......
115 138
	public Object get(Object key){
116 139
		if(! (key instanceof Coordinate) )
117 140
			return null;
118
		return get(new SnapCoordinate((Coordinate)key));
141
		return super.get(new SnapCoordinate((Coordinate)key));
119 142
	}
120 143
	
121 144
	public boolean containsKey(Object key){
......
130 153
		Coordinate c0 = new Coordinate(0, 0);
131 154
		Coordinate c1 = new Coordinate(0.01, 0.01);
132 155
		Coordinate c2 = new Coordinate(0.31, 0.41);
156
		Coordinate c3 = new Coordinate(0.29, 0.39);
157
		Coordinate c4 = new Coordinate(0.299, 0.411);
133 158
		map.put(c0, c0);
134 159
		map.put(c1, c1);
135 160
		map.put(c2, c2);
161
		map.put(c3, c3);
162
		map.put(c4, c4);
136 163
		System.out.println(map.size());
137 164
		java.util.Set values = map.entrySet();
138 165
		System.out.println(values.size());
166
		
167
		
168
		
169
		
139 170
	}
140 171

  
141 172
}

Also available in: Unified diff