#include "ProgrammPage.h" #include "Src/RewriteControl/Controls/SpinBox.h" #include "Src/RewriteControl/Controls/DoubleSpinBox.h" #include ProgrammPage::ProgrammPage(QWidget *parent) : QWidget(parent) { ui.setupUi(this); ui.spinBoxRow->setVisible(false); ui.spinBoxCol->setVisible(false); ui.doubleSpinBoxLeftTopX->setVisible(false); ui.doubleSpinBoxLeftTopY->setVisible(false); ui.doubleSpinBoxRightTopX->setVisible(false); ui.doubleSpinBoxRightTopY->setVisible(false); ui.doubleSpinBoxRightButtomX->setVisible(false); ui.doubleSpinBoxRightButtomY->setVisible(false); ui.lineEditNoBondPts->setVisible(false); ui.label->setVisible(false); ui.label_18->setVisible(false); ui.label_2->setVisible(false); ui.label_79->setVisible(false); ui.label_80->setVisible(false); ui.label_81->setVisible(false); ui.label_82->setVisible(false); ui.frame->setFrameShape(QFrame::NoFrame); // 移除默认框架 ui.frame->setFixedHeight(2); // 设置固定高度 ui.frame->setStyleSheet("background-color: #C7CAEB;"); setStyleSheet( "QDoubleSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}" "QSpinBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}" "QLineEdit{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}" "QCheckBox::indicator{width: 20px;height: 20px;}" "QCheckBox::indicator:unchecked{background - color: #FFFFFF;border-radius: 2px;}" "QComboBox{background: #FFFFFF;border: 1px solid #BABBDC;border - radius: 6px;padding: 2px 5px;}" "QComboBox::drop - down{width: 20px;}" ); ui.tab->setStyleSheet("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6)"); m_pWaffleProgrammPage = new WaffleProgramPage(this); m_manageDB = CManageDB::GetInstance(); initPage(); connect(ui.pushButtonSave, &QPushButton::clicked, this, [=] { ParamChangeEvent(); MatrixChangeEvent(); }); //矩阵数据 connect(ui.spinBoxRow, &SpinBox::editingFinished, this, [=]() { }); connect(ui.spinBoxCol, &SpinBox::editingFinished, this, [=]() { }); connect(ui.doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() { }); connect(ui.doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() { }); connect(ui.doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() { }); connect(ui.doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() { }); connect(ui.doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() { }); connect(ui.doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() { }); //参数 connect(ui.comboBoxDieSource, QOverload::of(&QComboBox::currentIndexChanged), this, [=](int index) { if (index == 0) { m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFFLE; } else if (index == 1) { m_curBondInfo.eDieSource = DIE_SOURCE::BY_WAFER; } ParamChangeEvent(); }); connect(ui.checkBoxIsCalib, &QCheckBox::clicked, this, [=](bool isChecked) { }); connect(ui.spinBoxPickTempID, &SpinBox::editDone, this, [=]() { m_curBondInfo.iPickPRStrategyId = ui.spinBoxPickTempID->value(); ParamChangeEvent(); }); connect(ui.spinBoxPickNozzleID, &SpinBox::editDone, this, [=]() { m_curBondInfo.iPickHeadId = ui.spinBoxPickNozzleID->value(); ParamChangeEvent(); }); connect(ui.spinBoxPreBondTemp, &SpinBox::editDone, this, [=]() { m_curBondInfo.iBondFrontPRStrategyId = ui.spinBoxPreBondTemp->value(); ParamChangeEvent(); }); connect(ui.spinBoxPostBondTemp, &SpinBox::editDone, this, [=]() { m_curBondInfo.iBondBackPRStrategyId = ui.spinBoxPostBondTemp->value(); ParamChangeEvent(); }); connect(ui.spinBoxBondTemp, &SpinBox::editDone, this, [=]() { m_curBondInfo.iBondPRStrategyId = ui.spinBoxBondTemp->value(); ParamChangeEvent(); }); connect(ui.spinBoxLookUpTemp, &SpinBox::editDone, this, [=]() { m_curBondInfo.iLookUpPRStrategyId = ui.spinBoxLookUpTemp->value(); ParamChangeEvent(); }); connect(ui.spinBoxCalibPickTemp, &SpinBox::editDone, this, [=]() { m_curBondInfo.iCalibPRStrategyId = ui.spinBoxCalibPickTemp->value(); ParamChangeEvent(); }); connect(ui.spinBoxBondNozzleID, &SpinBox::editDone, this, [=]() { m_curBondInfo.iBondHeadId = ui.spinBoxBondNozzleID->value(); ParamChangeEvent(); }); connect(ui.doubleSpinBoxBondOffsetX, &DoubleSpinBox::editDone, this, [=]() { m_curBondInfo.stOffset.x = ui.doubleSpinBoxBondOffsetX->value(); ParamChangeEvent(); }); connect(ui.doubleSpinBoxBondOffsetY, &DoubleSpinBox::editDone, this, [=]() { m_curBondInfo.stOffset.y = ui.doubleSpinBoxBondOffsetY->value(); ParamChangeEvent(); }); connect(ui.doubleSpinBoxBondOffsetAngle, &DoubleSpinBox::editDone, this, [=]() { m_curBondInfo.stOffset.a = ui.doubleSpinBoxBondOffsetAngle->value(); ParamChangeEvent(); }); connect(ui.comboBoxPickParamType, &QComboBox::currentTextChanged, this, [=]() { UpdatePagePickParam(); }); connect(ui.checkBoxPickBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.bCheckBlock = ui.checkBoxPickBlockCheck->isChecked(); } ParamChangeEvent(); }); connect(ui.checkBoxPickLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.bCheckLose = ui.checkBoxPickLoseCheck->isChecked(); } ParamChangeEvent(); }); connect(ui.checkBoxPickFindForceCheck, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.bFindForce = ui.checkBoxPickFindForceCheck->isChecked(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxPrePickZ, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.dPreLev = ui.doubleSpinBoxPrePickZ->value(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxPickForce, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.dForce = ui.doubleSpinBoxPickForce->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.dForce = ui.doubleSpinBoxPickForce->value(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxPickPosZ, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.dPickOrBondLev = ui.doubleSpinBoxPickPosZ->value(); } ParamChangeEvent(); }); connect(ui.spinBoxPickGrabDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.iGrabDelay = ui.spinBoxPickGrabDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBox_PickDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.iPickOrBondDelay = ui.spinBox_PickDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxPickBlockCheckDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.iBlockOrLoseDelay = ui.spinBoxPickBlockCheckDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxPickVacDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.iVacuumDelay = ui.spinBoxPickVacDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxPickBlowDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxPickParamType->currentIndex() == 0)//华夫盒 { m_curWaferPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value(); } else if (ui.comboBoxPickParamType->currentIndex() == 1)//晶圆台 { m_curCalibPickParam.iBlowDelay = ui.spinBoxPickBlowDelay->value(); } ParamChangeEvent(); }); connect(ui.comboBoxBondParamType, &QComboBox::currentTextChanged, this, [=]() { UpdatePageBondParam(); }); connect(ui.checkBoxBondBlockCheck, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.bCheckBlock = ui.checkBoxBondBlockCheck->isChecked(); } ParamChangeEvent(); }); connect(ui.checkBoxBondLoseCheck, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.bCheckLose = ui.checkBoxBondLoseCheck->isChecked(); } ParamChangeEvent(); }); connect(ui.checkBoxBondFindForce, &QCheckBox::clicked, this, [=](bool isChecked) { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.bFindForce = ui.checkBoxBondFindForce->isChecked(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.bFindForce = ui.checkBoxBondFindForce->isChecked(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxPreBondPosZ, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.dPreLev = ui.doubleSpinBoxPreBondPosZ->value(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxBondForce, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.dForce = ui.doubleSpinBoxBondForce->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.dForce = ui.doubleSpinBoxBondForce->value(); } ParamChangeEvent(); }); connect(ui.doubleSpinBoxBondPosZ, &DoubleSpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.dPickOrBondLev = ui.doubleSpinBoxBondPosZ->value(); } ParamChangeEvent(); }); connect(ui.spinBoxBondGrabDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.iGrabDelay = ui.spinBoxBondGrabDelay->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.iGrabDelay = ui.spinBoxBondGrabDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxBondBlockCheckDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.iBlockOrLoseDelay = ui.spinBoxBondBlockCheckDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxBondDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.iPickOrBondDelay = ui.spinBoxBondDelay->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.iPickOrBondDelay = ui.spinBoxBondDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxBondVacDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.iVacuumDelay = ui.spinBoxBondVacDelay->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.iVacuumDelay = ui.spinBoxBondVacDelay->value(); } ParamChangeEvent(); }); connect(ui.spinBoxBondBlowDelay, &SpinBox::editDone, this, [=]() { if (ui.comboBoxBondParamType->currentIndex() == 0)//中转台放晶 { m_curCalibPlaceParam.iBlowDelay = ui.spinBoxBondBlowDelay->value(); } else if (ui.comboBoxBondParamType->currentIndex() == 1)//固晶台固晶 { m_curBondParam.iBlowDelay = ui.spinBoxBondBlowDelay->value(); } ParamChangeEvent(); }); } ProgrammPage::~ProgrammPage() {} void ProgrammPage::AddMatrixPage(int bondMatrixVectorIndex, int vectorIndex, PROGRAM_POINT_MATRIX_STRUCT matrixData) { int matrixNum = m_mapSubMatrixControls.size(); int newMatrixID = ++matrixNum; QVector vecControls; QGridLayout* subGridLayout = new QGridLayout(); subGridLayout->setSpacing(6); subGridLayout->setObjectName(QString::fromUtf8("subGridLayout")); QFrame* line = new QFrame(); line->setFrameShape(QFrame::NoFrame); // 移除默认框架 line->setFixedHeight(2); // 设置固定高度 line->setStyleSheet("background-color: #C7CAEB;"); ui.verticalLayout_2->addWidget(line); QLabel* labelTitle = new QLabel(this); labelTitle->setObjectName(QString::fromUtf8("labelTitle")); labelTitle->setText(tr("Sub Matrix ")+ QString::number(vectorIndex)); subGridLayout->addWidget(labelTitle, 0, 0, 1, 1); vecControls.push_back(labelTitle); QLabel* labelRow = new QLabel(this); labelRow->setObjectName(QString::fromUtf8("labelRow")); labelRow->setText(tr("Row ")); subGridLayout->addWidget(labelRow, 1, 0, 1, 1); vecControls.push_back(labelRow); SpinBox* spinBoxRow = new SpinBox(this); spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow")); subGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1); vecControls.push_back(spinBoxRow); QLabel* labelCol = new QLabel(this); labelCol->setObjectName(QString::fromUtf8("labelCol")); labelCol->setText(tr("Cow ")); subGridLayout->addWidget(labelCol, 2, 0, 1, 1); vecControls.push_back(labelCol); SpinBox* spinBoxCol = new SpinBox(this); spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol")); subGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1); vecControls.push_back(spinBoxCol); QLabel* labelLeftTop = new QLabel(this); labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop")); labelLeftTop->setText(tr("Left Top Pos ")); subGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1); vecControls.push_back(labelLeftTop); DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this); doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX")); subGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1); vecControls.push_back(doubleSpinBoxLeftTopX); DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this); doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY")); subGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1); vecControls.push_back(doubleSpinBoxLeftTopY); QLabel* labelRightTopPos = new QLabel(this); labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos")); labelRightTopPos->setText(tr("Right Top Pos ")); subGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1); vecControls.push_back(labelRightTopPos); DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this); doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX")); subGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1); vecControls.push_back(doubleSpinBoxRightTopX); DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this); doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY")); subGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1); vecControls.push_back(doubleSpinBoxRightTopY); QLabel* labelRightButtomPos = new QLabel(this); labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos")); labelRightButtomPos->setText(tr("Right Buttom pos")); subGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1); vecControls.push_back(labelRightButtomPos); DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this); doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX")); subGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1); vecControls.push_back(doubleSpinBoxRightButtomX); DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this); doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY")); subGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1); vecControls.push_back(doubleSpinBoxRightTopX); QLabel* labelNoBondPts = new QLabel(this); labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts")); labelNoBondPts->setText(tr("No Bond Points")); subGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1); vecControls.push_back(labelNoBondPts); QLineEdit* lineEditNoBondPts = new QLineEdit(this); lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts")); subGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2); vecControls.push_back(lineEditNoBondPts); m_mapSubMatrixControls.insert(newMatrixID, vecControls); ui.verticalLayout_2->addLayout(subGridLayout); spinBoxRow->setValue(matrixData.MatrixRow); spinBoxCol->setValue(matrixData.MatrixCol); doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x); doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y); doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x); doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y); doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x); doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y); QString noBondPts = ""; bool firstTime = false; for (XY_LONG_STRUCT pt : matrixData.VecNoBondPt) { if (!firstTime) { noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; firstTime = true; continue; } noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; } lineEditNoBondPts->setText(noBondPts); connect(spinBoxRow, &SpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].MatrixRow = spinBoxRow->value(); MatrixChangeEvent(); }); connect(spinBoxCol, &SpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].MatrixCol = spinBoxCol->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() { m_vecSubMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value(); MatrixChangeEvent(); }); connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() { }); } void ProgrammPage::AddOutMatrixPage(int vectorIndex, PROGRAM_BOND_MATRIX_STRUCT matrixData) { int matrixNum = m_mapSubMatrixControls.size(); int newMatrixID = ++matrixNum; QVector vecControls; QFrame* line = new QFrame(); line->setFrameShape(QFrame::NoFrame); // 移除默认框架 line->setFixedHeight(4); // 设置固定高度 line->setStyleSheet("background-color: #C7CAEB;"); ui.verticalLayout_2->addWidget(line); QGridLayout* matrixGridLayout = new QGridLayout(); matrixGridLayout->setSpacing(6); matrixGridLayout->setObjectName(QString::fromUtf8("matrixGridLayout")); QLabel* labelTitle = new QLabel(this); labelTitle->setObjectName(QString::fromUtf8("labelRow")); labelTitle->setText(tr("Matrix_")+ QString::number(vectorIndex)); matrixGridLayout->addWidget(labelTitle, 0, 0, 1, 1); vecControls.push_back(labelTitle); QLabel* labelRow = new QLabel(this); labelRow->setObjectName(QString::fromUtf8("labelRow")); labelRow->setText(tr("Row ")); matrixGridLayout->addWidget(labelRow, 1, 0, 1, 1); vecControls.push_back(labelRow); SpinBox* spinBoxRow = new SpinBox(this); spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow")); matrixGridLayout->addWidget(spinBoxRow, 1, 1, 1, 1); vecControls.push_back(spinBoxRow); QLabel* labelCol = new QLabel(this); labelCol->setObjectName(QString::fromUtf8("labelCol")); labelCol->setText(tr("Cow ")); matrixGridLayout->addWidget(labelCol, 2, 0, 1, 1); vecControls.push_back(labelCol); SpinBox* spinBoxCol = new SpinBox(this); spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol")); matrixGridLayout->addWidget(spinBoxCol, 2, 1, 1, 1); vecControls.push_back(spinBoxCol); QLabel* labelLeftTop = new QLabel(this); labelLeftTop->setObjectName(QString::fromUtf8("labelLeftTop")); labelLeftTop->setText(tr("Left Top Pos ")); matrixGridLayout->addWidget(labelLeftTop, 4, 0, 1, 1); vecControls.push_back(labelLeftTop); DoubleSpinBox* doubleSpinBoxLeftTopX = new DoubleSpinBox(this); doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX")); matrixGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1); vecControls.push_back(doubleSpinBoxLeftTopX); DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(this); doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY")); matrixGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1); vecControls.push_back(doubleSpinBoxLeftTopY); QLabel* labelRightTopPos = new QLabel(this); labelRightTopPos->setObjectName(QString::fromUtf8("labelRightTopPos")); labelRightTopPos->setText(tr("Right Top Pos ")); matrixGridLayout->addWidget(labelRightTopPos, 5, 0, 1, 1); vecControls.push_back(labelRightTopPos); DoubleSpinBox* doubleSpinBoxRightTopX = new DoubleSpinBox(this); doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX")); matrixGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1); vecControls.push_back(doubleSpinBoxRightTopX); DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(this); doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY")); matrixGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1); vecControls.push_back(doubleSpinBoxRightTopY); QLabel* labelRightButtomPos = new QLabel(this); labelRightButtomPos->setObjectName(QString::fromUtf8("labelRightButtomPos")); labelRightButtomPos->setText(tr("Right Buttom pos")); matrixGridLayout->addWidget(labelRightButtomPos, 6, 0, 1, 1); vecControls.push_back(labelRightButtomPos); DoubleSpinBox* doubleSpinBoxRightButtomX = new DoubleSpinBox(this); doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX")); matrixGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1); vecControls.push_back(doubleSpinBoxRightButtomX); DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(this); doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY")); matrixGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1); vecControls.push_back(doubleSpinBoxRightTopX); QLabel* labelNoBondPts = new QLabel(this); labelNoBondPts->setObjectName(QString::fromUtf8("labelNoBondPts")); labelNoBondPts->setText(tr("No Bond Points")); matrixGridLayout->addWidget(labelNoBondPts, 7, 0, 1, 1); vecControls.push_back(labelNoBondPts); QLineEdit* lineEditNoBondPts = new QLineEdit(this); lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts")); matrixGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 2); vecControls.push_back(lineEditNoBondPts); m_mapSubMatrixControls.insert(newMatrixID, vecControls); ui.verticalLayout_2->addLayout(matrixGridLayout); spinBoxRow->setValue(matrixData.BondMatrixRow); spinBoxCol->setValue(matrixData.BondMatrixCol); doubleSpinBoxLeftTopX->setValue(matrixData.LeftTopPoint.x); doubleSpinBoxLeftTopY->setValue(matrixData.LeftTopPoint.y); doubleSpinBoxRightTopX->setValue(matrixData.RightTopPoint.x); doubleSpinBoxRightTopY->setValue(matrixData.RightTopPoint.y); doubleSpinBoxRightButtomX->setValue(matrixData.RightBottomPoint.x); doubleSpinBoxRightButtomY->setValue(matrixData.RightBottomPoint.y); QString noBondPts = ""; bool firstTime = false; for (XY_LONG_STRUCT pt : m_vectBondMatrixs[0].VecNoBondPt) { if (firstTime) { noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; firstTime = true; continue; } noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; } lineEditNoBondPts->setText(noBondPts); connect(spinBoxRow, &SpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].BondMatrixRow = spinBoxRow->value(); MatrixChangeEvent(); }); connect(spinBoxCol, &SpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].BondMatrixCol = spinBoxCol->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value(); MatrixChangeEvent(); }); connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() { m_vectBondMatrixs[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value(); MatrixChangeEvent(); }); connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() { }); } void ProgrammPage::AddMatrixParam() { } void ProgrammPage::UpdatePageParam() { int dieSourceIndex = 0; if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFER) { dieSourceIndex = 1; } else if (m_curBondInfo.eDieSource == DIE_SOURCE::BY_WAFFLE) { dieSourceIndex = 0; } ui.comboBoxDieSource->setCurrentIndex(dieSourceIndex); ui.spinBoxPickTempID->setValue(m_curBondInfo.iPickPRStrategyId); ui.spinBoxPickNozzleID->setValue(m_curBondInfo.iPickHeadId); ui.spinBoxPreBondTemp->setValue(m_curBondInfo.iBondFrontPRStrategyId); ui.spinBoxPostBondTemp->setValue(m_curBondInfo.iBondBackPRStrategyId); ui.spinBoxBondTemp->setValue(m_curBondInfo.iBondPRStrategyId); ui.spinBoxLookUpTemp->setValue(m_curBondInfo.iLookUpPRStrategyId); ui.spinBoxCalibPickTemp->setValue(m_curBondInfo.iCalibPRStrategyId); ui.doubleSpinBoxBondOffsetX->setValue(m_curBondInfo.stOffset.x); ui.doubleSpinBoxBondOffsetY->setValue(m_curBondInfo.stOffset.y); ui.doubleSpinBoxBondOffsetAngle->setValue(m_curBondInfo.stOffset.a); UpdatePagePickParam(); UpdatePageBondParam(); } void ProgrammPage::ParamChangeEvent() { m_manageDB->GetCProduct()->SetBondInfoData(m_curBondInfo.iInfoId, m_curBondInfo); m_manageDB->GetCProduct()->SetBondParam(m_curWaferPickParam.iId, m_curWaferPickParam); m_manageDB->GetCProduct()->SetBondParam(m_curCalibPlaceParam.iId, m_curCalibPlaceParam); m_manageDB->GetCProduct()->SetBondParam(m_curCalibPickParam.iId, m_curCalibPickParam); m_manageDB->GetCProduct()->SetBondParam(m_curBondParam.iId, m_curBondParam); } void ProgrammPage::MatrixChangeEvent() { for (PROGRAM_BOND_MATRIX_STRUCT& bondMatrix : m_vectBondMatrixs) { m_manageDB->GetCProduct()->SetBondMatrix(bondMatrix.BondMatrixId, bondMatrix); } for (PROGRAM_POINT_MATRIX_STRUCT& pointMatrix : m_vecSubMatrixs) { m_manageDB->GetCProduct()->SetPointMatrix(pointMatrix.MatrixId, pointMatrix); } } void ProgrammPage::UpdatePagePickParam() { //"取晶头取晶" if (ui.comboBoxPickParamType->currentIndex() == 0) { ui.checkBoxPickBlockCheck->setChecked(m_curWaferPickParam.bCheckBlock); ui.checkBoxPickLoseCheck->setChecked(m_curWaferPickParam.bCheckLose); ui.checkBoxPickFindForceCheck->setChecked(m_curWaferPickParam.bFindForce); ui.doubleSpinBoxPrePickZ->setValue(m_curWaferPickParam.dPreLev); ui.doubleSpinBoxPickForce->setValue(m_curWaferPickParam.dForce); ui.doubleSpinBoxPickPosZ->setValue(m_curWaferPickParam.dPickOrBondLev); ui.spinBoxPickGrabDelay->setValue(m_curWaferPickParam.iGrabDelay); ui.spinBox_PickDelay->setValue(m_curWaferPickParam.iPickOrBondDelay); ui.spinBoxPickBlockCheckDelay->setValue(m_curWaferPickParam.iBlockOrLoseDelay); ui.spinBoxPickVacDelay->setValue(m_curWaferPickParam.iVacuumDelay); ui.spinBoxPickBlowDelay->setValue(m_curWaferPickParam.iBlowDelay); } //"中转台取晶" else if (ui.comboBoxPickParamType->currentIndex() == 1) { ui.checkBoxPickBlockCheck->setChecked(m_curCalibPickParam.bCheckBlock); ui.checkBoxPickLoseCheck->setChecked(m_curCalibPickParam.bCheckLose); ui.checkBoxPickFindForceCheck->setChecked(m_curCalibPickParam.bFindForce); ui.doubleSpinBoxPrePickZ->setValue(m_curCalibPickParam.dPreLev); ui.doubleSpinBoxPickForce->setValue(m_curCalibPickParam.dForce); ui.doubleSpinBoxPickPosZ->setValue(m_curCalibPickParam.dPickOrBondLev); ui.spinBoxPickGrabDelay->setValue(m_curCalibPickParam.iGrabDelay); ui.spinBox_PickDelay->setValue(m_curCalibPickParam.iPickOrBondDelay); ui.spinBoxPickBlockCheckDelay->setValue(m_curCalibPickParam.iBlockOrLoseDelay); ui.spinBoxPickVacDelay->setValue(m_curCalibPickParam.iVacuumDelay); ui.spinBoxPickBlowDelay->setValue(m_curCalibPickParam.iBlowDelay); } } void ProgrammPage::UpdatePageBondParam() { //"中转台放晶" if (ui.comboBoxBondParamType->currentIndex() == 0) { ui.checkBoxBondBlockCheck->setChecked(m_curCalibPlaceParam.bCheckBlock); ui.checkBoxBondLoseCheck->setChecked(m_curCalibPlaceParam.bCheckLose); ui.checkBoxBondFindForce->setChecked(m_curCalibPlaceParam.bFindForce); ui.doubleSpinBoxPreBondPosZ->setValue(m_curCalibPlaceParam.dPreLev); ui.doubleSpinBoxBondForce->setValue(m_curCalibPlaceParam.dForce); ui.doubleSpinBoxBondPosZ->setValue(m_curCalibPlaceParam.dPickOrBondLev); ui.spinBoxBondGrabDelay->setValue(m_curCalibPlaceParam.iGrabDelay); ui.spinBoxBondDelay->setValue(m_curCalibPlaceParam.iPickOrBondDelay); ui.spinBoxBondBlockCheckDelay->setValue(m_curCalibPlaceParam.iBlockOrLoseDelay); ui.spinBoxBondVacDelay->setValue(m_curCalibPlaceParam.iVacuumDelay); ui.spinBoxBondBlowDelay->setValue(m_curCalibPlaceParam.iBlowDelay); } //"固晶台固晶" else if (ui.comboBoxBondParamType->currentIndex() == 1) { ui.checkBoxBondBlockCheck->setChecked(m_curBondParam.bCheckBlock); ui.checkBoxBondLoseCheck->setChecked(m_curBondParam.bCheckLose); ui.checkBoxBondFindForce->setChecked(m_curBondParam.bFindForce); ui.doubleSpinBoxPreBondPosZ->setValue(m_curBondParam.dPreLev); ui.doubleSpinBoxBondForce->setValue(m_curBondParam.dForce); ui.doubleSpinBoxBondPosZ->setValue(m_curBondParam.dPickOrBondLev); ui.spinBoxBondGrabDelay->setValue(m_curBondParam.iGrabDelay); ui.spinBoxBondDelay->setValue(m_curBondParam.iPickOrBondDelay); ui.spinBoxBondBlockCheckDelay->setValue(m_curBondParam.iBlockOrLoseDelay); ui.spinBoxBondVacDelay->setValue(m_curBondParam.iVacuumDelay); ui.spinBoxBondBlowDelay->setValue(m_curBondParam.iBlowDelay); } } void ProgrammPage::initPage() { if (m_manageDB == nullptr) { return; } //从后端获取数据 m_vectBondMatrixs = m_manageDB->GetCProduct()->GetBondMatrix(); if (m_vectBondMatrixs.size() == 0) { return; } for (int i = 0; i < m_vectBondMatrixs.size(); i++) { AddOutMatrixPage(i, m_vectBondMatrixs[i]); for (int j = 0; j < m_vectBondMatrixs[i].VecPointMatrixId.size(); j++) { PROGRAM_POINT_MATRIX_STRUCT subMatrix; m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[i].VecPointMatrixId[j], subMatrix); m_vecSubMatrixs.push_back(subMatrix); AddMatrixPage(i, j, subMatrix); } } //for (int i = 0; i < m_vectBondMatrixs[0].VecPointMatrixId.size(); ++i) //{ // PROGRAM_POINT_MATRIX_STRUCT subMatrix; // m_manageDB->GetCProduct()->GetPointMatrix(m_vectBondMatrixs[0].VecPointMatrixId[i], subMatrix); // m_vecSubMatrixs.push_back(subMatrix); //} //m_manageDB->GetCProduct()->GetDieMatrix(m_vectBondMatrixs[0].VecPointMatrixId[0], m_vecSubMatrixs); //显示矩阵数据 ui.spinBoxRow->setValue(m_vectBondMatrixs[0].BondMatrixRow); ui.spinBoxCol->setValue(m_vectBondMatrixs[0].BondMatrixCol); ui.doubleSpinBoxLeftTopX->setValue(m_vectBondMatrixs[0].LeftTopPoint.x); ui.doubleSpinBoxLeftTopY->setValue(m_vectBondMatrixs[0].LeftTopPoint.y); ui.doubleSpinBoxRightTopX->setValue(m_vectBondMatrixs[0].RightTopPoint.x); ui.doubleSpinBoxRightTopY->setValue(m_vectBondMatrixs[0].RightTopPoint.y); ui.doubleSpinBoxRightButtomX->setValue(m_vectBondMatrixs[0].RightBottomPoint.x); ui.doubleSpinBoxRightButtomY->setValue(m_vectBondMatrixs[0].RightBottomPoint.y); QString noBondPts = ""; bool firstTime = false; for (XY_LONG_STRUCT& pt : m_vectBondMatrixs[0].VecNoBondPt) { if (firstTime) { noBondPts += "(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; firstTime = true; } noBondPts += ";(" + QString::number(pt.x) + "," + QString::number(pt.y) + ")"; } ui.lineEditNoBondPts->setText(noBondPts); //显示子矩阵及数据 //for (PROGRAM_POINT_MATRIX_STRUCT& subMatrix : m_vecSubMatrixs) //{ // AddMatrixPage(subMatrix); //} //从后端获取参数, 一套数据 CResources* pResources = CResources::GetInstance(); if (pResources == nullptr) { return ; } CBondMatrix* pBondMatrix = pResources->GetBondMatrix(); if (pBondMatrix == nullptr) { return ; } //pBondMatrix->GetPintInfoByIndex(0, m_curPointInfo); m_manageDB->GetCProduct()->GetBondInfoData(m_vectBondMatrixs[0].BondInfoId, m_curBondInfo); m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iPickParamId, m_curWaferPickParam); m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibBondParamId, m_curCalibPlaceParam); m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iCalibPickParamId, m_curCalibPickParam); m_manageDB->GetCProduct()->GetBondParam(m_curBondInfo.iBondParamId, m_curBondParam); //显示界面参数 UpdatePageParam(); ui.verticalLayoutWaffleMatrix->addWidget(m_pWaffleProgrammPage); }