1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| package fr.grapheur.view;
import fr.grapheur.data.Donnees;
import fr.grapheur.data.Droite;
import fr.grapheur.data.Point2D;
import java.awt.Graphics;
import javax.swing.JPanel;
public class ZoneDessin extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private Donnees donnees;
private int bord; // taille des bords
private int enveloppe; // dimension des rectangles
public ZoneDessin (Donnees donnees, int largeur, int hauteur, int bord, int enveloppe) {
this.donnees = donnees;
this.bord = bord;
this.enveloppe = enveloppe;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
int panelWidth = getWidth(); // Retourne la taille du panel, quelque soit le redimensionnement
int panelHeight = getHeight();
// Afficher les points
for(Point2D point : donnees.getPoints()){
System.out.println(point);
// Mettre à l'échelle du panel
Point2D pointAAfficher = toPanelScale(point, panelWidth, panelHeight, donnees);
// TODO: Afficher le point
g.drawRect((int)pointAAfficher.getX(), (int)pointAAfficher.getY(), (int)enveloppe, enveloppe);
g.drawString(point.toString(), (int)pointAAfficher.getX() + enveloppe, (int)pointAAfficher.getY());
}
// Afficher les points
for(Droite droite : donnees.getDroites()){
// Afficher la droite
System.out.println(droite);
// TODO: Calculer p1 et p2 la position Y pour x = donnes.getXMax() et pour x = donnes.getXMax()
// TODO: Si le coefficientDirecteur est important (Droites presques verticales, et y tend vers l'infini) trouver X qui donne y = donnes.getYMin() et Y = donnes.getYMax()
Point2D p1 = new Point2D();
Point2D p2 = new Point2D();
// Mise à l'echelle
p1 = toPanelScale(p1, panelWidth, panelHeight, donnees);
p1 = toPanelScale(p2, panelWidth, panelHeight, donnees);
// TODO: Afficher le segment p1 -> p2 avec
g.drawLine((int)p1.getX(), (int)p1.getY(), (int)p2.getX(), (int)p2.getY());
}
}
/**
* Fonction de mise à l'échelle du point.
* Transorme un point du fichier en une coordonnée dans le JPanel
* @param point
* @param panelWidth la largeur du panel
* @param panelHeight la hauteur du panel
* @param donnees pour avoir les bornes min et max
* @return
*/
Point2D toPanelScale(Point2D point, int panelWidth, int panelHeight, Donnees donnees) {
final Point2D retour = new Point2D(point);
// TODO: remplir retour avec les valeurs calculées
// TODO: Pour que le centre du carré soit la position exacte, penser à enlever enveloppe/2 à X et Y
// TODO: Penser que l'origine dans un panel (x=0, y=0) SWING se situe en haut à gauche
return retour;
}
} |