/// <summary> /// 获取多个线路的共同终结点 /// </summary> /// <param name="cs"></param> /// <returns></returns> private Model.Circuit GetEndPart(Model.Circuit c, IEnumerable <Model.Circuit> cs) { if (c.Ins.Count > 0) { Model.Circuit end = null; foreach (var mc in cs) { //如果这条路与提供的结点相同,则查找另一条路、、保证所有子通路结点一至 if ((mc.Outs.Count > 1 || mc.Outs.Count == 0 || mc.Outs[0].Part != c.Part) && !CheckEndPart(c, mc.Outs)) { end = null; break; } else { end = c; } } if (end == null && c.Outs.Count > 0) { end = GetEndPart(c.Outs[0], cs); } return(end); } return(null); }
/// <summary> /// 开始拖放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ToolBarItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var part = this.DataContext as Model.Part; var item = new Model.Circuit() { Part = part.Clone() }; item.Part.Id = Guid.NewGuid().ToString("n"); item.Part.TypeId = part.Id; var unit = new Elements.Unit() { Model = item }; unit.Height = Helper.Config.GridSize.Height - Helper.Config.ElementMargin.Top - Helper.Config.ElementMargin.Bottom; unit.Width = Helper.Config.GridSize.Width - Helper.Config.ElementMargin.Left - Helper.Config.ElementMargin.Right; unit.IcoSource = this.ico.Source; var p = e.GetPosition(null); //var editor = Silverlight.Common.Visual.TreeHelper.FindAnchestor<Editor>(this); unit.StartDrag(p); }
/// <summary> /// 检查是否当前元素在指定的集合中所有线路中都存在 /// 如果是表示他们都以此元件为终结点 /// </summary> /// <param name="c"></param> /// <param name="cs"></param> /// <returns></returns> private bool CheckEndPart(Model.Circuit c, IEnumerable <Model.Circuit> cs) { bool isexists = false; foreach (var mcs in cs) { isexists = true; if (mcs.Part == c.Part) { isexists = true; } else if (!CheckEndPart(c, mcs.Outs)) { isexists = false; break; } } return(isexists); }