1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009 |
- #include "ToolDialog.h"
- #include <QImage>
- #include <QFileInfo>
- #include <QFileDialog>
- #include <QElapsedTimer>
- #include <QGridLayout>
- #include "toolinterface.h"
- ToolDialogImpl::ToolDialogImpl(QWidget* parent, DllTool* pDllTool)
- : DllToolDialog(parent)
- {
- ui.setupUi(this);
- this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/);
- connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI())/*,Qt::QueuedConnection*/);
- // 显示控件初始化
- hwndUnit = new HWndUnit(this);
- Util::ShowUnitInWidget(ui.Image_widget, hwndUnit);
- hwndUnit->getHWndCtrl()->useROIController(&roiController);
- connect(&roiController, SIGNAL(ROIChange(const ViewMessage)), this, SLOT(on_ROIChange(const ViewMessage)));
- ROIRect1* roi = new ROIRect1();
- roi->setTitle("搜索区域");
- roiController.setROISign(ROIOperation::Negative);
- roiController.setROIShape(roi);
- roiController.mouseDownAction(500, 500);
- QString strPath = QCoreApplication::applicationDirPath() + "/Test.jpg";
- try
- {
- m_Image.ReadImage(strPath.toStdString().c_str());
- hwndUnit->ShowImage(m_Image);
- hwndUnit->Refresh(false);
- }
- catch (...)
- {
- }
- //////////////////////////////////////////////////////////////////////////
- m_bLoading = false;
- m_nModes = 1;
- m_min = 10;
- m_max = 200;
- m_nWidth = 50;
- m_nHeight = 50;
- m_nOffset = 1;
- ui.comboBox_select->setView(new QListView());
- ui.comboBox->setView(new QListView());
- ui.horizontalSlidermin->setMinimum(0);
- ui.horizontalSlidermin->setMaximum(255);
- ui.horizontalSlidermin->setSingleStep(1);
- ui.horizontalSlidermax->setMinimum(0);
- ui.horizontalSlidermax->setMaximum(255);
- ui.horizontalSlidermax->setSingleStep(1);
- ui.horizontalSlidermin->setValue(m_min);
- ui.horizontalSlidermax->setValue(m_max);
- ui.lineEdit_Width->setText(QString::number(m_nWidth) );
- ui.lineEdit_Height->setText(QString::number(m_nHeight));
- ui.lineEdit_Offset->setText(QString::number(m_nOffset));
- ui.lineEdit_Width->setValidator(new QIntValidator(1, 16777215, this));
- ui.lineEdit_Height->setValidator(new QIntValidator(1, 16777215, this));
- ui.lineEdit_Offset->setValidator(new QIntValidator(1, 16777215, this));
- ui.tableWidget->verticalHeader()->setVisible(false);
- ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- ui.tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
- ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
- ui.tableWidget->setShowGrid(false);
- ui.tableWidget->setFocusPolicy(Qt::NoFocus);
- ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
- ui.tableWidget_Feature->verticalHeader()->setVisible(false);
- ui.tableWidget_Feature->setColumnWidth(0, 50);
- ui.tableWidget_Feature->setColumnWidth(1, 120);
- for (int i = 2; i < 11; i++)
- {
- ui.tableWidget_Feature->setColumnWidth(i, 90);
- }
- ui.tableWidget_Feature->setShowGrid(false);
- ui.tableWidget_Feature->setFocusPolicy(Qt::NoFocus);
- ui.tableWidget_Feature->setSelectionBehavior(QAbstractItemView::SelectRows);
- ui.tableWidget_Feature->horizontalHeader()->setSectionsClickable(false);
- ui.tableWidget_Feature->setEditTriggers(QAbstractItemView::NoEditTriggers);
- ui.checkBox->setChecked(true);
- ui.checkBox_paixu->setChecked(true);
- QMenu* menu = new QMenu();
- QMenu* region = menu->addMenu("区域操作");
- region->addAction("连通", this, SLOT(ActionSlot()));
- region->addAction("合并", this, SLOT(ActionSlot()));
- region->addAction("补集", this, SLOT(ActionSlot()));
- region->addAction("相减", this, SLOT(ActionSlot()));
- region->addAction("相交", this, SLOT(ActionSlot()));
- region->addAction("孔洞填充", this, SLOT(ActionSlot()));
- QMenu* xingtaixue = menu->addMenu("形态学");
- xingtaixue->addAction("闭运算", this, SLOT(ActionSlot()));
- xingtaixue->addAction("开运算", this, SLOT(ActionSlot()));
- xingtaixue->addAction("腐蚀", this, SLOT(ActionSlot()));
- xingtaixue->addAction("膨胀", this, SLOT(ActionSlot()));
- QMenu* gaoji = menu->addMenu("高级操作");
- gaoji->addAction("特征筛选", this, SLOT(ActionSlot()));
- gaoji->addAction("转换", this, SLOT(ActionSlot()));
- gaoji->addAction("矩形分割", this, SLOT(ActionSlot()));
- gaoji->addAction("动态分割", this, SLOT(ActionSlot()));
- ui.btnAdd->setMenu(menu);
- }
- ToolDialogImpl::~ToolDialogImpl()
- {
- }
- VPEnum::RETURN_VALUE ToolDialogImpl::Execute()
- {
- try
- {
- hwndUnit->ShowImage(m_Image);
- try
- {
- if (m_nModes == 1)
- {
- ThresholdTool();
- }
- if (m_nModes == 2)
- {
- DynThresholdTool();
- }
- HObject ImageTemp;
- ImageTemp = m_TempImage;
- //DispObj(m_Image, HalconID);
- for (int i = 0; i < m_LinkProcess.size(); i++)
- {
- if (m_LinkProcess[i].p_dlg != nullptr && m_LinkProcess[i].isrun == true)
- {
- m_LinkProcess[i].p_dlg->setValue(ImageTemp);
- m_LinkProcess[i].p_dlg->Execute();
- ImageTemp = m_LinkProcess[i].p_dlg->GetResult();
- }
- }
- m_OutImage = ImageTemp;
- ShowFeature(m_OutImage);
- hwndUnit->ShowImage(m_Image);
- hwndUnit->ShowObj(m_OutImage, true);
- }
- catch (...)
- {
- }
- //hwndUnit->ShowObj(m_objROI, qRgb(255, 0, 0), 2);
- //hwndUnit->ShowMsg((HTuple)"msg", qRgb(255, 0, 0), 10, 10, 200);
- hwndUnit->Refresh(true);
- }
- catch (...)
- {
- qWarning() << "Execute() Error";
- }
- emit sigUpdateUI();
- return VPEnum::RETURN_VALUE::Success;
- }
- void ToolDialogImpl::on_ROIChange(const ViewMessage& sign)
- {
- switch (sign)
- {
- case ViewMessage::MovingROI:
- {
- ROI* roi = roiController.getActiveROI();
- hv_roiDate = roi->getROIData();
- try
- {
- GenRectangle1(&m_objROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]);
- }
- catch (...)
- {
- }
- }
- case ViewMessage::UpdateROI:
- case ViewMessage::CreatedROI:
- {
- roiController.defineModelROI();
- ROI* roi = roiController.getActiveROI();
- hv_roiDate = roi->getROIData();
- try
- {
- GenRectangle1(&m_objROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]);
- }
- catch (...)
- {
- }
- }
- break;
- default:
- break;
- }
- }
- /// <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 = 12;
- ar << paranum;//先保存参数数量
- ar << (int)1 << hv_roiDate;
- ar << (int)2 << m_Image;
- ar << (int)3 << roiController;
- ar << (int)4 << m_objROI;
- ar << (int)5 << m_nWidth;
- ar << (int)6 << m_nHeight;
- ar << (int)7 << m_nOffset;
- ar << (int)8 << m_nType;
- ar << (int)9 << m_min;
- ar << (int)10 << m_max;
- ar << (int)11 << m_nModes;
- ar << (int)12 << ui.comboBox_select->currentIndex();
- paranum = 2;//以下参数的数量
- ar << paranum;//先保存参数数量
- ar << (UINT)m_LinkProcess.size();
- for (UINT i = 0; i < m_LinkProcess.size(); i++)
- {
- LINKCTRL& link = m_LinkProcess[i];
- ar << (int)1 << link.ToolName;
- ar << (int)2 << link.ToolID;
- }
- // 保存工具内的参数
- for (UINT i = 0; i < m_LinkProcess.size(); i++)
- {
- m_LinkProcess[i].p_dlg->Serialized(ar, true);
- }
- }
- else//加载参数流程,参数加载顺序一定要跟保存顺序一致
- {
- m_bLoading = true;
- int nCurrentIndex = 0;
- 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_Image; break;
- case 3: ar >> roiController; break;
- case 4: ar >> m_objROI; break;
- case 5: ar >> m_nWidth; break;
- case 6: ar >> m_nHeight; break;
- case 7: ar >> m_nOffset; break;
- case 8: ar >> m_nType; break;
- case 9: ar >> m_min; break;
- case 10: ar >> m_max; break;
- case 11: ar >> m_nModes; break;
- case 12: ar >> nCurrentIndex; break;
- default:
- {
- qWarning() << "Serialized(In) Error";
- return false;
- }
- break;
- }
- }
- {
- {
- ui.horizontalSlidermin->setValue(m_min);
- ui.horizontalSlidermax->setValue(m_max);
- ui.comboBox_select->setCurrentIndex(nCurrentIndex);
- ui.lineEdit_Width->setText(QString::number(m_nWidth));
- ui.lineEdit_Height->setText(QString::number(m_nHeight));
- ui.lineEdit_Offset->setText(QString::number(m_nOffset));
- //emit updateParameter(ShowParameter());
- }
- m_LinkProcess.clear();
- ui.tableWidget->clear();
- for (int i = ui.stackedWidget->count(); i >= 0; i--)
- {
- QWidget* widget = ui.stackedWidget->widget(i);
- ui.stackedWidget->removeWidget(widget);
- }
- }
- UINT LinkSize = 0;
- ar >> paranum;//读取参数数量
- ar >> LinkSize;
- for (UINT i = 0; i < LinkSize; i++)
- {
- int nToolID = 0;
- QString strToolName;
- int nPpara;
- for (int j = 0; j < paranum; j++)
- {
- ar >> nPpara;
- switch (nPpara)
- {
- case 1: ar >> strToolName; break;
- case 2: ar >> nToolID; break;
- default:
- return false;
- }
- }
- AddTool(nToolID);
- }
- // 加载工具内的参数
- for (UINT i = 0; i < m_LinkProcess.size(); i++)
- {
- m_LinkProcess[i].p_dlg->Serialized(ar, false);
- }
- m_bLoading = false;
- }
- return true;
- }
- void ToolDialogImpl::on_UpdateUI()
- {
- }
- /// <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;
- }
- void ToolDialogImpl::ActionSlot()
- {
- if (m_bLoading)
- {
- return;
- }
- QAction* action = (QAction*)sender();
- if (action->text() == "连通")
- {
- AddTool(0);
- }
- if (action->text() == "合并")
- {
- AddTool(1);
- }
- if (action->text() == "补集")
- {
- AddTool(2);
- }
- if (action->text() == "相减")
- {
- AddTool(3);
- }
- if (action->text() == "相交")
- {
- AddTool(4);
- }
- if (action->text() == "孔洞填充")
- {
- AddTool(5);
- }
- if (action->text() == "闭运算")
- {
- AddTool(6);
- }
- if (action->text() == "开运算")
- {
- AddTool(7);
- }
- if (action->text() == "腐蚀")
- {
- AddTool(8);
- }
- if (action->text() == "膨胀")
- {
- AddTool(9);
- }
- if (action->text() == "特征筛选")
- {
- AddTool(10);
- }
- if (action->text() == "转换")
- {
- AddTool(11);
- }
- if (action->text() == "矩形分割")
- {
- AddTool(12);
- }
- if (action->text() == "动态分割")
- {
- AddTool(13);
- }
- }
- void ToolDialogImpl::clickSlot(bool ok)
- {
- QCheckBox* cb = (QCheckBox*)sender();
- m_LinkProcess[cb->objectName().toInt()].isrun = ok;
- if (ui.checkBox->isChecked())
- {
- //Execute();
- }
- }
- void ToolDialogImpl::AddTool(int nToolID)
- {
- if (nToolID == -1)
- {
- return;
- }
- ToolInterface* pDlg = nullptr;
- LINKCTRL aLinkCtrl;
- QString strToolName;
- if (nToolID == 0)
- {
- strToolName = "连通";
- pDlg = new BlobConnection(nullptr, this);
- }
- if (nToolID == 1)
- {
- strToolName = "合并";
- pDlg = new BlobUnion(nullptr, this);
- }
- if (nToolID == 2)
- {
- strToolName = "补集";
- pDlg = new BlobComplement(nullptr, this);
- }
- if (nToolID == 3)
- {
- strToolName = "相减";
- pDlg = new BlobDifference(nullptr, this);
- }
- if (nToolID == 4)
- {
- strToolName = "相交";
- pDlg = new BlobIntersection(nullptr, this);
- }
- if (nToolID == 5)
- {
- strToolName = "孔洞填充";
- pDlg = new BlobFillUp(nullptr, this);
- }
- if (nToolID == 6)
- {
- strToolName = "闭运算";
- pDlg = new BlobClose(nullptr, this);
- }
- if (nToolID == 7)
- {
- strToolName = "开运算";
- pDlg = new BlobOpen(nullptr, this);
- }
- if (nToolID == 8)
- {
- strToolName = "腐蚀";
- pDlg = new BlobErosion(nullptr, this);
- }
- if (nToolID == 9)
- {
- strToolName = "膨胀";
- pDlg = new BlobDilation(nullptr, this);
- }
- if (nToolID == 10)
- {
- strToolName = "特征筛选";
- pDlg = new BlobSelectShape(nullptr, this);
- }
- if (nToolID == 11)
- {
- strToolName = "转换";
- pDlg = new BolbShapeTrans(nullptr, this);
- }
- if (nToolID == 12)
- {
- strToolName = "矩形分割";
- pDlg = new BlobPartitionRectangle(nullptr, this);
- }
- if (nToolID == 13)
- {
- strToolName = "动态分割";
- pDlg = new BlobPartitionDynamic(nullptr, this);
- }
- connect(pDlg, SIGNAL(updateParameter(QString)), this, SLOT(UpdateUI(QString)));
- connect(pDlg, SIGNAL(updateParameterIndex(QString)), this, SLOT(UpdateUiIndex(QString)));
- ui.tableWidget->addTool(m_LinkProcess.size(), strToolName, pDlg->ShowParameter());
- ui.tableWidget->selectRow(m_LinkProcess.size());
- ui.stackedWidget->insertWidget(m_LinkProcess.size(), pDlg);
- ui.stackedWidget->setCurrentIndex(m_LinkProcess.size());
- aLinkCtrl.ToolID = nToolID;
- aLinkCtrl.p_dlg = pDlg;
- aLinkCtrl.ToolName = strToolName;
- aLinkCtrl.isrun = true;
- aLinkCtrl.nUi = m_LinkProcess.size();
- m_LinkProcess.push_back(aLinkCtrl);
- if (ui.checkBox->isChecked())
- {
- //Execute();
- }
- }
- void ToolDialogImpl::UpdateUI(QString name)
- {
- if (ui.checkBox->isChecked())
- {
- int rowIndex = ui.tableWidget->currentRow();
- if (rowIndex != -1)
- {
- //ui.tableWidget->setItem(ui.tableWidget->currentRow(), 2, new QTableWidgetItem(""));
- ui.tableWidget->item(ui.tableWidget->currentRow(), 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->setItem(ui.tableWidget->currentRow(), 4, new QTableWidgetItem(name));
- ui.tableWidget->item(ui.tableWidget->currentRow(), 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- try
- {
- //Execute();
- }
- catch (...)
- {
- qWarning() << "Error";
- }
- }
- }
- void ToolDialogImpl::UpdateUiIndex(QString name)
- {
- ui.tableWidget->setItem(ui.tableWidget->currentRow(), 2, new QTableWidgetItem(name));
- ui.tableWidget->item(ui.tableWidget->currentRow(), 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->item(ui.tableWidget->currentRow(), 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- void ToolDialogImpl::on_tableWidget_clicked(const QModelIndex& index)
- {
- int nRow = index.row();
- LINKCTRL& aLink1 = m_LinkProcess.at(nRow);
- ui.stackedWidget->setCurrentIndex(aLink1.nUi);
- int dd = ui.stackedWidget->count();
- }
- void ToolDialogImpl::on_btnDel_clicked()
- {
- }
- void ToolDialogImpl::SwapTwoRow(int selectRow, int targetRow)
- {
- QString text1 = ui.tableWidget->item(selectRow, 1)->text();
- QString text2 = ui.tableWidget->item(selectRow, 2)->text();
- QString text3 = ui.tableWidget->item(targetRow, 1)->text();
- QString text4 = ui.tableWidget->item(targetRow, 2)->text();
- ui.tableWidget->setItem(selectRow, 1, new QTableWidgetItem(text3));
- ui.tableWidget->setItem(selectRow, 2, new QTableWidgetItem(text4));
- ui.tableWidget->setItem(targetRow, 1, new QTableWidgetItem(text1));
- ui.tableWidget->setItem(targetRow, 2, new QTableWidgetItem(text2));
- ui.tableWidget->item(selectRow, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->item(selectRow, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->item(targetRow, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->item(targetRow, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget->selectRow(targetRow);
- }
- void ToolDialogImpl::on_btnMoveUp_clicked()
- {
- if (ui.tableWidget->currentRow() != -1 && ui.tableWidget->currentRow() > 0)
- {
- int nRow = ui.tableWidget->currentRow();
- //swap(m_LinkProcess.at(nRow), m_LinkProcess.at(nRow - 1));//向上交换处理模块位置
- LINKCTRL aLink1 = m_LinkProcess.at(nRow - 1);
- ui.stackedWidget->setCurrentIndex(aLink1.nUi);
- this->SwapTwoRow(nRow, nRow - 1);
- }
- }
- void ToolDialogImpl::on_btnMoveDown_clicked()
- {
- int a = ui.tableWidget->currentRow();
- int b = ui.tableWidget->rowCount();
- if (ui.tableWidget->currentRow() != -1 && ui.tableWidget->currentRow() < ui.tableWidget->rowCount() - 1)
- {
- int nRow = ui.tableWidget->currentRow();
- //swap(m_LinkProcess.at(nRow), m_LinkProcess.at(nRow + 1));//向下交换处理模块位置
- LINKCTRL aLink1 = m_LinkProcess.at(nRow + 1);
- ui.stackedWidget->setCurrentIndex(aLink1.nUi);
- this->SwapTwoRow(nRow, nRow + 1);
- }
- }
- void ToolDialogImpl::on_horizontalSlidermin_valueChanged(int value)
- {
- ui.labelmin->setText(QString::number(value));
- m_min = ui.horizontalSlidermin->value();
- }
- void ToolDialogImpl::on_horizontalSlidermax_valueChanged(int value)
- {
- ui.labelmax->setText(QString::number(value));
- m_max = ui.horizontalSlidermax->value();
- }
- void ToolDialogImpl::on_checkBox_invert_clicked()
- {
- ThresholdTool();
- }
- void ToolDialogImpl::ThresholdTool()
- {
- m_nModes = 1;
-
-
- try
- {
- if (m_max > m_min)
- {
- if (m_Image.IsInitialized())
- {
- HObject ImageTemp;
- ImageTemp = m_Image;
- Rgb1ToGray(ImageTemp, &ImageTemp);
-
- Threshold(ImageTemp, &ImageTemp, m_min, m_max);
- if (ui.checkBox_invert->isChecked())
- {
- Complement(ImageTemp, &ImageTemp);
- }
- m_TempImage = ImageTemp;
-
- }
- }
- }
- catch (...)
- {
- }
- }
- void ToolDialogImpl::DynThresholdTool()
- {
- m_nModes = 2;
- m_nWidth = ui.lineEdit_Width->text().toInt();
- m_nHeight = ui.lineEdit_Height->text().toInt();
- int Offset = ui.lineEdit_Offset->text().toInt();
- m_nType = ui.comboBox_select->currentIndex();
- try
- {
- if (m_Image.IsInitialized())
- {
- HObject ImageTemp;
- HObject ImageResult;
- ImageTemp = m_Image;
- Rgb1ToGray(ImageTemp, &ImageTemp);
- //DispObj(ImageTemp, HalconID);
- hwndUnit->ShowObj(ImageTemp, true);
- hwndUnit->Refresh();
- MeanImage(ImageTemp, &ImageResult, m_nWidth, m_nHeight);
- if (m_nType == 0)
- {
- DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "light");
- }
- if (m_nType == 1)
- {
- DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "dark");
- }
- if (m_nType == 2)
- {
- DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "equal");
- }
- if (m_nType == 3)
- {
- DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "not_equal");
- }
- m_TempImage = ImageResult;
-
- }
- }
- catch (...)
- {
- }
- }
- void ToolDialogImpl::on_BTN_Add1_clicked()
- {
- ui.lineEdit_Width->setText(QString::number(ui.lineEdit_Width->text().toInt() + 1));
- DynThresholdTool();
- }
- void ToolDialogImpl::on_BTN_Sub1_clicked()
- {
- if (ui.lineEdit_Width->text().toInt() >= 2)
- {
- ui.lineEdit_Width->setText(QString::number(ui.lineEdit_Width->text().toInt() - 1));
- }
- DynThresholdTool();
- }
- void ToolDialogImpl::on_BTN_Add2_clicked()
- {
- ui.lineEdit_Height->setText(QString::number(ui.lineEdit_Height->text().toInt() + 1));
- DynThresholdTool();
- }
- void ToolDialogImpl::on_BTN_Sub2_clicked()
- {
- if (ui.lineEdit_Height->text().toInt() >= 2)
- {
- ui.lineEdit_Height->setText(QString::number(ui.lineEdit_Height->text().toInt() - 1));
- }
- DynThresholdTool();
- }
- void ToolDialogImpl::on_BTN_Add3_clicked()
- {
- ui.lineEdit_Offset->setText(QString::number(ui.lineEdit_Offset->text().toInt() + 1));
- DynThresholdTool();
- }
- void ToolDialogImpl::on_BTN_Sub3_clicked()
- {
- if (ui.lineEdit_Offset->text().toInt() >= 2)
- {
- ui.lineEdit_Offset->setText(QString::number(ui.lineEdit_Offset->text().toInt() - 1));
- }
- DynThresholdTool();
- }
- void ToolDialogImpl::on_lineEdit_Width_editingFinished()
- {
- DynThresholdTool();
- }
- void ToolDialogImpl::on_lineEdit_Height_editingFinished()
- {
- DynThresholdTool();
- }
- void ToolDialogImpl::on_lineEdit_Offset_editingFinished()
- {
- DynThresholdTool();
- }
- void ToolDialogImpl::ShowFeature(HObject ho_Region)
- {
- HTuple hv_Value1, hv_Value2, hv_Value3, hv_Value4, hv_Value5;
- HTuple hv_Value6, hv_Value7, hv_Value8, hv_Value9, hv_Value10;
- HTuple hv_Value11;
- RegionFeatures(ho_Region, "area", &hv_Value1);
- RegionFeatures(ho_Region, "row", &hv_Value2);
- RegionFeatures(ho_Region, "column", &hv_Value3);
- RegionFeatures(ho_Region, "circularity", &hv_Value4);
- RegionFeatures(ho_Region, "compactness", &hv_Value5);
- RegionFeatures(ho_Region, "convexity", &hv_Value6);
- RegionFeatures(ho_Region, "rectangularity", &hv_Value7);
- RegionFeatures(ho_Region, "max_diameter", &hv_Value8);
- RegionFeatures(ho_Region, "width", &hv_Value9);
- RegionFeatures(ho_Region, "height", &hv_Value10);
- RegionFeatures(ho_Region, "rect2_phi", &hv_Value11);
- HTuple Length;
- TupleLength(hv_Value1, &Length);
- ui.tableWidget_Feature->clearContents();
- for (int i = 0; i < Length.I(); i++)
- {
- ui.tableWidget_Feature->setRowCount(i + 1);
- ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
- ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 1, new QTableWidgetItem(QString::number(hv_Value1[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 2, new QTableWidgetItem(QString::number(hv_Value2[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 3, new QTableWidgetItem(QString::number(hv_Value3[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 4, new QTableWidgetItem(QString::number(hv_Value4[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 5, new QTableWidgetItem(QString::number(hv_Value5[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 6, new QTableWidgetItem(QString::number(hv_Value6[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 7, new QTableWidgetItem(QString::number(hv_Value7[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 7)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 8, new QTableWidgetItem(QString::number(hv_Value8[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 8)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 9, new QTableWidgetItem(QString::number(hv_Value9[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 9)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 10, new QTableWidgetItem(QString::number(hv_Value10[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 10)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- ui.tableWidget_Feature->setItem(i, 11, new QTableWidgetItem(QString::number(hv_Value11[i].D(), 'f', 3)));
- ui.tableWidget_Feature->item(i, 11)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- }
- void ToolDialogImpl::on_comboBox_currentIndexChanged(int index)
- {
- if (ui.checkBox_paixu->isChecked())
- {
- if (ui.checkBox_shengxu->isChecked())
- {
- ui.tableWidget_Feature->sortItems(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder);
- }
- else
- {
- ui.tableWidget_Feature->sortItems(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder);
- }
- for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++)
- {
- ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
- ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- }
- }
- void ToolDialogImpl::on_checkBox_shengxu_clicked()
- {
- if (ui.checkBox_paixu->isChecked())
- {
- if (ui.checkBox_shengxu->isChecked())
- {
- ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder);
- }
- else
- {
- ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder);
- }
- for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++)
- {
- ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
- ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- }
- }
- void ToolDialogImpl::on_checkBox_paixu_clicked()
- {
- if (ui.checkBox_paixu->isChecked())
- {
- if (ui.checkBox_shengxu->isChecked())
- {
- ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder);
- }
- else
- {
- ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder);
- }
- for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++)
- {
- ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1)));
- ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- }
- }
- }
- void ToolDialogImpl::on_comboBox_select_currentIndexChanged(int index)
- {
- DynThresholdTool();
- }
|