Revision 4637 trunk/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/SelectionCADTool.java

View differences:

SelectionCADTool.java
43 43
import java.awt.Color;
44 44
import java.awt.Graphics;
45 45
import java.awt.Graphics2D;
46
import java.awt.Image;
46 47
import java.awt.event.InputEvent;
47 48
import java.awt.geom.Point2D;
48
import java.awt.geom.Rectangle2D;
49
import java.io.IOException;
49 50
import java.util.ArrayList;
50 51

  
51 52
import com.iver.andami.PluginServices;
52 53
import com.iver.cit.gvsig.CADExtension;
53
import com.iver.cit.gvsig.fmap.DriverException;
54
import com.iver.cit.gvsig.fmap.ViewPort;
54 55
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
55 56
import com.iver.cit.gvsig.fmap.core.Handler;
56 57
import com.iver.cit.gvsig.fmap.core.IFeature;
57 58
import com.iver.cit.gvsig.fmap.core.IGeometry;
58 59
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
60
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
59 61
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
60 62
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
61
import com.iver.cit.gvsig.fmap.layers.FBitSet;
62 63
import com.iver.cit.gvsig.gui.cad.CADTool;
63 64
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
64 65
import com.iver.cit.gvsig.gui.cad.tools.smc.SelectionCADToolContext;
......
77 78

  
78 79
	private Point2D firstPoint;
79 80

  
80
	private Point2D lastPoint;
81
	//private Point2D lastPoint;
81 82

  
82 83
	private String tool = "selection";
83 84

  
84 85
	private String nextState;
86
// Registros de los que se ha sleccionado alg?n handler.
87
	private ArrayList rowselectedHandlers=new ArrayList();
85 88

  
86 89
	/**
87 90
	 * Crea un nuevo LineCADTool.
......
157 160
		 * FBitSet selection = getCadToolAdapter().getVectorialAdapter()
158 161
		 * .getSelection();
159 162
		 */
160
		VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
161
				.getEditionManager().getActiveLayerEdited();
163
		VectorialLayerEdited vle = getVLE();
164
		VectorialEditableAdapter vea=vle.getVEA();
162 165
		ArrayList selectedHandler = vle.getSelectedHandler();
163 166
		ArrayList selectedRow = vle.getSelectedRow();
164 167
		// ArrayList selectedRowIndex = vle.getSelectedRowIndex();
......
170 173

  
171 174

  
172 175
		} else if (status.equals("Selection.WithHandlers")) {
176
			vea.startComplexRow();
173 177
			for (int i = 0; i < selectedRow.size(); i++) {
174 178
				IRowEdited row = (IRowEdited) selectedRow.get(i);
175 179
				// int index = ((Integer) selectedRowIndex.get(i)).intValue();
......
181 185
					h.set(x, y);
182 186
				}
183 187

  
184
				modifyFeature(row.getIndex(), (IFeature) row.getLinkedRow());
188
				modifyFeature(row.getIndex(), (IFeature) row.getLinkedRow().cloneRow());
185 189
			}
190
			try {
191
				vea.endComplexRow();
192
			} catch (IOException e) {
193
				// TODO Auto-generated catch block
194
				e.printStackTrace();
195
			} catch (DriverIOException e) {
196
				// TODO Auto-generated catch block
197
				e.printStackTrace();
198
			}
186 199
		}
187 200
	}
188 201

  
......
193 206
	 * @return numFeatures selected
194 207
	 */
195 208
	public int selectWithSecondPoint(double x, double y, InputEvent event) {
196
		VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
197
			.getEditionManager().getActiveLayerEdited();
209
		VectorialLayerEdited vle = getVLE();
210
		PluginServices.getMDIManager().setWaitCursor();
211
		vle.selectWithSecondPoint(x,y);
198 212
		ArrayList selectedRow = vle.getSelectedRow();
199

  
200
		lastPoint = new Point2D.Double(x, y);
201
		FBitSet selection = getCadToolAdapter().getVectorialAdapter()
202
			.getSelection();
203
		selection.clear();
204
		selectedRow.clear();
205

  
206
		double x1;
207
		double y1;
208
		double w1;
209
		double h1;
210

  
211
		if (firstPoint.getX() < lastPoint.getX()) {
212
			x1 = firstPoint.getX();
213
			w1 = lastPoint.getX() - firstPoint.getX();
214
		} else {
215
			x1 = lastPoint.getX();
216
			w1 = firstPoint.getX() - lastPoint.getX();
217
		}
218

  
219
		if (firstPoint.getY() < lastPoint.getY()) {
220
			y1 = firstPoint.getY();
221
			h1 = lastPoint.getY() - firstPoint.getY();
222
		} else {
223
			y1 = lastPoint.getY();
224
			h1 = firstPoint.getY() - lastPoint.getY();
225
		}
226

  
227
		Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1);
228

  
229
		VectorialEditableAdapter vea = getCadToolAdapter()
230
				.getVectorialAdapter();
231
		String strEPSG = getCadToolAdapter().getMapControl().getViewPort()
232
				.getProjection().getAbrev().substring(5);
233
		IRowEdited[] feats;
234
		try {
235
			feats = vea.getFeatures(rect, strEPSG);
236

  
237
			for (int i = 0; i < feats.length; i++) {
238
				IGeometry geom = ((IFeature) feats[i].getLinkedRow())
239
						.getGeometry();
240

  
241
				if (firstPoint.getX() < lastPoint.getX()) {
242
					if (rect.contains(geom.getBounds2D())) {
243
						selectedRow.add(feats[i]);
244
						selection.set(feats[i].getIndex(), true);
245
					}
246
				} else {
247
					if (geom.intersects(rect)) { // , 0.1)){
248
						selectedRow.add(feats[i]);
249
						selection.set(feats[i].getIndex(), true);
250
					}
251
				}
252
			}
253
		} catch (DriverException e) {
254
			// TODO Auto-generated catch block
255
			e.printStackTrace();
256
		}
257

  
258 213
		PluginServices.getMDIManager().restoreCursor();
259 214
		if (selectedRow.size() > 0) {
260 215
			nextState = "Selection.WithSelectedFeatures";
......
283 238
		 * FBitSet selection = getCadToolAdapter().getVectorialAdapter()
284 239
		 * .getSelection();
285 240
		 */
286
		VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
287
				.getEditionManager().getActiveLayerEdited();
241
		VectorialLayerEdited vle = getVLE();
288 242
		ArrayList selectedHandler = vle.getSelectedHandler();
289 243
		ArrayList selectedRow = vle.getSelectedRow();
244
		ViewPort vp=vle.getLayer().getFMap().getViewPort();
290 245
		// ArrayList selectedRowIndex = vle.getSelectedRowIndex();
291 246

  
292 247
		/*
......
294 249
		 * selectedRowIndex.clear(); selectedHandler.clear(); }
295 250
		 */
296 251

  
297
		drawHandlers(g, selectedRow, getCadToolAdapter().getMapControl()
298
				.getViewPort().getAffineTransform());
252
		//drawHandlers(g, selectedRow, getCadToolAdapter().getMapControl()
253
		//		.getViewPort().getAffineTransform());
299 254

  
300 255
		if (status.equals("Selection.SecondPoint")) {
301 256
			// Dibuja el rect?ngulo de selecci?n
......
307 262
			elShape.lineTo(firstPoint.getX(), y);
308 263
			elShape.lineTo(firstPoint.getX(), firstPoint.getY());
309 264
			ShapeFactory.createPolyline2D(elShape).draw((Graphics2D) g,
310
					getCadToolAdapter().getMapControl().getViewPort(),
265
					vp,
311 266
					CADTool.selectSymbol);
267
			Image img = vle.getSelectionImage();
268
	        g.drawImage(img, 0, 0, null);
269
	        return;
312 270
		} else if (status.equals("Selection.WithHandlers")) {
313 271
			// Movemos los handlers que hemos seleccionado
314 272
			// previamente dentro del m?todo select()
......
319 277

  
320 278
			// Y una vez movidos los v?rtices (handles)
321 279
			// redibujamos la nueva geometr?a.
322
			for (int i = 0; i < selectedRow.size(); i++) {
323
				IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
280
			for (int i = 0; i < rowselectedHandlers.size(); i++) {
281
				IRowEdited rowEd = (IRowEdited) rowselectedHandlers.get(i);
324 282
				IGeometry geom = ((IFeature) rowEd.getLinkedRow())
325 283
						.getGeometry().cloneGeometry();
326 284
				g.setColor(Color.gray);
327
				geom.draw((Graphics2D) g, getCadToolAdapter().getMapControl()
328
						.getViewPort(), CADTool.modifySymbol);
285
				geom.draw((Graphics2D) g, vp, CADTool.modifySymbol);
329 286
			}
287
			return;
288
		}else{
289
			try{
290
			Image imgSel = vle.getSelectionImage();
291
	        if (imgSel!=null)
292
			g.drawImage(imgSel, 0, 0, null);
293
	        Image imgHand = vle.getHandlersImage();
294
	        if (imgHand!=null)
295
			g.drawImage(imgHand, 0, 0, null);
296
			}catch (Exception e) {
297
			}
330 298
		}
299
//		if (firstPoint != null) {
300
//			int dx = vp.fromMapDistance(x - firstPoint.getX());
301
//			int dy = -vp.fromMapDistance(y - firstPoint.getY());
302
//			Image img = vle.getImage();
303
//			g.drawImage(img, 0, 0, null);
304
//		}
331 305
	}
332 306

  
333 307
	/**
......
339 313
	 *            Diferent option.
340 314
	 */
341 315
	public void addOption(String s) {
342
		// TODO Auto-generated method stub
343 316
	}
344 317

  
345 318
	/*
......
384 357
				.getState();
385 358

  
386 359
		String status = actualState.getName();
387
		VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
388
				.getEditionManager().getActiveLayerEdited();
389
		ArrayList selectedRow = vle.getSelectedRow();
360
		VectorialLayerEdited vle = getVLE();
390 361

  
362

  
391 363
		if ((status.equals("Selection.FirstPoint"))
392 364
				|| (status.equals("Selection.WithSelectedFeatures"))) {
393
			firstPoint = new Point2D.Double(x, y);
394

  
395
			FBitSet selection = getCadToolAdapter().getVectorialAdapter()
396
				.getSelection();
397
			ArrayList selectedHandler = vle.getSelectedHandler();
398
			selectedRow.clear();
399
			selectedHandler.clear();
400

  
401
			// ArrayList selectedRowIndex = vle.getSelectedRowIndex();
402

  
403
			// Se comprueba si se pincha en una gemometr?a
404 365
			PluginServices.getMDIManager().setWaitCursor();
405

  
406
			double tam = getCadToolAdapter().getMapControl().getViewPort()
407
					.toMapDistance(tolerance);
408
			Rectangle2D rect = new Rectangle2D.Double(firstPoint.getX() - tam,
409
					firstPoint.getY() - tam, tam * 2, tam * 2);
410
			VectorialEditableAdapter vea = getCadToolAdapter()
411
					.getVectorialAdapter();
412
			String strEPSG = getCadToolAdapter().getMapControl().getViewPort()
413
					.getProjection().getAbrev().substring(5);
414
			IRowEdited[] feats;
415

  
416
			try {
417
				feats = vea.getFeatures(rect, strEPSG);
418
				selection.clear();
419

  
420
				for (int i = 0; i < feats.length; i++) {
421
					IFeature feat = (IFeature) feats[i].getLinkedRow();
422
					IGeometry geom = feat.getGeometry();
423

  
424
					if (geom.intersects(rect)) { // , 0.1)){
425
						selection.set(feats[i].getIndex(), true);
426
						selectedRow.add(feats[i]);
427
					}
428
				}
429
			} catch (DriverException e1) {
430
				e1.printStackTrace();
431
			}
366
			firstPoint = new Point2D.Double(x, y);
367
			vle.selectWithPoint(x,y);
432 368
			PluginServices.getMDIManager().restoreCursor();
433 369
		}
370
		ArrayList selectedRow = vle.getSelectedRow();
434 371
		if (selectedRow.size() > 0) {
435 372
			nextState = "Selection.WithSelectedFeatures";
436 373
			return true;
437 374
		} else {
438
			// if (nextState == null)
439 375
			{
440 376
				nextState = "Selection.SecondPoint";
441 377
				return true;
442 378
			}
443 379
		}
444
		/* if (nextState.equals("Selection.SecondPoint"))
445
			nextState = "Selection.FirstPoint";
446
		else
447
			nextState = "Selection.SecondPoint";
448

  
449
		return true; // Truco de Vicente */
450 380
	}
451 381

  
452 382
	public int selectHandlers(double x, double y, InputEvent event) {
453
		// firstPoint = new Point2D.Double(x, y);
454

  
455 383
		Point2D auxPoint = new Point2D.Double(x, y);
456 384

  
457
		VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
458
				.getEditionManager().getActiveLayerEdited();
385
		VectorialLayerEdited vle = getVLE();
459 386
		ArrayList selectedHandler = vle.getSelectedHandler();
460 387
		ArrayList selectedRow = vle.getSelectedRow();
461 388
		System.out.println("DENTRO DE selectHandlers. selectedRow.size= "
......
469 396
				.toMapDistance(tolerance);
470 397

  
471 398
		Handler[] handlers = null;
399
		rowselectedHandlers.clear();
472 400
		for (int i = 0; i < selectedRow.size(); i++) {
473 401
			IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
474 402

  
......
477 405
			// y miramos los handlers de cada entidad seleccionada
478 406
			double min = tam;
479 407
			// int hSel = -1;
408

  
480 409
			for (int j = 0; j < handlers.length; j++) {
481 410
				Point2D handlerPoint = handlers[j].getPoint();
482 411
				double distance = auxPoint.distance(handlerPoint);
......
484 413
					min = distance;
485 414
					// hSel = j;
486 415
					selectedHandler.add(handlers[j]);
416
					rowselectedHandlers.add(rowEd);
487 417
				}
488 418
			}
489 419
		}

Also available in: Unified diff