Fichier Classe(s) définie(s) Description
Point2D.java Point2D Des classes de nature mathématique / géométrique
Vector2D.java Vector2D
AlignedRectangle2D.java AlignedRectangle2D
Point2DUtil.java Point2DUtil Une classe contenant des méthodes pour tester si un point est à l'intérieur d'un polygone (utile pour réaliser des effets de surbrilliance, et pour réaliser la sélection en lasso), pour calculer l'enveloppe convexe d'un ensemble de points (utile pour dessiner des "bulles" autour d'un ou plusieurs objets).
GraphicsWrapper.java GraphicsWrapper Ces deux classes permettent de compiler soit (1) une application qui utilise OpenGL pour dessiner, ou bien (2) un applet qui utilise Java2D/Graphics2D pour dessiner. GraphicsFramework est un cadriciel qui reçoit les événements de souris et de clavier, et ensuite appelle des méthodes dans le code client. GraphicsFramework contient aussi le point d'entrée main(). GraphicsWrapper est une abstraction des routines de dessin, qui facilite aussi la gestion de zoom et pan dans une vue 2D (transformation entre les systèmes de coordonnées "pixels" et "espace monde" au moment du dessin et au moment de la réception d'événements de souris). Le code client est supposé utiliser GraphicsWrapper pour dessiner, au lieu d'appeler directement des routines de Java2D/Graphics2D ou bien des routines de OpenGL.

En résumé, GraphicsFramework appelle le code client, qui appelle ensuite GraphicsWrapper pour dessiner:
         GraphicsFramework
                 |
                 v
           (code client)
                 |
                 v
          GraphicsWrapper
       
Pour compiler la version application du code, copiez doNotCompile/GraphicsFramework-APPLICATION-JOGL-OPENGL.java et doNotCompile/GraphicsWrapper-JOGL-OPENGL.java par dessus src/GraphicsFramework.java et src/GraphicsWrapper.java, et recompilez.

Pour compiler la version applet du code, copiez doNotCompile/GraphicsFramework-APPLET-JAVA2D.java et doNotCompile/GraphicsWrapper-JAVA2D.java par dessus src/GraphicsFramework.java et src/GraphicsWrapper.java, et recompilez. Ensuite, ouvrez le fichier index_test.html qui contient une balise applet.

Ne modifiez pas les fichiers GraphicsFramework*java ou GraphicsWrapper*java, car ces modifications pourront être perdues, brisant votre code, lorsque vous copiez une autre version par dessus.

Pour compiler et exécuter la version application du code, vous avez besoin de la librarie JOGL. Une copie se trouve au http://profs.etsmtl.ca/mmcguffin/code/java/lib/JOGL/
GraphicsFramework.java GraphicsFramework
Constant.java Constant Quelques constantes.
PopupWidget.java PopupWidget Des classes servant à définir des widgets contextuels
RadialMenuWidget.java RadialMenuWidget
LassoRectNodeSelectorWidget.java LassoRectNodeSelectorWidget
Node.java Node Stockent le réseau (graphe). Network.selectedNodes stocke aussi le sous-ensemble de noeuds sélectionnés.

Dans la classe Network, il y a une méthode breadthFirstTraversal() qui effectue un parcours en largeur, et qui utilise le patron "visiteur". Le parcours en largeur est utilisé ensuite par les méthodes findNeighbourhoodOfNode*(), qui retrouvent le voisinage d'un noeud ou d'un groupe de noeuds. Une des méthodes findNeighbourhoodOfNode*() est ensuite utilisée par la méthode performConcentricCircleLayout(), qui calcule une disposition en cercles concentriques.
Network.java Network
SimpleNetworkVisualizer.java SimpleNetworkVisualizer La classe principale. SimpleNetworkVisualizer est le client de GraphicsFramework.

Interface utilisateur:
  • Bouton gauche de souris: déplacer un noeud individuel, ou la sélection, ou le réseau au complet
  • Shift+Bouton gauche de souris: sélection en rectangle/lasso
  • Bouton droit de souris: zoom
  • Shift+Bouton droit de souris: menu radial menu. Activer ce menu par dessus un noeud individuel pour voir plus d'options.
  • Appuyer la touche "s": pour imprimer des informations supplémentaires au stdout.
Dans le code, cherchez la chaîne "sleep" pour retrouver le thread qui appelle simulateOneStepOfForceDirectedLayout() pour mettre à jour la disposition dirigée par forces ("force-directed layout").

Le réseau est crée dans le constructeur de SimpleNetworkVisualizer.