ToolDialog.cpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. #include "ToolDialog.h"
  2. #include <QImage>
  3. #include <QFileInfo>
  4. #include <QFileDialog>
  5. #include <QElapsedTimer>
  6. #include <QGridLayout>
  7. #include <QCloseEvent>
  8. ToolDialogImpl::ToolDialogImpl(QWidget* parent)
  9. : DllToolDialog(parent)
  10. {
  11. ui.setupUi(this);
  12. this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/);
  13. m_nIndex = 0;
  14. connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI()));
  15. // 显示控件初始化
  16. hwndUnit = new HWndUnit(this);
  17. Util::ShowUnitInWidget(ui.Image_widget, hwndUnit);
  18. hwndUnit->setWndTitle(("相机1"));
  19. hwndUnit->getHWndCtrl()->useROIController(&m_RoiController);
  20. connect(&m_RoiController, SIGNAL(ROIChange(const ViewMessage)), this, SLOT(on_ROIChange(const ViewMessage)));
  21. ROIRect1* roi = new ROIRect1();
  22. roi->setTitle("ROI");
  23. m_RoiController.setROISign(ROIOperation::Negative);
  24. m_RoiController.setROIShape(roi);
  25. m_RoiController.mouseDownAction(500, 500);
  26. // ROIPoint* roi = new ROIPoint();
  27. // m_RoiController.setROISign(ROIOperation::Negative);
  28. // m_RoiController.setROIShape(roi);
  29. m_MaskMode = MarkMode::Rectang;
  30. m_nBrushSize = 5;;
  31. m_strMsg = "CstROI msg";
  32. GenEmptyObj(&m_hoBrushObj);
  33. QString strPath = QCoreApplication::applicationDirPath() + "/Test.jpg";
  34. try
  35. {
  36. m_Image.ReadImage(HString::FromUtf8(strPath.toStdString().c_str()));
  37. hwndUnit->ShowImage(m_Image);
  38. hwndUnit->Refresh(false);
  39. // Test DebugDada
  40. // GetDebugDataPtr()->Clear();
  41. //
  42. // GetDebugDataPtr()->addLog("Test1", "Log 123");
  43. // GetDebugDataPtr()->addLog("Test2", "Log ABC");
  44. // GetDebugDataPtr()->addLog("Test3", "Log abc");
  45. //
  46. // GenRectangle1(&m_hoROI, 100, 100, 1000, 1000);
  47. // HObject dd;
  48. // GenRectangle1(&dd, 500, 500, 900, 900);
  49. // GetDebugDataPtr()->addImage(m_Image);
  50. // GetDebugDataPtr()->addObj(m_hoROI, qRgb(255, 0, 0));
  51. // GetDebugDataPtr()->addObj(dd, qRgb(255, 255, 0), 0.3);
  52. // GetDebugDataPtr()->addMsg("Msg 12345");
  53. // GetDebugDataPtr()->addMsg("12345", qRgb(0, 255, 0), 10, 100);
  54. }
  55. catch (HException& exception)
  56. {
  57. char m_szMsg[2048] = "";
  58. snprintf(m_szMsg, sizeof(m_szMsg), "Error #%u in %s: %s\n", exception.ErrorCode(),
  59. exception.ProcName().TextA(),
  60. exception.ErrorMessage().TextA());
  61. qWarning() << m_szMsg;
  62. }
  63. }
  64. ToolDialogImpl::~ToolDialogImpl()
  65. {
  66. }
  67. VPEnum::RETURN_VALUE ToolDialogImpl::Execute()
  68. {
  69. try
  70. {
  71. hwndUnit->ShowImage(m_Image);
  72. hwndUnit->ShowObj(m_hoBrushObj, QColor(128, 222, 0));
  73. hwndUnit->Refresh();
  74. // 测试索引连接,每次+1
  75. m_nIndex++;
  76. if (m_nIndex >= 6)
  77. {
  78. m_nIndex = 0;
  79. }
  80. }
  81. catch (HException& exception)
  82. {
  83. char m_szMsg[2048] = "";
  84. snprintf(m_szMsg, sizeof(m_szMsg),"Error #%u in %s: %s\n", exception.ErrorCode(),
  85. exception.ProcName().TextA(),
  86. exception.ErrorMessage().TextA());
  87. qWarning() << "Execute() Error";
  88. }
  89. emit sigUpdateUI();
  90. //m_TestClass.SetValue(m_Value3);
  91. return VPEnum::RETURN_VALUE::Success;
  92. }
  93. void ToolDialogImpl::on_ROIChange(const ViewMessage& sign)
  94. {
  95. switch (sign)
  96. {
  97. case ViewMessage::MovingROI:
  98. {
  99. }break;
  100. case ViewMessage::UpdateROI:
  101. {
  102. ROI* roi = m_RoiController.getActiveROI();
  103. if (roi == nullptr)
  104. {
  105. return;
  106. }
  107. hv_roiDate = roi->getROIData();
  108. try
  109. {
  110. GenRectangle1(&m_hoBrushObj, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]);
  111. }
  112. catch (...)
  113. {
  114. }
  115. // 画笔模式
  116. if (m_MaskMode == MarkMode::Brush)
  117. {
  118. HTuple hv_Date = roi->getROIData();
  119. HObject hv_Reg;
  120. GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize);
  121. Union2(m_hoBrushObj, hv_Reg, &m_hoBrushObj);
  122. hwndUnit->ShowImage(m_Image);
  123. hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 0, 0), 0.5);
  124. hwndUnit->Refresh(false);
  125. }
  126. // 橡皮擦模式
  127. if (m_MaskMode == MarkMode::Eraser)
  128. {
  129. HTuple hv_Date = roi->getROIData();
  130. HObject hv_Reg;
  131. GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize);
  132. Difference(m_hoBrushObj, hv_Reg, &m_hoBrushObj);
  133. hwndUnit->ShowImage(m_Image);
  134. hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 20, 147));
  135. hwndUnit->Refresh();
  136. }
  137. // 画区域模式
  138. if (m_MaskMode == MarkMode::Rectang)
  139. {
  140. HTuple hv_Date = roi->getROIData();
  141. GenRectangle1(&m_hoROI, hv_Date[0], hv_Date[1], hv_Date[2], hv_Date[3]);
  142. hwndUnit->ShowImage(m_Image);
  143. hwndUnit->ShowObj(m_hoROI, qRgb(255, 20, 147));
  144. hwndUnit->Refresh();
  145. m_hvMsg = hv_Date[0];
  146. }
  147. }
  148. break;
  149. case ViewMessage::CreatedROI:
  150. {
  151. ROI* roi = m_RoiController.getActiveROI();
  152. if (roi == nullptr)
  153. {
  154. return;
  155. }
  156. hv_roiDate = roi->getROIData();
  157. try
  158. {
  159. GenRectangle1(&m_hoBrushObj, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]);
  160. }
  161. catch (...)
  162. {
  163. }
  164. // 画笔模式
  165. if (m_MaskMode == MarkMode::Brush)
  166. {
  167. HTuple hv_Date = roi->getROIData();
  168. HObject hv_Reg;
  169. GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize);
  170. Union2(m_hoBrushObj, hv_Reg, &m_hoBrushObj);
  171. hwndUnit->ShowImage(m_Image);
  172. hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 0, 0), 0.5);
  173. hwndUnit->Refresh(false);
  174. }
  175. // 橡皮擦模式
  176. if (m_MaskMode == MarkMode::Eraser)
  177. {
  178. HTuple hv_Date = roi->getROIData();
  179. HObject hv_Reg;
  180. GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize);
  181. Difference(m_hoBrushObj, hv_Reg, &m_hoBrushObj);
  182. hwndUnit->ShowImage(m_Image);
  183. hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 20, 147));
  184. hwndUnit->Refresh();
  185. }
  186. // 画区域模式
  187. if (m_MaskMode == MarkMode::Rectang)
  188. {
  189. HTuple hv_Date = roi->getROIData();
  190. GenRectangle1(&m_hoROI, hv_Date[0], hv_Date[1], hv_Date[2], hv_Date[3]);
  191. hwndUnit->ShowImage(m_Image);
  192. hwndUnit->ShowObj(m_hoROI, qRgba(255,0,0,128 ) );
  193. hwndUnit->Refresh();
  194. m_hvMsg = hv_Date[0];
  195. }
  196. }
  197. break;
  198. default:
  199. break;
  200. }
  201. }
  202. void ToolDialogImpl::Running(bool bRun)
  203. {
  204. }
  205. void ToolDialogImpl::timerEvent(QTimerEvent* event)
  206. {
  207. }
  208. bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut)
  209. {
  210. int paranum;//参数数量
  211. if (bIsOut)//保存参数流程
  212. {
  213. paranum = 3;
  214. ar << paranum;//先保存参数数量
  215. ar << (int)1 << hv_roiDate;
  216. ar << (int)2 << m_RoiController;
  217. ar << (int)3 << m_hoBrushObj;
  218. }
  219. else//加载参数流程,参数加载顺序一定要跟保存顺序一致
  220. {
  221. int nSize1 = 0;
  222. int para;
  223. ar >> paranum;//读取参数数量
  224. for (int i = 0; i < paranum; i++)
  225. {
  226. ar >> para;
  227. switch (para)
  228. {
  229. case 1: ar >> hv_roiDate; break;
  230. case 2: ar >> m_RoiController; break;
  231. case 3: ar >> m_hoBrushObj; break;
  232. default:
  233. {
  234. qWarning() << "Serialized(In) Error";
  235. return false;
  236. }
  237. break;
  238. }
  239. }
  240. //hwndUnit->getHWndCtrl()->usem_pRoiController(&m_pRoiController);
  241. }
  242. return true;
  243. }
  244. void ToolDialogImpl::on_UpdateUI()
  245. {
  246. }
  247. /// <summary>
  248. /// 确定
  249. /// </summary>
  250. void ToolDialogImpl::on_btnOK_clicked()
  251. {
  252. this->hide();
  253. }
  254. /// <summary>
  255. /// 取消按钮
  256. /// </summary>
  257. void ToolDialogImpl::on_btnCancel_clicked()
  258. {
  259. // 将本工具的恢复到打开工具之前的状态
  260. RecoverData();
  261. }
  262. /// <summary>
  263. /// 测试按钮
  264. /// </summary>
  265. void ToolDialogImpl::on_btnExecute_clicked()
  266. {
  267. QElapsedTimer toolTimer;
  268. toolTimer.start();
  269. // 发送事件
  270. ToolEvent* pToolEvent = new ToolEvent(m_strPouName, m_strInstanceName, TOOL_EVENT_TYPE::TOOL_TRIGGER);
  271. QCoreApplication::sendEvent(m_pEventTarget, pToolEvent);
  272. // 统计返回值
  273. VPEnum::RETURN_VALUE ret = pToolEvent->ret;
  274. double nExecTime = toolTimer.elapsed();
  275. QString str;
  276. str = QString("耗时: %1 ms").arg(nExecTime, 0, 'G', 5);
  277. ui.label_time->setText(str);
  278. str = QString("状态: %1 ").arg(QMetaEnum::fromType<VPEnum::RETURN_VALUE>().key((short)ret));
  279. ui.label_state->setText(str);
  280. delete pToolEvent;
  281. }
  282. void ToolDialogImpl::on_btnTest_clicked()
  283. {
  284. QString OpenFile, OpenFilePath;
  285. OpenFile = QFileDialog::getOpenFileName(this,
  286. "please choose an image file",
  287. "C:\\VisionPlus_V3.0\\DemoImage\\",
  288. "Image Files(*.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)");
  289. if (!OpenFile.isEmpty())
  290. {
  291. try
  292. {
  293. ReadImage(&m_Image, OpenFile.toStdString().c_str());
  294. hwndUnit->ShowImage(m_Image);
  295. hwndUnit->Refresh();
  296. }
  297. catch (...)
  298. {
  299. qWarning() << "Error";
  300. }
  301. }
  302. }