private static void MoveHorizontalLineEle(LadderLogicModule ladderLogicModule, int index, List <BaseViewModel> models)
        {
            BaseViewModel         model;
            VerticalLineViewModel VLine;
            int line = models[0].Y;

            if (index != 0)
            {
                for (int i = 0; i < models.Count; i++)
                {
                    model = models[i];
                    ladderLogicModule.RemoveElement(model.X, model.Y);
                    model.Y -= index;
                    ladderLogicModule.ReplaceElement(model);
                }
                //对每一行,只保留其上一行的VLine(保持图的基本连通性),并一起移动
                var VLines = ladderLogicModule.LadderVerticalLines.Where(x => { return(x.Y == line - 1); }).ToList();
                for (int i = 0; i < VLines.Count(); i++)
                {
                    VLine = VLines[i];
                    ladderLogicModule.RemoveVerticalLine(VLine.X, VLine.Y);
                    VLine.Y -= index;
                    ladderLogicModule.ReplaceVerticalLine(VLine);
                }
            }
        }
        private static void MoveLadderBlock(LadderLogicModule ladderLogicModule, IEnumerable <BaseViewModel> block, int desY)
        {
            block = block.OrderBy(x => { return(x.X); });
            int indexY = block.First().Y;
            int startX = block.First().X;
            int endX   = block.Last().X;

            foreach (var ele in block)
            {
                ladderLogicModule.RemoveElement(ele.X, ele.Y);
                ele.Y = desY;
                ladderLogicModule.ReplaceElement(ele);
            }
            var tempVlines = new List <VerticalLineViewModel>(ladderLogicModule.LadderVerticalLines.Where(x => { return(x.Y == indexY && x.X >= startX && x.X < endX); }));

            if (tempVlines.Count() > 0)
            {
                foreach (var VLine in tempVlines)
                {
                    for (int i = 1; i <= indexY - desY; i++)
                    {
                        ladderLogicModule.ReplaceVerticalLine(new VerticalLineViewModel()
                        {
                            X = VLine.X, Y = VLine.Y - i
                        });
                    }
                }
            }
            RemoveVLines(ladderLogicModule, desY, startX - 1, indexY - 1);
            RemoveVLines(ladderLogicModule, desY, endX, indexY - 1);
        }
        private static void MoveAllElements(LadderLogicModule ladderLogicModule, int index)
        {
            var allElements = new List <BaseViewModel>(ladderLogicModule.LadderElements);

            allElements.AddRange(ladderLogicModule.LadderVerticalLines);
            foreach (var ele in allElements)
            {
                if (ele.Type == ElementType.VLine)
                {
                    ladderLogicModule.RemoveVerticalLine(ele.X, ele.Y);
                    ele.Y -= index;
                    ladderLogicModule.ReplaceVerticalLine(ele as VerticalLineViewModel);
                }
                else
                {
                    ladderLogicModule.RemoveElement(ele.X, ele.Y);
                    ele.Y -= index;
                    ladderLogicModule.ReplaceElement(ele);
                }
            }
        }
 private static void MoveVerticalLines(LadderLogicModule ladderLogicModule, List <VerticalLineViewModel> VLines, int cnt)
 {
     for (int j = 0; j < VLines.Count(); j++)
     {
         var tempVLine = VLines.ElementAt(j);
         if (tempVLine.X != cnt - 1)
         {
             IntPoint point = new IntPoint();
             //大于cnt - 1则表示向前移,小于则向后移
             if (tempVLine.X > cnt - 1)
             {
                 //检查VLine周围元素的分布关系,判断是否在移动时需要添加或减少HLine
                 DirectionStatus status = CheckVLine(ladderLogicModule, tempVLine);
                 if (status == DirectionStatus.Down_Inc || status == DirectionStatus.Up_Inc)
                 {
                     if (status == DirectionStatus.Down_Inc)
                     {
                         point.Y = tempVLine.Y + 1;
                     }
                     else if (status == DirectionStatus.Up_Inc)
                     {
                         point.Y = tempVLine.Y;
                     }
                     for (int k = cnt; k <= tempVLine.X; k++)
                     {
                         point.X = k;
                         if (!ladderLogicModule.LadderElements.Exists(x => { return(x.X == point.X && x.Y == point.Y); }))
                         {
                             HorizontalLineViewModel HLine = new HorizontalLineViewModel();
                             HLine.X = point.X;
                             HLine.Y = point.Y;
                             ladderLogicModule.ReplaceElement(HLine);
                         }
                     }
                 }
                 if (status == DirectionStatus.Down_Dec || status == DirectionStatus.Up_Dec)
                 {
                     if (status == DirectionStatus.Down_Dec)
                     {
                         point.Y = tempVLine.Y + 1;
                     }
                     else
                     {
                         point.Y = tempVLine.Y;
                     }
                     for (int k = cnt; k <= tempVLine.X; k++)
                     {
                         point.X = k;
                         ladderLogicModule.RemoveElement(point.X, point.Y);
                     }
                 }
             }
             else
             {
                 for (int k = tempVLine.X + 1; k <= cnt - 1; k++)
                 {
                     point.X = k;
                     point.Y = tempVLine.Y + 1;
                     if (!ladderLogicModule.LadderElements.Exists(x => { return(x.X == point.X && x.Y == point.Y); }))
                     {
                         HorizontalLineViewModel HLine = new HorizontalLineViewModel();
                         HLine.X = point.X;
                         HLine.Y = point.Y;
                         ladderLogicModule.ReplaceElement(HLine);
                     }
                 }
             }
             ladderLogicModule.RemoveVerticalLine(tempVLine.X, tempVLine.Y);
             tempVLine.X = cnt - 1;
             ladderLogicModule.ReplaceVerticalLine(tempVLine);
         }
     }
 }