Beispiel #1
0
        /// <summary>
        /// 添加一个新的RFID并显示
        /// </summary>
        /// <param name="canvas">画布对象</param>
        /// <returns>返回该RFID的索引</returns>
        public static int AddRFIDAndShow()
        {
            /*-------添加对象-------------------*/
            //定义RFID对象
            MapElement.RFID rfid = new MapElement.RFID();
            //设置编号【没有元素从1开始,否则按最后一个的编号加1】
            if (MapElement.MapObject.RFIDS.Count == 0)
            {
                rfid.Num = MapElement.MapObject.RFIDS.Count + 1;
            }
            else
            {
                rfid.Num = MapElement.MapObject.RFIDS.Last().Num + 1;
            }
            //添加RFID到列表
            MapElement.MapObject.RFIDS.Add(rfid);
            /*-------绘制到界面-------------------*/
            //半径
            float Radius = MapElement.RFID_Radius;
            //当前光标位置
            Point point = MapOperate.NowPoint;

            point.X -= MapElement.GridSize / 2;
            point.Y -= MapElement.GridSize / 2;

            //对MapElement.GridSize取余,实现移动时按照栅格移动效果
            Thickness thickness = new Thickness();

            thickness.Left = point.X - point.X % MapElement.GridSize;
            thickness.Top  = point.Y - point.Y % MapElement.GridSize;

            //绘制
            rfid.ellipse.Height          = Radius * 2;
            rfid.ellipse.Width           = Radius * 2;
            rfid.ellipse.Margin          = thickness;
            rfid.ellipse.StrokeThickness = 0.5;
            rfid.ellipse.Fill            = CavnvasBase.GetSolid(200, Colors.Green);
            rfid.ellipse.Stroke          = CavnvasBase.GetSolid(100, Colors.Green);
            MapElement.CvRFID.Children.Add(rfid.ellipse);
            //显示编号
            CavnvasBase.DrawText(
                rfid.ellipse.Margin.Left + Radius,
                rfid.ellipse.Margin.Top + Radius,
                rfid.Num.ToString(),
                Colors.Black,
                MapElement.CvRFID,
                rfid.textBlock
                );
            /*-------设置该RFID为当前正在操作的RFID-------------------*/
            return(MapElement.MapObject.RFIDS.Count - 1);
        }
Beispiel #2
0
 /*-------RFID---------------*/
 /// <summary>
 /// 绘制单个RFID
 /// </summary>
 public static void ShowRFID(MapElement.RFID rfid)
 {
     MapElement.CvRFID.Children.Add(rfid.ellipse);
     MapElement.CvRFID.Children.Add(rfid.textBlock);
 }
Beispiel #3
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;
        }