FormEyeHandCalib.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using CommonMethods;
  2. using HalconDotNet;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using ViewROI;
  13. namespace EyeHandCalibTool
  14. {
  15. public partial class FormEyeHandCalib : Form
  16. {
  17. public EyeHandCalib myEyeHandCalib = null;
  18. public IToolInfo myToolInfo = new IToolInfo();
  19. public HWindowTool_Smart myHwindow = new HWindowTool_Smart();
  20. public HDrawingObject selected_drawing_object = new HDrawingObject();
  21. public FormEyeHandCalib(ref object eyeHandCalib)
  22. {
  23. InitializeComponent();
  24. _instance = this;
  25. if (eyeHandCalib.GetType().FullName != "System.Object")
  26. {
  27. myToolInfo = (IToolInfo)eyeHandCalib;
  28. myEyeHandCalib = (EyeHandCalib)myToolInfo.tool;
  29. myEyeHandCalib.DispImage();
  30. }
  31. }
  32. /// <summary>
  33. /// 窗体对象实例
  34. /// </summary>
  35. private static FormEyeHandCalib _instance;
  36. public static FormEyeHandCalib Instance
  37. {
  38. get
  39. {
  40. if (_instance != null)
  41. {
  42. lock (_instance)
  43. {
  44. if (_instance == null)
  45. {
  46. object eyeHandCalib = new object();
  47. _instance = new FormEyeHandCalib(ref eyeHandCalib);
  48. }
  49. return _instance;
  50. }
  51. }
  52. else
  53. {
  54. object eyeHandCalib = new object();
  55. _instance = new FormEyeHandCalib(ref eyeHandCalib);
  56. return _instance;
  57. }
  58. }
  59. }
  60. public FormEyeHandCalib()
  61. {
  62. InitializeComponent();
  63. }
  64. private void chbSelectCalibType_SelectedIndexChanged(object sender, EventArgs e)
  65. {
  66. CalibType oldType = myEyeHandCalib.calibType;
  67. myEyeHandCalib.calibType = chbSelectCalibType.SelectedItem.ToString() == "四点标定" ? CalibType.Four_Point : CalibType.Nine_Point;
  68. if(oldType == CalibType.Four_Point && myEyeHandCalib.calibType == CalibType.Nine_Point)
  69. {
  70. for (int i = 0; i < 5; i++)
  71. {
  72. DataRow dr = myEyeHandCalib.CalibSourceDataTable.NewRow();
  73. dr[0] = 0;
  74. dr[1] = 50;
  75. dr[2] = 0;
  76. dr[3] = 50;
  77. myEyeHandCalib.CalibSourceDataTable.Rows.Add(dr);
  78. }
  79. }
  80. else if(oldType == CalibType.Nine_Point && myEyeHandCalib.calibType == CalibType.Four_Point)
  81. {
  82. for (int i = 0; i < 5; i++)
  83. {
  84. myEyeHandCalib.CalibSourceDataTable.Rows.RemoveAt(myEyeHandCalib.CalibSourceDataTable.Rows.Count - 1);
  85. }
  86. }
  87. }
  88. private void FormEyeHandCalib_Load(object sender, EventArgs e)
  89. {
  90. // 若为空,表示该工具未经标定校正
  91. if(myEyeHandCalib.CalibSourceDataTable == null)
  92. {
  93. myEyeHandCalib.InitDataTable();
  94. }
  95. CalibDataGrid.DataSource = myEyeHandCalib.CalibSourceDataTable;
  96. chbSelectCalibType.SelectedItem = myEyeHandCalib.calibType == CalibType.Four_Point ? "四点标定" : "九点标定";
  97. txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00");
  98. txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00");
  99. txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00");
  100. txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00");
  101. txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00");
  102. txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00");
  103. }
  104. private void CalibDataGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
  105. {
  106. using (SolidBrush b = new SolidBrush(
  107. CalibDataGrid.RowHeadersDefaultCellStyle.ForeColor))
  108. {
  109. e.Graphics.DrawString((e.RowIndex + 1).ToString(
  110. System.Globalization.CultureInfo.CurrentCulture),
  111. CalibDataGrid.DefaultCellStyle.Font
  112. , b, e.RowBounds.Location.X + 10, e.RowBounds.Location.Y);
  113. }
  114. }
  115. private void btnImportData_Click(object sender, EventArgs e)
  116. {
  117. myEyeHandCalib.ReadCalibData();
  118. CalibDataGrid.Refresh();
  119. }
  120. private void btnExportData_Click(object sender, EventArgs e)
  121. {
  122. myEyeHandCalib.ExportCalibData();
  123. }
  124. private void btnCalibManual_Click(object sender, EventArgs e)
  125. {
  126. if(myEyeHandCalib.ManulCalib())
  127. {
  128. // 仿射矩阵信息
  129. txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00");
  130. txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00");
  131. txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00");
  132. txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00");
  133. txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00");
  134. txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00");
  135. // 映射成功,则保存矩阵
  136. HOperatorSet.WriteTuple(myEyeHandCalib.homMat2D, myEyeHandCalib.homMat2DName + ".tup");
  137. MessageBox.Show("仿射矩阵已经保存成功!");
  138. }
  139. }
  140. /// <summary>
  141. /// 设定工具运行状态
  142. /// </summary>`
  143. /// <param name="msg">运行中的信息</param>
  144. /// <param name="status">运行状态</param>
  145. public void SetToolStatus(string msg, ToolRunStatu status)
  146. {
  147. if (myEyeHandCalib != null)
  148. {
  149. myEyeHandCalib.runMessage = msg;
  150. myEyeHandCalib.toolRunStatu = status;
  151. lb_RunStatus.Text = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myEyeHandCalib.runMessage}";
  152. lb_RunTime.Text = myEyeHandCalib.runTime;
  153. statusStrip.BackColor = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? Color.LimeGreen : Color.Red;
  154. }
  155. }
  156. private void tsbtRunTool_Click(object sender, EventArgs e)
  157. {
  158. myEyeHandCalib.Run(SoftwareRunState.Debug);
  159. }
  160. }
  161. }