Ver Fonte

添加载具物料的重新绘制代码以及交互代码

yun há 1 mês atrás
pai
commit
ef2486ecbe
23 ficheiros alterados com 790 adições e 48 exclusões
  1. BIN
      Output/bin/x64/configurations.db
  2. 1 0
      View/die-bonder-ui/CameraMaterialGroupWnd/CameraImage/CameraImageHandler.cpp
  3. 31 8
      View/die-bonder-ui/CameraMaterialGroupWnd/Group.cpp
  4. 1 0
      View/die-bonder-ui/CameraMaterialGroupWnd/Group.h
  5. 435 3
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Bond.cpp
  6. 17 2
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Bond.h
  7. 202 25
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/BondGraphicsView.cpp
  8. 21 3
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/BondGraphicsView.h
  9. 10 0
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/MaterialBoxGraphicsView.cpp
  10. 1 1
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Wafer.cpp
  11. 3 1
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/WaferGraphicsView.cpp
  12. 33 0
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Waffle.cpp
  13. 7 0
      View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Waffle.h
  14. 2 0
      View/die-bonder-ui/OriginalWnd/ChartsAndCamerasWnd.cpp
  15. 3 1
      View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp
  16. 2 2
      View/die-bonder-ui/OriginalWnd/OriginalWnd.cpp
  17. 2 0
      View/die-bonder-ui/OriginalWnd/SingleCameraOperationWnd.cpp
  18. 12 0
      View/die-bonder-ui/Src/Res/qss/dark.qss
  19. 3 2
      View/die-bonder-ui/Src/Res/qss/light.qss
  20. 3 0
      View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.cpp
  21. 1 0
      View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.h
  22. BIN
      View/die-bonder-ui/images/TopStatusBar/HostStatus.png
  23. BIN
      View/die-bonder-ui/images/TopStatusBar/MachineLink.png

BIN
Output/bin/x64/configurations.db


+ 1 - 0
View/die-bonder-ui/CameraMaterialGroupWnd/CameraImage/CameraImageHandler.cpp

@@ -159,6 +159,7 @@ QString CameraImageHandler::CreateMaterialType(MATERIAL_TYPE materialType)
                 std::vector<ns_mat::POINT_INFO_STRUCT> stPointInfo;
                 m_pCViewInterface->GetViewMatrix()->GetBondAllPointInfo(stPointInfo);
                 m_pBond->UpdataVal(stPointInfo);
+                m_pBond->setBondInfo(m_pCViewInterface);
             }
             else
             {

+ 31 - 8
View/die-bonder-ui/CameraMaterialGroupWnd/Group.cpp

@@ -257,6 +257,29 @@ void Group::setWaferWidget(QPixmap pixmap) {
     layout2->addWidget(pixmapLabel);
 }
 
+void Group::setBondWidget(QPixmap pixmap) {
+    QVBoxLayout* layout2 = new QVBoxLayout(ui->Imagewidget_right);
+    m_pBond->paintInitFrom(ui->Imagewidget_right);
+    int width, height;
+    width = ui->Imagewidget_right->width();
+    height = ui->Imagewidget_right->height();
+    QSize targetSize(width, height);
+
+    // 不保持比例,直接拉伸到指定尺寸
+    QPixmap scaledPixmap = pixmap.scaled(
+        targetSize,
+        Qt::IgnoreAspectRatio,
+        Qt::SmoothTransformation
+    );
+    QLabel* pixmapLabel = new QLabel();
+    pixmapLabel->setPixmap(scaledPixmap);
+
+    ui->Imagewidget_right->setLayout(layout2);
+    ui->Imagewidget_right->setFixedSize(110, 110);
+    layout2->setContentsMargins(0, 0, 0, 0);
+    layout2->addWidget(pixmapLabel);
+}
+
 void Group::WaffleWidget()
 {
     QVBoxLayout *layout2 = new QVBoxLayout(ui->Imagewidget_right);
@@ -287,16 +310,16 @@ void Group::MaterialBoxWidget()
 
 void Group::BondWidget()
 {
-    QVBoxLayout* layout2 = new QVBoxLayout(ui->Imagewidget_right);
-    m_pBond->paintInitFrom(ui->Imagewidget_right);
+    //QVBoxLayout* layout2 = new QVBoxLayout(ui->Imagewidget_right);
+    //m_pBond->paintInitFrom(ui->Imagewidget_right);
 
-    QLabel* pixmapLabel = new QLabel();
-    pixmapLabel->setPixmap(m_pBond->getGlobalPixmap());
+    //QLabel* pixmapLabel = new QLabel();
+    //pixmapLabel->setPixmap(m_pBond->getGlobalPixmap());
 
-    ui->Imagewidget_right->setLayout(layout2);
-    ui->Imagewidget_right->setFixedSize(110, 110);
-    layout2->setContentsMargins(0, 0, 0, 0);
-    layout2->addWidget(pixmapLabel);
+    //ui->Imagewidget_right->setLayout(layout2);
+    //ui->Imagewidget_right->setFixedSize(110, 110);
+    //layout2->setContentsMargins(0, 0, 0, 0);
+    //layout2->addWidget(pixmapLabel);
 }
 
 

+ 1 - 0
View/die-bonder-ui/CameraMaterialGroupWnd/Group.h

@@ -36,6 +36,7 @@ public:
     void setCurrentCombox(const int index);
     void initBorderStyle(int index,int color);
     void setWaferWidget(QPixmap pixmap);
+    void setBondWidget(QPixmap pixmap);
     void setWafer(Wafer* wafer);
 
 signals:

+ 435 - 3
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Bond.cpp

@@ -47,7 +47,7 @@ void Bond::UpdataGenerateTestData()
         }
     }
 }
-
+/*
 void Bond::initFrom(QWidget* parent) {
     m_pScene = new QGraphicsScene(parent);
     m_pView = new BondGraphicsView(m_pScene);
@@ -232,9 +232,342 @@ void Bond::initFrom(QWidget* parent) {
 
     m_pView->setScene(m_pScene);
     m_pView->resize(width, height);
+}
+*/
+void Bond::initFrom(QWidget* parent) {
+    m_pScene = new QGraphicsScene(parent);
+    m_pView = new BondGraphicsView(m_pScene);
+    m_pView->setCViewInterface(m_pCViewInterface);
+
+    int width = parent->width();
+    int height = parent->height();
+    double maxWidth = maxPoint.x() - minPoint.x();
+    double maxHeight = maxPoint.y() - minPoint.y();
+    double ratio;
+
+    if (maxHeight > maxWidth) {
+        ratio = maxHeight / (width - 100);
+    }
+    else {
+        ratio = maxWidth / (width - 100);
+    }
+    //目前没提供pt固晶点大小,以下用测试大小,后续可替换(实际大小,接口替换处)
+    double dieWidth = 20000;
+    double dieHeight = 20000;
+
+    QFont matrixFont;
+    double matrixFontSize = qMin(dieWidth/ratio, dieHeight / ratio)*0.1;
+    matrixFont.setPointSizeF(matrixFontSize);  // 使用浮点大小
+
+    for (int i = 0; i < bondData.size(); ++i) {
+
+        // 绘制固晶点
+
+        //转换大小
+        double dieWidthr = dieWidth / ratio;
+        double dieHeightr = dieHeight / ratio;
+        double diex, diey;
+        diex =  (bondData[i].stBondStatus.stAlnBondPosition.x - minPoint.x() + dieWidth) / ratio;
+        diey =  (bondData[i].stBondStatus.stAlnBondPosition.y - minPoint.y() + dieHeight) / ratio;
+
+
+        // 计算固晶点位置
+        QRectF dieRect(
+            diex,
+            diey,
+            dieWidthr,
+            dieHeightr
+        );
+        BondItem* dieItem = new BondItem(bondData[i]);
+        dieItem->setRect(dieRect);
+        dieItem->setZValue(1.0);
+        m_pScene->addItem(dieItem);
+        // 添加固晶点编号
+        QGraphicsTextItem* dieText = new QGraphicsTextItem(dieItem);
+        dieText->setPlainText("PT" + QString::number(bondData[i].stIndex.iIndex));
+        double dieFontSize = qMin(dieWidthr, dieHeightr) * 0.2;
+        QFont font;
+        font.setPointSizeF(dieFontSize);  // 使用浮点大小
+        dieText->setFont(font);
+        dieText->setPos(dieRect.center() - QPointF(dieText->boundingRect().width() / 2,
+            dieText->boundingRect().height() / 2));
+    }
+    /*
+    //绘制pt矩阵和Pcb矩阵
+    for (auto outerIt = m_pcbMaxPointmap.begin(); outerIt != m_pcbMaxPointmap.end(); ++outerIt) {
+        int outerKey = outerIt.key(); // 外层 key
+        const QMap<int, QPointF>& innerMap = outerIt.value();
+
+        qDebug() << "Outer Key:" << outerKey;
+
+        for (auto innerIt = innerMap.begin(); innerIt != innerMap.end(); ++innerIt) {
+            int innerKey = innerIt.key(); // 内层 key
+            const QPointF& maxPtPoint = innerIt.value();
+            const QPointF& minPtPoint = m_pcbMinPointmap.value(outerKey).value(innerKey);
+            qDebug() << "  Inner Key:" << innerKey;
+
+        }
+    }
+    */
+    QPen ptpen(Qt::blue, 0.5);
+    QPen pcbpen(Qt::red, 0.5);
+    QPen subpen(Qt::black, 0.5);
+    //绘制pt矩阵和Pcb矩阵
+    POINT_INFO_STRUCT maxPcbPoint = m_vptMaxPoints[0];
+    POINT_INFO_STRUCT minPcbPoint = m_vptMaxPoints[0];
+    int pcbmatx, pcbmaty, pcbmatWidth, pcbmatHeight;
+    QVector<POINT_INFO_STRUCT> maxSubPoints;
+    QVector<POINT_INFO_STRUCT> minSubPoints;
+
+    for (int i = 0;i < m_vptMaxPoints.size();i++) {
+
+        if (minPcbPoint.stIndex.iPcbRow != m_vptMinPoints[i].stIndex.iPcbRow || minPcbPoint.stIndex.iPcbCol != m_vptMinPoints[i].stIndex.iPcbCol) {
+            //绘制pcb矩阵
+            
+            pcbmatx = (minPcbPoint.stBondStatus.stAlnBondPosition.x - minPoint.x() + 0.4 * dieWidth) / ratio;
+            pcbmaty = (minPcbPoint.stBondStatus.stAlnBondPosition.y - minPoint.y() + 0.4 * dieHeight) / ratio;
+            pcbmatWidth = (maxPcbPoint.stBondStatus.stAlnBondPosition.x - minPcbPoint.stBondStatus.stAlnBondPosition.x + dieWidth * 2.2) / ratio;
+            pcbmatHeight = (maxPcbPoint.stBondStatus.stAlnBondPosition.y - minPcbPoint.stBondStatus.stAlnBondPosition.y + dieHeight * 2.2) / ratio;
+            QRectF pcbRect(
+                pcbmatx,
+                pcbmaty,
+                pcbmatWidth,
+                pcbmatHeight
+                
+            );
+            // 绘制PCB矩阵背景
+            QGraphicsRectItem* pcbItem = new QGraphicsRectItem(pcbRect);
+            pcbItem->setPen(pcbpen);
+            //ptItem->setBrush(QColor("#d5e4f8"));
+            m_pScene->addItem(pcbItem);
+            // 添加PCB标签
+            QRectF pcbTextRect(
+                pcbmatx,
+                pcbmaty,
+                dieWidth / ratio * 0.6,
+                dieHeight / ratio * 0.2
+            );
+            QGraphicsRectItem* pcbTextItem = new QGraphicsRectItem(pcbTextRect);
+            pcbTextItem->setPen(Qt::NoPen);
+            m_pScene->addItem(pcbTextItem);
+
+            QGraphicsTextItem* pcbText = new QGraphicsTextItem(pcbTextItem);
+            pcbText->setPlainText(QString(QString(tr("Pcb%1*%2")).arg(minPcbPoint.stIndex.iPcbRow).arg(minPcbPoint.stIndex.iPcbCol)));
+            pcbText->setFont(matrixFont);
+            // 将文本居中于 pcbTextRect
+            pcbText->setPos(pcbTextRect.center() - QPointF(pcbText->boundingRect().width() / 2,
+                pcbText->boundingRect().height() / 2));
+            pcbText->setFont(matrixFont);
+
+            maxSubPoints.append(maxPcbPoint);
+            minSubPoints.append(minPcbPoint);
+            maxPcbPoint = m_vptMaxPoints[i];
+            minPcbPoint = m_vptMinPoints[i];
+        }
+        else {
+            if (m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.x > maxPcbPoint.stBondStatus.stAlnBondPosition.x)
+                maxPcbPoint = m_vptMaxPoints[i];
+            if (m_vptMinPoints[i].stBondStatus.stAlnBondPosition.x < minPcbPoint.stBondStatus.stAlnBondPosition.x)
+                minPcbPoint = m_vptMinPoints[i];
+            if (m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.y > maxPcbPoint.stBondStatus.stAlnBondPosition.y)
+                maxPcbPoint = m_vptMaxPoints[i];
+            if (m_vptMinPoints[i].stBondStatus.stAlnBondPosition.y < minPcbPoint.stBondStatus.stAlnBondPosition.y)
+                minPcbPoint = m_vptMinPoints[i];
+
+        }
+
+
+        int ptmatx, ptmaty, ptmatWidth, ptmatHeight;
+        ptmatx = (m_vptMinPoints[i].stBondStatus.stAlnBondPosition.x - minPoint.x() + 0.7 * dieWidth) / ratio ;
+        ptmaty = (m_vptMinPoints[i].stBondStatus.stAlnBondPosition.y - minPoint.y() + 0.7 * dieHeight) / ratio ;
+        ptmatWidth = (m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.x - m_vptMinPoints[i].stBondStatus.stAlnBondPosition.x +dieWidth*1.6)/ratio;
+        ptmatHeight = (m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.y - m_vptMinPoints[i].stBondStatus.stAlnBondPosition.y + dieHeight*1.6) / ratio;
+
+        QRectF ptRect(
+            ptmatx,
+            ptmaty,
+            ptmatWidth,
+            ptmatHeight
+        );
+        //qDebug() << m_vptMinPoints[i].stBondStatus.stAlnBondPosition.x << "   " << m_vptMinPoints[i].stBondStatus.stAlnBondPosition.y;
+        //qDebug() << m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.x << "   " << m_vptMaxPoints[i].stBondStatus.stAlnBondPosition.y;
+        // 绘制PT矩阵背景
+        QGraphicsRectItem* ptItem = new QGraphicsRectItem(ptRect);
+        ptItem->setPen(ptpen);
+        //ptItem->setBrush(QColor("#d5e4f8"));
+        m_pScene->addItem(ptItem);
+        // 添加PT矩阵标签
+        QRectF ptTextRect(
+            ptmatx,
+            ptmaty,
+            dieWidth/ratio* 0.6,
+            dieHeight / ratio * 0.2
+        );
+        QGraphicsRectItem* ptTextItem = new QGraphicsRectItem(ptTextRect);
+        ptTextItem->setPen(Qt::NoPen);
+        m_pScene->addItem(ptTextItem);
+
+        QGraphicsTextItem* ptText = new QGraphicsTextItem(ptTextItem);
+        ptText->setPlainText(QString(tr("PtMat%1")).arg(m_vptMinPoints[i].stIndex.iPtMatId));
+        ptText->setFont(matrixFont);
+        // 将文本居中于 ptTextRect
+        ptText->setPos(ptTextRect.center()- QPointF(ptText->boundingRect().width() / 2,
+            ptText->boundingRect().height() / 2));
+        
+
+
+    }
+    pcbmatx = (minPcbPoint.stBondStatus.stAlnBondPosition.x - minPoint.x() + 0.4 * dieWidth) / ratio;
+    pcbmaty = (minPcbPoint.stBondStatus.stAlnBondPosition.y - minPoint.y() + 0.4 * dieHeight) / ratio;
+    pcbmatWidth = (maxPcbPoint.stBondStatus.stAlnBondPosition.x - minPcbPoint.stBondStatus.stAlnBondPosition.x + dieWidth * 2.2) / ratio;
+    pcbmatHeight = (maxPcbPoint.stBondStatus.stAlnBondPosition.y - minPcbPoint.stBondStatus.stAlnBondPosition.y + dieHeight * 2.2) / ratio;
+    QRectF pcbRect(
+        pcbmatx,
+        pcbmaty,
+        pcbmatWidth,
+        pcbmatHeight
+
+    );
+    // 绘制PCB矩阵背景
+    QGraphicsRectItem* pcbItem = new QGraphicsRectItem(pcbRect);
+    pcbItem->setPen(pcbpen);
+    //ptItem->setBrush(QColor("#d5e4f8"));
+    m_pScene->addItem(pcbItem);
+    // 添加PCB标签
+    QRectF pcbTextRect(
+        pcbmatx,
+        pcbmaty,
+        dieWidth / ratio * 0.6,
+        dieHeight / ratio * 0.2
+    );
+    QGraphicsRectItem* pcbTextItem = new QGraphicsRectItem(pcbTextRect);
+    pcbTextItem->setPen(Qt::NoPen);
+    m_pScene->addItem(pcbTextItem);
+
+    QGraphicsTextItem* pcbText = new QGraphicsTextItem(pcbTextItem);
+    pcbText->setPlainText(QString(QString(tr("Pcb%1*%2")).arg(minPcbPoint.stIndex.iPcbRow).arg(minPcbPoint.stIndex.iPcbCol)));
+    pcbText->setFont(matrixFont);
+    // 将文本居中于 pcbTextRect
+    pcbText->setPos(pcbTextRect.center() - QPointF(pcbText->boundingRect().width() / 2,
+        pcbText->boundingRect().height() / 2));
+    pcbText->setFont(matrixFont);
+
+    //绘制sub矩阵
+    maxSubPoints.append(maxPcbPoint);
+    minSubPoints.append(minPcbPoint);
+    POINT_INFO_STRUCT maxSubPoint = maxSubPoints[0];
+    POINT_INFO_STRUCT minSubPoint = minSubPoints[0];
+    int submatx, submaty, submatWidth, submatHeight;
+    for (int i = 0;i < maxSubPoints.size();i++) {
+        if (maxSubPoint.stIndex.iPcbMatId != maxSubPoints[i].stIndex.iPcbMatId) {
+            submatx = (minSubPoint.stBondStatus.stAlnBondPosition.x - minPoint.x() + 0.1 * dieWidth) / ratio;
+            submaty = (minSubPoint.stBondStatus.stAlnBondPosition.y - minPoint.y() + 0.1 * dieHeight) / ratio;
+            submatWidth = (maxSubPoint.stBondStatus.stAlnBondPosition.x - minSubPoint.stBondStatus.stAlnBondPosition.x + dieWidth * 2.8) / ratio;
+            submatHeight = (maxSubPoint.stBondStatus.stAlnBondPosition.y - minSubPoint.stBondStatus.stAlnBondPosition.y + dieHeight * 2.8) / ratio;
+            QRectF subRect(
+                submatx,
+                submaty,
+                submatWidth,
+                submatHeight
+
+            );
+            // 绘制SUB矩阵背景
+            QGraphicsRectItem* subItem = new QGraphicsRectItem(subRect);
+            subItem->setPen(subpen);
+            //ptItem->setBrush(QColor("#d5e4f8"));
+            m_pScene->addItem(subItem);
+
+            // 添加PCB标签
+            QRectF subTextRect(
+                submatx,
+                submaty,
+                dieWidth / ratio * 0.6,
+                dieHeight / ratio * 0.2
+            );
+            QGraphicsRectItem* subTextItem = new QGraphicsRectItem(subTextRect);
+            subTextItem->setPen(Qt::NoPen);
+            m_pScene->addItem(subTextItem);
+
+            QGraphicsTextItem* subText = new QGraphicsTextItem(subTextItem);
+            subText->setPlainText(QString(QString(tr("Sub%1")).arg(minSubPoint.stIndex.iPcbMatId)));
+            subText->setFont(matrixFont);
+            // 将文本居中于 pcbTextRect
+            subText->setPos(subTextRect.center() - QPointF(subText->boundingRect().width() / 2,
+                pcbText->boundingRect().height() / 2));
+            subText->setFont(matrixFont);
+        }
+        else {
+            if (maxSubPoints[i].stBondStatus.stAlnBondPosition.x > maxSubPoint.stBondStatus.stAlnBondPosition.x)
+                maxSubPoint = maxSubPoints[i];
+            if (minSubPoints[i].stBondStatus.stAlnBondPosition.x < minSubPoint.stBondStatus.stAlnBondPosition.x)
+                minPcbPoint = minSubPoints[i];
+            if (maxSubPoints[i].stBondStatus.stAlnBondPosition.y > maxSubPoint.stBondStatus.stAlnBondPosition.y)
+                maxSubPoint = maxSubPoints[i];
+            if (minSubPoints[i].stBondStatus.stAlnBondPosition.y < minSubPoint.stBondStatus.stAlnBondPosition.y)
+                minSubPoint = minSubPoints[i];
+        }
+    }
+    submatx = (minSubPoint.stBondStatus.stAlnBondPosition.x - minPoint.x() + 0.1 * dieWidth) / ratio;
+    submaty = (minSubPoint.stBondStatus.stAlnBondPosition.y - minPoint.y() + 0.1 * dieHeight) / ratio;
+    submatWidth = (maxSubPoint.stBondStatus.stAlnBondPosition.x - minSubPoint.stBondStatus.stAlnBondPosition.x + dieWidth * 2.8) / ratio;
+    submatHeight = (maxSubPoint.stBondStatus.stAlnBondPosition.y - minSubPoint.stBondStatus.stAlnBondPosition.y + dieHeight * 2.8) / ratio;
+    QRectF subRect(
+        submatx,
+        submaty,
+        submatWidth,
+        submatHeight
+
+    );
+    
+    QGraphicsRectItem* subItem = new QGraphicsRectItem(subRect);
+    // 设置边框颜色为红色,线宽为2
+    subItem->setPen(subpen);
+    // 绘制SUB矩阵背景
+    //ptItem->setBrush(QColor("#d5e4f8"));
+    m_pScene->addItem(subItem);
+    // 添加PCB标签
+    QRectF subTextRect(
+        submatx,
+        submaty,
+        dieWidth / ratio * 0.6,
+        dieHeight / ratio * 0.2
+    );
+    QGraphicsRectItem* subTextItem = new QGraphicsRectItem(subTextRect);
+    subTextItem->setPen(Qt::NoPen);
+    m_pScene->addItem(subTextItem);
+
+    QGraphicsTextItem* subText = new QGraphicsTextItem(subTextItem);
+    subText->setPlainText(QString(QString(tr("Sub%1")).arg(minSubPoint.stIndex.iPcbMatId)));
+    subText->setFont(matrixFont);
+    // 将文本居中于 pcbTextRect
+    subText->setPos(subTextRect.center() - QPointF(subText->boundingRect().width() / 2,
+        pcbText->boundingRect().height() / 2));
+    subText->setFont(matrixFont);
+
+    m_pView->setScene(m_pScene);
+    m_pView->resize(width, height);
+
+    // 创建一个 QPixmap 对象用于保存绘制的图像
+    globalPixmap = QPixmap(width, height);
+    globalPixmap.fill(Qt::white);  // 填充背景色为白色
+    QPixmap originalPixmap = QPixmap::grabWidget(m_pView);
+    // 设置目标尺寸(例如:宽度 200,高度 150)
+    QSize targetSize(width, height);
+
+    // 不保持比例,直接拉伸到指定尺寸
+    QPixmap scaledPixmap = originalPixmap.scaled(
+        targetSize,
+        Qt::IgnoreAspectRatio,
+        Qt::SmoothTransformation
+    );
+    globalPixmap = scaledPixmap;
+
+    
+
 }
 
 void Bond::paintInitFrom(QWidget* parent) {
+    /*
     int width = parent->width();
     int height = parent->height();
 
@@ -371,15 +704,20 @@ void Bond::paintInitFrom(QWidget* parent) {
 
                 // 绘制固晶点
                 painter.setPen(Qt::NoPen);
-                painter.setBrush(getColorByStatus(point.stBondStatus.bDieStatus));
+                //painter.setBrush(getColorByStatus(point.stBondStatus.bDieStatus));
                 painter.drawRect(dieRect);
             }
         }
     }
     painter.end();
+    */
 }
 
-QColor Bond::getColorByStatus(ns_mat::DIE_STATUS status) {
+QColor Bond::getColorByStatus() {
+    ns_mat::DIE_STATUS status;
+    //status = stPointInfo.stBondStatus.bDieStatus;
+
+
     switch (status) {
     //case ns_mat::DIE_STATUS::NO_PICK: return QColor(200, 200, 200);
     //case ns_mat::DIE_STATUS::WAF_PICK_DONE: return QColor(100, 200, 230);
@@ -394,12 +732,106 @@ QColor Bond::getColorByStatus(ns_mat::DIE_STATUS status) {
 
 void Bond::UpdataVal(std::vector<ns_mat::POINT_INFO_STRUCT>& stPointInfo)
 {
+    maxPoint = QPointF(stPointInfo[0].stBondStatus.stAlnBondPosition.x, stPointInfo[0].stBondStatus.stAlnBondPosition.y);
+    minPoint = QPointF(stPointInfo[0].stBondStatus.stAlnBondPosition.x, stPointInfo[0].stBondStatus.stAlnBondPosition.y);
+    QVector<POINT_INFO_STRUCT> ptMatrix;
+    QMap<int, QMap<int, QVector<POINT_INFO_STRUCT>>> pcbMatrix;
+    UINT iPcbMatId = stPointInfo[0].stIndex.iPcbMatId;
+    UINT iPtId = stPointInfo[0].stIndex.iPtMatId;
+
+    POINT_INFO_STRUCT ptMinPoint = stPointInfo[0];
+    POINT_INFO_STRUCT ptMaxPoint = stPointInfo[0];
+
+    QMap<int, QPointF> ptMinPointmap;
+    QMap<int, QPointF> ptMaxPointmap;
+    QMap<int, QMap<int, QPointF>> pcbMinPointmap;
+    QMap<int, QMap<int, QPointF>> pcbMaxPointmap;
+
+    int pcbRow = stPointInfo[0].stIndex.iPcbRow;
+    int pcbCol = stPointInfo[0].stIndex.iPcbCol;
+    int pcbId = 1;
     for (auto&a: stPointInfo)
     {
         bondData.append(a);
+
+        if (a.stIndex.iPtMatId == iPtId) {
+            ptMatrix.append(a);
+        }
+        else {
+
+            m_vptMaxPoints.append(ptMaxPoint);
+            m_vptMinPoints.append(ptMinPoint);
+            iPtId = a.stIndex.iPtMatId;
+            ptMaxPoint = a;
+            ptMinPoint = a;
+
+        }
+        //遍历找到最小和最大边界点
+        if (a.stBondStatus.stAlnBondPosition.x > maxPoint.x())
+            maxPoint.setX(a.stBondStatus.stAlnBondPosition.x);
+        if(a.stBondStatus.stAlnBondPosition.x < minPoint.x())
+            minPoint.setX(a.stBondStatus.stAlnBondPosition.x);
+        if (a.stBondStatus.stAlnBondPosition.y > maxPoint.y())
+            maxPoint.setY(a.stBondStatus.stAlnBondPosition.y);
+        if (a.stBondStatus.stAlnBondPosition.y < minPoint.y())
+            minPoint.setY(a.stBondStatus.stAlnBondPosition.y);
+        
+        //判断pt最小和最大对角点
+        if (a.stBondStatus.stAlnBondPosition.x > ptMaxPoint.stBondStatus.stAlnBondPosition.x)
+            ptMaxPoint = a;
+        if (a.stBondStatus.stAlnBondPosition.x < ptMinPoint.stBondStatus.stAlnBondPosition.x)
+            ptMinPoint = a;
+        if (a.stBondStatus.stAlnBondPosition.y > ptMaxPoint.stBondStatus.stAlnBondPosition.y)
+            ptMaxPoint = a;
+        if (a.stBondStatus.stAlnBondPosition.y < ptMinPoint.stBondStatus.stAlnBondPosition.y)
+            ptMinPoint = a;
+        /*
+        if (a.stIndex.iPcbMatId == iPcbMatId && a.stIndex.iPtMatId == iPtId && (pcbRow == a.stIndex.iPcbRow && pcbCol == a.stIndex.iPcbCol)) {
+            ptMatrix.append(a);
+        }
+        else {
+            if (a.stIndex.iPcbMatId == iPcbMatId && (pcbRow == a.stIndex.iPcbRow && pcbCol == a.stIndex.iPcbCol)) {
+                m_pPtMatrixMap.insert(iPtId, ptMatrix);
+                ptMatrix.clear();
+                ptMinPointmap.insert(iPtId, ptMinPoint);
+                ptMaxPointmap.insert(iPtId, ptMaxPoint);
+                ptMinPointmap.clear();
+                ptMaxPointmap.clear();
+                iPtId = a.stIndex.iPtMatId;
+
+            }
+            else {
+                m_pPcbMatrixMap.insert(iPcbMatId, m_pPtMatrixMap);
+                m_pcbMinPointmap.insert(iPcbMatId, ptMinPointmap);
+                m_pcbMaxPointmap.insert(iPcbMatId, ptMaxPointmap);
+                pcbMatrix.clear();
+                iPcbMatId = a.stIndex.iPcbMatId;
+                m_pPtMatrixMap.clear();
+
+            }
+        }   
+        */
+ 
+
+        qDebug() << a.stBondStatus.stAlnBondPosition.x << "   " << a.stBondStatus.stAlnBondPosition.y;
+        //qDebug() << a.stIndex.iPtMatId << "   " << a.stIndex.iPcbMatId;
+
     }
+    m_vptMaxPoints.append(ptMaxPoint);
+    m_vptMinPoints.append(ptMinPoint);
+    //m_pPtMatrixMap.insert(iPtId, ptMatrix);
+    //m_pPcbMatrixMap.insert(iPcbMatId, m_pPtMatrixMap);
+    //ptMinPointmap.insert(iPtId, ptMinPoint);
+    //ptMaxPointmap.insert(iPtId, ptMaxPoint);
+    //m_pcbMinPointmap.insert(iPcbId, ptMinPointmap);
+    //m_pcbMaxPointmap.insert(iPcbId, ptMaxPointmap);
+    
 }
 
 QPixmap Bond::getGlobalPixmap() const {
     return globalPixmap;
 }
+
+void Bond::setBondInfo(ns_module::CViewInterface* CViewInterface) {
+    m_pCViewInterface = CViewInterface;
+}

+ 17 - 2
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Bond.h

@@ -7,7 +7,8 @@
 #include "BondGraphicsView.h"
 #include <CBondMatrix.h>
 #include "CProduct.h"
-
+#include <CViewInterface.h>
+#include <QVector>
 class Bond : public QWidget {
     Q_OBJECT
 public:
@@ -15,9 +16,10 @@ public:
     void initFrom(QWidget* parent);
     void paintInitFrom(QWidget* parent);
     QPixmap getGlobalPixmap() const;
+    void setBondInfo(ns_module::CViewInterface* CViewInterface);
 
     void UpdataGenerateTestData();
-    QColor getColorByStatus(ns_mat::DIE_STATUS status);
+    QColor getColorByStatus();
 
     /**更新值
      */
@@ -32,6 +34,19 @@ private:
     QMap<int, QPair<int, int>> pcbDimensions;
     QMap<int, QMap<int, QPair<int, int>>> ptDimensions;
     QPixmap                                 globalPixmap;
+    ns_module::CViewInterface* m_pCViewInterface;
+    QPointF maxPoint;
+    QPointF minPoint;
+    QMap<int,QVector<POINT_INFO_STRUCT>> m_pPtMatrixMap;
+    QMap<int, QMap<int, QVector<POINT_INFO_STRUCT>>> m_pPcbMatrixMap;
+    QMap<int, QPointF> m_ptMinPointmap;
+    QMap<int, QPointF> m_ptMaxPointmap;
+    QMap<int, QMap<int, QPointF>> m_pcbMinPointmap;
+    QMap<int, QMap<int, QPointF>> m_pcbMaxPointmap;
+
+    QVector<POINT_INFO_STRUCT> m_vptMaxPoints;
+    QVector<POINT_INFO_STRUCT> m_vptMinPoints;
+
 };
 
 #endif // BOND_H

+ 202 - 25
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/BondGraphicsView.cpp

@@ -7,7 +7,7 @@
 
 BondItem::BondItem(ns_mat::POINT_INFO_STRUCT point, QGraphicsItem* parent)
     : QGraphicsRectItem(parent), point(point) {
-    setBrush(getColorByStatus(point.stBondStatus.bDieStatus));
+    setBrush(getColorByStatus());
     setPen(QPen(QColor(0, 0, 0), 1));
 }
 
@@ -28,18 +28,56 @@ void BondItem::setLeftSelected(bool selected) {
         setPen(QPen(Qt::black, 1));  // 未选中时恢复为黑色边框
     }
 }
+int BondItem::getDieIndex() {
+    return dieIndex;
+}
+
+void BondItem::hoverEnterEvent(QGraphicsSceneHoverEvent*) {
+    setZValue(1); // 悬停时提升Z值
+    update();
+}
+
+void BondItem::hoverLeaveEvent(QGraphicsSceneHoverEvent*) {
+    setZValue(0);
+    update();
+}
+
+QColor BondItem::getColorByStatus() {
 
-QColor BondItem::getColorByStatus(ns_mat::DIE_STATUS status) {
-    switch (status) {
-    //case ns_mat::DIE_STATUS::NO_PICK: return QColor(200, 200, 200);
-    //case ns_mat::DIE_STATUS::WAF_PICK_DONE: return QColor(100, 200, 230);
-    //case ns_mat::DIE_STATUS::TRANSFER_BOND_DONE: return QColor(255, 255, 0);
-    case ns_mat::DIE_STATUS::TRANSFER_PICK_DONE: return QColor(255, 165, 0);
-    case ns_mat::DIE_STATUS::LOOKUP_CALIB_DONE: return QColor(0, 150, 255);
-    case ns_mat::DIE_STATUS::BOND_DONE: return QColor(144, 238, 144);
-    case ns_mat::DIE_STATUS::BOND_DEL: return QColor(255, 50, 50);
-    default: return Qt::gray;
+    dieIndex = m_info.stIndex.iIndex;
+    if (m_info.stBondStatus.bDieStatus == ns_mat::DIE_STATUS::BOND_DEL) {
+        return QColor(255, 50, 50);
+
+    }else{
+        if (m_info.stBondStatus.bIsCheck == true) {
+            return QColor(255, 100, 0);
+        }
+        else {
+            if (m_info.stBondStatus.bDieStatus != ns_mat::DIE_STATUS::NO_BOND) {
+                switch (m_info.stBondStatus.bDieStatus) {
+                case ns_mat::DIE_STATUS::TRANSFER_PICK_DONE: return QColor(255, 165, 0);
+                case ns_mat::DIE_STATUS::LOOKUP_CALIB_DONE: return QColor(0, 150, 255);
+                case ns_mat::DIE_STATUS::BOND_DONE: return QColor(144, 238, 144);
+                default: return Qt::gray;
+                }
+            }
+            else {
+                if (m_info.stBondStatus.bAlnStatus == true) {
+                    return QColor(255, 100, 255);
+                }
+                else {
+                    switch (m_info.stBondStatus.bPickStatus) {
+                        case ns_mat::PICK_STATUS::NO_PICK: return QColor(200, 200, 200);
+                        case ns_mat::PICK_STATUS::WAF_PICK_DONE: return QColor(100, 200, 230);
+                        case ns_mat::PICK_STATUS::TRANSFER_BOND_DONE: return QColor(255, 255, 0);
+                    }
+                }
+
+            }
+            
+        }
     }
+    
 }
 
 BondGraphicsView::BondGraphicsView(QGraphicsScene* scene, QWidget* parent)
@@ -197,17 +235,21 @@ void BondGraphicsView::mouseReleaseEvent(QMouseEvent* event) {
             connect(showThumb, &QAction::triggered, [this] {
                 thumbnailVisible ? hideThumbnail() : showThumbnail();
                 });
-            menu.addAction(tr("Send Location", "发送位置"), [this] {
-                if (selectedItem) {
-                    qDebug() << selectedItem->point.stIndex.iIndex;
-                    selectedItem->setLeftSelected(false);
-                    selectedItem = nullptr;
-                }
-                });
+            //menu.addAction(tr("Send Location", "发送位置"), [this] {
+            //    if (selectedItem) {
+            //        qDebug() << selectedItem->point.stIndex.iIndex;
+            //        selectedItem->setLeftSelected(false);
+            //        selectedItem = nullptr;
+            //    }
+            //    });
             BondItem* die = nullptr;
-            while (item && !die) {
-                die = dynamic_cast<BondItem*>(item);
-                item = item->parentItem();
+            QList<QGraphicsItem*> items = scene()->items(mapToScene(event->pos()));
+            foreach(QGraphicsItem * item, items) {
+                if (typeid(*item) == typeid(BondItem)) {
+                    // 找到了你需要的 item
+                    die = dynamic_cast<BondItem*>(item);
+                    break;
+                }
             }
             if (die) {
                 menu.addAction(tr("move to current location","移动到该位置"), [this, die] {
@@ -226,6 +268,30 @@ void BondGraphicsView::mouseReleaseEvent(QMouseEvent* event) {
 
                     selectedItem = die;
                     selectedItem->setLeftSelected(true);
+                    m_pCViewInterface->GetViewMatrix()->MoveBondToPoint(die->getDieIndex());
+                    qDebug() << "move to current location" << die->getDieIndex();
+                    });
+                // 设置区域边界点菜单
+                menu.addAction(tr("set Top left point", "设为左上点"), [this, die] {
+                    //if (topLeftItem && topLeftItem->scene()) {
+                    //    topLeftItem->setRightSelected(false);
+                    //}
+                    //topLeftItem.clear();
+                    //topLeftItem = die;
+                    //topLeftItem->setRightSelected(true);
+                    //topLeftIndex = qMakePair(die->getRow(), die->getCol());
+                    //if (bottomRightIndex.first >= 0) checkAndCreateRegion();
+                    });
+
+                menu.addAction(tr("set bottom right point", "设为右下点"), [this, die] {
+                    //if (bottomRightItem && bottomRightItem->scene()) {
+                    //    bottomRightItem->setRightSelected(false);
+                    //}
+                    //bottomRightItem.clear();
+                    //bottomRightItem = die;
+                    //bottomRightItem->setRightSelected(true);
+                    //bottomRightIndex = qMakePair(die->getRow(), die->getCol());
+                    //if (topLeftIndex.first >= 0) checkAndCreateRegion();
                     });
             }
 
@@ -248,11 +314,11 @@ void BondGraphicsView::wheelEvent(QWheelEvent* event) {
 
 // 缩略图功能实现
 void BondGraphicsView::showThumbnail() {
-    // 本地图片路径(根据实际路径修改)
-    QString imagePath = ":/images/test_image/image_1.png";  // 替换为本地图片路径
+    ImageInfo image;
+    int dieIndex;
+    m_pCViewInterface->GetViewMatrix()->GetBondRefImage(dieIndex,image);
 
-    // 加载本地图片
-    QPixmap thumb(imagePath);
+    QPixmap thumb = convertToPixmap(image);
 
     if (!thumb.isNull()) {
         // 如果图片加载成功,设置为缩略图
@@ -314,3 +380,114 @@ void BondGraphicsView::setRegion()
     }
     selectedItem.clear();
 }
+
+void BondGraphicsView::yuv422_to_rgb888(const unsigned char* src, unsigned char* dst, int width, int height)
+{
+    for (int i = 0; i < width * height; i += 2) {
+        unsigned char y0 = src[0];
+        unsigned char u = src[1];
+        unsigned char y1 = src[2];
+        unsigned char v = src[1];
+
+        // 简单反色度插值,适用于 U/V 在相邻像素间共享的情况
+        int r, g, b;
+
+        // YUV to RGB 转换公式
+#define CLIP(x) qBound(0, int(x), 255)
+
+// Pixel 0
+        r = CLIP(y0 + 1.402 * (v - 128));
+        g = CLIP(y0 - 0.344 * (u - 128) - 0.714 * (v - 128));
+        b = CLIP(y0 + 1.772 * (u - 128));
+        *dst++ = r;
+        *dst++ = g;
+        *dst++ = b;
+
+        // Pixel 1
+        r = CLIP(y1 + 1.402 * (v - 128));
+        g = CLIP(y1 - 0.344 * (u - 128) - 0.714 * (v - 128));
+        b = CLIP(y1 + 1.772 * (u - 128));
+        *dst++ = r;
+        *dst++ = g;
+        *dst++ = b;
+
+        src += 4;
+    }
+}
+
+QPixmap BondGraphicsView::convertToPixmap(const ImageInfo& imgData)
+{
+    QImage::Format qFormat = QImage::Format_Invalid;
+
+    switch (imgData.format) {
+    case ImageFormat::GRAY8:
+        qFormat = QImage::Format_Grayscale8;
+        break;
+    case ImageFormat::RGB888:
+        qFormat = QImage::Format_RGB888;
+        break;
+    case ImageFormat::ARGB32:
+        qFormat = QImage::Format_ARGB32;
+        break;
+    case ImageFormat::RGB32:
+        qFormat = QImage::Format_RGB32;
+        break;
+    case ImageFormat::YUV422: {
+        // 需要先转换为 RGB888
+        int byteCount = imgData.width * imgData.height * 3;
+        unsigned char* rgbData = new unsigned char[byteCount];
+        yuv422_to_rgb888(imgData.data, rgbData, imgData.width, imgData.height);
+
+        QImage tmp(rgbData, imgData.width, imgData.height, QImage::Format_RGB888);
+        QPixmap pixmap = QPixmap::fromImage(tmp);
+
+        delete[] rgbData;
+        return pixmap;
+    }
+    default:
+        qDebug() << "Unsupported image format!";
+        return QPixmap();
+    }
+
+    QImage qImg(imgData.data, imgData.width, imgData.height,
+        imgData.width * imgData.channel, qFormat);
+
+    return QPixmap::fromImage(qImg);
+}
+void BondGraphicsView::setCViewInterface(ns_module::CViewInterface* CViewInterface) {
+    m_pCViewInterface = CViewInterface;
+}
+
+void BondGraphicsView::checkAndCreateRegion()
+{
+    // 仅当两个点都有效时处理
+    if (topLeftIndex.first < 0 || bottomRightIndex.first < 0) return;
+
+    // 确定行列范围
+    int startRow = qMin(topLeftIndex.first, bottomRightIndex.first);
+    int endRow = qMax(topLeftIndex.first, bottomRightIndex.first);
+    int startCol = qMin(topLeftIndex.second, bottomRightIndex.second);
+    int endCol = qMax(topLeftIndex.second, bottomRightIndex.second);
+
+    // 遍历场景中的所有项
+    foreach(QGraphicsItem * item, scene()->items()) {
+        if (DieItem* die = dynamic_cast<DieItem*>(item)) {
+            int row = die->getRow();
+            int col = die->getCol();
+
+            // 判断是否在区域内
+            if (row >= startRow && row <= endRow &&
+                col >= startCol && col <= endCol) {
+
+                // 更新选中状态
+                die->setSelected(true);
+                selectedItemsMap.insert(qMakePair(row, col), die);
+            }
+        }
+    }
+
+    // 重置索引点
+    topLeftIndex = qMakePair(-1, -1);
+    bottomRightIndex = qMakePair(-1, -1);
+
+}

+ 21 - 3
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/BondGraphicsView.h

@@ -7,7 +7,7 @@
 #include <QGraphicsRectItem>
 #include <QPointer>
 #include <CBondMatrix.h>
-
+#include <CViewInterface.h>
 class BondItem : public QObject, public QGraphicsRectItem {
 public:
     BondItem(ns_mat::POINT_INFO_STRUCT point, QGraphicsItem* parent = nullptr);
@@ -15,18 +15,32 @@ public:
     void setSelected(bool selected);
     void setLeftSelected(bool selected);
     ns_mat::POINT_INFO_STRUCT point;
+    int getDieIndex();
+
 
 private:
+    QPair<int, int> topLeftIndex;
+    QPair<int, int> bottomRightIndex;
+    QPointer<BondItem> selectedItem;
+    QPointer<BondItem> topLeftItem;
+    QPointer<BondItem> bottomRightItem;
     bool isSelected = false;
-
+    int dieIndex;
+    POINT_INFO_STRUCT m_info;
     // 获取单元格状态颜色
-    QColor getColorByStatus(ns_mat::DIE_STATUS status);
+    QColor getColorByStatus();
+protected:
+    void hoverEnterEvent(QGraphicsSceneHoverEvent*) override;
+    void hoverLeaveEvent(QGraphicsSceneHoverEvent*) override;
 };
 
 class BondGraphicsView : public QGraphicsView {
     Q_OBJECT
 public:
     BondGraphicsView(QGraphicsScene* scene, QWidget* parent = nullptr);
+    QPixmap convertToPixmap(const ImageInfo& imgData);
+    void yuv422_to_rgb888(const unsigned char* src, unsigned char* dst, int width, int height);
+    void setCViewInterface(ns_module::CViewInterface* CViewInterface);
 
 protected:
     void mousePressEvent(QMouseEvent* event) override;
@@ -47,12 +61,16 @@ private:
     bool thumbnailVisible; // 缩略图可见状态
 
     QPointer<BondItem> selectedItem;
+    ns_module::CViewInterface* m_pCViewInterface;
 
     void showThumbnail();
     void hideThumbnail();
 
     void clearRegion();
     void setRegion();
+    void checkAndCreateRegion();
+
+
 };
 
 #endif // BONDGRAPHICSVIEW_H

+ 10 - 0
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/MaterialBoxGraphicsView.cpp

@@ -4,6 +4,14 @@ MaterialBoxGraphicsView::MaterialBoxGraphicsView(QGraphicsScene* scene, QWidget*
     : QGraphicsView(scene, parent){
     setRenderHint(QPainter::Antialiasing);
     setTransformationAnchor(QGraphicsView::AnchorUnderMouse); // 缩放时以鼠标为中心
+        // 禁用并隐藏水平滚动条
+    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    setHorizontalScrollBar(nullptr);
+
+    // 禁用并隐藏垂直滚动条
+    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    setVerticalScrollBar(nullptr);
+    setDragMode(QGraphicsView::NoDrag);
 };
 
 
@@ -14,12 +22,14 @@ void MaterialBoxGraphicsView::mousePressEvent(QMouseEvent* event){
             clearSeleted();
             selectedLeftItem = dynamic_cast<MaterialBoxDie*>(item);
             selectedLeftItem->setLeftSelected(true);
+            qDebug() << "current row" << selectedLeftItem->getRow();
         }else{
             clearSeleted();
             return;
         }
         setCursor(Qt::OpenHandCursor);  // 按下时设置为小手
 
+
     }else if(event->button() == Qt::RightButton){
         QGraphicsItem* item = itemAt(event->pos());
         if (item && dynamic_cast<MaterialBoxDie*>(item)) {

+ 1 - 1
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Wafer.cpp

@@ -231,7 +231,7 @@ void Wafer::initFrom(QWidget* parent) {
     int dieWide = m_dieWide / radio;
 
     //test 实际使用时需要删除或注释
-    angle = 0.00;
+    angle = 90.00;
     // 初始化晶圆参数
     view->initWafer(center, // 中心坐标
         radius,              // 半径

+ 3 - 1
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/WaferGraphicsView.cpp

@@ -95,6 +95,7 @@ void WaferGraphicsView::mousePressEvent(QMouseEvent* event) {
                 selectedItem->setLeftSelected(true);
                 if (event->button() == Qt::MouseEventCreatedDoubleClick) {
                     m_pCViewInterface->GetViewMatrix()->MoveWaferToPoint(selectedItem->getDieIndex());
+                    qDebug() << "move to point" << selectedItem->getDieIndex();
                 }
             }
 
@@ -233,6 +234,7 @@ void WaferGraphicsView::mouseReleaseEvent(QMouseEvent* event) {
                     selectedItem = die;
                     selectedItem->setLeftSelected(true);
                     m_pCViewInterface->GetViewMatrix()->MoveWaferToPoint(die->getDieIndex());
+                    qDebug() << "move to point" << selectedItem->getDieIndex();
                     });
 
                 // 设置区域边界点菜单
@@ -469,7 +471,7 @@ void WaferGraphicsView::drawDieMatrix(const QPointF& center,
     QGraphicsTextItem* text = new QGraphicsTextItem(QString(tr("DieMatrix%1")).arg(DieMatrixId));
     text->setPos(center.x(), center.y());
     QFont font = text->font(); // 获取当前字体
-    font.setPointSize(6);      // 设置字体大小为 8,可以根据需要调整
+    font.setPointSize(6);      // 设置字体大小为 6,可以根据需要调整
     text->setFont(font);       // 应用新的字体
     m_scene->addItem(text);
 }

+ 33 - 0
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Waffle.cpp

@@ -55,10 +55,43 @@ void Waffle::UpdataGenerateTestData()
 
 void Waffle::UpdataVal(const std::vector<ns_mat::WAFFLE_MATRIX_POINT_STRUCT>& veWaffle)
 {
+    maxRow = 0;
+    maxCol = 0;
+    waffleMatrixRowNum = 0;
+    waffleMatrixColNum = 0;
+    matrixInfo mInfo;
+    mInfo.maxCol = 0;
+    mInfo.maxRow = 0;
+    UINT dieMatrixId = veWaffle[0].nDieMatrixId;
     for (const auto a: veWaffle)
     {
+        if (dieMatrixId != a.nDieMatrixId) {
+            matrixInfoMap.insert(dieMatrixId, mInfo);
+            dieMatrixId = a.nPackMatrixId;
+            mInfo.maxCol = 0;
+            mInfo.maxRow = 0;
+        }
+        else {
+            if (mInfo.maxRow < a.nDieRow)
+                mInfo.maxRow = a.nDieRow;
+            if (mInfo.maxCol < a.nDieCol)
+                mInfo.maxCol = a.nDieCol;
+
+        }
         m_vWaffleData.append(a);
+        if (a.nPackRow == 1 && a.nDieRow==1) {
+            waffleMatrixRowNum++;
+        }
+        if (a.nPackCol == 1 && a.nDieCol == 1) {
+            waffleMatrixColNum++;
+        }
+        if (maxRow < a.nPackRow)
+            maxRow = a.nPackRow;
+        if (maxCol < a.nPackCol)
+            maxCol = a.nPackCol;
     }
+    matrixInfoMap.insert(dieMatrixId, mInfo);
+    qDebug() << maxRow << maxCol << waffleMatrixRowNum << waffleMatrixColNum;
 }
 
 void Waffle::paintEvent(QPaintEvent *event) {

+ 7 - 0
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/Waffle.h

@@ -44,6 +44,13 @@ private:
 
     int centerX, centerY;
     QPixmap globalPixmap;
+    int maxRow, maxCol;
+    int waffleMatrixRowNum, waffleMatrixColNum;
+    struct matrixInfo{
+        int maxRow;
+        int maxCol;
+    };
+    QMap<int, matrixInfo> matrixInfoMap;
 
 public:
     QGraphicsScene*     scene = nullptr;

+ 2 - 0
View/die-bonder-ui/OriginalWnd/ChartsAndCamerasWnd.cpp

@@ -308,6 +308,8 @@ void ChartsAndCamerasWnd::initFrom() {
             }
             if (manager->getBond()) {
                 bondMap.insert(num, manager->getBond());
+                ui->viewwidgetgroup->setBond(bondMap.value(i + 1));
+                m_allGroup[i]->setBondWidget(ui->viewwidgetgroup->getBond()->getGlobalPixmap());
             }
             if (!manager->getFileList().isEmpty()) {
                 m_mapFileListMap.insert(num, manager->getFileList());

+ 3 - 1
View/die-bonder-ui/OriginalWnd/MainAndSecondaryCamerasWnd.cpp

@@ -105,7 +105,7 @@ void MainAndSecondaryCamerasWnd::InitPage()
             }
             else
             {
-                m_pMainCameraBind->m_vecCamera[i].eType = MATERIAL_WAFER;
+                m_pMainCameraBind->m_vecCamera[i].eType = MATERIAL_BOND;
                 manager = new CameraImageHandler(num, m_pMainCameraBind->m_vecCamera[i]);
             }
 
@@ -135,6 +135,8 @@ void MainAndSecondaryCamerasWnd::InitPage()
             }
             if (manager->getBond()) {
                 m_mapBondMap.insert(num, manager->getBond());
+                ui->viewwidgetgroup_L->setBond(m_mapBondMap.value(i + 1));
+                m_allGroup[i]->setBondWidget(ui->viewwidgetgroup_L->getBond()->getGlobalPixmap());
             }
             if(!manager->getFileList().isEmpty()){
                 m_mapFileListMap.insert(num, manager->getFileList());

+ 2 - 2
View/die-bonder-ui/OriginalWnd/OriginalWnd.cpp

@@ -368,10 +368,10 @@ void OriginalWnd::JRunFunSlots(ns_module::ST_BUTTON_FUN pra)
 
 void OriginalWnd::StatusBar()
 {
-    enum DEVICE_STATUS currentStatus = DEVICE_STATUS::IDLE;
+    enum DEVICE_STATUS currentStatus = DEVICE_STATUS::DIAGNOSE;
     updateCalibrationButtonColor(currentStatus);
 
-    enum CONNECT_STATUS currentStatus2 = OriginalWnd::CONNECT_STATUS::NO_CONNECT;
+    enum CONNECT_STATUS currentStatus2 = OriginalWnd::CONNECT_STATUS::HOST_TIMEOUT;
     updateMachineLinkColor(currentStatus2);
 
     enum HOST_STATUS currentStatus3 = OriginalWnd::HOST_STATUS::DEVICE_OK;

+ 2 - 0
View/die-bonder-ui/OriginalWnd/SingleCameraOperationWnd.cpp

@@ -98,6 +98,8 @@ void SingleCameraOperationWnd::initFrom() {
             }
             if (manager->getBond()) {
                 bondMap.insert(num, manager->getBond());
+                ui->viewwidgetgroup->setBond(bondMap.value(i + 1));
+                m_allGroup[i]->setBondWidget(ui->viewwidgetgroup->getBond()->getGlobalPixmap());
             }
             if (!manager->getFileList().isEmpty()) {
                 m_mapFileListMap.insert(num, manager->getFileList());

+ 12 - 0
View/die-bonder-ui/Src/Res/qss/dark.qss

@@ -17,6 +17,18 @@ Login QWidget#widget
     background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6164D6, stop: 1 #6164D6); /* 第一层渐变 */
 }
 
+QWidget#Toptitlebar QPushButton#MachineLink
+{
+    border-radius: 4px;
+    border-image: url(:/images/TopStatusBar/MachineLink.png);
+}
+
+QWidget#Toptitlebar QPushButton#HostStatus
+{
+    border-radius: 4px;
+    border-image: url(:/images/TopStatusBar/HostStatus.png);
+}
+
 Login QPushButton
 {
     color:#FFFFFF;

+ 3 - 2
View/die-bonder-ui/Src/Res/qss/light.qss

@@ -250,15 +250,16 @@ OriginalWnd QWidget#Toptitlebar QPushButton#CalibrationButton
 QWidget#Toptitlebar QPushButton#MachineLink
 {
     border-radius: 4px;
-    image: url(:/images/TopStatusBar/MachineLink.png);
+    border-image: url(:/images/TopStatusBar/MachineLink.png);
 }
 
 QWidget#Toptitlebar QPushButton#HostStatus
 {
     border-radius: 4px;
-    image: url(:/images/TopStatusBar/HostStatus.png);
+    border-image: url(:/images/TopStatusBar/HostStatus.png);
 }
 
+
 /*初始界面*/
 OriginalWnd QWidget#widget_2,
 OriginalWnd QWidget#widget

+ 3 - 0
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.cpp

@@ -225,6 +225,9 @@ void ControlOperationPage::KindsofWidget(kinds kind)
 Wafer* ControlOperationPage::getWafer() {
     return m_wafer;
 }
+Bond* ControlOperationPage::getBond() {
+    return m_bond;
+}
 
 void ControlOperationPage::setWafer(Wafer* wafer) {
     m_wafer = wafer;

+ 1 - 0
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.h

@@ -52,6 +52,7 @@ public:
     void setComboBox(const QList<QPair<QString, QString>> fileList, const int index);
     void setEnableControls(bool enable);
     Wafer* getWafer();
+    Bond* getBond();
 
     /**更新硬件指针
      */

BIN
View/die-bonder-ui/images/TopStatusBar/HostStatus.png


BIN
View/die-bonder-ui/images/TopStatusBar/MachineLink.png