Fall 2007, Interface Homme Machine, Java, RICM2, Polytech'Grenoble
But des TDs
Les séances se déroulent en 4x3h. A la fin de l'ensemble des séances, un petit outil de dessin vectoriel devra être implémenté. On s'inspirera notamment du logiciel Xfig par exemple en en implémentant quelques fonctions simples (tracé de cercles, lignes, sélection, déplacement, destruction, ...).L'ensemble de l'interface graphique sera implémenté en Java en utilisant la librairie graphique Swing.
Sujet
Le cahier des charges à suivre lors du mini-projet, ainsi que les critères d'évaluation.[pdf ] |
Déroulement des séances
Les séances s'étalent sur quatre fois 3h. Une séance à lieu chaque semaine en alternant groupe 1 et 2. Chaque séance à lieu le lundi de 14h à 17h en salle F108 de l'UFR-IMA.Date | Groupe | Cours Réalisés | Remarques, Cas particuliers |
---|---|---|---|
22 Octobre | Groupe 2 | Fait | |
25 Octobre | Groupe 1 | Fait | (spécial, séance le jeudi de 8h à 11h en salle F108) |
5 Novembre | Groupe 1 | Fait | |
12 Novembre | Groupe 2 | Fait | |
19 Novembre | Groupe 1 | Annulé | Grêve étudiants, Blocage UFR |
26 Novembre | Groupe 2 | Annulé | Grêve étudiants, Blocage UFR |
3 Décembre | Groupe 1 | Fait | |
5 Décembre | Groupe 1 | Fait | (spécial, rattrapage grève, mercredi 8-11h, salle F208) |
10 Décembre | Groupe 2 | Fait | |
12 Décembre | Groupe 2 | Fait | (spécial, rattrapage grève, mercredi 8-11h, salle F108) |
Groupes
Voici les groupes formés. Le travail se réalisant normalement en binôme (trinômes acceptés).Numéro | Groupe | Date Rendu |
---|---|---|
1 |
Vagnet Jérémy Marois Paul |
rendu 10/12/2007 [ok] |
2 |
Yegdjong Elias Boukercha Lofti |
rendu 10/12/2007 [ok] |
3 |
Bolliet Romain Gineste Florent |
rendu 12/12/2007 [ok] |
4 |
Desestreit Romain Sturbaut Cedric |
rendu 12/12/2007 [ok] |
5 |
Archelas Michael EAP Clément |
rendu 12/12/2007 [ok] |
6 |
Delay Benoit Touvat Fabien |
rendu 12/12/2007 [ok] |
7 |
Collin Clément La Rizza Frédéric |
rendu 12/12/2007 [ok] |
8 |
Favre Robin Plantin Ludovic |
rendu 12/12/2007 [ok] |
9 |
Bodinier Vincent Jacquart Matthieu |
rendu 12/12/2007 [ok] |
10 |
Ligier Alexandre Gilbert Jean-Pierre |
rendu 20/12/2007 [retard 8j] |
11 | Laribi Nahla | rendu [retard 1j] |
Numéro | Groupe | Date Rendu |
---|---|---|
1 |
Zaida Khalid Yucelir Akin Sidotman Samy |
rendu 19/12/2007 [ok] |
2 |
Salihi Dardan Mouelhi Seif Eddine Ben Salah Weil |
retard |
3 |
Brun Yann Clavier Thomas |
rendu 20/12/2007 [retard 1j] |
4 |
Colbrant Audrey Nouguier Elodie Yang Yang |
rendu 18/12/2007 [ok] |
5 |
Bauduin David Francone Jérémie |
rendu 19/12/2007 [ok] |
6 |
Seneque Frédéric Zhao Xu Benameur El Youbi Zineb |
rendu 18/12/2007 [ok] |
7 |
Peigneux Juliette Gabi Lydia Burlet Thomas |
rendu 18/12/2007 [ok] |
8 |
Gorgo Gael Ablancourt Murielle |
rendu 20/12/2007 [retard 1j] |
Critères d'évaluations
Les critères d'évaluations sont rappelés ici (déjà écrit dans le sujet). N'hésitez pas à vous bien vérifier votre interface de dessin avant de la rendre. Une seule note sera attribuée par binôme. Le projet minimal demandé est noté sur 16 points. Au delà, un certain nombre d'améliorations souvent longue à mettre en place pourront rapporter des suppléments. Cependant, il est très fortement conseillé d'avoir une interface fini et fonctionnelle avant de passer à la mise en place des améliorations.Respect des consignes de codage
(4 points)- Respect de la structure des classes
- Encapsulation du code
- Commentaires dans le code (respect de javadoc)
- Règles typographiques de Java
Respect des consignes fonctionnelles
(5 points)- Choix des formes de base (Ligne, Disque, Rectangle)
- Affichage et sélection corrects de celles-ci
- Déplacement des formes par "drag and drop"
- Mise en place des caractéristiques de base des formes
- Sauvegarde et chargement des figures dans un fichier ascii
Respect des consignes IHM
(5 points)- Simplicité d'utilisation (sigles explicites,...)
- Effets de bords et détails, code robuste face aux situations imprévues ou mauvaises manipulations de l'utilisateur.
- Aspect classique de l'IHM (menu et icônes classique, qui ne déroutent pas). Doit être compréhensible sans lecture attentive d'une documentation complexe.
- Sélection et manipulation aisées des formes (doit pouvoir sélectionner facilement une forme proche de la zone de clic, gestion des cas ambigues, ...).
Avancement régulier du projet
(2 points)- Montrer un avancement régulier au cours des séances
- Réaliser le projet petit à petit en s'assurant de son fonctionnement correct.
- Partage des tâches au sein du binôme
Amélioration du projet minimal
(4 points)- Voir sujet (mise en place de formes supplémentaires, zoom de-zoom, annulation des dernières actions effectués, mise en place de formes complexes: Splines, ...)
Rendu
Chaque binôme rendra leur projet une semaine après la fin du dernier cours de son groupe. En clair, les binômes du- 1er groupe devront avoir rendu leur projet pour le mercredi 12 décembre à 17h
- 2nd groupe devront avoir rendu leur projet pour le mercredi 19 décembre à 17h.
- L'ensemble du code dans un repertoire /source
- Le code exécutable dans le repertoire /bin
- Un fichier d'exemple sauvegardé et créé à l'aide de votre programme qu'il sera possible de charger dans le répertoire /save
- Un mini compte rendu (moins de 5 pages) au format pdf contenant:
- Une copie d'écran valorisant votre IHM.
- Ses fonctionnalités (en argumentants vos choix)
- La structure de vos classes
- Les bugs et limitations subsistantes
- Les améliorations que vous souhaiteriez implémenter (en justifiant)
- Une conclusion reprenant ce qui vous a plu et la où vous estimez avoir éprouvé le plus de difficultés.
Un mail de confirmation vous sera renvoyé une fois l'archive reçu. Si cet accusé de réception ne vous est pas envoyé, vous devrez considérer que le mail n'a pas été réceptionné et donc réitérer l'opération.
Tips
Pour quelques personnes ayant des difficultés, voici quelques petits points concernant le projet.Tracé du cercle
Java vous propose de tracer des ellipses en spécifiant le point supérieur gauche ainsi que la longueur et la largeur de votre ellipse.Il vous est cependant demandé de tracer un cercle en ayant connaissance de son centre (premier clic) et de son rayon (donné par le second point).
Au premier clic, vous possédez donc l'information (xc,yc). Lors du drag and drop, le second point vous informe du rayon du cercle (r=||x-x_c|| en notation vectorielle). Il est donc alors assez simple d'afficher votre ellipse avec les paramètres suivant: draw_ellipse(x_c-r , y_c-r , 2 r , 2 r)
Sélection d'une forme
Pour sélectionner une forme, il est important de définir un critère de proximité d'une forme. Pour cela, on utilisera tout simplement une fonction de distance associé à une forme donnée. Ainsi, un clic sélectionnera une forme si la souris est suffisamment proche de votre objet.Une idée consiste à définir une méthode général type: "is_close(x,y)" sur un Element_Graphic et d'en définir une implémentation pour chaque forme.
Ainsi pour un cercle D (centre x_c,y_c et de rayon r), on défini une région "proche" de celui-ci par l'ensemble P = {x appartenant au cercle de centre (x_c,y_c) et de rayon compris entre [r+epsilon,r-epsilon]}, où epsilon designe votre tolérance.
De même pour une droite, il conviendra de savoir calculer la distance d'un point à un segment (pensez à la perpendiculaire, et donc à l'idée de projection ...).
Affichage d'une icône sur un bouton
Les JButton de java sont tout à fait capable d'être affiché par une icône de n'importe quel format usuel.ex.
JButton button1=new JButton();
ImageIcon icon1 = new ImageIcon("my_wonderful_picture.png");
button1.setIcon(icon1);
Changer l'épaisseur du trait
Pour modifier des propriété avancé de l'interface graphique, l'utilisation de l'API Graphics2D peut être d'une grande aide (y penser également dans le cas de scaling, rotation, ...).ex.
import java.awt.*;
import java.awt.geom.*;
public void paint(Graphics g)
Graphics2D g2 = (Graphics2D)g;
g2.setStroke(new BasicStroke(5));
vous permettra d'afficher des traits 5x plus épais.