Projet Micro éditeur de figures géométriques.
Fonctionnalités attendues
On désire créer un logiciel de dessin vectoriel dont le principe est de créer de nouveaux dessins en utilisant/modifiant/combinant des dessins existants. Plus précisément, nous voulons pouvoir :
- Sélectionner un objet depuis un menu graphique (toolbar), et le positionner sur notre dessin – (whiteboard) en utilisant le glisser-déposer (drag and drop).
 - Créer des groupes d’objets et sous-groupes d’objets, sous-sous-groupes etc…
 - Dissocier un groupe d’objet.
 - Modifier la taille, position, etc… de nos objets ou groupes d’objets une fois ceux-ci incorporés dans le dessin.
 - Ajouter des groupes d’objets ou des objets paramétrés à notre toolbar en les déposants sur la toolbar (drag and drop).
 - Annuler ou refaire une opération.
 - Sauvegarder un document et charger un document.
 - Sauvegarder l’état du logiciel (toolbar) et le recharger au démarrage.
 
Vous devez fournir au minimum les deux objets suivants :
- Un rectangle : Ses propriétés sont : largeur, hauteur, position, rotation, centre de rotation, translation, couleur et arrondi des bords.
 - Un polygone régulier : Ses propriétés sont : nombre de côtés, longueur d’un côté, position, rotation, centre de rotation, translation, couleur.
 
Observations générales
- On utilisera la bibliothèque JavaFX pour le rendu graphique.
 - Tous les choix de patrons de conception utilisés seront justifiés dans le rapport.
 - Il est demandé de rédiger des tests unitaires et d'intégration pertinents, notamment pour s'assurer du bon fonctionnement du mécanisme d'undo-redo. En particulier, on ne testera pas spécifiquement les classes de rendu graphique.
 - Le rendu comportera un diagramme d'architecture.
 - Pour faciliter la réutilisation de code, on prendra soin de séparer les objets gérant le rendu graphique, des objets contenant les données de la scène.
 
Évaluation
- Comme pour les TDs + soutenances
 
Détail des cas d'utilisation

Cas 1. Glissé-déposer depuis toolbar.
- L'utilisateur clique sur un élément de la toolbar.
 - Il effectue un glissé-déposer.
 - Il relache son clic : 
- Au dessus de la feuille blanche, une nouvelle instance de l'objet est ajoutée à la feuille de dessin.
 - Dans une icône "Poubelle", l'élément est supprimé de la toolbar.
 - Ailleurs, rien ne se passe.
 
 
Cas 2. Groupage.
- L'utilisateur réalise une sélection potentiellement multiple d'objets.
- Soit via un rectangle de sélection sur le whiteboard.
 - Soit par control-clics successifs.
 
 - Il sélectionne l'option "Group" d'un menu en clic-droit.
 - Les objets deviennent enfants d'un groupe d'objets.
 
Cas 3. Dissociation d'un groupe.
- L'utilisateur sélectionne un groupe d'objets.
 - Il sélectionne l'option "De-group" d'un menu en clic-droit.
 - Les objets sont dégroupés, c'est-à-dire rajoutés au groupe parent. Ils ne doivent pas changer de position, etc.
 
Cas 4. Édition des propriétés des objets.
- L'utilisateur sélectionne un objet ou un groupe d'objets.
 - Il réalise un clic droit et sélectionne "Edit" dans un menu déroulant.
 - Une boite de dialogue s'ouvre : elle contient les paramètres que l'on peut modifier.
 - L'utilisateur change un ou plusieurs des paramètres.
 - Il appuie sur : 
- "Appliquer": les modifications sont appliquées, et il peut continuer à changer des paramètres.
 - "Ok": les modifications sont appliquées et le dialogue se ferme.
 - "Annuler": toutes les modifications réalisées depuis l'ouverture du dialogue sont annulées.
 
 
Cas 5. Glissé-déposé vers toolbar.
- L'utilisateur sélectionne un objet ou groupe d'objets.
 - Il effectue un drag'n'drop.
 - S'il relache la souris sur la toolbar, un nouvel élément est ajouté dans la toolbar.
 - S'il relache la souris sur la poubelle, les objets sont supprimés.
 
Cet élément contient les informations nécessaires pour créer des clones exacts de l'objet qui a été originellement drag'n'dropped, à l'exception de l'information de position. Note : S'il crée un nouveau document, les éléments de la toolbar sont conservés.
Cas 6. Undo-Redo.
Ce cas s'applique aux opérations 1. à 5.
Undo : nécessite qu'au moins une action ait été réalisée.
- L'utilisateur clique sur le bouton Undo dans le menu.
 - La dernière action réalisée par l'utilisateur est annulée : le document revient à son état précédent.
 
Redo : nécessite qu'au moins une action ait été annulée.
- L'utilisateur clique sur le bouton Redo dans le menu.
 - La dernière action qui avait été annulée est rejouée.
 
Cas 7. Sérialisation d'un document.
Sauvegarde
- L'utilisateur appuie sur le bouton "Save".
 - Un dialogue s'ouvre et lui demande l'emplacement du fichier de sauvegarde.
 - Le document est sauvegardé dans ce fichier.
 
Rechargement
- L'utilisateur appuie sur le bouton "Load".
 - Un dialogue s'ouvre et lui demande de chercher un fichier de sauvegarde.
 - Si c'est un fichier de sauvegarde valide, le document actuel est remplacé par le document dans le fichier.
 
Cas 8. Sauvegarde de l'état du logiciel.
- L'utilisateur rajoute et supprime des éléments de sa toolbar.
 - Il quitte le logiciel.
 - Lorsqu'il ré-ouvre le logiciel, la toolbar est telle qu'il l'avait laissée : ses formes peuvent être réutilisées dans de nouveaux whiteboards.