#include "ToolDialog.h" #include #include #include #include #include #include ToolDialogImpl::ToolDialogImpl(QWidget* parent) : DllToolDialog(parent) { ui.setupUi(this); this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/); m_nIndex = 0; connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI())); // 显示控件初始化 hwndUnit = new HWndUnit(this); Util::ShowUnitInWidget(ui.Image_widget, hwndUnit); hwndUnit->setWndTitle(("相机1")); hwndUnit->getHWndCtrl()->useROIController(&m_RoiController); connect(&m_RoiController, SIGNAL(ROIChange(const ViewMessage)), this, SLOT(on_ROIChange(const ViewMessage))); ROIRect1* roi = new ROIRect1(); roi->setTitle("ROI"); m_RoiController.setROISign(ROIOperation::Negative); m_RoiController.setROIShape(roi); m_RoiController.mouseDownAction(500, 500); // ROIPoint* roi = new ROIPoint(); // m_RoiController.setROISign(ROIOperation::Negative); // m_RoiController.setROIShape(roi); m_MaskMode = MarkMode::Rectang; m_nBrushSize = 5;; m_strMsg = "CstROI msg"; GenEmptyObj(&m_hoBrushObj); QString strPath = QCoreApplication::applicationDirPath() + "/Test.jpg"; try { m_Image.ReadImage(HString::FromUtf8(strPath.toStdString().c_str())); hwndUnit->ShowImage(m_Image); hwndUnit->Refresh(false); // Test DebugDada // GetDebugDataPtr()->Clear(); // // GetDebugDataPtr()->addLog("Test1", "Log 123"); // GetDebugDataPtr()->addLog("Test2", "Log ABC"); // GetDebugDataPtr()->addLog("Test3", "Log abc"); // // GenRectangle1(&m_hoROI, 100, 100, 1000, 1000); // HObject dd; // GenRectangle1(&dd, 500, 500, 900, 900); // GetDebugDataPtr()->addImage(m_Image); // GetDebugDataPtr()->addObj(m_hoROI, qRgb(255, 0, 0)); // GetDebugDataPtr()->addObj(dd, qRgb(255, 255, 0), 0.3); // GetDebugDataPtr()->addMsg("Msg 12345"); // GetDebugDataPtr()->addMsg("12345", qRgb(0, 255, 0), 10, 100); } catch (HException& exception) { char m_szMsg[2048] = ""; snprintf(m_szMsg, sizeof(m_szMsg), "Error #%u in %s: %s\n", exception.ErrorCode(), exception.ProcName().TextA(), exception.ErrorMessage().TextA()); qWarning() << m_szMsg; } } ToolDialogImpl::~ToolDialogImpl() { } VPEnum::RETURN_VALUE ToolDialogImpl::Execute() { try { hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoBrushObj, QColor(128, 222, 0)); hwndUnit->Refresh(); // 测试索引连接,每次+1 m_nIndex++; if (m_nIndex >= 6) { m_nIndex = 0; } } catch (HException& exception) { char m_szMsg[2048] = ""; snprintf(m_szMsg, sizeof(m_szMsg),"Error #%u in %s: %s\n", exception.ErrorCode(), exception.ProcName().TextA(), exception.ErrorMessage().TextA()); qWarning() << "Execute() Error"; } emit sigUpdateUI(); //m_TestClass.SetValue(m_Value3); return VPEnum::RETURN_VALUE::Success; } void ToolDialogImpl::on_ROIChange(const ViewMessage& sign) { switch (sign) { case ViewMessage::MovingROI: { }break; case ViewMessage::UpdateROI: { ROI* roi = m_RoiController.getActiveROI(); if (roi == nullptr) { return; } hv_roiDate = roi->getROIData(); try { GenRectangle1(&m_hoBrushObj, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); } catch (...) { } // 画笔模式 if (m_MaskMode == MarkMode::Brush) { HTuple hv_Date = roi->getROIData(); HObject hv_Reg; GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize); Union2(m_hoBrushObj, hv_Reg, &m_hoBrushObj); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 0, 0), 0.5); hwndUnit->Refresh(false); } // 橡皮擦模式 if (m_MaskMode == MarkMode::Eraser) { HTuple hv_Date = roi->getROIData(); HObject hv_Reg; GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize); Difference(m_hoBrushObj, hv_Reg, &m_hoBrushObj); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 20, 147)); hwndUnit->Refresh(); } // 画区域模式 if (m_MaskMode == MarkMode::Rectang) { HTuple hv_Date = roi->getROIData(); GenRectangle1(&m_hoROI, hv_Date[0], hv_Date[1], hv_Date[2], hv_Date[3]); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoROI, qRgb(255, 20, 147)); hwndUnit->Refresh(); m_hvMsg = hv_Date[0]; } } break; case ViewMessage::CreatedROI: { ROI* roi = m_RoiController.getActiveROI(); if (roi == nullptr) { return; } hv_roiDate = roi->getROIData(); try { GenRectangle1(&m_hoBrushObj, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); } catch (...) { } // 画笔模式 if (m_MaskMode == MarkMode::Brush) { HTuple hv_Date = roi->getROIData(); HObject hv_Reg; GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize); Union2(m_hoBrushObj, hv_Reg, &m_hoBrushObj); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 0, 0), 0.5); hwndUnit->Refresh(false); } // 橡皮擦模式 if (m_MaskMode == MarkMode::Eraser) { HTuple hv_Date = roi->getROIData(); HObject hv_Reg; GenRectangle2(&hv_Reg, hv_Date[0], hv_Date[1], 0, m_nBrushSize, m_nBrushSize); Difference(m_hoBrushObj, hv_Reg, &m_hoBrushObj); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoBrushObj, qRgb(255, 20, 147)); hwndUnit->Refresh(); } // 画区域模式 if (m_MaskMode == MarkMode::Rectang) { HTuple hv_Date = roi->getROIData(); GenRectangle1(&m_hoROI, hv_Date[0], hv_Date[1], hv_Date[2], hv_Date[3]); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_hoROI, qRgba(255,0,0,128 ) ); hwndUnit->Refresh(); m_hvMsg = hv_Date[0]; } } break; default: break; } } void ToolDialogImpl::Running(bool bRun) { } void ToolDialogImpl::timerEvent(QTimerEvent* event) { } bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut) { int paranum;//参数数量 if (bIsOut)//保存参数流程 { paranum = 3; ar << paranum;//先保存参数数量 ar << (int)1 << hv_roiDate; ar << (int)2 << m_RoiController; ar << (int)3 << m_hoBrushObj; } else//加载参数流程,参数加载顺序一定要跟保存顺序一致 { int nSize1 = 0; int para; ar >> paranum;//读取参数数量 for (int i = 0; i < paranum; i++) { ar >> para; switch (para) { case 1: ar >> hv_roiDate; break; case 2: ar >> m_RoiController; break; case 3: ar >> m_hoBrushObj; break; default: { qWarning() << "Serialized(In) Error"; return false; } break; } } //hwndUnit->getHWndCtrl()->usem_pRoiController(&m_pRoiController); } return true; } void ToolDialogImpl::on_UpdateUI() { } /// /// 确定 /// void ToolDialogImpl::on_btnOK_clicked() { this->hide(); } /// /// 取消按钮 /// void ToolDialogImpl::on_btnCancel_clicked() { // 将本工具的恢复到打开工具之前的状态 RecoverData(); } /// /// 测试按钮 /// void ToolDialogImpl::on_btnExecute_clicked() { QElapsedTimer toolTimer; toolTimer.start(); // 发送事件 ToolEvent* pToolEvent = new ToolEvent(m_strPouName, m_strInstanceName, TOOL_EVENT_TYPE::TOOL_TRIGGER); QCoreApplication::sendEvent(m_pEventTarget, pToolEvent); // 统计返回值 VPEnum::RETURN_VALUE ret = pToolEvent->ret; double nExecTime = toolTimer.elapsed(); QString str; str = QString("耗时: %1 ms").arg(nExecTime, 0, 'G', 5); ui.label_time->setText(str); str = QString("状态: %1 ").arg(QMetaEnum::fromType().key((short)ret)); ui.label_state->setText(str); delete pToolEvent; } void ToolDialogImpl::on_btnTest_clicked() { QString OpenFile, OpenFilePath; OpenFile = QFileDialog::getOpenFileName(this, "please choose an image file", "C:\\VisionPlus_V3.0\\DemoImage\\", "Image Files(*.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)"); if (!OpenFile.isEmpty()) { try { ReadImage(&m_Image, OpenFile.toStdString().c_str()); hwndUnit->ShowImage(m_Image); hwndUnit->Refresh(); } catch (...) { qWarning() << "Error"; } } }