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);
            }
        }
Ejemplo n.º 3
0
 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;
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
        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);
                    }
                }
            }
        }