OperateTreeView.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * ==============================================================================
  3. *
  4. * Filename: OperateTreeView
  5. * Description:
  6. *
  7. * Version: 1.0
  8. * Created: 2021/2/26 10:09:32
  9. *
  10. * Author: liu.wenjie
  11. *
  12. * ==============================================================================
  13. */
  14. using CommonMethods;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Drawing;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Windows.Forms;
  22. using VisionJobFactory;
  23. namespace ToolLib.VisionJob
  24. {
  25. public class OperateTreeView
  26. {
  27. private static OperateTreeView _instance;
  28. private static readonly object lockObject = new object();
  29. /// <summary>
  30. /// 禁止直接生成
  31. /// </summary>
  32. private OperateTreeView(){}
  33. /// <summary>
  34. /// 操作者单例模式调用
  35. /// </summary>
  36. public static OperateTreeView Instance
  37. {
  38. get
  39. {
  40. if(_instance == null)
  41. {
  42. lock (lockObject)
  43. {
  44. if(_instance == null)
  45. {
  46. return _instance = new OperateTreeView();
  47. }
  48. }
  49. }
  50. return _instance;
  51. }
  52. }
  53. /// <summary>
  54. /// 获取当前流程所对应的流程树对象
  55. /// </summary>
  56. /// <param name="jobName">流程名</param>
  57. /// <returns>流程树控件对象</returns>
  58. public static TreeView GetJobTree(string jobName)
  59. {
  60. try
  61. {
  62. foreach (var myJob in VisionJobParams.pVisionProject.Project)
  63. {
  64. if(myJob.Value.JobName == jobName)
  65. {
  66. return myJob.Value.GetJobTree();
  67. }
  68. }
  69. return new TreeView();
  70. }
  71. catch (Exception ex)
  72. {
  73. Logger.LoggerClass.WriteLog("获取JobTree时出错", ex);
  74. return new TreeView();
  75. }
  76. }
  77. /// <summary>
  78. /// 向流程中添加工具,需要根据选择的工具名对工具类型等进行判断
  79. /// </summary>
  80. /// <param name="tool">工具类型</param>
  81. /// <param name="isInsert">插入位置,当为-1时,表示在末尾插入,当不为-1时,表示被插入的工具索引</param>
  82. public void Add_Tool(ToolType tool, bool newAddTool = true, int insertPos = -1, int imageKey = 0)
  83. {
  84. string jobName = FormJobManage.Instance.tabJobUnion.SelectedTab.Text;
  85. string toolName = GetNewToolName(jobName, tool.ToString());
  86. IToolInfo insertTool = VisionToolFactory.CreateToolVision(tool, toolName);
  87. TreeNode insertNode = new TreeNode();
  88. insertNode = GetJobTree(jobName).Nodes.Add("", insertTool.toolName, (int)tool, (int)tool); // 该工具对应的节点
  89. // 判断节点是否添加默认输入输出图
  90. // 输入
  91. for (int i = 0; i < insertTool.toolInput.Count; i++)
  92. {
  93. TreeNode childrenInputNode = insertNode.Nodes.Add("<--" + insertTool.toolInput[i].IOName);
  94. childrenInputNode.Tag = insertTool.toolInput[i].ioType;
  95. childrenInputNode.ForeColor = Color.DarkMagenta;
  96. }
  97. // 输出
  98. for (int i = 0; i < insertTool.toolOutput.Count; i++)
  99. {
  100. TreeNode childrenOutputNode = insertNode.Nodes.Add("-->" + insertTool.toolOutput[i].IOName);
  101. childrenOutputNode.Tag = insertTool.toolOutput[i].ioType;
  102. childrenOutputNode.ForeColor = Color.Blue;
  103. }
  104. insertNode.Expand();
  105. if(newAddTool)
  106. {
  107. VisionJobParams.pVisionProject.Project[jobName].L_toolList.Add(insertTool);
  108. }
  109. }
  110. internal string GetNewToolName(string jobName, string toolType)
  111. {
  112. try
  113. {
  114. if (!TreeView_Contains_Key(jobName, toolType))
  115. {
  116. return toolType;
  117. }
  118. for (int i = 1; i < 101; i++)
  119. {
  120. if (!TreeView_Contains_Key(jobName, toolType + "_" + i))
  121. {
  122. return toolType + "_" + i;
  123. }
  124. }
  125. Logger.LoggerClass.WriteLog("此工具已添加个数已达到数量上限,无法继续添加", true);
  126. return "Error";
  127. }
  128. catch (Exception ex)
  129. {
  130. Logger.LoggerClass.WriteLog("添加出错!", ex);
  131. return "Error";
  132. }
  133. }
  134. /// <summary>
  135. /// 判断TreeView是否已经包含某节点
  136. /// </summary>
  137. /// <param name="key">节点文本</param>
  138. /// <returns>是否包含</returns>
  139. private bool TreeView_Contains_Key(string jobName, string key)
  140. {
  141. try
  142. {
  143. foreach (TreeNode node in VisionJobParams.pVisionProject.Project[jobName].GetJobTree().Nodes)
  144. {
  145. if (node.Text == key)
  146. return true;
  147. }
  148. return false;
  149. }
  150. catch (Exception ex)
  151. {
  152. Logger.LoggerClass.WriteLog("TreeView_Contains_Key 函数出错", ex);
  153. return false;
  154. }
  155. }
  156. }
  157. }