Esempio n. 1
0
        //左键按下
        private void imageRobot_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
LeftBtnDownStart:
            //记录按下时的位置
            MapOperate.mouseLeftBtnDownToMap = e.GetPosition(cvMap);
            //清除左键按下后的移动状态【是否按住左键移动过】
            MapOperate.MovedAfterLeftBtn = false;
            //编辑单个元素
            if (MapOperate.NowMode == MapOperate.EnumMode.EditElement)
            {
                //情况0:如果目前是有选中的直线
                if (MapOperate.NowSelectIndex != -1 && MapOperate.NowType == MapOperate.EnumElementType.RouteLine)
                {
                    //1.判断光标是否在直线的起点编辑器
                    if (MapFunction.IsOnOneLineStart(MapOperate.NowSelectIndex, MapOperate.mouseLeftBtnDownToMap))
                    {
                        //切换到调整直线起点
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.Start;
                        return;
                    }
                    else
                    //2.判断光标是否落在直线的终点编辑器
                    if (MapFunction.IsOnOneLineEnd(MapOperate.NowSelectIndex, MapOperate.mouseLeftBtnDownToMap))
                    {
                        //切换到调整直线终点
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.End;
                        return;
                    }
                    else
                    {
                        //切换到调整整体
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.All;
                        //记录当前状态
                        if (MapOperate.MovedAfterLeftBtn)
                        {
                            MapOperate.History.AddRecord("编辑直线");
                        }
                    }
                }
                //情况1:如果目前是有选中的分叉线【圆弧】
                if (MapOperate.NowSelectIndex != -1 && MapOperate.NowType == MapOperate.EnumElementType.RouteForkLine)
                {
                    //1.判断光标是否在起点编辑器
                    if (MapFunction.IsOnOneForkLineStart(MapOperate.NowSelectIndex, MapOperate.mouseLeftBtnDownToMap))
                    {
                        //切换到调整起点
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.Start;
                        return;
                    }
                    else
                    //2.判断光标是否落在终点编辑器
                    if (MapFunction.IsOnOneForkLineEnd(MapOperate.NowSelectIndex, MapOperate.mouseLeftBtnDownToMap))
                    {
                        //切换到调整终点
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.End;
                        return;
                    }
                    else
                    {
                        //切换到调整整体
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.All;
                        //记录当前状态
                        if (MapOperate.MovedAfterLeftBtn)
                        {
                            MapOperate.History.AddRecord("编辑分叉");
                        }
                    }
                }
                //情况2:判断光标是否在直线上
                int rs = MapFunction.IsOnRouteLine(MapOperate.mouseLeftBtnDownToMap);
                if (rs != -1)
                {
                    //记录当前margin
                    MapOperate.ElementMarginLast = MapElement.MapObject.Lines[rs].line.Margin;

                    //如果选中的和之前是同一个元素
                    if (rs == MapOperate.NowSelectIndex && MapOperate.NowType == MapOperate.EnumElementType.RouteLine)
                    {
                        //不做任何处理
                        return;
                    }
                    else
                    {
                        //清除选中
                        MapFunction.ClearSelect();
                        //设置该点选中
                        MapFunction.SetRouteLineIsSelected(rs);
                        //更新当前选中索引
                        MapOperate.NowSelectIndex = rs;
                        //更新当前元素
                        MapOperate.NowType = MapOperate.EnumElementType.RouteLine;
                        //设置调整模式为整体调节【默认】
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.All;
                        return;
                    }
                }
                //情况3:判断光标是否在分叉线【圆弧】上
                rs = MapFunction.IsOnForkLine(MapOperate.mouseLeftBtnDownToMap);
                if (rs != -1)
                {
                    //记录当前margin
                    MapOperate.ElementMarginLast = MapElement.MapObject.ForkLines[rs].Path.Margin;

                    //如果选中的和之前是同一个元素
                    if (rs == MapOperate.NowSelectIndex && MapOperate.NowType == MapOperate.EnumElementType.RouteForkLine)
                    {
                        //不做任何处理
                        return;
                    }
                    else
                    {
                        //清除选中
                        MapFunction.ClearSelect();
                        //设置该点选中
                        MapFunction.SetForkLineIsSelected(rs);
                        //更新当前选中索引
                        MapOperate.NowSelectIndex = rs;
                        //更新当前元素
                        MapOperate.NowType = MapOperate.EnumElementType.RouteForkLine;
                        //设置调整模式为整体调节【默认】
                        MapOperate.ElementEditMode = MapOperate.EnumElementEditMode.All;
                        return;
                    }
                }
                //情况4:判断光标是否在标签上
                rs = MapFunction.IsOnRFID(MapOperate.mouseLeftBtnDownToMap);
                if (rs != -1)
                {
                    //如果选中的和之前是同一个元素
                    if (rs == MapOperate.NowSelectIndex && MapOperate.NowType == MapOperate.EnumElementType.RFID)
                    {
                        //不做任何处理
                        return;
                    }
                    else
                    {
                        //清除单个选中
                        MapFunction.ClearSelect();
                        //清除所有选中
                        MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                        //设置该点选中
                        MapFunction.SetRFIDIsSelected(rs);
                        //更新当前选中索引
                        MapOperate.NowSelectIndex = rs;
                        //更新当前元素
                        MapOperate.NowType = MapOperate.EnumElementType.RFID;
                        this.DataContext   = MapElement.MapObject.RFIDS[rs];
                        return;
                    }
                }
                this.DataContext = null;

                //清除选中
                MapFunction.ClearSelect();
                //清除所有选中
                MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                MapOperate.NowSelectIndex = -1;
                //进入多选模式
                MapOperate.NowMode = MapOperate.EnumMode.MultiSelect;
            }
            else
            //编辑多个元素
            if (MapOperate.NowMode == MapOperate.EnumMode.MultiEdit)
            {
                //判断光标是否在已经选中的标签上
                if (MapFunction.IsOnMultiSelected(MapOperate.mouseLeftBtnDownToMap) == false)
                {
                    //点击了空白处,退出多个编辑状态
                    MapOperate.NowMode = MapOperate.EnumMode.EditElement;
                    //清除所有选中
                    MapFunction.ClearAllSelect(MapOperate.MultiSelected);
                    //程序回退到左键按下处,重新执行
                    goto LeftBtnDownStart;
                }
            }
            else
            //粘贴模式
            if (MapOperate.NowMode == MapOperate.EnumMode.Paste)
            {
                //取消选中
                MapFunction.ClearAllSelect(MapOperate.PastedObject);
                //进入正常模式
                MapOperate.NowMode = MapOperate.EnumMode.EditElement;
                //粘贴完成,记录当前状态
                MapOperate.History.AddRecord("粘贴");
            }
        }