|
|
#include "DieUI.h"
|
|
|
|
|
|
DieUI::DieUI(QWidget *parent)
|
|
|
: QWidget(parent)
|
|
|
{
|
|
|
ui.setupUi(this);
|
|
|
connect(ui.pushButton_line, SIGNAL(clicked()), this, SLOT(slot_setDrawLineFlag()));
|
|
|
connect(ui.pushButton_rect, SIGNAL(clicked()), this, SLOT(slot_setDrawRectFlag()));
|
|
|
connect(ui.pushButton_circle, SIGNAL(clicked()), this, SLOT(slot_setCircleFlag()));
|
|
|
connect(ui.pushButton_text, SIGNAL(clicked()), this, SLOT(slot_setTextFlag()));
|
|
|
connect(ui.pushButton_none, SIGNAL(clicked()), this, SLOT(slot_setDrawNone()));
|
|
|
|
|
|
connect(ui.pushButton_setLine, SIGNAL(clicked()), this, SLOT(slot_setLineCoord()));
|
|
|
connect(ui.pushButton_setRect, SIGNAL(clicked()), this, SLOT(slot_setRectCoord()));
|
|
|
connect(ui.pushButton_setCircle, SIGNAL(clicked()), this, SLOT(slot_setCircle()));
|
|
|
|
|
|
connect(ui.pushButton_addText, SIGNAL(clicked()), this, SLOT(slot_addText()));
|
|
|
connect(ui.pushButton_deleteChar, SIGNAL(clicked()), this, SLOT(slot_deleteText()));
|
|
|
|
|
|
connect(ui.pushButton_ensure, SIGNAL(clicked()), this, SLOT(slot_sendEditEnd()));
|
|
|
|
|
|
// 创建正则表达式,允许数字和小数点,但不能以小数点开头
|
|
|
QRegExp regExp("[0-9]*\\.?[0-9]+");
|
|
|
QValidator *validator = new QRegExpValidator(regExp, this);
|
|
|
ui.lineEdit_charWidth->setValidator(validator);
|
|
|
ui.lineEdit_charHeight->setValidator(validator);
|
|
|
ui.lineEdit_charX->setValidator(validator);
|
|
|
ui.lineEdit_charY->setValidator(validator);
|
|
|
|
|
|
QRegExp regExp3("[a-zA-Z0-9_]{1}"); //只是允许输入一个字符
|
|
|
/*ui.lineEdit_charContent->setValidator(new QRegExpValidator(regExp2, ui.lineEdit_charContent));
|
|
|
QValidator *validator = new QRegExpValidator(regExp3, this);*/
|
|
|
QValidator *validator2 = new QRegExpValidator(regExp3, this);
|
|
|
ui.lineEdit_charContent->setValidator(validator2);
|
|
|
|
|
|
m_pen.setColor(RECT_COLOR);
|
|
|
m_pen.setWidth(4);
|
|
|
|
|
|
//QStringList stringList;
|
|
|
//stringList << "Arial.sl" << "SENI-ksht.sl" << "Simplex1_2MEIGUO.sl"; // 向列表添加数据
|
|
|
//QStringListModel *model = new QStringListModel();
|
|
|
//model->setStringList(stringList);
|
|
|
//ui.comboBox->setModel(model);
|
|
|
//ui.comboBox->setCurrentIndex(0);
|
|
|
//m_curFontType.clear();
|
|
|
}
|
|
|
|
|
|
DieUI::~DieUI()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setDrawLineFlag()
|
|
|
{
|
|
|
m_drawType = LINE;
|
|
|
m_dieObj->DrawType(MyDieRectItem::LINE);
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setDrawRectFlag()
|
|
|
{
|
|
|
m_drawType = RECT;
|
|
|
m_dieObj->DrawType(MyDieRectItem::RECT);
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setCircleFlag()
|
|
|
{
|
|
|
m_drawType = CIRCLE;
|
|
|
m_dieObj->DrawType(MyDieRectItem::CIRCLE);
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setTextFlag()
|
|
|
{
|
|
|
m_drawType = TEXT;
|
|
|
m_dieObj->DrawType(MyDieRectItem::TEXT);
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setDrawNone()
|
|
|
{
|
|
|
m_drawType = NONE;
|
|
|
m_dieObj->DrawType(MyDieRectItem::NONE);
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_dealMouseEvent(QPointF p1, QPointF p2)
|
|
|
{
|
|
|
if (m_drawType == LINE)
|
|
|
{
|
|
|
AddLine(p1.x(), p1.y(), p2.x(), p2.y());
|
|
|
}
|
|
|
else if (m_drawType == RECT)
|
|
|
{
|
|
|
AddRect(p1.x(), p1.y(), p2.x(), p2.y());
|
|
|
}
|
|
|
else if (m_drawType == CIRCLE)
|
|
|
{
|
|
|
AddCircle(p1.x(), p1.y(), p2.x(), p2.y());
|
|
|
}
|
|
|
else if (m_drawType == TEXT)
|
|
|
{
|
|
|
AddText(p1.x(), p1.y());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_dealSelect(int id)
|
|
|
{
|
|
|
m_curSelectId = id;
|
|
|
for (auto& iter : m_lineItemVec)
|
|
|
{
|
|
|
if (iter->Id() == id)
|
|
|
{
|
|
|
QPen pen;
|
|
|
pen.setWidth(SELECT_WIDTH);
|
|
|
pen.setColor(CUR_SELECT_DIE);
|
|
|
iter->setPen(pen);
|
|
|
|
|
|
//更新界面显示
|
|
|
ui.lineEdit_lineId->setText(QString::number(iter->Id()));
|
|
|
ui.lineEdit_lineP1X->setText(QString::number(iter->ActualP1DieCoordX()));
|
|
|
ui.lineEdit_lineP1Y->setText(QString::number(iter->ActualP1DieCoordY()));
|
|
|
ui.lineEdit_lineP2X->setText(QString::number(iter->ActualP2DieCoordX()));
|
|
|
ui.lineEdit_lineP2Y->setText(QString::number(iter->ActualP2DieCoordY()));
|
|
|
}
|
|
|
else {
|
|
|
iter->setPen(m_pen);
|
|
|
}
|
|
|
}
|
|
|
for (auto& iter : m_rectItemVec)
|
|
|
{
|
|
|
if (iter->Id() == id)
|
|
|
{
|
|
|
QPen pen;
|
|
|
pen.setWidth(SELECT_WIDTH);
|
|
|
pen.setColor(CUR_SELECT_DIE);
|
|
|
iter->setPen(pen);
|
|
|
|
|
|
//更新界面显示
|
|
|
ui.lineEdit_rectId->setText(QString::number(iter->Id()));
|
|
|
ui.lineEdit_rectX->setText(QString::number(iter->RectX()));
|
|
|
ui.lineEdit_rectY->setText(QString::number(iter->RectY()));
|
|
|
ui.lineEdit_rectWidth->setText(QString::number(iter->Width()));
|
|
|
ui.lineEdit_rectHeight->setText(QString::number(iter->Height()));
|
|
|
}
|
|
|
else {
|
|
|
iter->setPen(m_pen);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (auto& iter : m_circleItemVec)
|
|
|
{
|
|
|
if (iter->Id() == id)
|
|
|
{
|
|
|
QPen pen;
|
|
|
pen.setWidth(SELECT_WIDTH);
|
|
|
pen.setColor(CUR_SELECT_DIE);
|
|
|
iter->setPen(pen);
|
|
|
|
|
|
//更新界面显示
|
|
|
ui.lineEdit_circleId->setText(QString::number(iter->Id()));
|
|
|
ui.lineEdit_circleX->setText(QString::number(iter->CircleX() + iter->Diameter() / 2));
|
|
|
ui.lineEdit_circleY->setText(QString::number(iter->CircleY() + iter->Diameter() / 2));
|
|
|
ui.lineEdit_dia->setText(QString::number(iter->Diameter()));
|
|
|
}
|
|
|
else {
|
|
|
iter->setPen(m_pen);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (auto& iter : m_textItemVec)
|
|
|
{
|
|
|
if (iter->m_id == id)
|
|
|
{
|
|
|
iter->setDefaultTextColor(CUR_SELECT_DIE);
|
|
|
|
|
|
//更新界面显示
|
|
|
ui.lineEdit_charId->setText(QString::number(iter->m_id));
|
|
|
ui.lineEdit_charContent->setText(iter->charContent);
|
|
|
ui.lineEdit_charX->setText(QString::number(iter->charPosX));
|
|
|
ui.lineEdit_charY->setText(QString::number(iter->charPosY));
|
|
|
ui.lineEdit_charWidth->setText(QString::number(iter->charWidth));
|
|
|
ui.lineEdit_charHeight->setText(QString::number(iter->charHeight));
|
|
|
}
|
|
|
else {
|
|
|
iter->setDefaultTextColor(RECT_COLOR);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setLineCoord()
|
|
|
{
|
|
|
for (auto& iter : m_lineItemVec)
|
|
|
{
|
|
|
if (iter->Id() == ui.lineEdit_lineId->text().toInt())
|
|
|
{
|
|
|
iter->SetActualCoordAndUpdate(
|
|
|
ui.lineEdit_lineP1X->text().toDouble(),
|
|
|
ui.lineEdit_lineP1Y->text().toDouble(),
|
|
|
ui.lineEdit_lineP2X->text().toDouble(),
|
|
|
ui.lineEdit_lineP2Y->text().toDouble());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setRectCoord()
|
|
|
{
|
|
|
for (auto& iter : m_rectItemVec)
|
|
|
{
|
|
|
if (iter->Id() == ui.lineEdit_rectId->text().toInt())
|
|
|
{
|
|
|
iter->SetActualDieCoordAndUpdate(
|
|
|
ui.lineEdit_rectX->text().toDouble(),
|
|
|
ui.lineEdit_rectY->text().toDouble(),
|
|
|
ui.lineEdit_rectWidth->text().toDouble(),
|
|
|
ui.lineEdit_rectHeight->text().toDouble(),
|
|
|
ui.lineEdit_rectAngle->text().toDouble());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_setCircle()
|
|
|
{
|
|
|
for (auto& iter : m_circleItemVec)
|
|
|
{
|
|
|
if (iter->Id() == ui.lineEdit_circleId->text().toInt())
|
|
|
{
|
|
|
iter->SetCircleInterfaceAttr(ui.lineEdit_circleX->text().toDouble() - ui.lineEdit_dia->text().toDouble() / 2,
|
|
|
ui.lineEdit_circleY->text().toDouble() - ui.lineEdit_dia->text().toDouble() / 2,
|
|
|
ui.lineEdit_dia->text().toDouble());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::AddLine(double x1, double y1, double x2, double y2)
|
|
|
{
|
|
|
std::shared_ptr<MyQGraphicsLineItem> lineObj = std::make_shared<MyQGraphicsLineItem>(x1 - x1, y1 - y1, x2 - x1, y2 - y1);
|
|
|
connect(lineObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
|
|
|
|
|
|
lineObj->SetLineItemAttr(QPointF(x1, y1), QPointF(x2, y2));
|
|
|
lineObj->setPen(m_pen);
|
|
|
|
|
|
m_lineItemVec.push_back(lineObj);
|
|
|
m_scene.addItem(lineObj.get());
|
|
|
}
|
|
|
|
|
|
void DieUI::AddRect(double x1, double y1, double x2, double y2)
|
|
|
{
|
|
|
if (x1 >= x2 || y1 >= y2)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
double width = abs(x2 - x1);
|
|
|
double height = abs(y2 - y1);
|
|
|
std::shared_ptr<MyDrawRectItem> RectObj = std::make_shared<MyDrawRectItem>(0, 0, width, height);
|
|
|
connect(RectObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
|
|
|
|
|
|
RectObj->SetDrawRectAttr(x1, y1, width, height);
|
|
|
RectObj->setPen(m_pen);
|
|
|
|
|
|
m_rectItemVec.push_back(RectObj);
|
|
|
m_scene.addItem(RectObj.get());
|
|
|
}
|
|
|
|
|
|
void DieUI::AddCircle(double x1, double y1, double x2, double y2)
|
|
|
{
|
|
|
if (x1 >= x2 || y1 >= y2)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
double diameter = sqrt(std::pow(x1 - x2, 2) + std::pow(y1 - y2, 2)); //直径
|
|
|
|
|
|
std::shared_ptr<MyQGraphicsEllipseItem> ciecleObj = std::make_shared<MyQGraphicsEllipseItem>(0, 0, diameter, diameter);
|
|
|
connect(ciecleObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
|
|
|
|
|
|
ciecleObj->SetCircleAttr(x1, y1, diameter, diameter);
|
|
|
ciecleObj->setPen(m_pen);
|
|
|
|
|
|
m_circleItemVec.push_back(ciecleObj);
|
|
|
m_scene.addItem(ciecleObj.get());
|
|
|
}
|
|
|
|
|
|
void DieUI::AddText(double x1, double y1)
|
|
|
{
|
|
|
/*QString testA = "A";
|
|
|
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
|
|
|
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
|
|
|
|
|
|
textObj->SetTextAttr(x1, y1);
|
|
|
textObj->setDefaultTextColor(RECT_COLOR);
|
|
|
|
|
|
m_textItemVec.push_back(textObj);
|
|
|
m_scene.addItem(textObj.get());*/
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_addText()
|
|
|
{
|
|
|
if (!(ui.lineEdit_charWidth->text().toDouble() >= 0.08 && ui.lineEdit_charWidth->text().toDouble() <= m_dieWidth &&
|
|
|
ui.lineEdit_charHeight->text().toDouble() >= 0.12 && ui.lineEdit_charHeight->text().toDouble() <= m_dieHeight))
|
|
|
{
|
|
|
QMessageBox::StandardButton button = QMessageBox::information(
|
|
|
nullptr,
|
|
|
QString::fromLocal8Bit("提示"),
|
|
|
QString::fromLocal8Bit("请输入字高≥0.12mm,字宽≥0.08mm,并且都小于die宽高的数据"),
|
|
|
QMessageBox::Yes,
|
|
|
QMessageBox::NoButton);
|
|
|
ui.lineEdit_charWidth->clear();
|
|
|
ui.lineEdit_charHeight->clear();
|
|
|
return;
|
|
|
}
|
|
|
if (!(ui.lineEdit_charX->text().toDouble() >= 0.08 && ui.lineEdit_charX->text().toDouble() <= m_dieWidth &&
|
|
|
ui.lineEdit_charY->text().toDouble() >= 0.12 && ui.lineEdit_charY->text().toDouble() <= m_dieHeight))
|
|
|
{
|
|
|
QMessageBox::StandardButton button = QMessageBox::information(
|
|
|
nullptr,
|
|
|
QString::fromLocal8Bit("提示"),
|
|
|
QString::fromLocal8Bit("输入的基准点必须大于等于零且小于等于die的宽高"),
|
|
|
QMessageBox::Yes,
|
|
|
QMessageBox::NoButton);
|
|
|
ui.lineEdit_charX->clear();
|
|
|
ui.lineEdit_charY->clear();
|
|
|
return;
|
|
|
}
|
|
|
QString testA = ui.lineEdit_charContent->text();
|
|
|
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
|
|
|
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
|
|
|
textObj->SetTextAttr(ui.lineEdit_charX->text().toDouble() * 100, ui.lineEdit_charY->text().toDouble() * 100);
|
|
|
textObj->setDefaultTextColor(RECT_COLOR);
|
|
|
|
|
|
textObj->charPosX = ui.lineEdit_charX->text().toDouble();
|
|
|
textObj->charPosY = ui.lineEdit_charY->text().toDouble() * (-1.0);
|
|
|
textObj->charWidth = ui.lineEdit_charWidth->text().toDouble();
|
|
|
textObj->charHeight = ui.lineEdit_charHeight->text().toDouble();
|
|
|
textObj->charContent = testA;
|
|
|
|
|
|
//200字体大概等于400宽度
|
|
|
QFont font("Arial", ui.lineEdit_charHeight->text().toDouble() * 100 / 2, QFont::Bold); // 字体名称,大小,粗细
|
|
|
textObj->setFont(font);
|
|
|
|
|
|
m_textItemVec.push_back(textObj);
|
|
|
m_scene.addItem(textObj.get());
|
|
|
|
|
|
QString curText = ui.comboBox->currentText();
|
|
|
if (m_curFontType.size() >= 1 && m_curFontType != curText.toStdString())
|
|
|
{
|
|
|
QMessageBox::StandardButton button = QMessageBox::information(
|
|
|
nullptr,
|
|
|
QString::fromLocal8Bit("提示"),
|
|
|
QString::fromLocal8Bit("字体选择不一样,请重新选择一样字体"),
|
|
|
QMessageBox::Yes,
|
|
|
QMessageBox::NoButton);
|
|
|
return;
|
|
|
}
|
|
|
m_curFontType = curText.toStdString();
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_deleteText()
|
|
|
{
|
|
|
for (auto& iter = m_textItemVec.begin(); iter != m_textItemVec.end(); iter++)
|
|
|
{
|
|
|
if ((*iter)->m_id == m_curSelectId)
|
|
|
{
|
|
|
m_scene.removeItem((*iter).get());
|
|
|
m_textItemVec.erase(iter);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void DieUI::slot_sendEditEnd()
|
|
|
{
|
|
|
emit signal_charEditEnd();
|
|
|
}
|
|
|
|
|
|
void DieUI::InitDieUI(double dieWidth, double dieHeight, QStringList& allFontList)
|
|
|
{
|
|
|
m_dieWidth = dieWidth;
|
|
|
m_dieHeight = dieHeight;
|
|
|
m_allFontList = allFontList;
|
|
|
|
|
|
//绘制坐标系
|
|
|
m_XCoordAxis = std::make_shared<MyQGraphicsLineItem>(-m_dieWidth * DIE_SCALE - 200, 0, m_dieWidth * DIE_SCALE + 200, 0);
|
|
|
m_XCoordAxis->setPen(m_pen);
|
|
|
m_XCoordAxis->CoordAxis(true);
|
|
|
m_YCoordAxis = std::make_shared<MyQGraphicsLineItem>(0, -m_dieHeight * DIE_SCALE - 200, 0, m_dieHeight * DIE_SCALE + 200);
|
|
|
m_YCoordAxis->setPen(m_pen);
|
|
|
m_YCoordAxis->CoordAxis(true);
|
|
|
|
|
|
//绘制die
|
|
|
m_dieObj = std::make_shared<MyDieRectItem>(0, 0, m_dieWidth * DIE_SCALE, m_dieHeight * DIE_SCALE);
|
|
|
m_dieObj->setPen(m_pen);
|
|
|
connect(m_dieObj.get(), SIGNAL(signal_mouse(QPointF, QPointF)), this, SLOT(slot_dealMouseEvent(QPointF, QPointF)));
|
|
|
|
|
|
m_scene.addItem(m_XCoordAxis.get());
|
|
|
m_scene.addItem(m_YCoordAxis.get());
|
|
|
m_scene.addItem(m_dieObj.get());
|
|
|
|
|
|
ui.graphicsView->setScene(&m_scene);
|
|
|
|
|
|
//添加字体
|
|
|
QStringListModel *model = new QStringListModel();
|
|
|
model->setStringList(m_allFontList);
|
|
|
ui.comboBox->setModel(model);
|
|
|
ui.comboBox->setCurrentIndex(0);
|
|
|
m_curFontType.clear();
|
|
|
}
|
|
|
|