Example #1
0
 /// <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);
 }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }