/// <summary> /// 鼠标按下 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void contentsCanvas_MouseDown(object sender, MouseButtonEventArgs e) { ///取消连线 if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released && isPressAlt && currentMouseOverFunctionBox != null && currentMouseOverFunctionBox.MouseMoveUI != null) { removeMLParamitemBezierLine(currentMouseOverFunctionBox.MouseMoveUI); return; } if (e.RightButton == MouseButtonState.Pressed && e.LeftButton == MouseButtonState.Released && currentMouseOverFunctionBox == null) { isMove = true; forntPoint = e.GetPosition(contentsCanvas); } else if (e.LeftButton == MouseButtonState.Pressed && currentMouseOverFunctionBox != null && currentMouseOverFunctionBox.MouseMoveUI == null) { isMove = true; forntPoint = e.GetPosition(contentsCanvas); } else if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released && currentMouseOverFunctionBox == null) { cancleSelectBox(); isToRect = true; forntPoint = e.GetPosition(contentsCanvas); } else if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released && currentMouseOverFunctionBox != null && currentMouseOverFunctionBox.MouseMoveUI != null) { HiddenTree(); iscreateBz = true; creatBz = null; creatBz = new BezierLine(); previous = currentMouseOverFunctionBox.MouseMoveUI; if (currentMouseOverFunctionBox.MouseMoveUI as BezierLinkLayout.ScriptIParameterLayout.InputParaItemLayout == null) { creatPoint = e.GetPosition(contentsCanvas); creatBz.BindPointEnd(this, "CreatPoint"); creatBz.BindPointStart(currentMouseOverFunctionBox.MouseMoveUI, "LinkPosition"); //startisleft = false; } else { creatBz.BindPointEnd(currentMouseOverFunctionBox.MouseMoveUI, "LinkPosition"); creatPoint = e.GetPosition(contentsCanvas); creatBz.BindPointStart(this, "CreatPoint"); //startisleft = true; } if (creatBz != null) { Add(creatBz); Canvas.SetZIndex(creatBz, -10); } //contentsCanvas.CaptureMouse(); //限制鼠标 } }
/// <summary> /// 删除 /// </summary> /// <param name="bz"></param> public void Del(BezierLine bz) { if (bz == null) { return; } if (contentsCanvas.Children.Contains(bz)) { contentsCanvas.Children.Remove(bz); } if (BzLines.Contains(bz)) { BzLines.Remove(bz); } if ((bz.LeftElement as MLParatItemLayout) != null) { (bz.LeftElement as MLParatItemLayout).Del(bz); } if (bz.RightElement as MLParatItemLayout != null) { (bz.RightElement as MLParatItemLayout).Del(bz); } bz.ClearEndBind(); bz.ClearStartBind(); bz.Dispose(); bz = null; }
/// <summary> /// 曲线 /// </summary> /// <param name="bz"></param> public void Add(BezierLine bz) { //bz.Stroke = new SolidColorBrush(Colors.White); bz.StrokeThickness = 5; contentsCanvas.Children.Add(bz); BzLines.Add(bz); }
/// <summary> /// 鼠标离开事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void contentsCanvas_MouseLeave(object sender, MouseEventArgs e) { ///取消移动设定 isMove = false; ///取消框选 isToRect = false; HidenRect(); //contentsCanvas.ReleaseMouseCapture(); if (creatBz != null) { Del(creatBz); } creatBz = null; iscreateBz = false; isMoveCanvas = false; isMoveBoxs = false; }
/// <summary> /// 连接贝塞尔曲线到2个点 /// </summary> /// <param name="bz"></param> /// <param name="mlp1"></param> /// <param name="mlp2"></param> public void LinkBezier(BezierLine bz, MLParatItemLayout mlp1, MLParatItemLayout mlp2, bool isAddtoCanvas = true) { if (bz == null || mlp1 == null || mlp2 == null) { return; } BezierLine ol = mlp1.SetLink(bz); if (ol != null) { Del(ol); } ol = mlp2.SetLink(bz); if (ol != null) { Del(ol); } bz.ClearStartBind(); bz.ClearEndBind(); if (mlp1 as BezierLinkLayout.ScriptIParameterLayout.InputParaItemLayout != null) { bz.BindPointStart(mlp2, "LinkPosition"); bz.BindPointEnd(mlp1, "LinkPosition"); } else { bz.BindPointStart(mlp1, "LinkPosition"); bz.BindPointEnd(mlp2, "LinkPosition"); } IParatItem ipl = (bz.LeftElement.DataContext as IParatItem); IParatItem ipr = (bz.RightElement.DataContext as IParatItem); ipl.LinkIParatItem = ipr; ipr.LinkIParatItem = ipl; bz.Color = ipl.Color; if (isAddtoCanvas) { Add(bz); } }
/// <summary> /// 鼠标抬起 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void contentsCanvas_MouseUp(object sender, MouseButtonEventArgs e) { this.Cursor = Cursors.Arrow; //contentsCanvas.ReleaseMouseCapture(); ///如果是开启代码窗口的话 if (!isMoveCanvas && e.RightButton == MouseButtonState.Released && e.LeftButton == MouseButtonState.Released && e.ChangedButton == MouseButton.Right) { ShowTree(); } else if (iscreateBz && creatBz != null) { if (currentMouseOverFunctionBox != null && currentMouseOverFunctionBox.MouseMoveUI != null && currentMouseOverFunctionBox.MouseMoveUI != creatBz.LeftElement && currentMouseOverFunctionBox.MouseMoveUI != creatBz.RightElement && currentMouseOverFunctionBox.MouseMoveUI.IsCanLink(creatBz)) { LinkBezier(creatBz, previous, currentMouseOverFunctionBox.MouseMoveUI, false); creatBz = null; } else if (creatBz != null) { Del(creatBz); creatBz = null; } } else if (!isMoveBoxs && e.LeftButton == MouseButtonState.Released && currentMouseOverFunctionBox != null && currentMouseOverFunctionBox.MouseMoveUI == null && e.ChangedButton == MouseButton.Left) { SelectBox(currentMouseOverFunctionBox); } iscreateBz = false; isMoveCanvas = false; isMoveBoxs = false; ///取消移动设定 isMove = false; ///取消框选 isToRect = false; HidenRect(); }