public void AddReference(ItemSide src, Reference newref) { switch (src) { case ItemSide.Bottom: Bottom.Add(newref); break; case ItemSide.Left: Left.Add(newref); break; case ItemSide.Right: Right.Add(newref); break; case ItemSide.Top: Top.Add(newref); break; } }
void FillFromDiagram(Diagram diagram) { // nejdrive vybereme zdrojovou a cilovou stranu foreach (DiagramTableItem fromTable in diagram.Tables) { foreach (ForeignKey fk in TableStructureExtension.GetConstraints <ForeignKey, ForeignKey>(fromTable.Table)) { DiagramTableItem toTable = diagram.FindTable(fk.PrimaryKeyTable); if (toTable != null) { Interval fromx = fromTable.HorInterv, tox = toTable.HorInterv; Interval fromy = fromTable.VerInterv, toy = toTable.VerInterv; ItemSide src = ItemSide.None, dst = ItemSide.None; if (fromx.Intersection(tox).Size > 0) { if (fromy <= toy) { src = ItemSide.Bottom; dst = ItemSide.Top; } if (toy <= fromy) { src = ItemSide.Top; dst = ItemSide.Bottom; } // prekryv pres oba rozmery - caru nebudeme kreslit } else if (fromy.Intersection(toy).Size > 0) { if (fromx <= tox) { src = ItemSide.Right; dst = ItemSide.Left; } if (tox <= fromx) { src = ItemSide.Left; dst = ItemSide.Right; } } else //neni prekryv ani v jedne souradnici { if (fromx <= tox && fromy <= toy) { src = ItemSide.Right; dst = ItemSide.Top; } if (fromx >= tox && fromy <= toy) { src = ItemSide.Left; dst = ItemSide.Top; } if (fromx <= tox && fromy >= toy) { src = ItemSide.Right; dst = ItemSide.Bottom; } if (fromx >= tox && fromy >= toy) { src = ItemSide.Left; dst = ItemSide.Bottom; } } AddReference(fromTable, toTable, fk, src, dst); } } } }
private void AddReference(DiagramTableItem fromTable, DiagramTableItem toTable, ForeignKey fk, ItemSide src, ItemSide dst) { Table from = AddTable(fromTable); Table to = AddTable(toTable); Reference newref = AddReference(fk, from, to); if (!newref.IsMultiple) { from.AddReference(src, newref); to.AddReference(dst, newref); } }