示例#1
0
        private void drawViewScroll_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            //V+F【重置视图】
            if (MapOperate.Userkey.Key == Key.V && e.Key == Key.F)
            {
                RestView();
            }
            else
            //Delete【删除】
            if (e.Key == Key.Delete)
            {
                //编辑单个
                if (MapOperate.NowMode == MapOperate.EnumMode.EditElement)
                {
                    //是否有选中的
                    if (MapOperate.NowSelectIndex != -1)
                    {
                        switch (MapOperate.NowType)
                        {
                        case MapOperate.EnumElementType.None:
                            break;

                        //选中了RFID
                        case MapOperate.EnumElementType.RFID:
                            MapFunction.RemoveRFID(MapElement.MapObject.RFIDS[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("删除了一个RFID");
                            break;

                        case MapOperate.EnumElementType.RouteLine:
                            MapFunction.RemoveRouteLine(MapElement.MapObject.Lines[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("删除了一条直线");
                            break;

                        case MapOperate.EnumElementType.RouteForkLine:
                            MapFunction.RemoveForkLine(MapElement.MapObject.ForkLines[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("删除了一条分叉线");
                            break;

                        default:
                            break;
                        }
                    }
                }
                else
                //编辑多个
                if (MapOperate.NowMode == MapOperate.EnumMode.MultiEdit)
                {
                    //删除已选中所有元素
                    //RFID
                    foreach (var item in MapOperate.MultiSelected.RFIDS)
                    {
                        MapFunction.RemoveRFID(item);
                    }
                    //Line
                    foreach (var item in MapOperate.MultiSelected.Lines)
                    {
                        MapFunction.RemoveRouteLine(item);
                    }
                    //ForkLine
                    foreach (var item in MapOperate.MultiSelected.ForkLines)
                    {
                        MapFunction.RemoveForkLine(item);
                    }
                    //清除已选中
                    MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                    //记录当前状态
                    MapOperate.History.AddRecord("批量删除");
                }
            }
            else
            //Ctrl+C【复制】
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.C)
            {
                //编辑单个
                if (MapOperate.NowMode == MapOperate.EnumMode.EditElement)
                {
                    if (MapOperate.NowSelectIndex != -1)
                    {
                        //清空剪切板
                        MapFunction.ClearClipBoard();
                        //将元素复制到剪贴板
                        switch (MapOperate.NowType)
                        {
                        case MapOperate.EnumElementType.None:
                            break;

                        case MapOperate.EnumElementType.RFID:
                            //列化深度复制
                            MapElement.RFID rfid = MapFunction.IgkClone.RFID(MapElement.MapObject.RFIDS[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.RFIDS.Add(rfid);
                            break;

                        case MapOperate.EnumElementType.RouteLine:
                            //列化深度复制
                            MapElement.RouteLine routeLine = MapFunction.IgkClone.Line(MapElement.MapObject.Lines[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.Lines.Add(routeLine);
                            break;

                        case MapOperate.EnumElementType.RouteForkLine:
                            //列化深度复制
                            MapElement.RouteForkLine routeForkLine = MapFunction.IgkClone.ForkLine(MapElement.MapObject.ForkLines[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.ForkLines.Add(routeForkLine);
                            break;

                        default:
                            break;
                        }
                    }
                }
                else
                //编辑多个
                if (MapOperate.NowMode == MapOperate.EnumMode.MultiEdit)
                {
                    //将元素复制到剪贴板
                    MapFunction.CopyMultiSelectToClipBoard();
                }
            }
            else
            //Ctrl+V【粘贴】
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.V)
            {
                //清除之前的所有选中
                MapFunction.ClearSelect();
                MapOperate.NowSelectIndex = -1;
                MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                /*----将剪切板的元素复制到对应的地图列表----------------------------*/
                //RFID
                MapOperate.PastedObject.RFIDS.Clear();
                foreach (var item in MapOperate.Clipboard.RFIDS)
                {
                    //列化深度复制
                    MapElement.RFID rfid = MapFunction.IgkClone.RFID(item);
                    //修改编号
                    rfid.Num = MapElement.MapObject.RFIDS.Last().Num + 1;
                    //更新到文本
                    rfid.textBlock.Text = rfid.Num.ToString();
                    //添加到列表
                    MapElement.MapObject.RFIDS.Add(rfid);
                    //显示
                    MapElement.ShowRFID(rfid);
                    //设置为选中状态
                    MapFunction.SetRFIDIsSelected(rfid);
                    //添加到粘贴过程对象
                    MapOperate.PastedObject.RFIDS.Add(rfid);
                }
                //Line
                MapOperate.PastedObject.Lines.Clear();
                foreach (var item in MapOperate.Clipboard.Lines)
                {
                    //列化深度复制
                    MapElement.RouteLine line = MapFunction.IgkClone.Line(item);
                    //修改编号
                    line.Num = MapElement.MapObject.Lines.Last().Num + 1;
                    //更新到文本
                    line.textBlock.Text = line.Num.ToString();
                    //添加到列表
                    MapElement.MapObject.Lines.Add(line);
                    //显示
                    MapElement.ShowLine(line);
                    //设置为选中状态
                    MapFunction.SetRouteLineIsSelected(line);
                    //添加到粘贴过程对象
                    MapOperate.PastedObject.Lines.Add(line);
                }
                //ForkLine
                MapOperate.PastedObject.ForkLines.Clear();
                foreach (var item in MapOperate.Clipboard.ForkLines)
                {
                    //列化深度复制
                    MapElement.RouteForkLine forkLine = MapFunction.IgkClone.ForkLine(item);
                    //修改编号
                    forkLine.Num = MapElement.MapObject.ForkLines.Last().Num + 1;
                    //更新到文本
                    forkLine.textBlock.Text = forkLine.Num.ToString();
                    //添加到列表
                    MapElement.MapObject.ForkLines.Add(forkLine);
                    //显示
                    MapElement.ShowForkLine(forkLine);
                    //设置为选中状态
                    MapFunction.SetForkLineIsSelected(forkLine);
                    //添加到粘贴过程对象
                    MapOperate.PastedObject.ForkLines.Add(forkLine);
                }
                /*----使所有对象处于光标中心【优化效果】---------------------------*/
                //计算所有对象的中心
                Point center = MapFunction.GetCenterPoint(MapOperate.PastedObject);
                //将左键的按下值设置为中心值【移动是根据左键按下的位置计算偏差】
                MapOperate.mouseLeftBtnDownToMap = center;
                //计算左键按下移动偏差
                MapOperate.mouseLeftBtnDownMoveDiff.X = MapOperate.NowPoint.X - MapOperate.mouseLeftBtnDownToMap.X;
                MapOperate.mouseLeftBtnDownMoveDiff.Y = MapOperate.NowPoint.Y - MapOperate.mouseLeftBtnDownToMap.Y;
                //初始移动【增加粘贴动态效果】
                MapFunction.MoveMultiSelected(MapOperate.NowPoint, MapOperate.PastedObject);
                //进入粘贴模式
                MapOperate.NowMode = MapOperate.EnumMode.Paste;
            }
            else
            //Esc【取消】
            if (e.Key == Key.Escape)
            {
                //粘贴模式
                if (MapOperate.NowMode == MapOperate.EnumMode.Paste)
                {
                    MapFunction.CancelPaste();
                    //恢复默认
                    MapOperate.NowMode = MapOperate.EnumMode.EditElement;
                }
            }
            else
            //Ctrl+Shif+Z【重做】
            if ((Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift) &&
                e.Key == Key.Z)
            {
                MapOperate.History.Redo();
            }
            else
            //Ctrl+Z【撤销】
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.Z)
            {
                MapOperate.History.Undo();
            }
            else
            //Ctrl+X【剪切】
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.X)
            {
                //编辑单个
                if (MapOperate.NowMode == MapOperate.EnumMode.EditElement)
                {
                    if (MapOperate.NowSelectIndex != -1)
                    {
                        //清空剪切板
                        MapFunction.ClearClipBoard();
                        //将元素复制到剪贴板
                        switch (MapOperate.NowType)
                        {
                        case MapOperate.EnumElementType.None:
                            break;

                        case MapOperate.EnumElementType.RFID:
                            //列化深度复制
                            MapElement.RFID rfid = MapFunction.IgkClone.RFID(MapElement.MapObject.RFIDS[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.RFIDS.Add(rfid);
                            //从地图删除
                            MapFunction.RemoveRFID(MapElement.MapObject.RFIDS[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("剪切掉了一个RFID");

                            break;

                        case MapOperate.EnumElementType.RouteLine:
                            //列化深度复制
                            MapElement.RouteLine routeLine = MapFunction.IgkClone.Line(MapElement.MapObject.Lines[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.Lines.Add(routeLine);
                            //从地图删除
                            MapFunction.RemoveRouteLine(MapElement.MapObject.Lines[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("剪切掉了一条直线");
                            break;

                        case MapOperate.EnumElementType.RouteForkLine:
                            //列化深度复制
                            MapElement.RouteForkLine routeForkLine = MapFunction.IgkClone.ForkLine(MapElement.MapObject.ForkLines[MapOperate.NowSelectIndex]);
                            //添加到剪切板
                            MapOperate.Clipboard.ForkLines.Add(routeForkLine);
                            //从地图删除
                            MapFunction.RemoveForkLine(MapElement.MapObject.ForkLines[MapOperate.NowSelectIndex]);
                            MapOperate.NowSelectIndex = -1;
                            //记录当前状态
                            MapOperate.History.AddRecord("剪切掉了一条分叉线");
                            break;

                        default:
                            break;
                        }
                    }
                }
                else
                //编辑多个
                if (MapOperate.NowMode == MapOperate.EnumMode.MultiEdit)
                {
                    //将元素复制到剪贴板
                    MapFunction.CopyMultiSelectToClipBoard();
                    //删除已选中所有元素
                    int num = 0;
                    //RFID
                    foreach (var item in MapOperate.MultiSelected.RFIDS)
                    {
                        MapFunction.RemoveRFID(item);
                        num++;
                    }
                    //Line
                    foreach (var item in MapOperate.MultiSelected.Lines)
                    {
                        MapFunction.RemoveRouteLine(item);
                        num++;
                    }
                    //ForkLine
                    foreach (var item in MapOperate.MultiSelected.ForkLines)
                    {
                        MapFunction.RemoveForkLine(item);
                        num++;
                    }
                    //清除已选中
                    MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                    //记录当前状态
                    MapOperate.History.AddRecord(string.Format("剪切了{0}个元件", num));
                }
            }
            else
            //Ctrl+S【保存】
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.S)
            {
                //获取字符串地图
                string str = SaveMap.Helper.ObjToJson.MapOject(MapElement.MapObject);
                //保存
                SaveMap.Helper.SaveToFile(str, @"map.json");
            }
            //记录当前按键
            MapOperate.Userkey.Key      = e.Key;
            MapOperate.Userkey.KeyState = KeyStates.Down;
        }
示例#2
0
        //鼠标移动
        private void imageRobot_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            //获取当前坐标
            Point nowPoint = e.GetPosition(gridDraw);

            MapOperate.NowPoint = nowPoint;
            //显示当前坐标到界面
            MapOperate.ViewInfo.View = new Point(Math.Round(nowPoint.X, 0), Math.Round(nowPoint.Y, 0));
            //计算左键按下移动偏差
            MapOperate.mouseLeftBtnDownMoveDiff.X = nowPoint.X - MapOperate.mouseLeftBtnDownToMap.X;
            MapOperate.mouseLeftBtnDownMoveDiff.Y = nowPoint.Y - MapOperate.mouseLeftBtnDownToMap.Y;
            //判断左键按下后是否发生移动
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (MapOperate.mouseLeftBtnDownToMap.X != nowPoint.X ||
                    MapOperate.mouseLeftBtnDownToMap.Y != nowPoint.Y)
                {
                    //标记左键按下移动状态【是否按住左键移动过】
                    MapOperate.MovedAfterLeftBtn = true;
                }
            }

            //移动视图【如果右键按下】
            if (e.RightButton == MouseButtonState.Pressed)
            {
                System.Windows.Point position  = e.GetPosition(cvMap);
                System.Windows.Point position1 = e.GetPosition(drawViewScroll);

                tlt.X += (position.X - MapOperate.mouseRightBtnDownPoint.X) * MapOperate.ViewInfo.Scale;
                tlt.Y += (position.Y - MapOperate.mouseRightBtnDownPoint.Y) * MapOperate.ViewInfo.Scale;

                //更新圆点坐标,保留两位小数
                MapOperate.ViewInfo.Origin = new Point(Math.Round(tlt.X, 0), Math.Round(tlt.Y, 0));
            }

            //编辑单个元素
            if (MapOperate.NowMode == MapOperate.EnumMode.EditElement)
            {
                //左键按住移动位置【调整元素位置】
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    //左键按下后,鼠标不移动也会进入移动事件,
                    //导致如果点击的位置不是中心,标签会动一下,
                    //很不美好,所以加坐标比较,没有变化就不进行移动
                    if (MapOperate.MovedAfterLeftBtn == false)
                    {
                        return;
                    }
                    if (MapOperate.NowSelectIndex != -1)
                    {
                        //移动标签
                        if (MapOperate.NowType == MapOperate.EnumElementType.RFID)
                        {
                            MapFunction.MoveRFIDTo(MapOperate.NowSelectIndex, nowPoint);
                        }
                        else
                        //移动直线
                        if (MapOperate.NowType == MapOperate.EnumElementType.RouteLine)
                        {
                            switch (MapOperate.ElementEditMode)
                            {
                            case MapOperate.EnumElementEditMode.Start:
                                MapFunction.MoveRouteLineStart(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            case MapOperate.EnumElementEditMode.End:
                                MapFunction.MoveRouteLineEnd(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            case MapOperate.EnumElementEditMode.All:
                                MapFunction.MoveRouteLineAll(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            default:
                                break;
                            }
                        }
                        else
                        //移动分叉【圆弧】
                        if (MapOperate.NowType == MapOperate.EnumElementType.RouteForkLine)
                        {
                            switch (MapOperate.ElementEditMode)
                            {
                            case MapOperate.EnumElementEditMode.Start:
                                MapFunction.MoveForkLineStartForAdd(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            case MapOperate.EnumElementEditMode.End:
                                MapFunction.MoveForkLineEnd(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            case MapOperate.EnumElementEditMode.All:
                                MapFunction.MoveForkLineAll(MapOperate.NowSelectIndex, nowPoint);
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
            else
            //多选模式
            if (MapOperate.NowMode == MapOperate.EnumMode.MultiSelect)
            {
                //绘制选择框
                MapOperate.DrawMultiSelectRect(nowPoint);
            }
            else
            //多编辑模式
            if (MapOperate.NowMode == MapOperate.EnumMode.MultiEdit)
            {
                //如果按住左键,则移动对象
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    //移动所以选中的元素
                    MapFunction.MoveMultiSelected(nowPoint, MapOperate.MultiSelected);
                }
            }
            else
            //粘贴模式
            if (MapOperate.NowMode == MapOperate.EnumMode.Paste)
            {
                //移动所以选中的元素
                MapFunction.MoveMultiSelected(nowPoint, MapOperate.PastedObject);
            }
            else
            //添加新元素
            if (MapOperate.NowMode == MapOperate.EnumMode.AddElement)
            {
                if (MapOperate.NowType == MapOperate.EnumElementType.RFID)
                {
                    MapFunction.MoveRFIDTo(MapOperate.NowSelectIndex, nowPoint);
                }
                else
                if (MapOperate.NowType == MapOperate.EnumElementType.RouteLine)
                {
                    if (MapOperate.AddStep == 1)
                    {
                        MapFunction.MoveRouteLineStartForAdd(MapOperate.NowSelectIndex, nowPoint);
                    }
                    else
                    {
                        MapFunction.MoveRouteLineEnd(MapOperate.NowSelectIndex, nowPoint);
                    }
                }
                else
                if (MapOperate.NowType == MapOperate.EnumElementType.RouteForkLine)
                {
                    if (MapOperate.AddStep == 1)
                    {
                        MapFunction.MoveForkLineStartForAdd(MapOperate.NowSelectIndex, nowPoint);
                    }
                    else
                    {
                        MapFunction.MoveForkLineEnd(MapOperate.NowSelectIndex, nowPoint);
                    }
                }
            }
        }