//左键按下 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("粘贴"); } }