Changeset 27191 in osm for applications/editors/josm/plugins/piclayer/src
- Timestamp:
- 2011-12-08T15:13:10+01:00 (13 years ago)
- Location:
- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerPlugin.java
r27168 r27191 30 30 31 31 import javax.swing.JMenu; 32 import javax.swing.JOptionPane; 33 import javax.swing.UIManager; 32 34 33 35 import org.openstreetmap.josm.Main; … … 39 41 import org.openstreetmap.josm.plugins.Plugin; 40 42 import org.openstreetmap.josm.plugins.PluginInformation; 43 import org.openstreetmap.josm.plugins.piclayer.actions.SavePictureCalibrationAction; 41 44 import org.openstreetmap.josm.plugins.piclayer.actions.newlayer.NewLayerFromClipboardAction; 42 45 import org.openstreetmap.josm.plugins.piclayer.actions.newlayer.NewLayerFromFileAction; … … 154 157 @Override 155 158 public void layerRemoved(Layer arg0) { 159 if (arg0 instanceof PicLayerAbstract && ((PicLayerAbstract) arg0).getTransformer().isModified()) { 160 if (JOptionPane.showConfirmDialog(Main.parent, tr("Do you want to save current calibration of layer {0}?", 161 ((PicLayerAbstract)arg0).getPicLayerName()), 162 UIManager.getString("OptionPane.titleText"), 163 JOptionPane.YES_NO_OPTION) == 0) 164 new SavePictureCalibrationAction((PicLayerAbstract) arg0).actionPerformed(null); 165 } 156 166 boolean enable = Main.map.mapView.getAllLayers().size() != 0; 157 167 menu.setEnabled(enable); -
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/LoadPictureCalibrationAction.java
r27120 r27191 37 37 /** 38 38 * Action to load the calibration file. 39 * 39 * 40 40 */ 41 41 @SuppressWarnings("serial") … … 44 44 // Owner layer of the action 45 45 PicLayerAbstract m_owner = null; 46 46 47 47 // Persistent FileChooser instance to remember last directory 48 48 JFileChooser m_filechooser = null; … … 60 60 * Action handler 61 61 */ 62 @Override 62 63 public void actionPerformed(ActionEvent arg0) { 63 64 // Save dialog 64 65 JFileChooser fc = new JFileChooser(); 65 fc.setAcceptAllFileFilterUsed( false );66 fc.setAcceptAllFileFilterUsed( true ); 66 67 fc.setFileFilter( new CalibrationFileFilter() ); 67 68 fc.setSelectedFile( new File(m_owner.getPicLayerName() + CalibrationFileFilter.EXTENSION)); … … 69 70 70 71 if ( result == JFileChooser.APPROVE_OPTION ) { 71 72 // Load 72 73 // Load 73 74 try { 74 75 m_owner.loadCalibration(new FileInputStream(fc.getSelectedFile())); … … 80 81 } 81 82 } 82 83 83 84 } -
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/SavePictureCalibrationAction.java
r27144 r27191 63 63 // Save dialog 64 64 final JFileChooser fc = new JFileChooser(); 65 fc.setAcceptAllFileFilterUsed( false );65 fc.setAcceptAllFileFilterUsed( true ); 66 66 fc.setFileFilter( new CalibrationFileFilter() ); 67 67 fc.setSelectedFile( new File(m_owner.getPicLayerName() + CalibrationFileFilter.EXTENSION)); -
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/newlayer/NewLayerFromFileAction.java
r27149 r27191 107 107 // Choose a file 108 108 JFileChooser fc = new JFileChooser(Main.pref.get(m_lastdirprefname)); 109 fc.setAcceptAllFileFilterUsed( false ); 110 //fc.setFileFilter( new ImageFileFilter() ); 111 fc.addChoosableFileFilter(new ImageFileFilter()); 112 fc.addChoosableFileFilter(new AllFilesFilter()); 109 fc.setAcceptAllFileFilterUsed( true ); 110 fc.setFileFilter( new ImageFileFilter() ); 111 113 112 fc.setMultiSelectionEnabled(true); 114 113 int result = fc.showOpenDialog( Main.parent ); -
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/layer/PicLayerAbstract.java
r27168 r27191 368 368 props.put(POSITION_Y, Double.toString(imagePosition.getY())); 369 369 props.put(INITIAL_SCALE, Double.toString(initialImageScale)); 370 371 transformer.resetModified(); 370 372 } 371 373 … … 497 499 public void movePictureBy(double x, double y) { 498 500 imagePosition = imagePosition.add(x, y); 499 } 501 transformer.setModified(); 502 } 503 500 504 501 505 public void rotatePictureBy(double angle) { 502 transformer.concatenateTransform(AffineTransform.getRotateInstance(angle)); 506 try { 507 Point2D trans = transformPoint(new Point(Main.map.mapView.getWidth()/2, Main.map.mapView.getHeight()/2)); 508 509 transformer.concatenateTransformPoint(AffineTransform.getRotateInstance(angle), trans); 510 } catch (NoninvertibleTransformException e) { 511 e.printStackTrace(); 512 } 503 513 } 504 514 505 515 public void scalePictureBy(double scalex, double scaley) { 506 transformer.concatenateTransform(AffineTransform.getScaleInstance(scalex, scaley)); 516 try { 517 Point2D trans = transformPoint(new Point(Main.map.mapView.getWidth()/2, Main.map.mapView.getHeight()/2)); 518 519 transformer.concatenateTransformPoint(AffineTransform.getScaleInstance(scalex, scaley), trans); 520 } catch (NoninvertibleTransformException e) { 521 e.printStackTrace(); 522 } 507 523 } 508 524 509 525 public void shearPictureBy(double shx, double shy) { 510 transformer.concatenateTransform(AffineTransform.getShearInstance(shx, shy)); 526 try { 527 Point2D trans = transformPoint(new Point(Main.map.mapView.getWidth()/2, Main.map.mapView.getHeight()/2)); 528 529 transformer.concatenateTransformPoint(AffineTransform.getShearInstance(shx, shy), trans); 530 } catch (NoninvertibleTransformException e) { 531 e.printStackTrace(); 532 } 511 533 } 512 534 -
applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/transform/PictureTransform.java
r27120 r27191 9 9 10 10 private AffineTransform cachedTransform; 11 11 private boolean modified = false; 12 12 13 private List<Point2D> originPoints; 13 14 private List<Point2D> desiredPoints; 14 15 15 16 public PictureTransform() { 16 17 cachedTransform = new AffineTransform(); … … 18 19 desiredPoints = new ArrayList<Point2D>(3); 19 20 } 20 21 21 22 public AffineTransform getTransform() { 22 23 return cachedTransform; 23 24 } 24 25 25 26 public List<? extends Point2D> getOriginPoints() { 26 27 return originPoints; 27 28 } 28 29 29 30 public List<? extends Point2D> getDesiredPoints() { 30 31 return desiredPoints; 31 32 } 32 33 33 34 public void addDesiredPoint(Point2D picturePoint) { 34 35 if (desiredPoints.size() < 3) … … 36 37 trySolve(); 37 38 } 38 39 39 40 private AffineTransform solveEquation() throws NoSolutionException { 40 41 Matrix3D X = new Matrix3D(originPoints); 41 42 Matrix3D Y = new Matrix3D(desiredPoints); 42 43 Matrix3D result = Y.multiply(X.inverse()); 43 44 44 45 return result.toAffineTransform(); 45 46 } … … 50 51 trySolve(); 51 52 } 52 53 53 54 public void resetCalibration() { 54 55 originPoints.clear(); 55 56 desiredPoints.clear(); 57 modified = false; 56 58 cachedTransform = new AffineTransform(); 57 59 } … … 61 63 try { 62 64 cachedTransform.concatenate(solveEquation()); 65 modified = true; 63 66 desiredPoints.clear(); 64 67 } catch (NoSolutionException e) { … … 68 71 } 69 72 70 /** 73 /** 71 74 * updates pair of points (suppose that other pairs are (origin=>origin) points are the same), 72 * solves equation, 75 * solves equation, 73 76 * applies transform matrix to the existing cachedTransform 74 * 77 * 75 78 * @param originPoint - should be one of origin points, otherwise - no transform applied 76 79 * @param desiredPoint - new place for the point … … 79 82 if (originPoints.size() < 3) // not enough information for creating transform - 3 points needed 80 83 return; 81 82 if (originPoint == null) 84 85 if (originPoint == null) 83 86 return; 84 87 85 88 desiredPoints.clear(); 86 89 87 90 for (Point2D origin : originPoints) { 88 91 if (origin.equals(originPoint)) … … 95 98 96 99 public void replaceOriginPoint(Point2D originPoint, Point2D newOriginPoint) { 97 if (originPoint == null || newOriginPoint == null) 100 if (originPoint == null || newOriginPoint == null) 98 101 return; 99 102 100 103 int index = originPoints.indexOf(originPoint); 101 if (index < 0) 104 if (index < 0) 102 105 return; 103 106 104 107 originPoints.set(index, newOriginPoint); 105 108 } 106 107 public void concatenateTransform(AffineTransform transform) { 108 cachedTransform.concatenate(transform); 109 110 public void concatenateTransformPoint(AffineTransform transform, Point2D trans) { 111 112 AffineTransform centered = AffineTransform.getTranslateInstance(trans.getX(), trans.getY()); 113 centered.concatenate(transform); 114 centered.translate(-trans.getX(), -trans.getY()); 115 cachedTransform.concatenate(centered); 116 117 109 118 for (int i = 0; i < originPoints.size(); i++) { 110 119 Point2D point = originPoints.get(i); 111 120 transform.transform(point, point); 112 121 } 122 modified = true; 113 123 } 124 125 public boolean isModified() { 126 return modified; 127 } 128 129 public void setModified() { 130 modified = true; 131 132 } 133 134 public void resetModified() { 135 modified = false; 136 } 114 137 }
Note:
See TracChangeset
for help on using the changeset viewer.