예제 #1
0
        private void AddNode_Click(object sender, EventArgs e)
        {
            int                 insertPos           = -1;
            ToolInfo            toolInfo            = new ToolInfo();
            TreeNode            toolNode            = new TreeNode();
            HalconInterfaceTool halconInterfaceTool = new HalconInterfaceTool();

            toolInfo.toolType = ToolType.HalconInterface;
            toolInfo.tool     = halconInterfaceTool;
            toolInfo.toolName = "可输出工具";

            if (toolInfo.toolName == "Error")       //此工具添加个数已达到上限,不让继续添加
            {
                return;
            }
            if (insertPos == -1)
            {
                toolNode = myJob.tvw_job.Nodes.Add("", toolInfo.toolName, 1, 1);
                myJob.L_toolList.Add(toolInfo);
            }


            //添加必用项
            TreeNode itemNode = toolNode.Nodes.Add("", "-->OutputImage", 26, 26);

            itemNode.ForeColor = Color.Blue;
            toolNode.ExpandAll();
            itemNode.Tag         = DataType.Image;
            toolNode.ToolTipText = "it's tips";
            ToolIO outIO = new ToolIO();

            outIO.IOName = "outText";
            outIO.value  = "i am output text";
            toolInfo.output.Add(outIO);

            //    myJob.output.Add(new ToolIO(Configuration.language == Language.English ? "OutputImage" : "输出图像", "", DataType.Image));
            myJob.tvw_job.ShowNodeToolTips = true;
        }
예제 #2
0
        /// <summary>
        /// 释放被拖动的节点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal void tvw_job_DragDrop(object sender, DragEventArgs e)//拖动
        {
            try
            {
                //获得拖放中的节点
                TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
                //根据鼠标坐标确定要移动到的目标节点
                System.Drawing.Point pt;
                TreeNode             targeNode;
                pt        = ((TreeView)(sender)).PointToClient(new System.Drawing.Point(e.X, e.Y));
                targeNode = tvw_job.GetNodeAt(pt);
                //如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端

                if (moveNode == targeNode)       //若是把自己拖放到自己,不可,返回
                {
                    return;
                }

                if (targeNode == null)       //目标节点为null,就是把节点拖到了空白区域,不可,直接返回
                {
                    return;
                }

                if (moveNode.Level == 1 && targeNode.Level == 1 && moveNode.Parent == targeNode.Parent)          //都是输入输出节点,内部拖动排序
                {
                    moveNode.Remove();
                    targeNode.Parent.Nodes.Insert(targeNode.Index, moveNode);
                    return;
                }

                if (moveNode.Level == 0)        //被拖动的是子节点,也就是工具节点
                {
                    if (targeNode.Level == 0)
                    {
                        moveNode.Remove();
                        tvw_job.Nodes.Insert(targeNode.Index, moveNode);

                        ToolInfo temp = new ToolInfo();
                        for (int i = 0; i < L_toolList.Count; i++)
                        {
                            if (L_toolList[i].toolName == moveNode.Text)
                            {
                                temp = L_toolList[i];
                                L_toolList.RemoveAt(i);
                                L_toolList.Insert(targeNode.Index - 2, temp);
                                break;
                            }
                        }
                    }
                    else
                    {
                        moveNode.Remove();
                        tvw_job.Nodes.Insert(targeNode.Parent.Index + 1, moveNode);

                        ToolInfo temp = new ToolInfo();
                        for (int i = 0; i < L_toolList.Count; i++)
                        {
                            if (L_toolList[i].toolName == moveNode.Text)
                            {
                                temp = L_toolList[i];
                                L_toolList.RemoveAt(i);
                                L_toolList.Insert(targeNode.Parent.Index, temp);
                                break;
                            }
                        }
                    }
                }
                else        //被拖动的是输入输出节点
                {
                    if (targeNode.Level == 0 && GetToolInfoByToolName(jobName, targeNode.Text).toolType == ToolType.Output)
                    {
                        string result = moveNode.Parent.Text + " . -->" + moveNode.Text.Substring(3);
                        GetToolInfoByToolName(jobName, targeNode.Text).input.Add(new ToolIO("<--" + result, "", DataType.String));
                        TreeNode node = targeNode.Nodes.Add("", "<--" + result, 26, 26);
                        node.ForeColor = Color.DarkMagenta;
                        D_itemAndSource.Add(node, moveNode);
                        targeNode.Expand();
                        DrawLine();
                        return;
                    }
                    else if (targeNode.Level == 0)
                    {
                        return;
                    }

                    //连线前首先要判断被拖动节点是否为输出项,目标节点是否为输入项
                    if (moveNode.Text.Substring(0, 3) != "-->" || targeNode.Text.Substring(0, 3) != "<--")
                    {
                        return;
                    }

                    //连线前要判断被拖动节点和目标节点的数据类型是否一致
                    if ((DataType)moveNode.Tag != (DataType)targeNode.Tag)
                    {
                        //  Frm_Main.Instance.OutputMsg("被拖动节点和目标节点数据类型不一致,不可关联", Color.Red);
                        return;
                    }

                    string input = targeNode.Text;
                    if (input.Contains("《"))       //表示已经连接了源
                    {
                        input = Regex.Split(input, "《")[0];
                    }
                    else            //第一次连接源就需要添加到输入输出集合
                    {
                        D_itemAndSource.Add(targeNode, moveNode);
                    }
                    GetToolInfoByToolName(jobName, targeNode.Parent.Text).GetInput(input.Substring(3)).value = "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3);
                    targeNode.Text = input + "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3);
                    DrawLine();

                    //移除拖放的节点
                    if (moveNode.Level == 0)
                    {
                        moveNode.Remove();
                    }
                }
                //更新当前拖动的节点选择
                tvw_job.SelectedNode = moveNode;
                //展开目标节点,便于显示拖放效果
                targeNode.Expand();
            }
            catch (Exception ex)
            {
            }
        }