You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
whellvalue/tpvs17/tpMain/lpImageCaliUI4P.cpp

327 lines
11 KiB
C++

#include "lpImageCaliUI4P.h"
#include <QFileDialog>
#include "lpGlobalConfig.h"
#include <QSettings>
#include <QApplication>
#pragma execution_character_set("utf-8")
lpImageCaliUI4P::lpImageCaliUI4P(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_srcImgView = replaceWidget<AwesomeImgViewer>(ui.widget);
connect(m_srcImgView, SIGNAL(filterroiChanged(const AwesomeRoiInfo&, QString)), this, SLOT(onROIChange(const AwesomeRoiInfo&, QString)));
connect(m_srcImgView, SIGNAL(pixelClicked(QPoint)), this, SLOT(onPixelClicked(QPoint)));
connect(m_srcImgView, SIGNAL(roiLockIng(QString)), this, SLOT(onRoiLockIng(QString)));
connect(m_srcImgView, SIGNAL(sgImageScale(qreal)), this, SLOT(onImageScale(qreal)));
connect(ui.m_pbLoadImg, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.m_pbApply, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.m_pbExit, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.m_pbLock, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
QString strPath = QApplication::applicationDirPath() + "/showImg.ini";//ͼÏñչʾ±ÈÀýµÄ²ÎÊý
QSettings setting(strPath, QSettings::IniFormat);
double nScale = setting.value("ShowImg/Scale_Standard", 0.53).toDouble();
m_srcImgView->setInitScale(nScale);
}
lpImageCaliUI4P::~lpImageCaliUI4P()
{
if (m_srcImgView) {
delete m_srcImgView;
m_srcImgView = nullptr;
}
}
template<typename _Widget>
_Widget* lpImageCaliUI4P::replaceWidget(QWidget* pSrcWidget)
{
if (!pSrcWidget) {
return nullptr;
}
QWidget* pParent = qobject_cast<QWidget*>(pSrcWidget->parent());
if (!pParent) {
return nullptr;
}
_Widget* pDstWidget = new _Widget;
auto *pFrom = pParent->layout()->replaceWidget(pSrcWidget, pDstWidget);
delete pFrom;
delete pSrcWidget;
return pDstWidget;
}
void lpImageCaliUI4P::showEvent(QShowEvent *event)
{
ui.checkBox->setChecked(lpGlobalConfig::instance()->bTransPos_4P);
ui.m_lineEdit_P1X->setText(QString("%1").arg(lpGlobalConfig::instance()->point1_4P.x()));
ui.m_lineEdit_P1Y->setText(QString("%1").arg(lpGlobalConfig::instance()->point1_4P.y()));
ui.m_lineEdit_P2X->setText(QString("%1").arg(lpGlobalConfig::instance()->point2_4P.x()));
ui.m_lineEdit_P2Y->setText(QString("%1").arg(lpGlobalConfig::instance()->point2_4P.y()));
ui.m_lineEdit_P3X->setText(QString("%1").arg(lpGlobalConfig::instance()->point3_4P.x()));
ui.m_lineEdit_P3Y->setText(QString("%1").arg(lpGlobalConfig::instance()->point3_4P.y()));
ui.m_lineEdit_P4X->setText(QString("%1").arg(lpGlobalConfig::instance()->point4_4P.x()));
ui.m_lineEdit_P4Y->setText(QString("%1").arg(lpGlobalConfig::instance()->point4_4P.y()));
ui.m_lineEdit_P1X_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point1_4P.x()));
ui.m_lineEdit_P1Y_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point1_4P.y()));
ui.m_lineEdit_P2X_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point2_4P.x()));
ui.m_lineEdit_P2Y_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point2_4P.y()));
ui.m_lineEdit_P3X_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point3_4P.x()));
ui.m_lineEdit_P3Y_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point3_4P.y()));
ui.m_lineEdit_P4X_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point4_4P.x()));
ui.m_lineEdit_P4Y_P->setText(QString("%1").arg(lpGlobalConfig::instance()->real_point4_4P.y()));
ui.m_lineEdit_Xoffset->setText(QString("%1").arg(lpGlobalConfig::instance()->pointXOffset_4P));
ui.m_lineEdit_Yoffset->setText(QString("%1").arg(lpGlobalConfig::instance()->pointYOffset_4P));
m_point1 = lpGlobalConfig::instance()->point1_4P;
m_point2 = lpGlobalConfig::instance()->point2_4P;
m_point3 = lpGlobalConfig::instance()->point3_4P;
m_point4 = lpGlobalConfig::instance()->point4_4P;
testPoint = lpGlobalConfig::instance()->testPoint;
QPointF tmpTestPoint = transWorldPoint(testPoint,lpGlobalConfig::instance()->matxParam_4P);
ui.label_testSrc->setText(QString("(%1,%2)").arg(QString::number(testPoint.x(), 'f', 3)).arg(QString::number(testPoint.y(), 'f', 3)));
ui.label_testDst->setText(QString("(%1,%2)").arg(QString::number(tmpTestPoint.x(), 'f', 3)).arg(QString::number(tmpTestPoint.y(), 'f', 3)));
if (m_srcImgView)
{
m_srcImgView->onClearAllROI();
QString DstPath = QApplication::applicationDirPath() + "\\user\\StandImage.png";
QImage img;
img.load(DstPath);
m_imageH = img.height();
m_imageW = img.width();
m_srcImgView->setImg(img);
AddPoint(m_point1, "P1");
AddPoint(m_point2, "P2");
AddPoint(m_point3, "P3");
AddPoint(m_point4, "P4");
AddPoint(testPoint, "TEST",QColor(255,170,0));
m_srcImgView->setLabelVisible(true);
m_srcImgView->setLockAll(true);
}
ui.m_pbLock->setText(tr("½âËø"));
ui.m_pbLock->setIcon(QIcon(":/Resource/lock.png"));
}
void lpImageCaliUI4P::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
ui.retranslateUi(this);
}
}
Q_SLOT void lpImageCaliUI4P::onButtonClicked()
{
QString strObj = sender()->objectName();
if (strObj == "m_pbLoadImg")
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Ñ¡Ôñ±ê¶¨Í¼"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));
if (!fileName.isEmpty())
{
QString DstPath = QApplication::applicationDirPath() + "\\user\\StandImage.png";
QString sourcePath = fileName;
DstPath.replace("\\", "/");
if (sourcePath == DstPath) {
}
if (!QFile::exists(sourcePath)) {
}
QDir *createfile = new QDir;
bool exist = createfile->exists(DstPath);
if (exist) {
createfile->remove(DstPath);
}
if (!QFile::copy(sourcePath, DstPath)) {
}
QImage img;
img.load(fileName);
if (m_srcImgView) {
m_srcImgView->setImg(img);
}
delete createfile;
createfile = nullptr;
}
}
else if ("m_pbApply" == strObj)
{
double realx1 = ui.m_lineEdit_P1X_P->text().toDouble();
double realy1 = ui.m_lineEdit_P1Y_P->text().toDouble();
double realx2 = ui.m_lineEdit_P2X_P->text().toDouble();
double realy2 = ui.m_lineEdit_P2Y_P->text().toDouble();
double realx3 = ui.m_lineEdit_P3X_P->text().toDouble();
double realy3 = ui.m_lineEdit_P3Y_P->text().toDouble();
double realx4 = ui.m_lineEdit_P4X_P->text().toDouble();
double realy4 = ui.m_lineEdit_P4Y_P->text().toDouble();
QPointF realPoint1 = QPointF(realx1, realy1);
QPointF realPoint2 = QPointF(realx2, realy2);
QPointF realPoint3 = QPointF(realx3, realy3);
QPointF realPoint4 = QPointF(realx4, realy4);
lpGlobalConfig::instance()->real_point1_4P = realPoint1;
lpGlobalConfig::instance()->real_point2_4P = realPoint2;
lpGlobalConfig::instance()->real_point3_4P = realPoint3;
lpGlobalConfig::instance()->real_point4_4P = realPoint4;
lpGlobalConfig::instance()->pointXOffset_4P = ui.m_lineEdit_Xoffset->text().toDouble();
lpGlobalConfig::instance()->pointYOffset_4P = ui.m_lineEdit_Yoffset->text().toDouble();
lpGlobalConfig::instance()->point1_4P = m_point1;
lpGlobalConfig::instance()->point2_4P = m_point2;
lpGlobalConfig::instance()->point3_4P = m_point3;
lpGlobalConfig::instance()->point4_4P = m_point4;
lpGlobalConfig::instance()->bTransPos_4P = ui.checkBox->isChecked();
lpGlobalConfig::instance()->testPoint = testPoint;
QPolygonF srcPoly;
QPolygonF dstPoly;
srcPoly << m_point1 << m_point2 << m_point3 << m_point4;
dstPoly << realPoint1 << realPoint2 << realPoint3 << realPoint4;
lpGlobalConfig::instance()->matxParam_4P = gentransform(srcPoly, dstPoly);
QPointF tmpTestPoint = transWorldPoint(testPoint, lpGlobalConfig::instance()->matxParam_4P);
ui.label_testSrc->setText(QString("(%1,%2)").arg(QString::number(testPoint.x(),'f',3)).arg(QString::number(testPoint.y(),'f',3)));
ui.label_testDst->setText(QString("(%1,%2)").arg(QString::number(tmpTestPoint.x(),'f',3)).arg(QString::number(tmpTestPoint.y(),'f',3)));
lpGlobalConfig::instance()->saveStandParam();
ui.label_info->setText("²ÎÊýÒÑÉúЧ");
ui.label_info->setStyleSheet("background-color: rgb(250, 168, 55);");
if (m_timerID == 0)
{
m_timerID = startTimer(1000);
}
}
else if ("m_pbExit" == strObj)
{
close();
}
else if ("m_pbLock" == strObj)
{
QString str = ui.m_pbLock->text();
if (str == "½âËø") {
ui.m_pbLock->setText(tr("ÉÏËø"));
ui.m_pbLock->setIcon(QIcon(":/Resource/lock-open.png"));
if (m_srcImgView)
{
m_srcImgView->setLockAll(false);
}
ui.label_info->setText("ÒѽâËø");
ui.label_info->setStyleSheet("background-color: rgb(255, 168, 55);");
if (m_timerID == 0)
{
m_timerID = startTimer(1000);
}
}
else {
if (m_srcImgView)
{
m_srcImgView->setLockAll(true);
}
ui.m_pbLock->setText(tr("½âËø"));
ui.m_pbLock->setIcon(QIcon(":/Resource/lock.png"));
ui.label_info->setText("ÒÑÉÏËø");
ui.label_info->setStyleSheet("background-color: rgb(255, 168, 55);");
if (m_timerID == 0)
{
m_timerID = startTimer(1000);
}
}
}
}
Q_SLOT void lpImageCaliUI4P::onROIChange(const AwesomeRoiInfo& roiInfo, QString strID)
{
if (strID == "P1")
{
QPointF p = roiInfo.vertex.at(0);
m_point1.setX(p.x());
m_point1.setY(p.y());
ui.m_lineEdit_P1X->setText(QString("%1").arg(m_point1.x()));
ui.m_lineEdit_P1Y->setText(QString("%1").arg(m_point1.y()));
}
else if (strID == "P2")
{
QPointF p = roiInfo.vertex.at(0);
m_point2.setX(p.x());
m_point2.setY(p.y());
ui.m_lineEdit_P2X->setText(QString("%1").arg(m_point2.x()));
ui.m_lineEdit_P2Y->setText(QString("%1").arg(m_point2.y()));
}
else if (strID == "P3")
{
QPointF p = roiInfo.vertex.at(0);
m_point3.setX(p.x());
m_point3.setY(p.y());
ui.m_lineEdit_P3X->setText(QString("%1").arg(m_point3.x()));
ui.m_lineEdit_P3Y->setText(QString("%1").arg(m_point3.y()));
}
else if (strID == "P4")
{
QPointF p = roiInfo.vertex.at(0);
m_point4.setX(p.x());
m_point4.setY(p.y());
ui.m_lineEdit_P4X->setText(QString("%1").arg(m_point4.x()));
ui.m_lineEdit_P4Y->setText(QString("%1").arg(m_point4.y()));
}
else if (strID == "TEST")
{
QPointF p = roiInfo.vertex.at(0);
testPoint.setX(p.x());
testPoint.setY(p.y());
QPointF tmpTestPoint = transWorldPoint(testPoint, lpGlobalConfig::instance()->matxParam_4P);
ui.label_testSrc->setText(QString("(%1,%2)").arg(QString::number(testPoint.x(), 'f', 3)).arg(QString::number(testPoint.y(), 'f', 3)));
ui.label_testDst->setText(QString("(%1,%2)").arg(QString::number(tmpTestPoint.x(), 'f', 3)).arg(QString::number(tmpTestPoint.y(), 'f', 3)));
}
}
Q_SLOT void lpImageCaliUI4P::onPixelClicked(QPoint point)
{
int a = 0;
}
Q_SLOT void lpImageCaliUI4P::onImageScale(qreal value)
{
QString strPath = QApplication::applicationDirPath() + "/showImg.ini";
QSettings setting(strPath, QSettings::IniFormat);
QObject *obj = sender();
setting.setValue("ShowImg/Scale_Standard", value);
}
void lpImageCaliUI4P::AddPoint(QPoint &p, QString strName,QColor color)
{
if (m_srcImgView)
{
int x = p.x();
int y = p.y();
int xp = (x - m_imageW / 2);
int yp = (y - m_imageH / 2);
m_srcImgView->addPointRoi(QPointF(xp, yp), lpGlobalConfig::instance()->pointCircle, 0, strName, color, QColor(255, 0, 255));
}
}
Q_SLOT void lpImageCaliUI4P::onRoiLockIng(QString strName)
{
ui.label_info->setText("²»ÄܲÙ×÷,Çë½âËø");
ui.label_info->setStyleSheet("background-color: rgb(255, 68, 55);");
if (m_timerID == 0)
{
m_timerID = startTimer(1000);
}
}
void lpImageCaliUI4P::timerEvent(QTimerEvent *event)
{
if (m_timerID == event->timerId())
{
killTimer(m_timerID);
m_timerID = 0;
ui.label_info->setText("");
ui.label_info->setStyleSheet("");
}
}