#include "ToolDialog.h" #include #include #include #include #include #include "QtConcurrent" void gen_cam_par_area_scan_division(HTuple hv_Focus, HTuple hv_Kappa, HTuple hv_Sx, HTuple hv_Sy, HTuple hv_Cx, HTuple hv_Cy, HTuple hv_ImageWidth, HTuple hv_ImageHeight, HTuple* hv_CameraParam) { (*hv_CameraParam).Clear(); (*hv_CameraParam)[0] = "area_scan_division"; (*hv_CameraParam).Append(hv_Focus); (*hv_CameraParam).Append(hv_Kappa); (*hv_CameraParam).Append(hv_Sx); (*hv_CameraParam).Append(hv_Sy); (*hv_CameraParam).Append(hv_Cx); (*hv_CameraParam).Append(hv_Cy); (*hv_CameraParam).Append(hv_ImageWidth); (*hv_CameraParam).Append(hv_ImageHeight); return; } ToolDialogImpl::ToolDialogImpl(QWidget *parent, DllTool* pDllTool) : DllToolDialog(parent) //, m_pDllTool(pDllTool) { ui.setupUi(this); this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/); connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI())); connect(ui.comboPlateFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(on_ResponseSelect(int))); connect(ui.comboPiontSize, SIGNAL(currentIndexChanged(int)), this, SLOT(on_ResponseSelect(int))); connect(ui.comboPlateThickness, SIGNAL(currentIndexChanged(int)), this, SLOT(on_ResponseSelect(int))); connect(ui.comboCellSize, SIGNAL(currentIndexChanged(int)), this, SLOT(on_ResponseSelect(int))); connect(ui.comboFocus, SIGNAL(currentIndexChanged(int)), this, SLOT(on_ResponseSelect(int))); connect(ui.tableWidget, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(onDoubleClickedTableRow(int, int))); // 显示控件初始化 hwndUnit = new HWndUnit(this); Util::ShowUnitInWidget(ui.Image_widget, hwndUnit); // 标定板规格 (直接) ui.comboPlateFormat->addItem("7"); ui.comboPlateFormat->addItem("9"); ui.comboPlateFormat->addItem("12"); ui.comboPlateFormat->addItem("20"); ui.comboPlateFormat->addItem("24"); ui.comboPlateFormat->addItem("50"); ui.comboPlateFormat->setCurrentIndex(0); // 标志点大小 ui.comboPiontSize->addItem("3.75"); ui.comboPiontSize->addItem("2.5"); ui.comboPiontSize->addItem("5.0"); ui.comboPiontSize->addItem("10.0"); ui.comboPiontSize->addItem("15.0"); ui.comboPiontSize->addItem("20.0"); ui.comboPiontSize->addItem("25.0"); ui.comboPiontSize->setCurrentIndex(0); // 标定板厚度 ui.comboPlateThickness->addItem("0"); ui.comboPlateThickness->addItem("1"); ui.comboPlateThickness->addItem("2"); ui.comboPlateThickness->addItem("3"); ui.comboPlateThickness->addItem("4"); ui.comboPlateThickness->addItem("5"); ui.comboPlateThickness->setCurrentIndex(0); // 像元大小 ui.comboCellSize->addItem("3.45"); ui.comboCellSize->addItem("4.8"); ui.comboCellSize->addItem("5.5"); ui.comboCellSize->addItem("5.86"); ui.comboCellSize->addItem("7.4"); ui.comboCellSize->setCurrentIndex(0); // 镜头焦距 ui.comboFocus->addItem("0"); ui.comboFocus->addItem("6"); ui.comboFocus->addItem("8"); ui.comboFocus->addItem("12"); ui.comboFocus->addItem("16"); ui.comboFocus->addItem("25"); ui.comboFocus->addItem("50"); ui.comboFocus->setCurrentIndex(0); // 设置表头文字 QStringList headers; headers << ("Index") << ("Strte"); // 列数 ui.tableWidget->setColumnCount(headers.size()); ui.tableWidget->setHorizontalHeaderLabels(headers); //设置表头字体 QFont font = ui.tableWidget->horizontalHeader()->font(); font.setBold(true); ui.tableWidget->horizontalHeader()->setFont(font); // 设置文字左对齐 ui.tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter); // 设置为不可编辑 ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // 设置为整行选中模式 ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); // 设置最左侧的序号不用显示 ui.tableWidget->verticalHeader()->setVisible(false); //设置行高 ui.tableWidget->verticalHeader()->setDefaultSectionSize(10); //点击表时不对表头行光亮(获取焦点) ui.tableWidget->horizontalHeader()->setHighlightSections(false); ui.tableWidget->setColumnWidth(0, 80); ui.tableWidget->setColumnWidth(1, 150); } ToolDialogImpl::~ToolDialogImpl() { } VPEnum::RETURN_VALUE ToolDialogImpl::Execute() { try { GetDebugDataPtr()->Clear(); // m_strFileName = m_FilePathFinder.GetOneFilePath(); // if (m_strFileName.isEmpty()) // { // //qWarning() << "imagePath Error"; // return VPEnum::RETURN_VALUE::Error; // } // m_Image.ReadImage(m_strFileName.toStdString().c_str()); // GetDebugDataPtr()->addImage(m_Image); // GetDebugDataPtr()->addLog("FileName", m_strFileName); // // hwndUnit->ShowImage(m_Image); // hwndUnit->ShowMsg(m_strFileName.toStdString().c_str() ); } catch (HException& exception) { char m_szMsg[2048] = ""; snprintf(m_szMsg, sizeof(m_szMsg), "Error #%u in %s: %s", exception.ErrorCode(), exception.ProcName().TextA(), exception.ErrorMessage().TextA()); qWarning() << "ReadImage Execute() Error" << m_szMsg; } return VPEnum::RETURN_VALUE::Success; } /// /// /// /// void ToolDialogImpl::Running(bool bRun) { } /// /// /// /// /// /// bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut) { int paranum;//参数数量 if (bIsOut)//保存参数流程 { paranum = 1; ar << paranum;//先保存参数数量 ar << (int)1 << (int)1; } else//加载参数流程,参数加载顺序一定要跟保存顺序一致 { int nSize1 = 0; int para; ar >> paranum;//读取参数数量 for (int i = 0; i < paranum; i++) { ar >> para; switch (para) { //case 1: ar >> 1; break; default: { qWarning() << "Serialized(In) Error"; return false; } break; } } onInitUI(); } return true; } void ToolDialogImpl::onInitUI() { m_ImageLins.clear(); m_nAcqIndex = 0; } /// /// 确定 /// 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_ResponseSelect(int) { m_nPlateFormat = ui.comboPlateFormat->currentText().toInt(); m_fPiontSize = ui.comboPiontSize->currentText().toFloat(); m_nPlateThickness = ui.comboPlateThickness->currentText().toInt(); m_fCellSize = ui.comboCellSize->currentText().toFloat(); m_nFocus = ui.comboFocus->currentText().toInt(); float fPlateSize = (m_nPlateFormat + 1) * m_fPiontSize; QString str; str.sprintf("标定板尺寸 %.0fmm * %.0fmm (%d*%d)", fPlateSize, fPlateSize, m_nPlateFormat, m_nPlateFormat); ui.labelInfo->setText(str); //m_strInfo.Format(_T("%.0fmm_*_%.0fmm"), fPlateSize, fPlateSize); } /// /// /// /// /// void ToolDialogImpl::onDoubleClickedTableRow(int nRow, int nCol) { for (int i = 0; i < m_ImageLins.size(); i++) { IMAGE& img = m_ImageLins[i]; if (img.nID == nRow) { hwndUnit->ShowImage(img.image); hwndUnit->Refresh(); HTuple hv_Row, hv_Column, hv_Index, hv_Pose; HTuple hv_StartCamPar; HTuple hv_Height, hv_Width; HObject ho_Contours, ho_Cross; HTuple hv_CaltabName = "caltab"; QString strPath = QCoreApplication::applicationDirPath(); //MakeDirecory(strPath + _T("Caltab\\")); // 在测试时候,使用此局部变量 HTuple hv_CalibDataID; //标记直径的标记距离的比值 0.5 。 GenCaltab(m_nPlateFormat, m_nPlateFormat, m_fPiontSize / 1000.0, 0.5, hv_CaltabName + ".descr", hv_CaltabName + ".ps"); if (img.image.IsInitialized()) { try { GetImageSize(img.image, &hv_Width, &hv_Height); gen_cam_par_area_scan_division(m_nFocus / 1000.0, 0, m_fCellSize / 1000000.0, m_fCellSize / 1000000.0, hv_Width / 2, hv_Height / 2, hv_Width, hv_Height, &hv_StartCamPar); if (m_nFocus == 0) { hv_StartCamPar[0] = "area_scan_telecentric_division"; hv_StartCamPar[1] = 1;// 放大倍率 } CreateCalibData("calibration_object", 1, 1, &hv_CalibDataID); SetCalibDataCamParam(hv_CalibDataID, 0, HTuple(), hv_StartCamPar); SetCalibDataCalibObject(hv_CalibDataID, 0, hv_CaltabName + ".descr"); FindCalibObject(img.image, hv_CalibDataID, 0, 0, 0, HTuple(), HTuple()); GetCalibData(hv_CalibDataID, "camera", 0, "init_params", &hv_StartCamPar); GetCalibDataObservPoints(hv_CalibDataID, 0, 0, 0, &hv_Row, &hv_Column, &hv_Index, &hv_Pose); GetCalibDataObservContours(&ho_Contours, hv_CalibDataID, "caltab", 0, 0, 0); GenCrossContourXld(&ho_Cross, hv_Row, hv_Column, 6, 0.785398); hwndUnit->ShowObj(ho_Contours, qRgb(255,0,0)); hwndUnit->ShowObj(ho_Cross, qRgb(255, 0, 0)); hwndUnit->Refresh(); } catch (...) { img.nResult = 2; } } else { img.nResult = 2; } ClearCalibData(hv_CalibDataID); } } } void ToolDialogImpl::on_btnAddImage_clicked() { if (m_Image.IsInitialized()) { IMAGE link; link.nID = m_ImageLins.size(); link.image = m_Image; m_ImageLins.push_back(link); int i = 0; ui.tableWidget->insertRow(ui.tableWidget->rowCount());//增加一行 ui.tableWidget->setItem(link.nID, 0, new QTableWidgetItem(QString::number(i))); ui.tableWidget->setItem(link.nID, 1, new QTableWidgetItem("null")); } } /// /// /// void ToolDialogImpl::on_btnDelImage_clicked() { } /// /// /// void ToolDialogImpl::on_btnCalibration_clicked() { } /// /// 调整大小的消息中改变表格栏的宽度 /// /// void ToolDialogImpl::resizeEvent(QResizeEvent* event) { Q_UNUSED(event); // // // qDebug() << "WindowAppVariableTable::resizeEvent"; // int nTotalSize = ui.tableWidget->size().width(); // // ui.tableWidget->setColumnWidth(0, nTotalSize * 0.05); // ui.tableWidget->setColumnWidth(1, nTotalSize * 0.25); // ui.tableWidget->setColumnWidth(2, nTotalSize * 0.7); // // // ui.tableWidget->resize(ui.tableWidget->size()); } void ToolDialogImpl::on_UpdateUI() { }