Exemple #1
0
 /// <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;
 }
Exemple #2
0
        /// <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;
                }
            }
        }
Exemple #3
0
 public Lien(Noeud sour, Noeud dest, Color c, int e, string card)
     : base(sour, dest, c, e)
 {
     cardinalité = card;
     police = new Font("Arial", 12);
 }
Exemple #4
0
 public Lien(Noeud sour, Noeud dest, Color c, int e)
     : base(sour, dest, c, e)
 {
     police = new Font("Arial", 12);
 }
Exemple #5
0
 public Lien(Noeud sour, Noeud dest, Color c, int e, string card) : base(sour, dest, c, e)
 {
     cardinalité = card;
     police      = new Font("Arial", 12);
 }
Exemple #6
0
 public Lien(Noeud sour, Noeud dest, Color c, int e) : base(sour, dest, c, e)
 {
     police = new Font("Arial", 12);
 }
Exemple #7
0
 public Contrainte(Noeud sour, Noeud dest, Color c, int e, Champ cS, Champ cD)
     : base(sour, dest, c, e)
 {
     champSource      = cS;
     champDestination = cD;
 }
Exemple #8
0
 public Contrainte(Noeud sour, Noeud dest, Color c, int e) : base(sour, dest, c, e)
 {
 }
Exemple #9
0
 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();
 }
Exemple #10
0
 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();
 }
Exemple #11
0
 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
     }
 }
Exemple #12
0
        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;
        }
Exemple #13
0
 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();
 }
Exemple #14
0
 public Contrainte(Noeud sour, Noeud dest, Color c, int e, Champ cS, Champ cD)
     : base(sour, dest, c, e)
 {
     champSource = cS;
     champDestination = cD;
 }
Exemple #15
0
 public Contrainte(Noeud sour, Noeud dest, Color c, int e)
     : base(sour, dest, c, e)
 {
 }
Exemple #16
0
 /// <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;
         }
     }
 }