/// <summary> /// 连接二个结点 /// </summary> /// <param name="start"></param> /// <param name="end"></param> public void Connect(Elements.BaseElement start, Elements.BaseElement end) { var line = new Elements.ConnectLine(this); line.StartElement = start; line.Connect(end); }
/// <summary> /// 检查二个元素是否可以相连 /// </summary> /// <param name="srcElement"></param> /// <param name="tarElement"></param> /// <returns></returns> public bool CheckCanLine(Elements.BaseElement srcElement, Elements.BaseElement tarElement) { if (tarElement.Model.Part.IsStart) { return(false); } return(!srcElement.Model.Outs.Contains(tarElement.Model)); }
/// <summary> /// 连接终结点 /// </summary> /// <param name="el"></param> public void Connect(Elements.BaseElement el) { if (el != null && el != StartElement && backGrid.CheckCanLine(StartElement, el)) { EndElement = el; EndPoint = el.InPoint; StartElement.Model.Outs.Add(el.Model); el.Model.Ins.Add(StartElement.Model); Position(); if (StartElement is Unit) { ((Unit)StartElement).RemoveUnitHandle += () => { this.Hide(); }; } if (el is Unit) { ((Unit)el).RemoveUnitHandle += () => { this.Hide(); }; } if (!StartElement.Model.Part.IsEnd) { ContextMenuService.SetContextMenu(this, menu);//绑定菜单 } if (Change != null) { Change(this, null); } backGrid.BackCanvas.MouseMove -= new MouseEventHandler(BackCanvas_MouseMove); backGrid.BackCanvas.MouseLeftButtonUp -= new MouseButtonEventHandler(BackCanvas_MouseLeftButtonUp); } }
/// <summary> /// 添加元素 /// </summary> /// <param name="el"></param> public void AddElement(Elements.BaseElement el) { if (!elements.Contains(el)) { this.BackCanvas.Children.Add(el); elements.Add(el); el.CanvasGrid = this; el.ResetPosition(this); if (Change != null) { el.Change += Change; } CheckCanvasGrid(); //如果是出口,则直接与终结点连接 if (el.Model.Part.IsEnd) { Connect(el, EndPoint); } } }