protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e); FlowChart flowChart = ViewModel.Model.Owner; FlowChartView flowChartView = flowChart.ViewModel.View; Keyboard.Focus(flowChartView); NodeGraphManager.EndConnection(); NodeGraphManager.EndDragNode(); NodeGraphManager.EndDragSelection(false); NodeGraphManager.MouseLeftDownNode = ViewModel.Model; NodeGraphManager.BeginDragNode(flowChart); Node node = ViewModel.Model; _DraggingStartPos = new Point(node.X, node.Y); flowChart.History.BeginTransaction("Moving node"); _ZoomAndPanStartMatrix = flowChartView.ZoomAndPan.Matrix; e.Handled = true; }
private void ConnectorView_LayoutUpdated(object sender, EventArgs e) { FlowChart flowChart = ViewModel.Model.FlowChart; FlowChartView flowChartView = flowChart.ViewModel.View; BuildCurveData(Mouse.GetPosition(flowChartView)); }
public void BuildCurveData(Point mousePos) { Connector connector = ViewModel.Model; FlowChart flowChart = connector.FlowChart; FlowChartView flowChartView = flowChart.ViewModel.View; NodePort startPort = connector.StartPort; NodePort endPort = connector.EndPort; Point start = (null != startPort) ? ViewUtil.GetRelativeCenterLocation(startPort.ViewModel.View.PartPort, flowChartView) : mousePos; Point end = (null != endPort) ? ViewUtil.GetRelativeCenterLocation(endPort.ViewModel.View.PartPort, flowChartView) : mousePos; Point center = new Point((start.X + end.X) * 0.5, (start.Y + end.Y) * 0.5); if (start.X > end.X) { Point temp = start; start = end; end = temp; } double ratio = Math.Min(1.0, (center.X - start.X) / 100.0); Point c0 = start; Point c1 = end; c0.X += 100 * ratio; c1.X -= 100 * ratio; CurveData = string.Format("M{0},{1} C{0},{1} {2},{3} {4},{5} " + "M{4},{5} C{4},{5} {6},{7} {8},{9}", ( int )start.X, ( int )start.Y, // 0, 1 ( int )c0.X, ( int )c0.Y, // 2, 3 ( int )center.X, ( int )center.Y, // 4, 5 ( int )c1.X, ( int )c1.Y, // 6, 7 ( int )end.X, ( int )end.Y); // 8.9 }
protected override void OnMouseDoubleClick(MouseButtonEventArgs e) { base.OnMouseDoubleClick(e); if (MouseButton.Left == e.ChangedButton) { Connector connector = ViewModel.Model; FlowChart flowChart = connector.FlowChart; FlowChartView flowChartView = flowChart.ViewModel.View; Point vsMousePos = e.GetPosition(flowChartView); Point nodePos = flowChartView.ZoomAndPan.MatrixInv.Transform(vsMousePos); flowChart.History.BeginTransaction("Creating RouterNode"); { NodeGraphManager.CreateRouterNodeForConnector(Guid.NewGuid(), flowChart, connector, nodePos.X, nodePos.Y, 0); } flowChart.History.EndTransaction(false); } e.Handled = true; }