private Transition MouseOverTransition() { if (BehaviorTree == null) { return(null); } for (int i = 0; i < BehaviorTree.Nodes.Count; i++) { NodeDesigner node = (NodeDesigner)BehaviorTree.Nodes[i]; if (node.Transitions.Count > 0) { for (int ii = 0; ii < node.Transitions.Count; ii++) { Transition transition = node.Transitions[ii]; if (transition != null) { if (BezierLink.CheckPointAt(transition.FromNode, transition.ToNode, m_MouseWorldPoint)) { return(transition); } } } } } return(null); }
//画节点连线 private void DoTransitions() { if (m_FromNode != null) { BezierLink.DrawNodeToPoint(m_Graphics, m_FromNode, m_MouseWorldPoint); } for (int i = 0; i < BehaviorTree.Nodes.Count; i++) { NodeDesigner node_i = BehaviorTree.Nodes[i]; if (node_i == null) { continue; } if (node_i.Transitions == null || node_i.Transitions.Count == 0) { continue; } for (int ii = 0; ii < node_i.Transitions.Count; ii++) { Transition node_ii = node_i.Transitions[ii]; if (node_ii == null) { continue; } BezierLink.DrawNodeToNode(m_Graphics, node_ii.FromNode, node_ii.ToNode, false, m_Offset); } } //绘制选中线 if (m_SelectedTransition != null) { BezierLink.DrawNodeToNode(m_Graphics, m_SelectedTransition.FromNode, m_SelectedTransition.ToNode, true, m_Offset); } }
public void InitNodesAndConnections(WorkflowJsonObject flow) { workflowId = flow.id; nodes.Clear(); connections.Clear(); foreach (var node in flow.nodes) { foreach (var x in MyCanvas.Children) { if (x is Node) { Node nodeMark = x as Node; if (nodeMark.Text == node.name) { nodes.Add(nodeMark, node); break; } } } } foreach (var conn in flow.connections) { Point start = new Point(flow.nodes[conn.from].xpos, flow.nodes[conn.from].ypos); Point end = new Point(flow.nodes[conn.to].xpos, flow.nodes[conn.to].ypos); foreach (var x in MyCanvas.Children) { if (x is BezierLink) { BezierLink arrow = x as BezierLink; if (arrow.StartPoint == start && arrow.EndPoint == end) { connections.Add(conn, arrow); break; } } } } }
public override void MouseLUpHandler(object sender, MouseButtonEventArgs e) { if (count == 2) { _isFinished = true; if (_startNode != null && _endNode != null) { double NodeSize = _startNode.Size; BezierLink arrow = new BezierLink(); arrow.StartPoint = _startNode.Position; arrow.EndPoint = _endNode.Position; arrow.StartOffset = NodeSize / 2; arrow.EndOffset = NodeSize / 2; arrow.ReadyControl(); Canvas.SetZIndex(arrow, 100); MainPage.Current.MyCanvas.Children.Add(arrow); NodeConnectionJsonObject conn = new NodeConnectionJsonObject(); conn.from = MainPage.Current.nodes.Keys.ToList().IndexOf(_startNode); conn.to = MainPage.Current.nodes.Keys.ToList().IndexOf(_endNode); conn.label = string.Empty; if (!MainPage.Current.connections.Any(c => c.Key.from == conn.from && c.Key.to == conn.to)) { MainPage.Current.connections.Add(conn, arrow); _isConnectionExist = false; } else { _isConnectionExist = true; border.RenderTransform = new TranslateTransform { X = 0, Y = 0 }; border.Child = tb; Canvas.SetLeft(border, _mouseDownTemp.X + 10); Canvas.SetTop(border, _mouseDownTemp.Y + 10); tb.Text = "当前Connection已经存在!"; if (!_isTbAdd) { MainPage.Current.MyCanvas.Children.Add(border); } _isTbAdd = true; MainPage.Current.MyCanvas.Children.Remove(arrow); } if (_isSelfSelected) { border.RenderTransform = new TranslateTransform { X = 0, Y = 0 }; border.Child = tb; Canvas.SetLeft(border, _mouseDownTemp.X + 10); Canvas.SetTop(border, _mouseDownTemp.Y + 10); tb.Text = "所选的EndNode与StartNode相同!"; if (!_isTbAdd) { MainPage.Current.MyCanvas.Children.Add(border); } _isTbAdd = true; MainPage.Current.MyCanvas.Children.Remove(arrow); } } } }