123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- #include "ToolDialog.h"
- #include <QImage>
- #include <QFileInfo>
- #include <QFileDialog>
- #include <QElapsedTimer>
- #include <QGridLayout>
- #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;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="bRun"></param>
- void ToolDialogImpl::Running(bool bRun)
- {
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="ar"></param>
- /// <param name="bIsOut"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 确定
- /// </summary>
- void ToolDialogImpl::on_btnOK_clicked()
- {
- this->hide();
- }
- /// <summary>
- /// 取消按钮
- /// </summary>
- void ToolDialogImpl::on_btnCancel_clicked()
- {
- // 将本工具的恢复到打开工具之前的状态
- RecoverData();
- }
- /// <summary>
- /// 测试按钮
- /// </summary>
- 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<VPEnum::RETURN_VALUE>().key((short)ret));
- ui.label_state->setText(str);
- delete pToolEvent;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name=""></param>
- 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);
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="nRow"></param>
- /// <param name="nCol"></param>
- 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"));
- }
- }
- /// <summary>
- ///
- /// </summary>
- void ToolDialogImpl::on_btnDelImage_clicked()
- {
- }
- /// <summary>
- ///
- /// </summary>
- void ToolDialogImpl::on_btnCalibration_clicked()
- {
- }
- /// <summary>
- /// 调整大小的消息中改变表格栏的宽度
- /// </summary>
- /// <param name="event"></param>
- 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()
- {
-
-
- }
|