/// <summary> /// Création d'un trait de couleur c, d'épaisseur e, reliant /// les rectangles source et destination /// </summary> /// <param name="sour">Rect source</param> /// <param name="dest">Rect destination</param> /// <param name="c">couleur initiale</param> /// <param name="e">epaisseur initiale</param> public Trait(Noeud sour, Noeud dest, Color c, int e) { source = sour; destination = dest; couleur = c; épaisseur = e; }
/// <summary> /// Lit depuis XML /// </summary> /// <param name="Xnode">Donnée au format XML</param> /// <param name="noeuds">Liste des noeuds</param> public Trait(XmlNode Xnode, List <Noeud> noeuds) { foreach (XmlNode xN in Xnode.ChildNodes) { switch (xN.Name.ToUpper()) { case "SOURCE": int i = int.Parse(xN.ChildNodes[0].InnerText); foreach (Noeud nd in noeuds) { if (nd.ID == i) { source = nd; break; } } break; case "DESTINATION": int j = int.Parse(xN.ChildNodes[0].InnerText); foreach (Noeud nd in noeuds) { if (nd.ID == j) { destination = nd; break; } } break; case "EPAISSEUR": épaisseur = int.Parse(xN.InnerText); break; case "COULEUR": int c = int.Parse(xN.InnerText); couleur = Color.FromArgb(c); break; } } }
public Lien(Noeud sour, Noeud dest, Color c, int e, string card) : base(sour, dest, c, e) { cardinalité = card; police = new Font("Arial", 12); }
public Lien(Noeud sour, Noeud dest, Color c, int e) : base(sour, dest, c, e) { police = new Font("Arial", 12); }
public Contrainte(Noeud sour, Noeud dest, Color c, int e, Champ cS, Champ cD) : base(sour, dest, c, e) { champSource = cS; champDestination = cD; }
public Contrainte(Noeud sour, Noeud dest, Color c, int e) : base(sour, dest, c, e) { }
private void Supprime(Noeud noeud) { Action action = new Action(Type_Action.Détruire, new List<Object> { noeud }); PushUndo(action); for (int i = traits.Count - 1; i >= 0; i--) { Trait t = traits[i]; if ((t.Source == noeud) || (t.Destination == noeud)) { Supprime(t); action.AddSubAction(new Action(Type_Action.Détruire, new List<Object> { t })); } } noeud.Supprime(); }
private void DessinObjets_KeyDown(object sender, KeyEventArgs e) { if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) return; switch (e.KeyCode) { case Keys.Escape: noeudCourant = null; sélection = Rectangle.Empty; break; case Keys.Down: origin.Y += 1; break; case Keys.Up: origin.Y -= 1; break; case Keys.Right: origin.X += 1; e.Handled = true; break; case Keys.Left: origin.X -= 1; e.Handled = true; break; case Keys.PageDown: origin.Y += 50; break; case Keys.PageUp: origin.Y -= 50; break; } Refresh(); }
private void DessinObjets_MouseDown(object sender, MouseEventArgs e) { #region Mode sélection multiple activé if (sélection != Rectangle.Empty) { if (sélection.Contains(e.Location)) { DéplacementMultipleEncours = true; StartBlockMovement = e.Location; origineDéplacement = e.Location; return; } else { sélection = Rectangle.Empty; DéplacementMultipleEncours = false; } } #endregion #region Recherche éléments courant Point pointInModel = ScreenToModel(e.Location); // Vérifier que le point convient if (!Screen.PrimaryScreen.Bounds.Contains(e.Location)) return; noeudCourant = TrouveNoeudCourant(pointInModel); traitCourant = TrouveTraitCourant(e.Location); #endregion if (e.Button == MouseButtons.Right) { #region Bouton droit if (noeudCourant != null) { List<string> libellés = new List<string>() { "Supprimer", "_", "Modifier" }; switch (noeudCourant.GetType().Name) { case "Noeud": break; case "Relation": libellés.Add("Editer la relation"); break; case "Entité": libellés.Add("Editer l'entité"); break; case "Association": libellés.Add("Editer l'association"); break; } ContextMenuStrip cm = new ContextMenuStrip(); foreach (string t in libellés) { if (t == "_") cm.Items.Add(new ToolStripSeparator()); else { ToolStripMenuItem suppr = new ToolStripMenuItem(t); suppr.Click += new EventHandler(traitementMenu_Click); cm.Items.Add(suppr); } } System.Diagnostics.Trace.WriteLine(noeudCourant); cm.Show(this, e.Location); } else if (traitCourant != null) { switch (traitCourant.GetType().Name) { case "Contrainte": EditionContrainte co = new EditionContrainte((Contrainte)traitCourant, (Relation)traitCourant.Source, (Relation)traitCourant.Destination); co.ShowDialog(); break; case "Lien": EditionLien eL = new EditionLien((Lien)traitCourant); eL.ShowDialog(); break; default: Parametres pa = new Parametres(traitCourant, false); pa.ShowDialog(); break; } Refresh(); } else { Parametres pa = new Parametres(this.option, useCustomDialog); pa.ShowDialog(); Refresh(); } #endregion } else if (e.Button == MouseButtons.Left) { #region Bouton gauche if (déplacement.Checked) { if (noeudCourant != null) { #region Déplacement Simple Déplacement_Simple = true; origineDéplacement = pointInModel; StartBlockMovement = e.Location; #endregion } else { #region Déplacement multiple if (sélection != Rectangle.Empty) { if (sélection.Contains(e.Location)) { selectedNodes = new List<Noeud>(); } } else { sélection = new Rectangle(e.Location, new Size(0, 0)); selectedNodes = new List<Noeud>(); } #endregion } } else { #region mode dessin if (noeudCourant == null) { Noeud nouv = null; nouv = NoeudParDéfaut(pointInModel, Option.Type_schéma); if (nouv != null) { PushUndo(new Action(Type_Action.Créer, new List<object>() { nouv })); } } else { dessinTrait = true; } #endregion } Refresh(); #endregion } }
private Noeud NoeudParDéfaut(Point point, TypeSchéma typeschéma) { Noeud noeud = null; switch (typeSchéma) { case TypeSchéma.Graphe: noeud = new Noeud(point, option.Taille_Noeud, option.Couleur_Noeud, option.Épaisseur_Noeud); noeuds.Add(noeud); break; case TypeSchéma.Relationnel: noeud = new Relation(point, option.Taille_Noeud, option.Couleur_Noeud, option.Épaisseur_Noeud); AttributRelation pa = new AttributRelation((Relation)noeud); if (pa.ShowDialog() == DialogResult.OK) noeuds.Add(noeud); break; case TypeSchéma.EntitéAssociation: noeud = new Entité(point, option.Taille_Noeud, option.Couleur_Noeud, option.Épaisseur_Noeud); EditionEntité ed = new EditionEntité((Entité)noeud); if (ed.ShowDialog() == DialogResult.OK) noeuds.Add(noeud); break; } return noeud; }
private void Coller() { if (Clipboard.ContainsData("Noeud")) { #region Colle un noeud Object x = (Object)Clipboard.GetData("Noeud"); if (x != null) { Noeud n = x as Noeud; Noeud n1 = n.Clone(); List<Trait> nouveauxTraits = new List<Trait>(); foreach (Trait t in traits) { if (t.Source.ID == n.ID) nouveauxTraits.Add(new Trait(n1, t.Destination, t.Couleur, t.Epaisseur)); if (t.Destination.ID == n.ID) nouveauxTraits.Add(new Trait(t.Source, n1, t.Couleur, t.Epaisseur)); } noeuds.Add(n1); Action action = new Action(Type_Action.Créer, new List<object> { n1 }); PushUndo(action); foreach (Trait t in nouveauxTraits) { traits.Add(t); action.AddSubAction(new Action(Type_Action.Créer, new List<object> { t })); } Refresh(); return; } #endregion } if (Clipboard.ContainsData("Noeuds")) { #region Colle une liste de noeuds List<Noeud> ns = (List<Noeud>)Clipboard.GetData("Noeuds"); if (ns != null) { List<Noeud> nouveauNoeuds = new List<Noeud>(); List<Trait> nouveauxTraits = new List<Trait>(); foreach (Noeud n in ns) { Point p = n.Position; p.Offset(20, 20); Noeud n1 = new Noeud(p, n.Taille, n.CouleurBord, n.Epaisseur); nouveauNoeuds.Add(n1); Action action = new Action(Type_Action.Créer, new List<object> { n1 }); PushUndo(action); foreach (Trait t in traits) { if (t.Source.ID == n.ID) { nouveauxTraits.Add(new Trait(n1, t.Destination, t.Couleur, t.Epaisseur)); action.AddSubAction(new Action(Type_Action.Créer, new List<object> { t })); } if (t.Destination.ID == n.ID) { nouveauxTraits.Add(new Trait(t.Source, n1, t.Couleur, t.Epaisseur)); action.AddSubAction(new Action(Type_Action.Créer, new List<object> { t })); } } } foreach (Noeud n in nouveauNoeuds) noeuds.Add(n); foreach (Trait t in nouveauxTraits) traits.Add(t); Refresh(); return; } #endregion } if (Clipboard.ContainsData(DataFormats.Text)) { string t = (string)Clipboard.GetData(DataFormats.Text); return; } sélection = Rectangle.Empty; Refresh(); }
/// <summary> /// Lit depuis XML /// </summary> /// <param name="Xnode">Donnée au format XML</param> /// <param name="noeuds">Liste des noeuds</param> public Trait(XmlNode Xnode, List<Noeud> noeuds) { foreach (XmlNode xN in Xnode.ChildNodes) { switch (xN.Name.ToUpper()) { case "SOURCE": int i = int.Parse(xN.ChildNodes[0].InnerText); foreach (Noeud nd in noeuds) { if (nd.ID == i) { source = nd; break; } } break; case "DESTINATION": int j = int.Parse(xN.ChildNodes[0].InnerText); foreach (Noeud nd in noeuds) { if (nd.ID == j) { destination = nd; break; } } break; case "EPAISSEUR": épaisseur = int.Parse(xN.InnerText); break; case "COULEUR": int c = int.Parse(xN.InnerText); couleur = Color.FromArgb(c); break; } } }