123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- #include "Waffle.h"
- #include <QPainter>
- #include <QPaintEvent>
- Waffle::Waffle(int flag, QWidget *parent) : QWidget(parent)
- {
- }
- void Waffle::UpdataGenerateTestData()
- {
-
- WAFFLE_MATRIX_POINT_STRUCT test;
- test.nPackMatrixId = 1;
- test.nPackRow = 1;
- test.nPackCol = 1;
- test.nDieRow = 1;
- test.nDieCol = 1;
- test.nDieMatrixId = 1;
- test.iDieIndex = 1;
- test.bDisable = false;
-
- test.stPosition.x = 0;
- test.stPosition.y = 0;
- int randomStatus = std::rand() % 5;
- test.eStatus = static_cast<ns_mat::PICK_DIE_STATUS>(randomStatus);
- maxPoint = QPointF(0, 0);
- minPoint = QPointF(0,0);
- WAFFLE_MATRIX_POINT_STRUCT minMatrixPoint = test;
- WAFFLE_MATRIX_POINT_STRUCT maxMatrixPoint = test;
- for (int i = 0; i < 2; i++) {
- for (int j = 0; j < 2; j++) {
- for (int m = 0; m < 2; m++) {
- for (int n = 0; n < 2; n++) {
- ns_mat::WAFFLE_MATRIX_POINT_STRUCT a;
- a.nPackMatrixId = 1;
- a.nPackRow = i + 1;
- a.nPackCol = j + 1;
- a.nDieRow = m + 1;
- a.nDieCol = n + 1;
- a.nDieMatrixId = i * 2 + j + 1;
- a.iDieIndex = m + n + 1;
- a.bDisable = false;
-
- a.stPosition.x = (j * 2 + n) * 2;
- a.stPosition.y = (i * 2 + m) * 2;
- int randomStatus = std::rand() % 5;
- a.eStatus = static_cast<ns_mat::PICK_DIE_STATUS>(randomStatus);
- if (a.stPosition.x > maxPoint.x())
- maxPoint.setX(a.stPosition.x);
- if (a.stPosition.x < minPoint.x())
- minPoint.setX(a.stPosition.x);
- if (a.stPosition.y > maxPoint.y())
- maxPoint.setY(a.stPosition.y);
- if (a.stPosition.y < minPoint.y())
- minPoint.setY(a.stPosition.y);
- if (maxMatrixPoint.nDieMatrixId != a.nDieMatrixId) {
- m_vmaxMatrixPoints.append(maxMatrixPoint);
- m_vminMatrixPoints.append(minMatrixPoint);
- maxMatrixPoint = a;
- minMatrixPoint = a;
- }
- else {
-
- if (a.stPosition.x > maxMatrixPoint.stPosition.x)
- maxMatrixPoint = a;
- if (a.stPosition.y > maxMatrixPoint.stPosition.y)
- maxMatrixPoint = a;
- if (a.stPosition.x < minMatrixPoint.stPosition.x)
- minMatrixPoint = a;
- if (a.stPosition.y < minMatrixPoint.stPosition.y)
- minMatrixPoint = a;
-
-
- }
- m_vWaffleData.append(a);
- }
- }
- }
- }
- m_vmaxMatrixPoints.append(maxMatrixPoint);
- m_vminMatrixPoints.append(minMatrixPoint);
- }
- void Waffle::UpdataVal(const std::vector<ns_mat::WAFFLE_MATRIX_POINT_STRUCT>& veWaffle)
- {
- maxPoint = QPointF(veWaffle[0].stPosition.x, veWaffle[0].stPosition.y);
- minPoint = QPointF(veWaffle[0].stPosition.x, veWaffle[0].stPosition.y);
- WAFFLE_MATRIX_POINT_STRUCT minMatrixPoint = veWaffle[0];
- WAFFLE_MATRIX_POINT_STRUCT maxMatrixPoint = veWaffle[0];
- for (const auto a: veWaffle)
- {
- m_vWaffleData.append(a);
-
- if (a.stPosition.x > maxPoint.x())
- maxPoint.setX(a.stPosition.x);
- if (a.stPosition.x < minPoint.x())
- minPoint.setX(a.stPosition.x);
- if (a.stPosition.y > maxPoint.y())
- maxPoint.setY(a.stPosition.y);
- if (a.stPosition.y < minPoint.y())
- minPoint.setY(a.stPosition.y);
- if (maxMatrixPoint.nDieMatrixId != a.nDieMatrixId) {
- m_vmaxMatrixPoints.append(maxMatrixPoint);
- m_vminMatrixPoints.append(minMatrixPoint);
- maxMatrixPoint = a;
- minMatrixPoint = a;
- }
- else {
-
- if (a.stPosition.x > maxMatrixPoint.stPosition.x)
- maxMatrixPoint = a;
- if (a.stPosition.y > maxMatrixPoint.stPosition.y)
- maxMatrixPoint = a;
- if (a.stPosition.x < minMatrixPoint.stPosition.x)
- minMatrixPoint = a;
- if (a.stPosition.y < minMatrixPoint.stPosition.y)
- minMatrixPoint = a;
- }
-
-
-
- }
-
- m_vmaxMatrixPoints.append(maxMatrixPoint);
- m_vminMatrixPoints.append(minMatrixPoint);
-
- }
- void Waffle::paintInitFrom(QWidget *parent) {
-
- }
- void Waffle::initFrom(QWidget *parent) {
- scene = new QGraphicsScene(parent);
- view = new WaffleGraphicsView(scene);
- view->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);
- }
-
- double dieWidth = 0.5;
- double dieHeight = 0.5;
- for (int i = 0; i < m_vWaffleData.size(); ++i) {
-
-
- double dieWidthr = dieWidth / ratio;
- double dieHeightr = dieHeight / ratio;
- double penSize;
- if (dieWidthr < 1 || dieHeightr < 1) {
- penSize = 0.1;
- }
- else {
- penSize = 1;
- }
- double diex, diey;
- diex = (m_vWaffleData[i].stPosition.x - minPoint.x() + dieWidth) / ratio;
- diey = (m_vWaffleData[i].stPosition.y - minPoint.y() + dieHeight) / ratio;
-
- QRectF dieRect(
- diex,
- diey,
- dieWidthr,
- dieHeightr
- );
- qDebug() << diex << "" << diey << dieWidthr << " " << dieHeightr;
- if (i % 2 == 0) {
- m_vWaffleData[i].eStatus = ns_mat::PICK_DIE_STATUS::DIE_EXIST;
- }
- else {
- m_vWaffleData[i].eStatus = ns_mat::PICK_DIE_STATUS::EDGE_DIE;
- }
- WaffleItem* dieItem = new WaffleItem(m_vWaffleData[i], penSize);
- dieItem->setRect(dieRect);
- dieItem->setZValue(1.0);
- scene->addItem(dieItem);
- }
- QPen ptpen(Qt::blue, 0.5);
- QFont matrixFont;
- double matrixFontSize = qMin(dieWidth / ratio, dieHeight / ratio) * 0.1;
- matrixFont.setPointSizeF(matrixFontSize);
- WAFFLE_MATRIX_POINT_STRUCT minPackMatrixPoint = m_vmaxMatrixPoints[0];
- WAFFLE_MATRIX_POINT_STRUCT maxPackMatrixPoint = m_vmaxMatrixPoints[0];
- for (int i = 0;i < m_vmaxMatrixPoints.size();i++) {
- int ptmatx, ptmaty, ptmatWidth, ptmatHeight;
- if (maxPackMatrixPoint.nPackMatrixId != m_vmaxMatrixPoints[i].nPackMatrixId) {
- m_vmaxPackMatrixPoints.append(maxPackMatrixPoint);
- m_vminPackMatrixPoints.append(minPackMatrixPoint);
- maxPackMatrixPoint = m_vmaxMatrixPoints[i];
- minPackMatrixPoint = m_vminMatrixPoints[i];
- }
- else {
-
- if (m_vmaxMatrixPoints[i].stPosition.x > maxPackMatrixPoint.stPosition.x)
- maxPackMatrixPoint = m_vmaxMatrixPoints[i];
- if (m_vminMatrixPoints[i].stPosition.y > maxPackMatrixPoint.stPosition.y)
- maxPackMatrixPoint = m_vmaxMatrixPoints[i];
- if (m_vmaxMatrixPoints[i].stPosition.x < minPackMatrixPoint.stPosition.x)
- minPackMatrixPoint = m_vminMatrixPoints[i];
- if (m_vminMatrixPoints[i].stPosition.y < minPackMatrixPoint.stPosition.y)
- minPackMatrixPoint = m_vminMatrixPoints[i];
- }
-
- ptmatx = (m_vminMatrixPoints[i].stPosition.x - minPoint.x() + 0.7 * dieWidth) / ratio;
- ptmaty = (m_vminMatrixPoints[i].stPosition.y - minPoint.y() + 0.7 * dieHeight) / ratio;
- ptmatWidth = (m_vmaxMatrixPoints[i].stPosition.x - m_vminMatrixPoints[i].stPosition.x + dieWidth * 1.6) / ratio;
- ptmatHeight = (m_vmaxMatrixPoints[i].stPosition.y - m_vminMatrixPoints[i].stPosition.y + dieHeight * 1.6) / ratio;
- QRectF ptRect(
- ptmatx,
- ptmaty,
- ptmatWidth,
- ptmatHeight
- );
-
- QGraphicsRectItem* ptItem = new QGraphicsRectItem(ptRect);
- ptItem->setPen(ptpen);
-
- scene->addItem(ptItem);
-
- QRectF ptTextRect(
- ptmatx,
- ptmaty,
- dieWidth / ratio * 0.6,
- dieHeight / ratio * 0.2
- );
- QGraphicsRectItem* ptTextItem = new QGraphicsRectItem(ptTextRect);
- ptTextItem->setPen(Qt::NoPen);
- scene->addItem(ptTextItem);
- QGraphicsTextItem* ptText = new QGraphicsTextItem(ptTextItem);
- ptText->setPlainText(QString(tr("DieMat%1")).arg(m_vminMatrixPoints[i].nDieMatrixId));
- ptText->setFont(matrixFont);
-
- ptText->setPos(ptTextRect.center() - QPointF(ptText->boundingRect().width() / 2,
- ptText->boundingRect().height() / 2));
- }
- m_vmaxPackMatrixPoints.append(maxPackMatrixPoint);
- m_vminPackMatrixPoints.append(minPackMatrixPoint);
- for (int i = 0;i < m_vmaxPackMatrixPoints.size();i++) {
- int packmatx, packmaty, packmatWidth, packmatHeight;
- packmatx = (m_vminPackMatrixPoints[i].stPosition.x - minPoint.x() + 0.4 * dieWidth) / ratio;
- packmaty = (m_vminPackMatrixPoints[i].stPosition.y - minPoint.y() + 0.4 * dieHeight) / ratio;
- packmatWidth = (m_vmaxPackMatrixPoints[i].stPosition.x - m_vminPackMatrixPoints[i].stPosition.x + dieWidth * 2.2) / ratio;
- packmatHeight = (m_vmaxPackMatrixPoints[i].stPosition.y - m_vminPackMatrixPoints[i].stPosition.y + dieHeight * 2.2) / ratio;
- QRectF packRect(
- packmatx,
- packmaty,
- packmatWidth,
- packmatHeight
- );
-
- QGraphicsRectItem* packItem = new QGraphicsRectItem(packRect);
- packItem->setPen(ptpen);
-
- scene->addItem(packItem);
-
- QRectF packTextRect(
- packmatx,
- packmaty,
- dieWidth / ratio * 0.6,
- dieHeight / ratio * 0.2
- );
- QGraphicsRectItem* packTextItem = new QGraphicsRectItem(packTextRect);
- packTextItem->setPen(Qt::NoPen);
- scene->addItem(packTextItem);
- QGraphicsTextItem* packText = new QGraphicsTextItem(packTextItem);
- packText->setPlainText(QString(tr("PackMat%1")).arg(m_vmaxPackMatrixPoints[i].nPackMatrixId));
- packText->setFont(matrixFont);
-
- packText->setPos(packTextRect.center() - QPointF(packText->boundingRect().width() / 2,
- packText->boundingRect().height() / 2));
- }
- view->setScene(scene);
- view->resize(width, height);
-
- globalPixmap = QPixmap(width, height);
- globalPixmap.fill(Qt::white);
- QPixmap originalPixmap = QPixmap::grabWidget(view);
-
- QSize targetSize(width, height);
-
- QPixmap scaledPixmap = originalPixmap.scaled(
- targetSize,
- Qt::IgnoreAspectRatio,
- Qt::SmoothTransformation
- );
- globalPixmap = scaledPixmap;
-
- }
- QPixmap Waffle::getGlobalPixmap() const {
- return globalPixmap;
- }
|