public void CreateNode(NodeDefine node, ToolStripDropDownItem parent)
        {
            ToolStripDropDownItem toolStripDropDownItem = parent;

            if (!string.IsNullOrEmpty(node.Category))
            {
                string[] menus = node.Category.Trim().Split('/');
                for (int i = 0; i < menus.Length; i++)
                {
                    string menuStr = menus[i];
                    if (string.IsNullOrEmpty(menuStr))
                    {
                        continue;
                    }

                    bool exist = false;
                    for (int ii = 0; ii < toolStripDropDownItem.DropDownItems.Count; ii++)
                    {
                        ToolStripDropDownItem temp = (ToolStripDropDownItem)toolStripDropDownItem.DropDownItems[ii];
                        if (temp.Tag is string && (string)temp.Tag == menuStr)
                        {
                            exist = true;
                            toolStripDropDownItem = temp;
                            break;
                        }
                    }

                    if (!exist)
                    {
                        toolStripDropDownItem     = (ToolStripDropDownItem)toolStripDropDownItem.DropDownItems.Add(menuStr);
                        toolStripDropDownItem.Tag = menuStr;
                    }

                    if (i == menus.Length - 1)
                    {
                        ToolStripItem nodeItem = toolStripDropDownItem.DropDownItems.Add(node.ClassType);
                        nodeItem.Tag    = node;
                        nodeItem.Click += new EventHandler(OnClickNodeItem);
                    }
                }
            }
            else
            {
                ToolStripItem nodeItem = toolStripDropDownItem.DropDownItems.Add(node.ClassType);
                nodeItem.Tag    = node;
                nodeItem.Click += new EventHandler(OnClickNodeItem);
            }
        }
        private void OnClickNodeItem(object sender, EventArgs e)
        {
            ToolStripDropDownItem toolStripDropDownItem = (ToolStripDropDownItem)sender;

            if (toolStripDropDownItem == null)
            {
                return;
            }

            NodeDefine nodeDefine = (NodeDefine)toolStripDropDownItem.Tag;

            if (nodeDefine == null)
            {
                return;
            }

            Rect         rect = new Rect(m_MouseWorldPoint.x, m_MouseWorldPoint.y, EditorUtility.NodeWidth, EditorUtility.NodeHeight);
            NodeDesigner node = new NodeDesigner(nodeDefine.Label, nodeDefine.ClassType, rect);

            node.ID        = BehaviorTree.GenNodeID();
            node.Label     = nodeDefine.Label;
            node.NodeType  = nodeDefine.NodeType;
            node.ClassType = nodeDefine.ClassType;

            //创建字段
            for (int i = 0; i < nodeDefine.Fields.Count; i++)
            {
                NodeField     nodeField = nodeDefine.Fields[i];
                FieldDesigner field     = EditorUtility.CreateFieldByNodeField(nodeField);
                if (field == null)
                {
                    continue;
                }
                node.Fields.Add(field);
            }

            BehaviorTree.AddNode(node);
        }
        //显示视图菜单上下文
        private void ShowViewContextMenu()
        {
            if (BehaviorTree == null)
            {
                return;
            }

            if (m_SelectionNodes.Count > 0)
            {
                return;
            }

            if (MainForm.Instance.NodeTemplate == null)
            {
                return;
            }

            NodeTemplate      nodeTemplate = MainForm.Instance.NodeTemplate;
            List <NodeDefine> nodes        = nodeTemplate.Nodes;

            viewContextMenuStrip.Items.Clear();

            ToolStripDropDownItem compositeItem = viewContextMenuStrip.Items.Add("组合节点") as ToolStripDropDownItem;
            ToolStripDropDownItem decoratorItem = viewContextMenuStrip.Items.Add("修饰节点") as ToolStripDropDownItem;
            ToolStripDropDownItem conditionItem = viewContextMenuStrip.Items.Add("条件节点") as ToolStripDropDownItem;
            ToolStripDropDownItem actionItem    = viewContextMenuStrip.Items.Add("动作节点") as ToolStripDropDownItem;

            //绑定组合节点
            List <NodeDefine> compositeList = nodeTemplate.GetNodeDefines(NodeType.Composite);

            for (int i = 0; i < compositeList.Count; i++)
            {
                NodeDefine node = compositeList[i];
                CreateNode(node, compositeItem);
            }

            //绑定修饰节点
            List <NodeDefine> decoratorList = nodeTemplate.GetNodeDefines(NodeType.Decorator);

            for (int i = 0; i < decoratorList.Count; i++)
            {
                NodeDefine node = decoratorList[i];
                CreateNode(node, decoratorItem);
            }

            //绑定条件节点
            List <NodeDefine> conditionList = nodeTemplate.GetNodeDefines(NodeType.Condition);

            for (int i = 0; i < conditionList.Count; i++)
            {
                NodeDefine node = conditionList[i];
                CreateNode(node, conditionItem);
            }

            //绑定动作节点
            List <NodeDefine> actionList = nodeTemplate.GetNodeDefines(NodeType.Action);

            for (int i = 0; i < actionList.Count; i++)
            {
                NodeDefine node = actionList[i];
                CreateNode(node, actionItem);
            }

            //添加分割线
            viewContextMenuStrip.Items.Add(new ToolStripSeparator());

            //尝试创建粘贴按钮
            TryCreatePasteNode();

            ToolStripItem centerItem = viewContextMenuStrip.Items.Add("居中");

            centerItem.Click += new EventHandler(centerItem_Click);

            viewContextMenuStrip.Show(PointToScreen(m_MouseLocalPoint));
            this.Refresh();
        }