123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594 |
- #include "ToolDialog.h"
- #include <QImage>
- #include <QFileInfo>
- #include <QFileDialog>
- #include <QElapsedTimer>
- #include <QGridLayout>
- // 动态库文件在不同系统下的扩展名
- #ifdef Q_OS_WIN
- #define SDK_EXT ".dll"
- #else
- #define SDK_EXT ".so"
- #endif
- ToolDialogImpl::ToolDialogImpl(QWidget* parent)
- : DllToolDialog(parent)
- {
- ui.setupUi(this);
- this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/);
- // 显示控件初始化
- hwndUnit = new HWndUnit(this);
- Util::ShowUnitInWidget(ui.Image_widget, hwndUnit);
- hwndUnit->setWndTitle(("相机1"));
- connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI()));
- connect(this, SIGNAL(sigUpdateImage()), this, SLOT(OnUpdateImage()));
- /// Init
- m_pCamera = nullptr;
- m_isConnect = false;
- m_isLoadSdk = false;
- ui.btn_CloseCamera->setEnabled(false);
- ui.btn_StateCamera->setEnabled(false);
- ui.btn_StopCamera->setEnabled(false);
- ui.comboWorkMode->setEnabled(false);
- ui.btn_Config->setEnabled(false);
- ui.btn_Trigger->setEnabled(false);
- ui.comboWorkMode->addItem("自由采集");
- ui.comboWorkMode->addItem("硬件触发");
- ui.comboWorkMode->addItem("软件触发");
- QString strPath = QCoreApplication::applicationDirPath() + "//Camera//";
- LoadSDKFile(strPath);
- }
- ToolDialogImpl::~ToolDialogImpl()
- {
- //
- on_btn_CloseCamera_clicked();
- // 释放Lib资源
- if (m_lib.isLoaded())
- {
- m_lib.unload();
- }
- }
- void ToolDialogImpl::LoadSDKFile(const QString& strPath)
- {
- QDir dir(strPath);
- if (!dir.exists() || strPath.indexOf("platforms") > 1)
- return;
- // 取所有的文件和文件名,但是去掉.和..的文件夹
- dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
- // 文件夹优先
- dir.setSorting(QDir::DirsFirst);
- QFileInfoList list = dir.entryInfoList();
- int i = 0;
- while (i < list.size())
- {
- QFileInfo fileInfo = list.at(i);
- bool bisDir = fileInfo.isDir();
- if (bisDir)
- {
- LoadSDKFile(fileInfo.filePath());
- }
- else
- {
- QString strFileName = fileInfo.fileName();
- // 加载所有的dll工具
- if (strFileName.endsWith(SDK_EXT))
- {
- QString strDllFullPath = fileInfo.absoluteFilePath();
- ui.comboSDKName->addItem(fileInfo.baseName());
- SDKINFO sdkInfo;
- sdkInfo.fileInfo = fileInfo;
- m_infAllSdkInfo.push_back(sdkInfo);
- }
- }
- i++;
- };
- return;
- }
- void ToolDialogImpl::on_btn_LoadSDK_clicked()
- {
- m_strLoadSdkPath.clear();
- m_isLoadSdk = false;
- QString strName = ui.comboSDKName->currentText();
- for (int i = 0; i < m_infAllSdkInfo.size(); i++)
- {
- SDKINFO& sdkInfo = m_infAllSdkInfo[i];
- if (sdkInfo.fileInfo.baseName() == strName)
- {
- m_strLoadSdkPath = sdkInfo.fileInfo.absoluteFilePath();
- qDebug() << m_strLoadSdkPath;
- if (! m_strLoadSdkPath.isEmpty())
- {
- m_lib.setFileName(m_strLoadSdkPath);
- if (m_lib.load())
- {
- typedef SDKINFO(*getSDKInfo)();
- getSDKInfo getSdkInfo = (getSDKInfo)m_lib.resolve("getSDKInfo");
- if (getSdkInfo != nullptr)
- {
- SDKINFO info = getSdkInfo();
- sdkInfo.strName = info.strName;
- sdkInfo.strSDKVersion = info.strSDKVersion;
- ui.lab_SdkInfo->setText(info.strName + "(" + info.strSDKVersion + ")");
- m_isLoadSdk = true;
- }
- else
- {
- ui.lab_SdkInfo->setText(strName + "(Info Error!)");
- m_isLoadSdk = false;
- // 如果找不到info 函数,说明该工具可能是不兼容的
- //m_lib.unload();// 卸载动态库会崩溃
- qWarning() << strName << "(Info Error!)";
- return;
- }
- }
- else
- {
- ui.lab_SdkInfo->setText("Load " + strName + "Error (" + m_lib.errorString() + ")");
- m_isLoadSdk = false;
- qWarning() << "Error" << m_lib.errorString();
- return;
- }
- }
- return;
- }
- }
- }
- VPEnum::RETURN_VALUE ToolDialogImpl::Execute()
- {
- emit sigUpdateUI();
- return VPEnum::RETURN_VALUE::Success;
- }
- void ToolDialogImpl::Running(bool bRun)
- {
- }
- bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut)
- {
- int m_nWorkMode = ui.comboWorkMode->currentIndex();;
- int paranum;//参数数量
- if (bIsOut)//保存参数流程
- {
- paranum = 5;
- ar << paranum;//先保存参数数量
- ar << (int)1 << m_strLoadSdkPath;
- ar << (int)2 << m_isLoadSdk;
- ar << (int)3 << m_strSerial;
- ar << (int)4 << m_isConnect;
- ar << (int)5 << m_nWorkMode;
- }
- else//加载参数流程,参数加载顺序一定要跟保存顺序一致
- {
- int nSize1 = 0;
- int para;
- ar >> paranum;//读取参数数量
- for (int i = 0; i < paranum; i++)
- {
- ar >> para;
- switch (para)
- {
- case 1: ar >> m_strLoadSdkPath; break;
- case 2: ar >> m_isLoadSdk; break;
- case 3: ar >> m_strSerial; break;
- case 4: ar >> m_isConnect; break;
- case 5: ar >> m_nWorkMode; break;
-
- default:
- {
- qWarning() << "Serialized(In) Error";
- return false;
- }
- break;
- }
- }
- // 检查dll 资源是否匹配( dll资源是否存在)
- bool isDllOK = false;
- if (m_isLoadSdk && !m_strLoadSdkPath.isEmpty())
- {
- for (int i = 0; i < m_infAllSdkInfo.size(); i++)
- {
- SDKINFO& sdkInfo = m_infAllSdkInfo[i];
- if (m_strLoadSdkPath == sdkInfo.fileInfo.absoluteFilePath())
- {
- ui.comboSDKName->setCurrentIndex(i);
- isDllOK = true;
- break;
- }
- }
- }
- if (! isDllOK)
- {
- return true;
- }
- //
- on_btn_LoadSDK_clicked();
- ui.comboWorkMode->setCurrentIndex(m_nWorkMode);
- if (m_isConnect)
- {
- // 首先刷新一下相机列表
- on_btn_CameraRefresh_clicked();
- m_pCamera = NewCamera(m_strSerial);
- if (m_pCamera)
- {
- ui.btn_OpenCamera->setEnabled(false);
- ui.btn_CloseCamera->setEnabled(true);
- ui.btn_StateCamera->setEnabled(true);
- ui.comboWorkMode->setEnabled(true);
- ui.btn_Config->setEnabled(false);
- }
- on_btn_StateCamera_clicked();
- }
- }
- return true;
- }
- void ToolDialogImpl::on_UpdateUI()
- {
- }
- void ToolDialogImpl::OnUpdateImage()
- {
- QCoreApplication::sendEvent(this->m_pEventTarget, &this->m_PickEvent);
- }
- /// <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();
- VPEnum::RETURN_VALUE ret = this->Execute();
- 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);
- }
- void ToolDialogImpl::on_btn_CameraRefresh_clicked()
- {
- // 遍历Camera 文件夹
- // initEnv
- if (m_lib.isLoaded())
- {
- // Init
- typedef bool(*INITENV)();
- INITENV initEnv = (INITENV)m_lib.resolve("initEnv");
- if (initEnv != nullptr)
- {
- bool b = initEnv();
- }
- // SerialRefresh
- strAllSerial = CameraSerialRefresh();
- }
- ui.comboCameraSerial->clear();
- for (size_t i = 0; i < strAllSerial.size(); i++)
- {
- ui.comboCameraSerial->addItem(strAllSerial[i]);
- }
- }
- void ToolDialogImpl::on_btn_OpenCamera_clicked()
- {
- int nIndex = ui.comboCameraSerial->currentIndex();
- if (strAllSerial.size() == 0)
- {
- return;
- }
- if (!m_pCamera)
- {
- m_strSerial = strAllSerial[nIndex];
- m_pCamera = NewCamera(m_strSerial);
- }
- if (m_pCamera)
- {
- ui.btn_LoadSDK->setEnabled(false);
- ui.comboSDKName->setEnabled(false);
- ui.btn_OpenCamera->setEnabled(false);
- ui.btn_CloseCamera->setEnabled(true);
- ui.btn_StateCamera->setEnabled(true);
- ui.comboWorkMode->setEnabled(true);
- ui.btn_Config->setEnabled(false);
- m_isConnect = true;
- }
- else
- {
- qWarning() << "OpenCamera" << m_strSerial << "Error";
- }
- }
- void ToolDialogImpl::on_btn_CloseCamera_clicked()
- {
- if (m_pCamera)
- {
- delete m_pCamera;
- m_pCamera = nullptr;
- ui.btn_LoadSDK->setEnabled(true);
- ui.comboSDKName->setEnabled(true);
- ui.btn_OpenCamera->setEnabled(true);
- ui.btn_CloseCamera->setEnabled(false);
- // 如果关闭了相机,所有按钮君禁止点击
- ui.btn_CloseCamera->setEnabled(false);
- ui.btn_StateCamera->setEnabled(false);
- ui.btn_StopCamera->setEnabled(false);
- ui.comboWorkMode->setEnabled(false);
- ui.btn_Config->setEnabled(false);
- ui.btn_Trigger->setEnabled(false);
- }
- }
- void ToolDialogImpl::on_btn_StateCamera_clicked()
- {
- if (!m_pCamera)
- {
- return;
- }
- int nIndex = ui.comboWorkMode->currentIndex();
- switch (nIndex)
- {
- case 0:
- {
- ui.btn_Trigger->setEnabled(false);
- m_pCamera->setWorkMode(IBaseCamCommon::eContinu);
- }break;
- case 1:
- {
- ui.btn_Trigger->setEnabled(true);
- m_pCamera->setWorkMode(IBaseCamCommon::eHardware);
- } break;
- case 2:
- {
- ui.btn_Trigger->setEnabled(true);
- m_pCamera->setWorkMode(IBaseCamCommon::eSoftware);
- } break;
- default:
- break;
- }
- if (m_pCamera)
- {
- m_pCamera->startWork();
- ui.comboWorkMode->setEnabled(false);
- ui.btn_StateCamera->setEnabled(false);
- ui.btn_StopCamera->setEnabled(true);
- ui.btn_Config->setEnabled(true);
- }
- }
- void ToolDialogImpl::on_btn_StopCamera_clicked()
- {
- if (m_pCamera)
- {
- m_pCamera->stopWork();
- ui.comboWorkMode->setEnabled(true);
- ui.btn_StateCamera->setEnabled(true);
- ui.btn_StopCamera->setEnabled(false);
- ui.btn_Config->setEnabled(false);
- ui.btn_Trigger->setEnabled(false);
- }
- }
- void ToolDialogImpl::on_btn_Config_clicked()
- {
- if (m_pCamera)
- {
- m_pCamera->showParamConfigWindow();
- }
- }
- void ToolDialogImpl::on_btn_Trigger_clicked()
- {
- if (m_pCamera)
- {
- m_pCamera->softTriggerCap();
- }
- }
- QVector<QString> ToolDialogImpl::CameraSerialRefresh()
- {
- QVector<QString> Serial;
- if (m_lib.isLoaded())
- {
- typedef CameraSerial(*CAMERASERIAL)();
- CAMERASERIAL cameraSerial = (CAMERASERIAL)m_lib.resolve("cameraSerial");
- CameraSerial mSerial;
- if (cameraSerial != NULL)
- {
- mSerial = cameraSerial();
- }
- Serial.clear();
- for (size_t i = 0; i < mSerial.mSize; i++)
- {
- QString str = mSerial.mSerial[i];
- Serial.push_back(str);
- }
- }
- return Serial;
- }
- IBaseCamera* ToolDialogImpl::NewCamera(QString CameraSerial)
- {
- IBaseCamera* camera = NULL;
- if (m_lib.isLoaded())
- {
- typedef IBaseCamera* (*CREATECAMERA)(QString);
- CREATECAMERA createCamera = (CREATECAMERA)m_lib.resolve("createCamera");
- if (createCamera != NULL)
- {
- camera = createCamera(CameraSerial);
- }
- if (NULL != camera)
- {
- camera->setReceCallBack(CameraCallback, (long long)this, "main");//设置接收图像数据回调函数
- camera->setReceLogCallBack(CameraLogCallback, (long long)this);//设置接收图像日志回调函数
- if (false == camera->setWorkMode(IBaseCamCommon::eContinu, false))
- {
- qDebug() << "setWorkMode Error";
- }
- }
- }
- return camera;
- }
- // 相机回调
- void ToolDialogImpl::CameraCallback(IBaseCamCommon::CamImgData* camdata, int frameCount, QString serial, long long userParam)
- {
- ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam);
- if (pParam != NULL)
- {
- try
- {
- GenImage1(&pParam->m_Image, "byte", camdata->width, camdata->height, (Hlong)camdata->imgData);
- pParam->hwndUnit->ShowImage(pParam->m_Image);
- QString str = QString("TriggerIndex %1\nFrameNum %2\nLostPacket %3").
- arg(camdata->nTriggerIndex).
- arg(camdata->nFrameNum).
- arg(camdata->nLostPacket);
- pParam->hwndUnit->ShowMsg(str.toStdString().c_str());
- pParam->hwndUnit->Refresh();
- emit pParam->sigUpdateImage();
- }
- catch (...)
- {
- qDebug() << "CameraCallback Error";
- }
- }
- }
- // Log 回调
- void ToolDialogImpl::CameraLogCallback(QString serial, QString Massage, long long userParam)
- {
- ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam);
- if (pParam != NULL)
- {
- }
- }
|