Revision 8712

View differences:

trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java
354 354
					"Error_escritura_resultados");
355 355
			String errorDescription = PluginServices.getText(this,
356 356
					"Error_preparar_escritura_resultados");
357
			return null;
357 358
		}
358 359
		geoprocess.setResultLayerProperties(writer, schemaManager);
359 360
		HashMap params = new HashMap();
trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/graph/gui/wizard/NetPage0.java
45 45
 *
46 46
 * $Id$
47 47
 * $Log$
48
 * Revision 1.7  2006-11-09 21:08:32  azabala
48
 * Revision 1.8  2006-11-13 20:41:08  azabala
49 49
 * *** empty log message ***
50 50
 *
51
 * Revision 1.7  2006/11/09 21:08:32  azabala
52
 * *** empty log message ***
51 53
 *
54
 *
52 55
 */
53 56
package com.iver.cit.gvsig.graph.gui.wizard;
54 57

  
58
import java.awt.Color;
59

  
55 60
import javax.swing.ButtonGroup;
61
import javax.swing.JComponent;
56 62
import javax.swing.JEditorPane;
63
import javax.swing.JFormattedTextField;
57 64
import javax.swing.JRadioButton;
58 65
import javax.swing.JSpinner;
59 66
import javax.swing.SpinnerNumberModel;
......
162 169
		SpinnerNumberModel spinnerModel =
163 170
			new SpinnerNumberModel(0.01, 0d, 100d, 0.01 );
164 171
		snapTolerance = new JSpinner(spinnerModel);
165
		
166
		
172
//		 Disable keyboard edits in the spinner
173
//		JFormattedTextField tf = ((JSpinner.DefaultEditor) snapTolerance
174
//				.getEditor()).getTextField();
175
//		tf.setEditable(false);
176
//		tf.setBackground(Color.white);
177
		               
167 178
		ButtonGroup snapGroup = new ButtonGroup();
168 179
		snapGroup.add(originalCoordinatesBtn);
169 180
		snapGroup.add(snappedCoordinatesBtn);
trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.5  2006-11-10 13:22:57  azabala
48
* Revision 1.6  2006-11-13 20:41:08  azabala
49
* *** empty log message ***
50
*
51
* Revision 1.5  2006/11/10 13:22:57  azabala
49 52
* better syncronization of clean and build network (use of pipetask)
50 53
*
51 54
* Revision 1.4  2006/11/09 21:08:32  azabala
......
65 68
package com.iver.cit.gvsig.topology.lineclean.fmap;
66 69

  
67 70
import java.io.File;
71
import java.io.IOException;
68 72
import java.util.Map;
69 73

  
70 74
import com.iver.andami.PluginServices;
75
import com.iver.cit.gvsig.fmap.DriverException;
71 76
import com.iver.cit.gvsig.fmap.MapContext;
72 77
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
73 78
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
74 79
import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
75 80
import com.iver.cit.gvsig.fmap.drivers.LayerDefinition;
76 81
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
82
import com.iver.cit.gvsig.fmap.edition.EditionException;
77 83
import com.iver.cit.gvsig.fmap.edition.IWriter;
78 84
import com.iver.cit.gvsig.fmap.edition.ShpSchemaManager;
79 85
import com.iver.cit.gvsig.fmap.edition.writers.shp.MultiShpWriter;
......
82 88
import com.iver.cit.gvsig.fmap.layers.FLayer;
83 89
import com.iver.cit.gvsig.fmap.layers.FLayers;
84 90
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
91
import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
92
import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
93
import com.iver.cit.gvsig.fmap.layers.layerOperations.VectorialData;
85 94
import com.iver.cit.gvsig.fmap.operations.strategies.Strategy;
86 95
import com.iver.cit.gvsig.fmap.operations.strategies.StrategyManager;
96
import com.iver.cit.gvsig.fmap.operations.strategies.VisitException;
87 97
import com.iver.cit.gvsig.geoprocess.core.fmap.AbstractGeoprocess;
88 98
import com.iver.cit.gvsig.geoprocess.core.fmap.DefinitionUtils;
89 99
import com.iver.cit.gvsig.geoprocess.core.fmap.FeaturePersisterProcessor2;
......
91 101
import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
92 102
import com.iver.cit.gvsig.project.documents.view.gui.View;
93 103
import com.iver.utiles.swing.threads.AbstractMonitorableTask;
104
import com.iver.utiles.swing.threads.Cancellable;
94 105
import com.iver.utiles.swing.threads.IMonitorableTask;
95 106
import com.iver.utiles.swing.threads.IPipedTask;
96 107

  
......
139 150
			throw new GeoprocessException(
140 151
					"Operacion de CLEAN sin especificar capa de resultados");
141 152
		}
153
		try {
154
			if(firstLayer.getSource().getShapeCount() == 0){
155
				throw new GeoprocessException(
156
				"Capa de entrada vacia");
157
			}
158
		} catch (DriverIOException e) {
159
			throw new GeoprocessException(
160
			"Error al verificar si la capa est? vac?a");
161
		} 
142 162
	}
143 163

  
144 164
	public void process() throws GeoprocessException {
......
187 207
					"LineClean._Progress_Message"));
188 208

  
189 209
		}
190

  
210
	
211
		/**
212
		 * Verifies cancelation events, and return a boolean flag if processes must
213
		 * be stopped for this cancelations events.
214
		 * 
215
		 * @param cancel
216
		 * @param va
217
		 * @param visitor
218
		 * @return
219
		 * @throws DriverIOException
220
		 */
221
		protected boolean verifyCancelation(ReadableVectorial va) {
222
			if (isCanceled()) {
223
				try {
224
					va.stop();
225
				} finally {
226
					return true;
227
				}
228
			}
229
			return false;
230
		}
231
		
232
		
191 233
		public void run() throws Exception {
192 234
			processor =
193 235
				new FeaturePersisterProcessor2(writer);
......
226 268
			intersectsProcessor = new 
227 269
				FeaturePersisterProcessor2(intersectionsWriter);
228 270
			
229
			
230 271
			FBitSet selection = null;
231 272
			LineCleanVisitor visitor = 
232 273
				new LineCleanVisitor(processor,
233 274
						             intersectsProcessor,
234 275
						onlyFirstLayerSelection, 
235 276
						resultLayerDefinition,
236
						intersectDefinition);
237
			Strategy strategy = StrategyManager.getStrategy(firstLayer);
277
						intersectDefinition,
278
						firstLayer,
279
						firstLayer.getRecordset());
280
			
238 281
			try {
239
				strategy.process(visitor, this);
240
			} catch (Exception e) {
241
				throw new GeoprocessException("Error al ejecutar el geoproceso line clean ", e);
282
				processor.start();
283
				intersectsProcessor.start();
284
				
285
				ReadableVectorial va = firstLayer.getSource();
286
				va.start();
287
				for (int i = 0; i < va.getShapeCount(); i++) {// for each geometry
288
					if (verifyCancelation(va)) {
289
						intersectsProcessor.finish();
290
						return;
291
					}
292
					if(selection != null){
293
						if (selection.get(i)) {
294
								reportStep();
295
								visitor.visit(va.getShape(i), i);
296
						}
297
							
298
					}else{
299
						reportStep();
300
						visitor.visit(va.getShape(i), i);
301
					}
302
				}// for
303
				va.stop();
304
				processor.finish();
305
				intersectsProcessor.finish();
306
				
307
				
308
			} catch (DriverIOException e) {
309
				e.printStackTrace();
242 310
			}
243 311
		}
244 312

  
trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanVisitor.java
45 45
 *
46 46
 * $Id$
47 47
 * $Log$
48
 * Revision 1.4  2006-10-19 16:06:48  azabala
48
 * Revision 1.5  2006-11-13 20:41:08  azabala
49 49
 * *** empty log message ***
50 50
 *
51
 * Revision 1.4  2006/10/19 16:06:48  azabala
52
 * *** empty log message ***
53
 *
51 54
 * Revision 1.3  2006/10/17 18:27:24  azabala
52 55
 * *** empty log message ***
53 56
 *
......
170 173
	int fid = 0;
171 174

  
172 175
	public LineCleanVisitor(FeatureProcessor processor,
173
			FeaturePersisterProcessor2 intersectsProcessor, boolean cleanOnlySelection, ILayerDefinition layerDefinition, ILayerDefinition intersectDefinition) {
176
			FeaturePersisterProcessor2 intersectsProcessor, 
177
									boolean cleanOnlySelection, 
178
									ILayerDefinition layerDefinition, 
179
									ILayerDefinition intersectDefinition, 
180
									FLyrVect firstLayer, 
181
									SelectableDataSource source) {
174 182
		this.featureProcessor = processor;
175 183
		this.cleanOnlySelection = cleanOnlySelection;
176 184
		processedFeatures = new FBitSet();
177 185
		this.layerDefinition = layerDefinition;
178 186
		this.intersectProcessor = intersectsProcessor;
179 187
		this.intersectDefinition = intersectDefinition;
188
		this.layerToClean = firstLayer;
189
		this.recordset = source;
190
		this.strategy = StrategyManager.getStrategy(layerToClean);
180 191
	}
181 192

  
182 193
	public void setLayerDefinition(ILayerDefinition layerDefinition) {
trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/util/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