Liens
Description Générale
Le système de liens dans l'éditeur graphique d'AlgoForge est conçu pour représenter graphiquement les relations entre différents éléments graphiques (ElementGraphique
). Ces liens permettent de connecter des éléments parent-enfant, de décomposer des structures, ou de représenter des relations spécifiques. Le système repose sur une classe abstraite Lien
et plusieurs classes dérivées qui implémentent des types spécifiques de liens.
Structure du Système de Liens
1. Classe Ligne
La classe Ligne
représente une ligne graphique reliant deux points. Elle est utilisée comme composant de base pour dessiner des liens.
Attributs :
_abscisse1
,_ordonnee1
: Coordonnées du premier point._abscisse2
,_ordonnee2
: Coordonnées du second point._abscisseMilieu
,_ordonneeMilieu
: Coordonnées du milieu de la ligne.
Méthodes :
update()
:- Met à jour la position, la largeur, et la rotation de la ligne en fonction des coordonnées des deux points.
setDebut(abscisse, ordonnee)
:- Définit la position du premier point.
setFin(abscisse, ordonnee)
:- Définit la position du second point.
2. Classe Abstraite : Lien
La classe Lien
est une classe abstraite qui définit les propriétés et méthodes de base pour tous les types de liens. Elle n'est pas destinée à être instanciée directement, mais à être héritée par des classes spécifiques.
Attributs :
_elemGraphiqueParent
: L'élément graphique parent de la relation._elemGraphiqueEnfant
: L'élément graphique enfant de la relation._espaceTravail
: L'espace de travail où le lien est affiché.
Méthodes :
update()
:- Méthode abstraite destinée à être implémentée dans les classes dérivées.
- Met à jour la position et l'apparence du lien.
supprimer()
:- Méthode abstraite destinée à être implémentée dans les classes dérivées.
- Supprime le lien de l'espace de travail.
3. Classe LienDroit
La classe LienDroit
représente un lien graphique simple constitué d'une seule ligne droite.
Elle est utilisée pour relier une Condition
d'une StructureAlternative
à un élément enfant, et ce seulement si la condition n'a qu'un seul enfant.
Attributs :
_ligne
: Une instance de la classeLigne
représentant le lien.
Méthodes :
update()
:- Met à jour la position de la ligne en fonction des ancres de décomposition et de composition des éléments parent et enfant.
supprimer()
:- Supprime la ligne de l'espace de travail.
4. Classe LienTriple
La classe LienTriple
représente un lien graphique complexe composé de trois lignes perpendiculaires.
Elle est utilisée pour relier une StructureIterative
à ses sous-éléments, ou une Condition
d'une StructureAlternative
à plusieurs éléments enfants.
Attributs :
_ligneDecomp
: Ligne verticale représentant la décomposition._ligneH
: Ligne horizontale reliant les sous-éléments._ligneV
: Ligne verticale reliant un sous-élément.
Méthodes :
update()
:- Met à jour les trois lignes en fonction des ancres des éléments parent et enfant.
- Si le parent n'a qu'un seul enfant et qu'ils sont proches, une seule ligne droite est tracée.
supprimer()
:- Supprime les trois lignes de l'espace de travail.
5. Classe LienCompositionProbleme
La classe LienCompositionProbleme
est utilisée pour représenter la décomposition d'un problème en sous-problèmes. Elle utilise un symbole de décomposition (double barre) et deux lignes.
Elle est utilisée pour relier un Probleme
à ses enfants.
Attributs :
_symboleDecomposition
: Symbole graphique représentant la décomposition._ligneH
: Ligne horizontale reliant les sous-problèmes._ligneV
: Ligne verticale reliant un sous-problème.
Méthodes :
update()
:- Met à jour la position du symbole de décomposition et des lignes.
- Si le parent n'a qu'un seul enfant et qu'ils sont proches, le symbole est masqué et deux lignes droites sont tracées.
supprimer()
:- Supprime le symbole et les lignes de l'espace de travail.
Fonctionnement Général
1. Création d'un Lien
Lorsqu'un lien est créé, une instance de la classe appropriée (LienDroit
, LienTriple
, ou LienCompositionProbleme
) est instanciée avec les paramètres suivants :
- L'élément graphique parent.
- L'élément graphique enfant.
- L'espace de travail.
2. Mise à Jour du Lien
La méthode update()
est appelée pour ajuster la position et l'apparence du lien en fonction des coordonnées des ancres des éléments parent et enfant. Chaque type de lien implémente cette méthode différemment pour répondre à ses besoins spécifiques.
3. Suppression d'un Lien
Lorsqu'un lien doit être supprimé, la méthode supprimer()
est appelée. Cette méthode supprime les composants graphiques du lien (lignes, symboles, etc.) de l'espace de travail.
Exemple d'Utilisation
Création d'un Lien Droit
const lienDroit = new LienDroit(parentElement, childElement, workspace);
workspace.appendChild(lienDroit);
Mise à Jour d'un Lien
lienDroit.update();
Suppression d'un Lien
lienDroit.supprimer();
Points Techniques
1. Ancres de Décomposition et de Composition
Les ancres sont des points spécifiques sur les éléments graphiques qui déterminent où les liens doivent se connecter. Chaque élément graphique dispose de méthodes comme getAncreDecomposition()
et getAncreComposition()
pour fournir ces coordonnées.
2. Gestion des Distances et Angles
Pour les liens complexes comme LienTriple
et LienCompositionProbleme
, la distance et l'angle entre les ancres parent et enfant sont calculés pour déterminer si une ligne droite ou une forme en "L" doit être tracée.
3. Personnalisation des Liens
Les classes dérivées de Lien
peuvent être étendues pour créer de nouveaux types de liens avec des comportements spécifiques.