123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801 |
- #include "WaffleProgramPage.h"
- #include <QGroupBox>
- #include <QLineEdit>
- #include "Src/RewriteControl/Controls/SpinBox.h"
- #include "Src/RewriteControl/Controls/DoubleSpinBox.h"
- #include <View/die-bonder-ui/Src/MatrixDialogs/NoBondPtEditDialog.h>
- #include <QLabel>
- #include <QPushButton>
- #include <QHBoxLayout>
- #include <QVBoxLayout>
- #include <algorithm>
- WaffleProgramPage::WaffleProgramPage(QWidget* parent)
- :QWidget(parent)
- {
- ui.setupUi(this);
- ui.pushButtonSave->setProperty("type", "save");
- ui.pushButtonAddOutMatrix->setProperty("type", "addOutMatrix");
- setStyleSheet(
- "QWidget { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6); }"
- "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; }"
- "QPushButton { background: #D0D0E8; border: 1px solid #BABBDC; border-radius: 6px; padding: 2px 5px; }" // Button background color
- "QPushButton:hover { background-color: #B0B0D8; }" // Lighter color on hover
- "QPushButton:pressed { background-color: #A0A0C8; }" // Darker color on press
- );
- m_manageDB = CManageDB::GetInstance();
- if (m_manageDB == nullptr) return;
- m_pProduct = m_manageDB->GetCProduct();
- if (m_pProduct == nullptr) return;
- m_pProgramCViewInterface = ns_module::CViewInterface::GetInstance();
- initPage();
- connect(ui.pushButtonSave, &QPushButton::clicked, this, [=]() {
- m_pProduct->SetAllWaffleMatrix(m_vecWaffleMatrix);
- m_pProduct->SetAllWaffleDieMatrix(m_vecSubWaffleMatrix);
- CProduct* _Product = m_manageDB->GetCProduct();
- });
- connect(ui.pushButtonAddOutMatrix, &QPushButton::clicked, this, [=]() {
- PROGRAM_WAFFLE_MATRIX_STRUCT newMatrix;
- //排序
- std::sort(m_vecWaffleMatrix.begin(), m_vecWaffleMatrix.end(),
- [](const PROGRAM_WAFFLE_MATRIX_STRUCT& a, const PROGRAM_WAFFLE_MATRIX_STRUCT& b) {
- return a.MatrixId < b.MatrixId;
- });
- //找Id
- int newId = 1;
- for (const auto& matrix : m_vecWaffleMatrix)
- {
- if (matrix.MatrixId == newId)
- {
- newId++;
- }
- else if (matrix.MatrixId > newId)
- {
- break;
- }
- }
- newMatrix.MatrixId = newId;
- newMatrix.PackRow = 0;
- newMatrix.PackCol = 0;
- int newVectorIndex = m_vecWaffleMatrix.size();
- std::vector<PROGRAM_DIE_MATRIX_STRUCT> newVecSubMatrix;
- m_vecWaffleMatrix.push_back(newMatrix);
- AddMatrixPage(newVectorIndex, newMatrix, newVecSubMatrix);
- });
- }
- WaffleProgramPage::~WaffleProgramPage()
- {
- }
- XY_DOUBLE_STRUCT WaffleProgramPage::WaffleGetAxisPosition(std::string ModuleType, XY_DOUBLE_STRUCT& pos)
- {
- /*CAxis* _Axis;
- CAxis::AXIS_TYPE eAxisType = _Axis->GetAxisType();*/
- if (m_pProgramCViewInterface == nullptr)
- {
- XY_DOUBLE_STRUCT errorPt = pos; // 可以根据需要返回一个错误状态
- // 弹出消息框显示位置
- QString positionString = QString("Unable to retrieve axis position for module type: %1").arg(QString::fromStdString(ModuleType));
- QMessageBox::information(this, "Axis Position Error", positionString);
- return errorPt;
- }
- m_pProgramCViewInterface->GetViewMotion()->GetAxisPosition(ModuleType, "X", pos.x);
- m_pProgramCViewInterface->GetViewMotion()->GetAxisPosition(ModuleType, "Y", pos.y);
- return pos;
- }
- void WaffleProgramPage::AddMatrixPage(int vectorIndex, PROGRAM_WAFFLE_MATRIX_STRUCT matrixData, std::vector<PROGRAM_DIE_MATRIX_STRUCT> vecSubMatrix)
- {
- int matrixNum = m_mapSubMatrixControls.size();
- int newMatrixID = ++matrixNum;
- QVector<QObject*> vecControls;
- QWidget* outWidget = new QWidget();
- QGridLayout* outMatrixGridLayout = new QGridLayout();
- outMatrixGridLayout->setSpacing(4);
- outMatrixGridLayout->setObjectName(QString::fromUtf8("Out GridLayout"));
- outMatrixGridLayout->setContentsMargins(0, 0, 0, 0); // 设置布局的边距为0
- QGridLayout* boxGridLayout = new QGridLayout();
- boxGridLayout->setSpacing(6);
- boxGridLayout->setObjectName(QString::fromUtf8("Box GridLayout"));
- QHBoxLayout* buttonLayout = new QHBoxLayout();
- QSpacerItem* item = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
- buttonLayout->addSpacerItem(item);
- //QPushButton* pushButtonAddOutMatrix = new QPushButton();
- //pushButtonAddOutMatrix->setObjectName(QString::fromUtf8("button Add"));
- //pushButtonAddOutMatrix->setText(tr("add out Matrix"));
- //buttonLayout->addWidget(pushButtonAddOutMatrix);
-
- //ui.verticalLayout->addLayout(buttonLayout);
- QGroupBox* groupBox = new QGroupBox(outWidget);
- groupBox->setLayout(boxGridLayout);
- QGridLayout* matrixGridLayout = new QGridLayout();
- matrixGridLayout->setSpacing(6);
- matrixGridLayout->setObjectName(QString::fromUtf8("matrixGridLayout"));
- QLabel* labelTitle = new QLabel(outWidget);
- labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
- labelTitle->setText(tr("Matrix ") + QString::number(vectorIndex));
- labelTitle->setStyleSheet("color: #6A78FF;height: 30px");
- matrixGridLayout->addWidget(labelTitle, 0, 0, 1, 1);
- vecControls.push_back(labelTitle);
- QPushButton* pushButtonAdd = new QPushButton(outWidget);
- pushButtonAdd->setObjectName(QString::fromUtf8("button Add"));
- pushButtonAdd->setText(tr("Add sub Matrix"));
- matrixGridLayout->addWidget(pushButtonAdd, 0, 2, 1, 2);
- pushButtonAdd->setProperty("type", "default");
- connect(pushButtonAdd, &QPushButton::clicked, this, [=]() {
- int newIndex = m_vecSubWaffleMatrix.size();
- PROGRAM_DIE_MATRIX_STRUCT dieMatrix;
- //排序
- std::sort(m_vecSubWaffleMatrix.begin(), m_vecSubWaffleMatrix.end(),
- [](const PROGRAM_DIE_MATRIX_STRUCT& a, const PROGRAM_DIE_MATRIX_STRUCT& b) {
- return a.MatrixId < b.MatrixId;
- });
- //找Id
- int newId = 1;
- for (const auto& matrix : m_vecSubWaffleMatrix)
- {
- if (matrix.MatrixId == newId)
- {
- newId++;
- } else if (matrix.MatrixId > newId)
- {
- break;
- }
- }
- dieMatrix.MatrixId = newId;
- dieMatrix.strModuleName = "WaffleHead";
- dieMatrix.iModuleId = MODULE_LIST::WaffleHead;
- dieMatrix.MatrixRow = 0;
- dieMatrix.MatrixCol = 0;
- m_vecSubWaffleMatrix.push_back(dieMatrix);
- //找大矩阵ID/Index
- auto currentIt = m_mapOutWidgetIndex.find(outWidget);
- int index = currentIt.value(); //迭代器 erase后currentIt被删除了
- m_vecWaffleMatrix[index].VecDieMatrixId.push_back(newId);
- AddSubMatrixPage(vectorIndex,newIndex, dieMatrix, boxGridLayout);
- });
- QPushButton* pushButtonDelete = new QPushButton(outWidget);
- pushButtonDelete->setObjectName(QString::fromUtf8("button delete"));
- pushButtonDelete->setText(tr("Delete"));
- matrixGridLayout->addWidget(pushButtonDelete, 0, 1, 1, 1);
- connect(pushButtonDelete, &QPushButton::clicked, this, [=]() {
- //处理index
- auto currentIt = m_mapOutWidgetIndex.find(outWidget);
- int index = currentIt.value(); //迭代器 erase后currentIt被删除了
- m_mapOutWidgetIndex.erase(currentIt);
-
- for (auto it = m_mapOutWidgetIndex.begin(); it != m_mapOutWidgetIndex.end(); it++)
- {
- if (it.value() > index)
- {
- int newIndex = it.value() - 1;
- m_mapOutWidgetIndex.insert(it.key(), newIndex);
- }
- }
- //删除缓存数据
- m_vecWaffleMatrix.erase(m_vecWaffleMatrix.begin() + index);
- delete outWidget;
- });
- QLabel* labelRow = new QLabel(outWidget);
- labelRow->setObjectName(QString::fromUtf8("labelRow"));
- labelRow->setText(tr("Row & Cow"));
- matrixGridLayout->addWidget(labelRow, 2, 0, 1, 1);
- vecControls.push_back(labelRow);
- SpinBox* spinBoxRow = new SpinBox(outWidget);
- spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
- spinBoxRow->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(spinBoxRow, 2, 1, 1, 1);
- vecControls.push_back(spinBoxRow);
- /*QLabel* labelCol = new QLabel(outWidget);
- labelCol->setObjectName(QString::fromUtf8("labelCol"));
- labelCol->setText(tr("Cow "));
- matrixGridLayout->addWidget(labelCol, 3, 0, 1, 1);
- vecControls.push_back(labelCol);*/
- SpinBox* spinBoxCol = new SpinBox(outWidget);
- spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
- spinBoxCol->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(spinBoxCol, 2, 2, 1, 1);
- vecControls.push_back(spinBoxCol);
- QLabel* labelLeftTop = new QLabel(outWidget);
- 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(outWidget);
- doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
- doubleSpinBoxLeftTopX->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxLeftTopX);
- DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(outWidget);
- doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
- doubleSpinBoxLeftTopY->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxLeftTopY);
- QPushButton* buttonLeftTop = new QPushButton("Get Pos", this);
- buttonLeftTop->setFixedWidth(62); // Set the same width for the button
- matrixGridLayout->addWidget(buttonLeftTop, 4, 3, 1, 1); // Position the button next to LeftTopPos
- connect(buttonLeftTop, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[vectorIndex].LeftTopPoint);
- doubleSpinBoxLeftTopX->setValue(position.x); // Update X axis
- doubleSpinBoxLeftTopY->setValue(position.y); // Update Y axis
- });
- QLabel* labelRightTopPos = new QLabel(outWidget);
- 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(outWidget);
- doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
- doubleSpinBoxRightTopX->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopX);
- DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(outWidget);
- doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
- doubleSpinBoxRightTopY->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopY);
- QPushButton* buttonRightTop = new QPushButton("Get Pos", this);
- buttonRightTop->setFixedWidth(62); // Set the same width for the button
- matrixGridLayout->addWidget(buttonRightTop, 5, 3, 1, 1); // Position the button next to RightTopPos
- connect(buttonRightTop, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[vectorIndex].LeftTopPoint);
- doubleSpinBoxRightTopX->setValue(position.x); // Update X axis
- doubleSpinBoxRightTopY->setValue(position.y); // Update Y axis
- });
- QLabel* labelRightButtomPos = new QLabel(outWidget);
- 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(outWidget);
- doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
- doubleSpinBoxRightButtomX->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxRightButtomX);
- DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(outWidget);
- doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
- doubleSpinBoxRightButtomY->setFixedWidth(100); // Set fixed width to 100
- matrixGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopX);
- QPushButton* buttonRightButtom = new QPushButton("Get Pos", this);
- buttonRightButtom->setFixedWidth(62); // Set the same width for the button
- matrixGridLayout->addWidget(buttonRightButtom, 6, 3, 1, 1); // Position the button next to RightBottomPos
- connect(buttonRightButtom, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[vectorIndex].LeftTopPoint);
- doubleSpinBoxRightButtomX->setValue(position.x); // Update X axis
- doubleSpinBoxRightButtomY->setValue(position.y); // Update Y axis
- });
- QLabel* labelNoBondPts = new QLabel(outWidget);
- 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(outWidget);
- lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
- matrixGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 3);
- vecControls.push_back(lineEditNoBondPts);
- lineEditNoBondPts->setReadOnly(true);
- lineEditNoBondPts->setCursor(Qt::PointingHandCursor);
- lineEditNoBondPts->setProperty("vectorIndex", vectorIndex); // 存储索引
- lineEditNoBondPts->setProperty("parentMatrixIndex", -1); // 存储大矩阵的索引(即父矩阵)
- lineEditNoBondPts->installEventFilter(this);
- QFrame* line = new QFrame(outWidget);
- line->setFrameShape(QFrame::NoFrame); // 移除默认框架
- line->setFixedHeight(2); // 设置固定高度
- line->setStyleSheet("background-color: #C7CAEB;");
- boxGridLayout->addLayout(matrixGridLayout, 2, 0);
- boxGridLayout->addWidget(line);
- outMatrixGridLayout->addLayout(buttonLayout, 1, 0);
- outMatrixGridLayout->addWidget(groupBox);
- outWidget->setLayout(outMatrixGridLayout);
- ui.verticalLayout->addWidget(outWidget);
- m_mapOutWidgetIndex.insert(outWidget, vectorIndex);
- for (int j = 0; j < matrixData.VecDieMatrixId.size(); j++)
- {
- for (int i = 0; i < m_vecSubWaffleMatrix.size(); i++)
- {
- if (matrixData.VecDieMatrixId[j] == m_vecSubWaffleMatrix[i].MatrixId)
- {
- AddSubMatrixPage(j,i, m_vecSubWaffleMatrix[i], boxGridLayout);
- }
- }
- }
- QSpacerItem* vSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
- ui.verticalLayout->addItem(vSpacer);
- //for (int i = 0; i = vecSubMatrix.size(); i++)
- //{
- // AddSubMatrixPage(i, vecSubMatrix[i], outMatrixGridLayout);
- //}
- spinBoxRow->setValue(matrixData.PackRow);
- spinBoxCol->setValue(matrixData.PackCol);
- 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);
- connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].PackRow = spinBoxRow->value();
- });
- connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].PackCol = spinBoxCol->value();
- });
- connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
- });
-
- connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
- });
- connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].RightTopPoint.x = doubleSpinBoxRightTopX->value();
- });
- connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].RightTopPoint.y = doubleSpinBoxRightTopY->value();
- });
- connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
- });
- connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
- m_vecWaffleMatrix[vectorIndex].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
- });
- connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
- });
- }
- void WaffleProgramPage::AddSubMatrixPage(int vectorIndex, int subVectorIndex, PROGRAM_DIE_MATRIX_STRUCT subMatrix, QGridLayout* layout)
- {
- QVector<QObject*> vecControls;
- QWidget* subWidget = new QWidget();
- QGridLayout* subGridLayout = new QGridLayout(subWidget);
- subGridLayout->setSpacing(4);
- subGridLayout->setObjectName(QString::fromUtf8("subGridLayout"));
- //groupBox->setLayout(subGridLayout);
- subGridLayout->setContentsMargins(0, 0, 0, 0); // 设置布局的边距为0
- subGridLayout->setAlignment(Qt::AlignCenter);
- QLabel* labelTitle = new QLabel(subWidget);
- labelTitle->setObjectName(QString::fromUtf8("labelTitle"));
- labelTitle->setText(tr("Sub Matrix ") + QString::number(subVectorIndex));
- labelTitle->setStyleSheet("color: #808BFF;height: 30px");
- subGridLayout->addWidget(labelTitle, 0, 1, 1, 1);
- vecControls.push_back(labelTitle);
- QPushButton* pushButtonDelete = new QPushButton(subWidget);
- pushButtonDelete->setObjectName(QString::fromUtf8("button delete"));
- pushButtonDelete->setText(tr("Delete"));
- subGridLayout->addWidget(pushButtonDelete, 0, 3, 1, 1);
- connect(pushButtonDelete, &QPushButton::clicked, this, [=]() {
- //处理index
- auto currentIt = m_mapSubWidgetIndex.find(subWidget);
- int index = currentIt.value(); //迭代器 erase后currentIt被删除了
- m_mapSubWidgetIndex.erase(currentIt);
- for (auto it = m_mapSubWidgetIndex.begin(); it != m_mapSubWidgetIndex.end(); ++it)
- {
- if (it.value() > index)
- {
- //value() 返回的是副本不是引用
- int newIndex = it.value() - 1;
- m_mapSubWidgetIndex.insert(it.key(), newIndex);
- }
- }
- // 子矩阵ID
- int subMatrixId = m_vecSubWaffleMatrix[index].MatrixId;
- //删除缓存
- m_vecSubWaffleMatrix.erase(m_vecSubWaffleMatrix.begin() + index);
- //删除大矩阵子ID数据(遍历删除)
- for (PROGRAM_WAFFLE_MATRIX_STRUCT& matrix : m_vecWaffleMatrix)
- {
- auto it = std::find(matrix.VecDieMatrixId.begin(), matrix.VecDieMatrixId.end(), subMatrixId);
- if (it != matrix.VecDieMatrixId.end())
- {
- matrix.VecDieMatrixId.erase(it);
- }
- }
- delete subWidget;
- });
- QLabel* labelRow = new QLabel(subWidget);
- labelRow->setObjectName(QString::fromUtf8("labelRow"));
- labelRow->setText(tr("Row & Cow"));
- subGridLayout->addWidget(labelRow, 2, 0, 1, 1);
- vecControls.push_back(labelRow);
- SpinBox* spinBoxRow = new SpinBox(subWidget);
- spinBoxRow->setObjectName(QString::fromUtf8("spinBoxRow"));
- subGridLayout->addWidget(spinBoxRow, 2, 1, 1, 1);
- vecControls.push_back(spinBoxRow);
- /*QLabel* labelCol = new QLabel(subWidget);
- labelCol->setObjectName(QString::fromUtf8("labelCol"));
- labelCol->setText(tr("Cow "));
- subGridLayout->addWidget(labelCol, 3, 0, 1, 1);
- vecControls.push_back(labelCol);*/
- SpinBox* spinBoxCol = new SpinBox(subWidget);
- spinBoxCol->setObjectName(QString::fromUtf8("spinBoxCol"));
- subGridLayout->addWidget(spinBoxCol, 2, 2, 1, 1);
- vecControls.push_back(spinBoxCol);
- QLabel* labelLeftTop = new QLabel(subWidget);
- 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(subWidget);
- doubleSpinBoxLeftTopX->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopX"));
- doubleSpinBoxLeftTopX->setFixedWidth(100); // Set fixed width to 100
- doubleSpinBoxLeftTopX->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxLeftTopX, 4, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxLeftTopX);
- DoubleSpinBox* doubleSpinBoxLeftTopY = new DoubleSpinBox(subWidget);
- doubleSpinBoxLeftTopY->setObjectName(QString::fromUtf8("doubleSpinBoxLeftTopY"));
- doubleSpinBoxLeftTopY->setFixedWidth(100); // Set fixed width to 100
- doubleSpinBoxLeftTopY->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxLeftTopY, 4, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxLeftTopY);
- QLabel* labelRightTopPos = new QLabel(subWidget);
- 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(subWidget);
- doubleSpinBoxRightTopX->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopX"));
- doubleSpinBoxRightTopX->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxRightTopX, 5, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopX);
- DoubleSpinBox* doubleSpinBoxRightTopY = new DoubleSpinBox(subWidget);
- doubleSpinBoxRightTopY->setObjectName(QString::fromUtf8("doubleSpinBoxRightTopY"));
- doubleSpinBoxRightTopY->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxRightTopY, 5, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopY);
- QLabel* labelRightButtomPos = new QLabel(subWidget);
- 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(subWidget);
- doubleSpinBoxRightButtomX->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomX"));
- doubleSpinBoxRightButtomX->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxRightButtomX, 6, 1, 1, 1);
- vecControls.push_back(doubleSpinBoxRightButtomX);
- DoubleSpinBox* doubleSpinBoxRightButtomY = new DoubleSpinBox(subWidget);
- doubleSpinBoxRightButtomY->setObjectName(QString::fromUtf8("doubleSpinBoxRightButtomY"));
- doubleSpinBoxRightButtomY->setFixedWidth(100); // Set fixed width to 100
- subGridLayout->addWidget(doubleSpinBoxRightButtomY, 6, 2, 1, 1);
- vecControls.push_back(doubleSpinBoxRightTopX);
- QLabel* labelNoBondPts = new QLabel(subWidget);
- 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(subWidget);
- lineEditNoBondPts->setObjectName(QString::fromUtf8("lineEditNoBondPts"));
- lineEditNoBondPts->setReadOnly(true);
- lineEditNoBondPts->setCursor(Qt::PointingHandCursor);
- //lineEditNoBondPts->setProperty("matrixType", "SubMatrix"); // 设置为子矩阵
- lineEditNoBondPts->setProperty("vectorIndex", subVectorIndex); // 子矩阵索引
- lineEditNoBondPts->setProperty("parentMatrixIndex", vectorIndex); // 设置父矩阵的索引
- lineEditNoBondPts->installEventFilter(this);
- subGridLayout->addWidget(lineEditNoBondPts, 7, 1, 1, 3);
- vecControls.push_back(lineEditNoBondPts);
- // Left Top Position X and Y
- QPushButton* buttonLeftTop = new QPushButton("Get Pos", subWidget);
- buttonLeftTop->setFixedWidth(62); // 设置固定宽度
- subGridLayout->addWidget(buttonLeftTop, 4, 3, 1, 1); // 添加按钮到4行3列
- connect(buttonLeftTop, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[subVectorIndex].LeftTopPoint);
- doubleSpinBoxLeftTopX->setValue(position.x); // 更新 X 轴
- doubleSpinBoxLeftTopY->setValue(position.y); // 更新 Y 轴
- });
- // Right Top Position X and Y
- QPushButton* buttonRightTop = new QPushButton("Get Pos", subWidget);
- buttonRightTop->setFixedWidth(62); // 设置固定宽度
- subGridLayout->addWidget(buttonRightTop, 5, 3, 1, 1); // 添加按钮到5行3列
- connect(buttonRightTop, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[subVectorIndex].RightTopPoint);
- doubleSpinBoxRightTopX->setValue(position.x); // 更新 X 轴
- doubleSpinBoxRightTopY->setValue(position.y); // 更新 Y 轴
- });
- // Right Bottom Position X and Y
- QPushButton* buttonRightButtom = new QPushButton("Get Pos", subWidget);
- buttonRightButtom->setFixedWidth(62); // 设置固定宽度
- subGridLayout->addWidget(buttonRightButtom, 6, 3, 1, 1); // 添加按钮到6行3列
- connect(buttonRightButtom, &QPushButton::clicked, this, [=]() {
- XY_DOUBLE_STRUCT position = WaffleGetAxisPosition("WaffleHead", m_vecWaffleMatrix[subVectorIndex].RightBottomPoint);
- doubleSpinBoxRightButtomX->setValue(position.x); // 更新 X 轴
- doubleSpinBoxRightButtomY->setValue(position.y); // 更新 Y 轴
- });
- //layout->addLayout(subGridLayout, 11, 0);
- QFrame* line = new QFrame(subWidget);
- line->setFrameShape(QFrame::NoFrame); // 移除默认框架
- line->setFixedHeight(2); // 设置固定高度
- line->setStyleSheet("background-color: #C7CAEB;");
- subGridLayout->addWidget(line, 10, 0, 1, 3);
- layout->addWidget(subWidget);
- m_mapSubWidgetIndex.insert(subWidget, subVectorIndex);
- spinBoxRow->setValue(subMatrix.MatrixRow);
- spinBoxCol->setValue(subMatrix.MatrixCol);
- doubleSpinBoxLeftTopX->setValue(subMatrix.LeftTopPoint.x);
- doubleSpinBoxLeftTopY->setValue(subMatrix.LeftTopPoint.y);
- doubleSpinBoxRightTopX->setValue(subMatrix.RightTopPoint.x);
- doubleSpinBoxRightTopY->setValue(subMatrix.RightTopPoint.y);
- doubleSpinBoxRightButtomX->setValue(subMatrix.RightBottomPoint.x);
- doubleSpinBoxRightButtomY->setValue(subMatrix.RightBottomPoint.y);
- connect(spinBoxRow, &SpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].MatrixRow = spinBoxRow->value();
- });
- connect(spinBoxCol, &SpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].MatrixCol = spinBoxCol->value();
- });
- connect(doubleSpinBoxLeftTopX, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].LeftTopPoint.x = doubleSpinBoxLeftTopX->value();
- });
- connect(doubleSpinBoxLeftTopY, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].LeftTopPoint.y = doubleSpinBoxLeftTopY->value();
- });
- connect(doubleSpinBoxRightTopX, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].RightTopPoint.x = doubleSpinBoxRightTopX->value();
- });
- connect(doubleSpinBoxRightTopY, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].RightTopPoint.y = doubleSpinBoxRightTopY->value();
- });
- connect(doubleSpinBoxRightButtomX, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].RightBottomPoint.x = doubleSpinBoxRightButtomX->value();
- });
- connect(doubleSpinBoxRightButtomY, &DoubleSpinBox::editDone, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- m_vecSubWaffleMatrix[it.value()].RightBottomPoint.y = doubleSpinBoxRightButtomY->value();
- });
- connect(lineEditNoBondPts, &QLineEdit::textChanged, this, [=]() {
- auto it = m_mapSubWidgetIndex.find(subWidget);
- });
- }
- bool WaffleProgramPage::eventFilter(QObject* obj, QEvent* event) {
- if (event->type() == QEvent::MouseButtonPress)
- {
- auto* lineEdit = qobject_cast<QLineEdit*>(obj);
- if (lineEdit)
- {
- int index = lineEdit->property("vectorIndex").toInt(); // 当前矩阵索引
- int parentIndex = lineEdit->property("parentMatrixIndex").toInt(); // 父矩阵索引
- onNoBondPtsClicked(lineEdit, index, parentIndex); // 传递父矩阵索引
- return true; // 拦截事件
- }
- }
- return QWidget::eventFilter(obj, event);
- }
- void WaffleProgramPage::onNoBondPtsClicked(QLineEdit* lineEdit, int index, int parentIndex) {
- if (parentIndex != -1)
- {
- // 处理子矩阵的操作
- if (index < 0 || index >= m_vecSubWaffleMatrix.size()) return;
- const auto& subMatrix = m_vecSubWaffleMatrix[index];
- NoBondPtEditDialog dlg(subMatrix.MatrixRow, subMatrix.MatrixCol, subMatrix.VecNoBondPt, this);
- if (dlg.exec() == QDialog::Accepted)
- {
- QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
- m_vecSubWaffleMatrix[index].VecNoBondPt = std::vector<XY_LONG_STRUCT>(selected.begin(), selected.end());
- QStringList ptList;
- for (const auto& pt : selected)
- ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
- lineEdit->setText(ptList.join(" "));
- }
- // 这里可以用 parentIndex 来关联父矩阵(即大矩阵)做相应的操作
- }
- else
- {
- // 处理大矩阵的操作
- if (index < 0 || index >= m_vecWaffleMatrix.size()) return;
- const auto& waffleMatrix = m_vecWaffleMatrix[index];
- NoBondPtEditDialog dlg(waffleMatrix.PackRow, waffleMatrix.PackCol, waffleMatrix.VecNoBondDie, this);
- if (dlg.exec() == QDialog::Accepted)
- {
- QVector<XY_LONG_STRUCT> selected = dlg.getSelectedPoints();
- m_vecWaffleMatrix[index].VecNoBondDie = std::vector<XY_LONG_STRUCT>(selected.begin(), selected.end());
- QStringList ptList;
- for (const auto& pt : selected)
- ptList << QString("(%1,%2)").arg(pt.x).arg(pt.y);
- lineEdit->setText(ptList.join(" "));
- }
- // 这里也可以用 parentIndex 来关联父矩阵(即大矩阵)做相应的操作
- }
- }
- void WaffleProgramPage::SaveAllParam()
- {
- }
- void WaffleProgramPage::MatrixChangeEvent()
- {
- for (PROGRAM_WAFFLE_MATRIX_STRUCT& waffleMatrix : m_vecWaffleMatrix)
- {
- m_pProduct->SetWaffleMatrix(waffleMatrix.MatrixId, waffleMatrix);
- }
- m_pProduct->SetDieMatrix(m_vecSubWaffleMatrix, true);
- //for (PROGRAM_BOND_MATRIX_STRUCT& bondMatrix : m_vecWaffleMatrix)
- //{
- // m_manageDB->GetCProduct()->SetBondMatrix(bondMatrix.BondMatrixId, bondMatrix);
- //}
- //for (PROGRAM_POINT_MATRIX_STRUCT& pointMatrix : m_vecSubMatrixs)
- //{
- // m_manageDB->GetCProduct()->SetPointMatrix(pointMatrix.MatrixId, pointMatrix);
- //}
- }
- void WaffleProgramPage::initPage()
- {
- m_vecWaffleMatrix = m_pProduct->GetWaffleMatrix();
- m_pProduct->GetAllDieMatrix(m_vecSubWaffleMatrix);
- for (int i = 0; i < m_vecWaffleMatrix.size(); i++)
- {
- //for (int j = 0; j < m_vecWaffleMatrix[i].VecDieMatrixId.size(); j++)
- //{
- // PROGRAM_DIE_MATRIX_STRUCT subMatrix;
- // m_pProduct->GetDieMatrix(m_vecWaffleMatrix[i].VecDieMatrixId[j], subMatrix);
- // m_vecSubWaffleMatrix.push_back(subMatrix);
- // //AddMatrixPage(i, j, subMatrix);
- //}
- AddMatrixPage(i, m_vecWaffleMatrix[i], m_vecSubWaffleMatrix);
- }
- }
|