Revision 4144 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.geom.AffineTransform;
46 47
import java.awt.geom.Point2D;
47 48
import java.awt.geom.Rectangle2D;
48 49
import java.io.IOException;
......
68 69

  
69 70
/**
70 71
 * DOCUMENT ME!
71
 *
72
 * 
72 73
 * @author Vicente Caballero Navarro
73 74
 */
74 75
public class SelectionCADTool extends DefaultCADTool {
......
113 114

  
114 115
	/*
115 116
	 * (non-Javadoc)
116
	 *
117
	 * 
117 118
	 * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
118 119
	 *      double, double)
119 120
	 */
120 121
	public void transition(double x, double y) {
122
		System.out.println("TRANSICION DESDE ESTADO " + getState() + " x= " + x
123
				+ " y=" + y);
121 124
		((SelectionCADToolContext) _fsm).addPoint(x, y);
122 125
	}
123 126

  
124 127
	/*
125 128
	 * (non-Javadoc)
126
	 *
129
	 * 
127 130
	 * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
128 131
	 *      double)
129 132
	 */
......
133 136

  
134 137
	/*
135 138
	 * (non-Javadoc)
136
	 *
139
	 * 
137 140
	 * @see com.iver.cit.gvsig.gui.cad.CADTool#transition(com.iver.cit.gvsig.fmap.layers.FBitSet,
138 141
	 *      java.lang.String)
139 142
	 */
140 143
	public void transition(String s) {
141 144
		_fsm.addOption(s);
142 145
	}
143
	public String getState(){
146

  
147
	public String getState() {
144 148
		return state;
145 149
	}
150

  
146 151
	public boolean select(double x, double y) {
147 152
		firstPoint = new Point2D.Double(x, y);
148 153
		FBitSet selection = getCadToolAdapter().getVectorialAdapter()
......
157 162
		Rectangle2D rect = new Rectangle2D.Double(firstPoint.getX() - tam,
158 163
				firstPoint.getY() - tam, tam * 2, tam * 2);
159 164
		// int[] indexes = getCadToolAdapter().getVectorialAdapter()
160
		// 		.getRowsIndexes(rect);
161
		VectorialEditableAdapter vea = getCadToolAdapter().getVectorialAdapter();
162
		String strEPSG = getCadToolAdapter().getMapControl().
163
						getViewPort().getProjection()
164
						.getAbrev().substring(5);
165
		// 		.getRowsIndexes_OLD(rect);
166
		VectorialEditableAdapter vea = getCadToolAdapter()
167
				.getVectorialAdapter();
168
		String strEPSG = getCadToolAdapter().getMapControl().getViewPort()
169
				.getProjection().getAbrev().substring(5);
165 170
		IRowEdited[] feats;
166
		FBitSet prevSelection=(FBitSet)selection.clone();
171
		FBitSet prevSelection = (FBitSet) selection.clone();
167 172

  
168 173
		try {
169 174
			feats = vea.getFeatures(rect, strEPSG);
170 175
			selection.clear();
171
	
176

  
172 177
			for (int i = 0; i < feats.length; i++) {
178
			// for (int i = 0; i < indexes.length; i++) {
179

  
173 180
				IFeature feat = (IFeature)feats[i].getLinkedRow();
174
				IGeometry geom = feat.getGeometry(); 
181
				IGeometry geom = feat.getGeometry();
182
				/* IGeometry geom = null;
183
				try {
184
					geom = vea.getShape(indexes[i]);
185
				} catch (DriverIOException e) {
186
					// TODO Auto-generated catch block
187
					e.printStackTrace();
188
				} */
175 189
				if (geom.intersects(rect)) { // , 0.1)){
176 190
					selection.set(feats[i].getIndex(), true);
191
					// selection.set(indexes[i], true);
177 192
				}
178 193
			}
179 194
		} catch (DriverException e1) {
......
181 196
			e1.printStackTrace();
182 197
		}
183 198

  
184

  
185
		/* for (int i = 0; i < indexes.length; i++) {
186
			try {
187
				if (getCadToolAdapter().getVectorialAdapter().getShape(
188
						indexes[i]).intersects(rect)) {
189
					// .intersects(rect,FLATNESS)) {
190
					selection.set(indexes[i], true);
191
				}
192
			} catch (DriverIOException e) {
193
				// TODO Auto-generated catch block
194
				e.printStackTrace();
195
			}
196
		} */
197
		boolean isTheSame=false;
198
		if (prevSelection.cardinality()!=0 && selection.intersects(prevSelection) && !selection.equals(prevSelection)){
199
			selection=prevSelection;
199
		/*
200
		 * for (int i = 0; i < indexes.length; i++) { try { if
201
		 * (getCadToolAdapter().getVectorialAdapter().getShape(
202
		 * indexes[i]).intersects(rect)) { // .intersects(rect,FLATNESS)) {
203
		 * selection.set(indexes[i], true); } } catch (DriverIOException e) { //
204
		 * TODO Auto-generated catch block e.printStackTrace(); } }
205
		 */
206
		boolean isTheSame = false;
207
		if (prevSelection.cardinality() != 0
208
				&& selection.intersects(prevSelection)
209
				&& !selection.equals(prevSelection)) {
210
			selection = prevSelection;
200 211
			getCadToolAdapter().getVectorialAdapter().setSelection(selection);
201
			isTheSame=true;
212
			isTheSame = true;
202 213
		}
203 214
		if (selection.cardinality() > 0) {
204 215
			// Se comprueba si se pincha un handler. El m?s cercano (o los m?s
......
218 229
				try {
219 230
					fea = (DefaultFeature) getCadToolAdapter()
220 231
							.getVectorialAdapter().getRow(i).getLinkedRow();
221
					clonedGeometry = fea.getGeometry().cloneGeometry();
232
					/* clonedGeometry = fea.getGeometry().cloneGeometry();
222 233
					handlers = clonedGeometry
223 234
							.getHandlers(IGeometry.SELECTHANDLER);
224 235
					selectedRow.add(new DefaultFeature(clonedGeometry, fea
225
							.getAttributes()));
236
							.getAttributes())); */
237
					handlers = fea.getGeometry().getHandlers(IGeometry.SELECTHANDLER);
238
					selectedRow.add(fea);
226 239
					selectedRowIndex.add(new Integer(i));
227 240
					// y miramos los handlers de cada entidad seleccionada
241
					min = getCadToolAdapter().getMapControl().getViewPort()
242
							.toMapDistance(tolerance);
243
					// int hSel = -1;
228 244
					for (int j = 0; j < handlers.length; j++) {
229 245
						Point2D handlerPoint = handlers[j].getPoint();
230 246
						double distance = firstPoint.distance(handlerPoint);
231
						if ((distance <= min)
232
								&& (distance < getCadToolAdapter()
233
										.getMapControl().getViewPort()
234
										.toMapDistance(tolerance))) {
247
						if (distance <= min) {
235 248
							min = distance;
236

  
237
							selectedHandler.add(clonedGeometry
238
									.getHandlers(IGeometry.SELECTHANDLER)[j]);
239

  
249
							//hSel = j;
250
							selectedHandler.add(handlers[j]);
240 251
						}
241 252
					}
253
					// Se a?ade un solo handler por
254
					// cada geometr?a seleccionada
255
					// if (hSel != -1) {
256
					// 	selectedHandler.add(handlers[hSel]);
257
					// 	System.out.println("Handler seleccionado: " + hSel);
258
					// }
242 259

  
243 260
				} catch (DriverIOException e) {
244 261
					// TODO Auto-generated catch block
......
249 266
				}
250 267
			}
251 268

  
252

  
253 269
		}
254 270
		PluginServices.getMDIManager().restoreCursor();
255
		if ((selection.cardinality() > 0 && selectedHandler.size()>0) || isTheSame){
271
		if ((selection.cardinality() > 0 && selectedHandler.size() > 0)
272
				|| isTheSame) {
256 273
			state = "Selection.EndPoint";
257
		}else if (selection.cardinality() > 0){
258
			state ="Selection.FirstPoint";
259
		}else {
274
		} else if (selection.cardinality() > 0) {
275
			state = "Selection.FirstPoint";
276
		} else {
260 277
			state = "Selection.SecondPoint";
261 278
		}
262 279
		return true;
......
265 282
	/**
266 283
	 * Equivale al transition del prototipo pero sin pasarle como par? metro el
267 284
	 * editableFeatureSource que ya estar? creado.
268
	 *
285
	 * 
269 286
	 * @param selection
270 287
	 *            Bitset con las geometr?as que est?n seleccionadas.
271 288
	 * @param x
......
310 327

  
311 328
				Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1);
312 329

  
313
				/* int[] indexes = getCadToolAdapter().getVectorialAdapter()
314
						.getRowsIndexes(new Rectangle2D.Double(x1, y1, w1, h1)); */
315
				VectorialEditableAdapter vea = getCadToolAdapter().getVectorialAdapter();
316
				String strEPSG = getCadToolAdapter().getMapControl().
317
								getViewPort().getProjection()
318
								.getAbrev().substring(5);
330
				// int[] indexes = getCadToolAdapter().getVectorialAdapter()
331
				// 		.getRowsIndexes_OLD(
332
				// 				new Rectangle2D.Double(x1, y1, w1, h1));
333
				VectorialEditableAdapter vea = getCadToolAdapter()
334
						.getVectorialAdapter();
335
				String strEPSG = getCadToolAdapter().getMapControl()
336
						.getViewPort().getProjection().getAbrev().substring(5);
319 337
				IRowEdited[] feats = vea.getFeatures(rect, strEPSG);
320 338

  
321 339
				for (int i = 0; i < feats.length; i++) {
322
					IGeometry geom = ((IFeature)feats[i].getLinkedRow()).getGeometry(); 
340
				// for (int i = 0; i < indexes.length; i++) {
341
					IGeometry geom =
342
					((IFeature)feats[i].getLinkedRow()).getGeometry();
343
					/* IGeometry geom = null;
344
					try {
345
						geom = vea.getShape(indexes[i]);
346
					} catch (DriverIOException e) {
347
						// TODO Auto-generated catch block
348
						e.printStackTrace();
349
					} */
323 350
					if (firstPoint.getX() < lastPoint.getX()) {
324 351
						if (rect.contains(geom.getBounds2D())) {
325 352
							selection.set(feats[i].getIndex(), true);
353
							// selection.set(indexes[i], true);
326 354
						}
327 355
					} else {
328 356
						if (geom.intersects(rect)) { // , 0.1)){
329 357
							selection.set(feats[i].getIndex(), true);
358
							// selection.set(indexes[i], true);
330 359
						}
331 360
					}
332 361
				}
......
335 364
				// cardinality = selection.cardinality();
336 365
			} else if (status.equals("Selection.EndPoint")) {
337 366

  
367
				/*
368
				 * for (int k = 0; k < selectedHandler.size(); k++) { Handler h =
369
				 * (Handler) selectedHandler.get(k); h.set(x, y); }
370
				 */
371

  
338 372
				for (int i = 0; i < selectedRow.size(); i++) {
339 373

  
340
					for (int k = 0; k < selectedHandler.size(); k++) {
341
						Handler h = (Handler) selectedHandler.get(k);
342
						h.set(x, y);
343
					}
344 374
					// System.out.println(h.getPoint());
345 375
					DefaultFeature row = (DefaultFeature) selectedRow.get(i);
346 376
					int index = ((Integer) selectedRowIndex.get(i)).intValue();
......
364 394
	/**
365 395
	 * M?todo para dibujar la lo necesario para el estado en el que nos
366 396
	 * encontremos.
367
	 *
397
	 * 
368 398
	 * @param g
369 399
	 *            Graphics sobre el que dibujar.
370 400
	 * @param selectedGeometries
......
379 409
		String status = actualState.getName();
380 410
		FBitSet selection = getCadToolAdapter().getVectorialAdapter()
381 411
				.getSelection();
382
		try {
383
			drawHandlers(g, selection, getCadToolAdapter().getMapControl()
412
		// try {
413
			// drawHandlers(g, selection, getCadToolAdapter().getMapControl()
414
			// 		.getViewPort().getAffineTransform());
415
			drawHandlers(g, selectedRow, getCadToolAdapter().getMapControl()
384 416
					.getViewPort().getAffineTransform());
385
		} catch (DriverIOException e) {
386
			// TODO Auto-generated catch block
417
		/* } catch (DriverIOException e) {
387 418
			e.printStackTrace();
388
		}
419
		} */
389 420

  
390 421
		if (status.equals("Selection.SecondPoint")) {
422
			// Dibuja el rect?ngulo de selecci?n
423

  
391 424
			GeneralPathX elShape = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD,
392 425
					4);
393 426
			elShape.moveTo(firstPoint.getX(), firstPoint.getY());
......
398 431
			ShapeFactory.createPolyline2D(elShape).draw((Graphics2D) g,
399 432
					getCadToolAdapter().getMapControl().getViewPort(),
400 433
					CADTool.selectSymbol);
434

  
401 435
		} else if (status.equals("Selection.EndPoint")) {
436
			// Movemos los handlers que hemos seleccionado
437
			// previamente dentro del m?todo select()
438
			for (int k = 0; k < selectedHandler.size(); k++) {
439
				Handler h = (Handler) selectedHandler.get(k);
440
				h.set(x, y);
441
				// System.out.println(h.getPoint());
442
			}
443

  
444
			// Y una vez movidos los v?rtices (handles)
445
			// redibujamos la nueva geometr?a.
402 446
			for (int i = 0; i < selectedRow.size(); i++) {
403
				for (int k = 0; k < selectedHandler.size(); k++) {
404
					Handler h = (Handler) selectedHandler.get(k);
405
					h.set(x, y);
406
					System.out.println(h.getPoint());
407
				}
408 447

  
409
				IGeometry geom = ((IFeature) selectedRow.get(i)).getGeometry().cloneGeometry();
410
				System.out.println(geom.getBounds2D());
448
				IGeometry geom = ((IFeature) selectedRow.get(i)).getGeometry()
449
						.cloneGeometry();
450
				// System.out.println(geom.getBounds2D());
411 451
				// int index = ((Integer) selectedRowIndex.get(i)).intValue();
412 452
				g.setColor(Color.gray);
413 453

  
......
418 458

  
419 459
	}
420 460

  
461

  
421 462
	/**
422 463
	 * Add a diferent option.
423
	 *
464
	 * 
424 465
	 * @param sel
425 466
	 *            DOCUMENT ME!
426 467
	 * @param s
......
432 473

  
433 474
	/*
434 475
	 * (non-Javadoc)
435
	 *
476
	 * 
436 477
	 * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
437 478
	 */
438 479
	public void addValue(double d) {
......
440 481

  
441 482
	/**
442 483
	 * DOCUMENT ME!
443
	 *
484
	 * 
444 485
	 * @return DOCUMENT ME!
445 486
	 */
446 487
	public int getSelectedRowSize() {

Also available in: Unified diff