示例#1
0
        public C2iObjetDeSchema GetObjetDeSchema(CElementDeSchemaReseau element)
        {
            C2iLienDeSchemaReseau lien = new C2iLienDeSchemaReseau();

            lien.ElementDeSchema = element;
            return(lien);
        }
示例#2
0
 //---------------------------------------------------
 //S'arrange pour que les liaisons ne se chevauchent pas
 public void ArrangerLiaisons()
 {
     foreach (C2iObjetDeSchema obj in Childs)
     {
         C2iLienDeSchemaReseau lien = obj as C2iLienDeSchemaReseau;
         if (lien != null && !typeof(C2iLienDeSchemaReseauNoDelete).IsAssignableFrom(lien.GetType()))
         {
             ArrangerLien(lien);
         }
     }
 }
示例#3
0
        public void ArrangerLien(C2iLienDeSchemaReseau lien)
        {
            if (lien.Points.Length != 2)
            {
                return;
            }
            C2iObjetDeSchema parent = lien.Parent as C2iObjetDeSchema;

            if (parent == null)
            {
                return;
            }
            foreach (C2iObjetDeSchema objetDeSchema in parent.Childs)
            {
                C2iLienDeSchemaReseau lien2 = objetDeSchema as C2iLienDeSchemaReseau;
                if (lien2 != null && lien2 != lien && lien2.Points.Length == 2 &&
                    lien2.PositionAbsolue == lien.PositionAbsolue &&
                    lien2.Size == lien.Size)
                {
                    //Les deux liens se chevauchent : Ajoute un point intermédiaire
                    Point ptMilieu = new Point((lien.Points[0].X + lien.Points[1].X) / 2,
                                               (lien.Points[0].Y + lien.Points[1].Y) / 2);
                    if (lien.Points[0].Y == lien.Points[1].Y)
                    {
                        ptMilieu.Offset(00, 20);
                    }
                    else
                    {
                        double fPente = -((lien.Points[0].X - lien.Points[1].X) / (lien.Points[0].Y - lien.Points[1].Y));
                        double fX     = 20 / (Math.Sqrt(1 + fPente * fPente));
                        double fY     = fPente * fX;
                        ptMilieu.Offset((int)fX, (int)fY);
                        Point[] pts = new Point[]
                        {
                            lien.Points[0],
                            ptMilieu,
                            lien.Points[1]
                        };
                        lien.Points = pts;
                    }
                }
            }
        }