public C2iObjetDeSchema GetObjetDeSchema(CElementDeSchemaReseau element) { C2iLienDeSchemaReseau lien = new C2iLienDeSchemaReseau(); lien.ElementDeSchema = element; return(lien); }
//--------------------------------------------------- //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); } } }
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; } } } }