Update.
This commit is contained in:
parent
eceaecd813
commit
11b07b652b
@ -1,44 +0,0 @@
|
|||||||
package org.insa.drawing;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cette implementation de la classe Dessin ne produit pas d'affichage,
|
|
||||||
* ce qui accelere l'execution (utile pour ne pas ralentir les tests).
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class DrawingInvisible implements Drawing {
|
|
||||||
|
|
||||||
public DrawingInvisible () { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWidth(int width) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setColor(Color col) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBB(double long1, double long2, double lat1, double lat2) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void drawLine(float long1, float lat1, float long2, float lat2) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void drawPoint(float lon, float lat, int width) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void putText(float lon, float lat, String txt) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAutoRepaint(boolean autoRepaint) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void repaint() { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,171 +0,0 @@
|
|||||||
package org.insa.drawing;
|
|
||||||
|
|
||||||
import java.awt.BasicStroke;
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Image;
|
|
||||||
import java.awt.image.*;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cette implementation de la classe Dessin produit vraiment un affichage
|
|
||||||
* (au contraire de la classe DessinInvisible).
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class DrawingVisible extends JPanel implements Drawing {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 96779785877771827L;
|
|
||||||
|
|
||||||
private final Graphics2D gr;
|
|
||||||
|
|
||||||
private float long1;
|
|
||||||
private float long2;
|
|
||||||
private float lat1;
|
|
||||||
private float lat2;
|
|
||||||
|
|
||||||
// Width and height of the image
|
|
||||||
private final int width, height;
|
|
||||||
|
|
||||||
private boolean bb_is_set ;
|
|
||||||
|
|
||||||
private Image image;
|
|
||||||
private ZoomAndPanListener zoomAndPanListener;
|
|
||||||
|
|
||||||
public boolean autoRepaint = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cree et affiche une nouvelle fenetre de dessin.
|
|
||||||
*/
|
|
||||||
public DrawingVisible() {
|
|
||||||
super();
|
|
||||||
|
|
||||||
this.zoomAndPanListener = new ZoomAndPanListener(this, ZoomAndPanListener.DEFAULT_MIN_ZOOM_LEVEL, 20, 1.2);
|
|
||||||
this.addMouseListener(zoomAndPanListener);
|
|
||||||
this.addMouseMotionListener(zoomAndPanListener);
|
|
||||||
this.addMouseWheelListener(zoomAndPanListener);
|
|
||||||
|
|
||||||
this.width = 2000;
|
|
||||||
this.height = 1600;
|
|
||||||
|
|
||||||
BufferedImage img = new BufferedImage (this.width, this.height, BufferedImage.TYPE_3BYTE_BGR);
|
|
||||||
|
|
||||||
this.image = img;
|
|
||||||
this.gr = img.createGraphics();
|
|
||||||
|
|
||||||
this.zoomAndPanListener.setCoordTransform(this.gr.getTransform());
|
|
||||||
|
|
||||||
this.bb_is_set = false;
|
|
||||||
|
|
||||||
|
|
||||||
this.long1 = 0.0f;
|
|
||||||
this.long2 = this.width;
|
|
||||||
this.lat1 = 0.0f;
|
|
||||||
this.lat2 = this.height;
|
|
||||||
|
|
||||||
this.clear();
|
|
||||||
this.repaint();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void paintComponent(Graphics g1) {
|
|
||||||
Graphics2D g = (Graphics2D)g1;
|
|
||||||
g.setTransform(zoomAndPanListener.getCoordTransform());
|
|
||||||
g.drawImage(image, 0, 0, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAutoRepaint(boolean autoRepaint) {
|
|
||||||
this.autoRepaint = autoRepaint;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void doAutoPaint() {
|
|
||||||
if (autoRepaint) {
|
|
||||||
this.repaint();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.gr.setStroke(new BasicStroke(width));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(Color col) {
|
|
||||||
this.gr.setColor(col);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear() {
|
|
||||||
this.gr.setColor(Color.WHITE);
|
|
||||||
this.gr.fillRect(0, 0, this.width, this.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBB(double long1, double long2, double lat1, double lat2) {
|
|
||||||
|
|
||||||
if (long1 > long2 || lat1 > lat2) {
|
|
||||||
throw new Error("DessinVisible.setBB : mauvaises coordonnees.");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.long1 = (float)long1;
|
|
||||||
this.long2 = (float)long2;
|
|
||||||
this.lat1= (float)lat1;
|
|
||||||
this.lat2 = (float)lat2;
|
|
||||||
|
|
||||||
this.bb_is_set = true;
|
|
||||||
|
|
||||||
double scale = 1 / Math.max(this.width / (double)this.getWidth(), this.height / (double)this.getHeight());
|
|
||||||
|
|
||||||
this.zoomAndPanListener.getCoordTransform().setToIdentity();
|
|
||||||
this.zoomAndPanListener.getCoordTransform().translate((this.getWidth() - this.width * scale) / 2,
|
|
||||||
(this.getHeight() - this.height * scale) / 2);
|
|
||||||
this.zoomAndPanListener.getCoordTransform().scale(scale, scale);
|
|
||||||
this.zoomAndPanListener.setZoomLevel(0);
|
|
||||||
this.repaint();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private int projx(float lon) {
|
|
||||||
return (int)(width * (lon - this.long1) / (this.long2 - this.long1)) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int projy(float lat) {
|
|
||||||
return (int)(height * (1 - (lat - this.lat1) / (this.lat2 - this.lat1))) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkBB() {
|
|
||||||
if (!this.bb_is_set) {
|
|
||||||
throw new Error("Classe DessinVisible : vous devez invoquer la methode setBB avant de dessiner.") ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void drawLine(float long1, float lat1, float long2, float lat2) {
|
|
||||||
this.checkBB() ;
|
|
||||||
int x1 = this.projx(long1) ;
|
|
||||||
int x2 = this.projx(long2) ;
|
|
||||||
int y1 = this.projy(lat1) ;
|
|
||||||
int y2 = this.projy(lat2) ;
|
|
||||||
|
|
||||||
gr.drawLine(x1, y1, x2, y2) ;
|
|
||||||
this.doAutoPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void drawPoint(float lon, float lat, int width) {
|
|
||||||
this.checkBB() ;
|
|
||||||
int x = this.projx(lon) - width / 2 ;
|
|
||||||
int y = this.projy(lat) - width / 2 ;
|
|
||||||
gr.fillOval (x, y, width, width) ;
|
|
||||||
this.doAutoPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void putText(float lon, float lat, String txt) {
|
|
||||||
this.checkBB() ;
|
|
||||||
int x = this.projx(lon) ;
|
|
||||||
int y = this.projy(lat) ;
|
|
||||||
gr.drawString (txt, x, y) ;
|
|
||||||
this.doAutoPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user