A l'aide de l'OutilCrayon, il est possible de dessiner des épicycloïdes. Pour cela, un nouveau modèle a été crée : Epicycloide. Le dessin ce fera à l'aide de OutilEpicycloide qui prendra pour rayon du cercle de base la distance entre le point de clic et le point de relâchement. Le point de relâchement sera le centre de ce cercle. Le rayon du cercle roulant sera calculé avec le rayon de ce cercle de base et le rapport R / r (où R est le rayon du cercle de base et r celui du cercle roulant) choisie par l'utilisateur dans une liste proposé.
Il n'est pas possible de redimensionner Epicycloide étant donné qu'elle est enfant de TracerCrayon.
L'utilisateur peut désormais changer la couleur ou effacer les formes qu'il sélectionne grâce à un simple click. Ces actions sont lié à des Outils enfants de l'OutilSelectionner permettant de ré-utiliser les méthodes de sélection du parent. L'OutilChangerCouleur peut contrairement à l'OutilEffacer déplacer les Formes sélectionner.
L'utilisateur peut désormais sélectionner l'épaisseur du trait avec laquelle les Formes seront dessiner dans le PanneauDessin.
Amélioration possible : Actuellement les fonctions contient(Coordonnees) des Formes ne prennent pas en compte l'épaisseur du trait du dessin, il pourrait être intéressant que cela soit le cas. Sauf dans le cas de__TracerCrayon__ dans le cas où le tracé n'est pas rempli, le click doit être à moins de 1.5 fois l'épaisseur du trait.
L'ajout du Modèle TracerCrayon permet de dessiner des Formes quelconque à l'aide la souris en maintenant un bouton enfoncer. Une fois le bouton relâcher, la forme est considéré comme fini. Il n'est pas possible de redommensionner le tracé par la suite.
Dans le cas où la JChecbox est coché, le TracerCrayon est rempli.
La fonction contient(Coordonnonnes) de cette classe va agir différemment en fonction de si le tracé est rempli ou non. Si le tracer est rempli, alors on utilise la méthode du ray-casting . Dans le cas ou la figure n'est pas remplie on mesure la distance entre le point du click et les points du tracé.
La modification de l'OutilSelectionner permet d'encadrer la Forme sélectionner, le cadre va alors suivre la forme dans ses déplacements. Il est possible de modifier les dimensions de la Forme sélectionner en déplaçant les segments du cadre avec la souris en maintenant le bouton droit de la souris enfoncé.
OutilSelectionner est ainsi devenue un enfant de OutilForme afin de pouvoir afficher un cadre autour de la Forme sélectionner. Le modèle CadreSelection à été ajouté ainsi que la vue VueCadreSelection afin de pouvoir l'afficher dans le PanneauDessin.
Note : il est aussi possible de redimensionner la Forme sélectionner en déplaçant les coin du cadre mais il est assez délicat de sélectionner un des coins du cadre.
La modification de l'OutilSelectionner rend maintenant possible le déplacement dans la zone de dessin la Forme sélectionner. Un double clic permet l'ouverture d'une fenêtre renseignant l'utilisateur de la forme sélectionner. Il est ensuite possible de déplacer la forme en maintenant enfoncé le bouton gauche de la souris.
Note : il n'est pas nécessaire de faire un double clic avant pour déplacer la Forme, un simple click sélectionne déjà la Forme, mais n'affiche pas les informations.
Auparavant, l'OutilEtoile prenait en paramètre pour son constructeur un PanneauBarreOutils afin de pouvoir récupérer les valeurs des JSpinner dédié à son nombre et à la longueur de ses branches. Dorénavant, il passe par le PanneauDessin pour avoir ces valeurs, sur le même principe que pour connaître la couleur courante des dessins. Cela est possible grâce au classes ActionChoisirLongueurBranches et ActionChoisirNombreDeBranches qui fonctionnent exactement comme ActionChoisirEpaisseurTrait : elles implémente l'interface ChangeListener et surchargent la fonction stateChanged(ChangeEvent) des JSpinners lié aux Actions.
ActionEffacer à été renomé en ActionEffacerTout afin d'être cohérent avec la création de OutilEffacer.
PanneauBarreOutils est un Jpanel contenant 1 autres JPanel. IL contient l'ensembles des boutons et autres composant généraux (remplissage, épaisseur du trait...) et un autre JPanel dont le gestionnaire de placement est un CardLayout. Ainsi on fait apparaitres les JSpinner pour l'Etoile que lorsqu'on utilise OutilEtoile car ceux-ci sont dans un JPanel dédié. Dans les autres cas, un JPanel vide est visible. Au final on a :
PanneauBarreOutils : Contient 2 JPanels
______________
| _________ |
| | -|-|--> Contient les boutons
| | | |
| | _________ | |
| _________ |
| | -|-|--> Contient deux JPanels, utilise le gestionnaire CardLayout :
| | | | - L'un contient les boutons propre à l'étoile.
| | _________ | | - L'un contient les boutons propre à la sélection.
| _____________ | - L'un contient les boutons propres au crayon.
- L'un est vide pour quand il y en a besoin.
- Il est possible d'en rajouter pour d'autres outils.
.
|
+-- src\fr\eseo\poo\projet\artiste
+-- controleur
| +-- action
| | +-- ActionChoisirForme
| | +-- ActionChoisirEpaisseurTrait -> Ajout
| | +-- ActionChoisirNombreDeBranches -> Ajout
| | +-- ActionChoisirLongueurBranches -> Ajout
| | +-- ActionSelectionner
| | +-- ActionEffacer renomé en ActionEffacerTout
| | +-- ActionChoisirRapport -> Ajout
| | +-- ActionCrayon -> Ajout
| |
| +-- outils
| +-- OutilSelectionner
| +-- OutilTracerCrayon -> Ajout
| +-- OutilLigne
| +-- OutilEtoile
| +-- OutilEllipse
| +-- OutilEffacer -> Ajout
| +-- OutilChangerCouleur -> Ajout
| +-- OutilEpicycloide -> Ajout
|
+-- modele\forme
| +-- CadreSelection -> Ajout
| +-- TracerCrayon -> Ajout
| +-- EpaisseurTrait -> Ajout
| +-- Epicycloide -> Ajout
| +-- Ligne
| +-- Etoile
| +-- Ellipse
|
|
+-- vue
+-- forme
| +-- VueCadreSelection -> Ajout
| +-- VueTracerCrayon -> Ajout
| +-- VueEpicycloide -> Ajout
| +-- VueLigne
| +-- VueEllipse
| +-- VueEtoile
|
+-- ihm
+-- PanneauBarreOutil
+-- PanneauDessin