~ / TIS3 / AL / tps / 6-curve-editing /

Interaction graphique avec Java/Swing

© 2009—2016 - Renaud Blanch

Le but de ce TD est d'utiliser les machines à états pour mettre en œuvre des interactions graphiques sophistiquées. Il va s'agir de permettre le dessin de courbes en reproduisant l'interaction qu'offre un logiciel professionnel d'édition de dessin vectoriel: Illustrator d'Adobe.

Questions

Récupérez le squelette de l'application qui ouvre une fenêtre dans laquelle vous allez pouvoir dessiner. Vérifiez que vous pouvez exécutez ce code et que vous le comprenez.

Faites en sorte que chaque clic gauche de la souris dessine un petit carré à l'endroit où se situe le curseur de la souris. Ajoutez un menu “Édition” avec une entrée “Remise à zéro” qui efface l'aire de travail.

Faites en sorte que les points soient reliés entre-eux par une ligne brisée, celle-ci s'achevant (et une nouvelle ligne pouvant alors commencer au prochain clic) lorsque l'utilisateur appuie sur la touche ESC. Faites en sorte que les points d'une ligne existante soient éditables, c'est-à-dire qu'on puisse les déplacer par un glissement lorsque la souris se situe dans le carré qui symbolise le point.

Transformez l'interaction pour que lorsqu'un point est donné par un glisser (et non un simple clic), ce dernier spécifie la tangente à utiliser pour dessiner une courbe et non un segment de droite. La documentation d'Illustrator sur le dessin de courbe avec l'outil crayon, au paragraphe “Draw curves with the Pen tool” explique l'interaction attendue.

Faites en sorte qu'on puisse éditer les tangentes avec l'interaction suivante : un clic sur un point le sélectionne et affiche sa tangente avec une poignée à chaque extrémité. Le déplacement de ces poignées doit modifier interactivement la courbure du morceau de courbe concerné.

Bonus

Implémentez le comportement complet de l'outil crayon d'Illustrator.

Documentation

Le point d'entrée dans la documentation de Java est la classe Graphics2D qui permet le dessin. Elle permet en particulier de dessiner des Shapes, dont des Line2D, CubicCurve2D et QuadCurve2D.

mise à jour : 15 avril 2013