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

View differences:

ScaleCADTool.java
42 42

  
43 43
import java.awt.Graphics;
44 44
import java.awt.Graphics2D;
45
import java.awt.Image;
45 46
import java.awt.event.InputEvent;
47
import java.awt.geom.AffineTransform;
46 48
import java.awt.geom.Point2D;
47 49
import java.awt.geom.Point2D.Double;
50
import java.awt.image.ImagingOpException;
48 51
import java.io.IOException;
49 52
import java.util.ArrayList;
50 53

  
51 54
import com.iver.andami.PluginServices;
52 55
import com.iver.cit.gvsig.CADExtension;
56
import com.iver.cit.gvsig.fmap.ViewPort;
53 57
import com.iver.cit.gvsig.fmap.core.DefaultFeature;
54 58
import com.iver.cit.gvsig.fmap.core.IGeometry;
55 59
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
56 60
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
61
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
57 62
import com.iver.cit.gvsig.fmap.edition.UtilFunctions;
58 63
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
59 64
import com.iver.cit.gvsig.gui.cad.CADTool;
60 65
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
61 66
import com.iver.cit.gvsig.gui.cad.tools.smc.ScaleCADToolContext;
62 67
import com.iver.cit.gvsig.gui.cad.tools.smc.ScaleCADToolContext.ScaleCADToolState;
68
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
63 69

  
64 70

  
65 71
/**
......
157 163
			}
158 164

  
159 165
			PluginServices.getMDIManager().restoreCursor();
160
			clearSelection();
161 166
		} else if (status.equals("Scale.PointOriginOrScaleFactor")) {
162 167
			orr = new Point2D.Double(x, y);
163 168
		} else if (status.equals("Scale.EndPointReference")) {
......
179 184
			} catch (IOException e) {
180 185
				e.printStackTrace();
181 186
			}
182
			clearSelection();
183 187
		}
184 188

  
185 189
    }
......
199 203
		Point2D currentPoint = new Point2D.Double(x, y);
200 204

  
201 205
		if (status.equals("Scale.ScaleFactorOrReference")) {
202
			for (int i = 0; i < selectedRow.size(); i++) {
203
				DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRow
204
						.get(i)).getLinkedRow();
205
				IGeometry geometry = fea.getGeometry().cloneGeometry();
206
				double size = getCadToolAdapter().getMapControl().getViewPort()
207
						.toMapDistance(
208
								getCadToolAdapter().getMapControl().getWidth());
209
				UtilFunctions.scaleGeom(geometry, firstPoint, firstPoint
210
						.distance(currentPoint)
211
						/ (size / 40), firstPoint.distance(currentPoint)
212
						/ (size / 40));
213
				geometry.draw((Graphics2D) g, getCadToolAdapter()
214
						.getMapControl().getViewPort(), CADTool.modifySymbol);
215
				drawLine((Graphics2D) g, firstPoint, currentPoint);
216
				PluginServices.getMainFrame().getStatusBar().setMessage(
217
						"5",
218
						"Factor = " + firstPoint.distance(currentPoint)
219
								/ (size / 40));
206
			VectorialLayerEdited vle = getVLE();
207
			ViewPort vp = vle.getLayer().getFMap().getViewPort();
208
			Point2D point = vp.fromMapPoint(firstPoint.getX(), firstPoint
209
					.getY());
210
			double size = getCadToolAdapter().getMapControl().getViewPort()
211
					.toMapDistance(
212
							getCadToolAdapter().getMapControl().getWidth());
213
			double scale = firstPoint.distance(currentPoint) / (size / 40);
214
			drawLine((Graphics2D) g, firstPoint, currentPoint);
215
			if (selectedRow.size() < CADTool.TOPGEOMETRY) {
216
				for (int i = 0; i < selectedRow.size(); i++) {
217
					DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRow
218
							.get(i)).getLinkedRow();
219
					IGeometry geometry = fea.getGeometry().cloneGeometry();
220 220

  
221
					UtilFunctions.scaleGeom(geometry, firstPoint, scale, scale);
222
					geometry.draw((Graphics2D) g, getCadToolAdapter()
223
							.getMapControl().getViewPort(),
224
							CADTool.modifySymbol);
225

  
226
				}
227

  
228
			} else {
229
				AffineTransform at = new AffineTransform();
230
				at.setToTranslation(point.getX(), point.getY());
231
				at.scale(scale, scale);
232
				at.translate(-point.getX(), -point.getY());
233
				Image imgSel = vle.getSelectionImage();
234
				try {
235
					((Graphics2D) g).drawImage(imgSel, at, null);
236
				} catch (ImagingOpException e) {
237
				}
221 238
			}
222

  
239
			PluginServices.getMainFrame().getStatusBar().setMessage("5",
240
					"Factor = " + scale);
223 241
		} else if (status.equals("Scale.EndPointScale")) {
224
			for (int i = 0; i < selectedRow.size(); i++) {
225
				DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRow
226
						.get(i)).getLinkedRow();
227
				IGeometry geometry = fea.getGeometry().cloneGeometry();
242
			VectorialLayerEdited vle = getVLE();
243
			ViewPort vp = vle.getLayer().getFMap().getViewPort();
244
			Point2D point = vp.fromMapPoint(scalePoint.getX(), scalePoint
245
					.getY());
228 246

  
229
				double distrr = orr.distance(frr);
230
				double distre = ore.distance(currentPoint);
231
				double escalado = distre / distrr;
247
			double distrr = orr.distance(frr);
248
			double distre = ore.distance(currentPoint);
249
			double escalado = distre / distrr;
250
			if (selectedRow.size() < CADTool.TOPGEOMETRY) {
251
				for (int i = 0; i < selectedRow.size(); i++) {
252
						DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRow
253
								.get(i)).getLinkedRow();
254
						IGeometry geometry = fea.getGeometry().cloneGeometry();
255
						UtilFunctions.scaleGeom(geometry, scalePoint, escalado,
256
								escalado);
257
						geometry.draw((Graphics2D) g, getCadToolAdapter()
258
								.getMapControl().getViewPort(),
259
								CADTool.modifySymbol);
232 260

  
233
				UtilFunctions.scaleGeom(geometry, scalePoint, escalado,
234
						escalado);
235
				// geometry.scale(scalePoint, escalado, escalado);
236
				geometry.draw((Graphics2D) g, getCadToolAdapter()
237
						.getMapControl().getViewPort(), CADTool.modifySymbol);
261
					}
262
				} else {
263
					AffineTransform at = new AffineTransform();
264
					at.setToTranslation(point.getX(), point.getY());
265
					at.scale(escalado, escalado);
266
					at.translate(-point.getX(), -point.getY());
267
					Image imgSel = vle.getSelectionImage();
268
					try {
269
						((Graphics2D) g).drawImage(imgSel, at, null);
270
					} catch (ImagingOpException e) {
271
					}
272
				}
238 273
				drawLine((Graphics2D) g, firstPoint, new Point2D.Double(x, y));
239

  
240 274
			}
241
		}
242 275
	}
243 276

  
244 277
    /**
......
251 284
    	ScaleCADToolState actualState = (ScaleCADToolState) _fsm.getPreviousState();
252 285
        String status = actualState.getName();
253 286
       if (status.equals("Scale.ScaleFactorOrReference")) {
254
			try {
287
		/*	try {
255 288
				scale(2);
256 289
			} catch (DriverIOException e) {
257 290
				// TODO Auto-generated catch block
......
260 293
				// TODO Auto-generated catch block
261 294
				e.printStackTrace();
262 295
			}
296
		*/
263 297
		}
264
    }
298
	}
265 299

  
266 300
    /* (non-Javadoc)
267 301
     * @see com.iver.cit.gvsig.gui.cad.CADTool#addvalue(double)
......
284 318
    		VectorialEditableAdapter vea=getCadToolAdapter().getVectorialAdapter();
285 319
    		vea.startComplexRow();
286 320
    		ArrayList selectedRow=getSelectedRows();
321
    		ArrayList selectedRowAux=new ArrayList();
287 322
    		for (int i = 0; i < selectedRow.size(); i++) {
288
				DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRow
289
						.get(i)).getLinkedRow().cloneRow();
323
    			IRowEdited edRow = (IRowEdited) selectedRow.get(i);
324
    			DefaultFeature fea = (DefaultFeature) edRow.getLinkedRow().cloneRow();
290 325
				UtilFunctions.scaleGeom(fea.getGeometry(), scalePoint, scaleFactor, scaleFactor);
291 326
    				// df.getGeometry().scale(scalePoint, scaleFactor, scaleFactor);
292
    				vea.modifyRow(i, fea,getName());
293

  
327
    			int index=	vea.modifyRow(edRow.getIndex(), fea,getName());
328
    			selectedRowAux.add(new DefaultRowEdited(fea,IRowEdited.STATUS_MODIFIED,index));
294 329
    		}
295 330
    		vea.endComplexRow();
331
    		clearSelection();
332
    		selectedRow=selectedRowAux;
296 333
    	}
297 334

  
298 335
	public String getName() {

Also available in: Unified diff