Quilting-lw/sharedviews/patterneditwidget.cpp

946 lines
32 KiB
C++
Raw Normal View History

2026-01-23 08:37:18 +00:00
#include "patterneditwidget.h"
#include "ui_patterneditwidget.h"
PatternEditWidget::PatternEditWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::PatternEditWidget)
{
ui->setupUi(this);
setWindowFlags (Qt::Window | Qt::FramelessWindowHint);
setWindowModality(Qt::ApplicationModal);
// 创建一个QGraphicsView
m_view = new MyGraphicsView(this,GRIDSIZE1);
connect(m_view, SIGNAL(siCurrentIndex(int)), this, SLOT(slotShowCurrentIdx(int)));
ui->labelSize->setText(tr("Each grid is 1 millimeter"));//每个格子为1毫米
QString str= tr("Current number of needles: ") + QString("%1").arg(0);//当前针数:
ui->labelIndex->setText(str);
str= tr("Pattern width: ") + QString("%1mm").arg(0);//花样宽度:
ui->labelWidth->setText(str);
str= tr("Pattern height: ") + QString("%1mm").arg(0);//花样高度:
ui->labelHeight->setText(str);
m_XMoveValue = 0;
m_YMoveValue = 0;
//这三个功能暂时隐藏掉用qui源数据进行编辑时这三个功能有问题
ui->pushButtonPreInsert->hide();
ui->pushButtonNextInsert->hide();
ui->pushButtonDelete->hide();
initResolution();
initControlStyle();
}
PatternEditWidget::~PatternEditWidget()
{
if(m_view != NULL)
{
delete m_view;
m_view = NULL;
}
delete ui;
}
//初始化窗体控件为任意分辨率
void PatternEditWidget::initResolution()
{
double factoryX = getFactoryX();
double factoryY = getFactoryY();
this->resize(GLB_SCR_WIGHT*factoryX,GLB_SCR_HEIGHT*factoryY);
ui->frameBack->setGeometry(0*factoryX,0*factoryX,GLB_SCR_WIGHT*factoryX,GLB_SCR_HEIGHT*factoryY);
// 设置QGraphicsView的位置和大小
m_view->setGeometry(10*factoryX, 10*factoryY, 771*factoryX, 551*factoryY); // 假设整个窗口用来显示图形
ui->frameBtn->setGeometry(790*factoryX,10*factoryY,226*factoryX,581*factoryY);
ui->pushButtonPre1->setGeometry(121*factoryX, 10*factoryY, 86*factoryX, 40*factoryY);
ui->pushButtonNext1->setGeometry(16*factoryX, 10*factoryY, 86*factoryX, 40*factoryY);
ui->pushButtonPre10->setGeometry(121*factoryX, 60*factoryY, 86*factoryX, 40*factoryY);
ui->pushButtonNext10->setGeometry(16*factoryX, 60*factoryY, 86*factoryX, 40*factoryY);
ui->pushButtonPreInsert->setGeometry(16*factoryX, 140*factoryY, 191*factoryX, 40*factoryY);
ui->pushButtonNextInsert->setGeometry(16*factoryX, 190*factoryY, 191*factoryX, 40*factoryY);
ui->pushButtonDelete->setGeometry(16*factoryX, 240*factoryY, 191*factoryX, 41*factoryY);
ui->labelX->setGeometry(5*factoryX, 140*factoryY, 15*factoryX, 40*factoryY);
ui->pushButtonXValue->setGeometry(20*factoryX, 140*factoryY, 50*factoryX, 40*factoryY);
ui->labelXUnit->setGeometry(75*factoryX, 140*factoryY, 25*factoryX, 40*factoryY);
ui->pushButtonXAdd->setGeometry(110*factoryX, 140*factoryY, 50*factoryX, 40*factoryY);
ui->pushButtonXDec->setGeometry(170*factoryX, 140*factoryY, 50*factoryX, 40*factoryY);
ui->labelY->setGeometry(5*factoryX, 200*factoryY, 15*factoryX, 40*factoryY);
ui->pushButtonYValue->setGeometry(20*factoryX, 200*factoryY, 50*factoryX, 40*factoryY);
ui->labelYUnit->setGeometry(75*factoryX, 200*factoryY, 25*factoryX, 40*factoryY);
ui->pushButtonYAdd->setGeometry(110*factoryX, 200*factoryY, 50*factoryX, 40*factoryY);
ui->pushButtonYDec->setGeometry(170*factoryX, 200*factoryY, 50*factoryX, 40*factoryY);
ui->pushButtonEnlarge->setGeometry(16*factoryX, 321*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonNarrow->setGeometry(154*factoryX, 321*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonAuto->setGeometry(85*factoryX, 390*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonLeft->setGeometry(16*factoryX, 390*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonRight->setGeometry(154*factoryX, 390*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonUp->setGeometry(85*factoryX, 321*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonDn->setGeometry(85*factoryX, 459*factoryY, 53*factoryX, 53*factoryY);
ui->pushButtonOk->setGeometry(16*factoryX, 545*factoryY, 80*factoryX, 30*factoryY);
ui->pushButtonCancel->setGeometry(127*factoryX, 545*factoryY, 80*factoryX, 30*factoryY);
ui->frameDown->setGeometry(10*factoryX,560*factoryY,771*factoryX,31*factoryY);
ui->labelSize->setGeometry(10*factoryX,5*factoryY,260*factoryX,21*factoryY);
ui->labelIndex->setGeometry(270*factoryX,5*factoryY,150*factoryX,21*factoryY);
ui->labelWidth->setGeometry(430*factoryX,5*factoryY,160*factoryX,21*factoryY);
ui->labelHeight->setGeometry(590*factoryX,5*factoryY,160*factoryX,21*factoryY);
}
//设置按钮颜色 天蓝色渐变
void PatternEditWidget::setButtonColorForSkyBlue(QPushButton *button)
{
QString style = "QPushButton{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #7DE0E1, stop: 1 #39C2DC);border: none;}";
style += "QPushButton:pressed{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
style += "QPushButton:disabled{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
style += "QPushButton:checked{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
button->setStyleSheet(style);
}
//按钮颜色橘色
void PatternEditWidget::setOrangeButtonStyle(QPushButton *button)
{
QString style = "QPushButton{border-radius:" + borderRadius() + "px;}";
// 橙色按钮,白字
style += "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(247, 180, 61), stop:1 rgb(222, 162, 55));color:rgb(255,255,255);}";
style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(222, 196, 128), stop:1 rgb(213,125,54));color:rgb(255,255,255);}";
style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(227, 227, 227), stop:1 rgb(177,177,177));color:rgb(255,255,255);}";
button->setStyleSheet(style);
}
//按钮颜色天空蓝--清空文本设置icon
void PatternEditWidget::setBlueButtonStyleClearTextAndSettingsIcon(QPushButton *button)
{
QString iconName = ":/images/PatternEditWidget/"+button->objectName()+".png";
button->setIcon(QIcon(iconName));
button->setIconSize(7*QSize(returnMinimumSize(button)/8, 7*returnMinimumSize(button)/8));
button->setText("");
QString style = "QPushButton{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #7DE0E1, stop: 1 #39C2DC);border: none;}";
style += "QPushButton:pressed{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
style += "QPushButton:disabled{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
style += "QPushButton:checked{background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,stop: 0 #6DC3C4, stop: 1 #32AAC0);border: none;}";
button->setStyleSheet(style);
}
//按钮颜色橘色--清空文本设置icon
void PatternEditWidget::setOrangeButtonStyleSettingsIcon(QPushButton *button)
{
QString iconName = ":/images/PatternEditWidget/"+button->objectName()+".png";
button->setIcon(QIcon(iconName));
button->setIconSize(QSize(returnMinimumSize(button), returnMinimumSize(button)));
button->setText("");
QString style = "QPushButton{border-radius:" + borderRadius() + "px;}";
// 橙色按钮,白字
style += "QPushButton{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(247, 180, 61), stop:1 rgb(222, 162, 55));color:rgb(255,255,255);}";
style += "QPushButton:pressed{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(222, 196, 128), stop:1 rgb(213,125,54));color:rgb(255,255,255);}";
style += "QPushButton:disabled{background-color: qlineargradient(spread:pad, x1:0.5 y1:0, x2:0.5, y2:1, stop:0 rgb(227, 227, 227), stop:1 rgb(177,177,177));color:rgb(255,255,255);}";
button->setStyleSheet(style);
}
//初始化窗体控件的样式
void PatternEditWidget::initControlStyle()
{
ui->labelIndex->setFont(fontSize_M());
ui->labelSize->setFont(fontSize_M());
ui->labelWidth->setFont(fontSize_M());
ui->labelHeight->setFont(fontSize_M());
ui->frameBack->setStyleSheet("QFrame {"
"background-color: rgb(0, 0, 0);"
"}");
ui->frameBtn->setStyleSheet("background-color:rgb(67, 67, 67);border-radius: "+borderRadius()+"px;");
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonEnlarge);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonNarrow);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonPre1);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonNext1);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonPre10);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonNext10);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonAuto);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonLeft);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonRight);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonUp);
setBlueButtonStyleClearTextAndSettingsIcon(ui->pushButtonDn);
setButtonColorForSkyBlue(ui->pushButtonPreInsert);
setButtonColorForSkyBlue(ui->pushButtonNextInsert);
setButtonColorForSkyBlue(ui->pushButtonDelete);
setButtonColorForSkyBlue(ui->pushButtonXValue);
setButtonColorForSkyBlue(ui->pushButtonXAdd);
setButtonColorForSkyBlue(ui->pushButtonXDec);
ui->pushButtonXValue->setFont(fontSize_M());
QFont size(FONTTYPE,g_fontsize + 4, FONTNORMAL);
size.setPointSize(size.pointSize()*getFactoryY());
ui->pushButtonXAdd->setFont(size);
ui->pushButtonXDec->setFont(size);
ui->labelX->setFont(fontSize_M());
ui->labelX->setStyleSheet(stateTextColour());
ui->labelXUnit->setFont(fontSize_M());
ui->labelXUnit->setStyleSheet(stateTextColour());
setButtonColorForSkyBlue(ui->pushButtonYValue);
setButtonColorForSkyBlue(ui->pushButtonYAdd);
setButtonColorForSkyBlue(ui->pushButtonYDec);
ui->pushButtonYValue->setFont(fontSize_M());
ui->pushButtonYAdd->setFont(size);
ui->pushButtonYDec->setFont(size);
ui->labelY->setFont(fontSize_M());
ui->labelY->setStyleSheet(stateTextColour());
ui->labelYUnit->setFont(fontSize_M());
ui->labelYUnit->setStyleSheet(stateTextColour());
ui->pushButtonPreInsert->setFont(fontSize_M());
ui->pushButtonNextInsert->setFont(fontSize_M());
ui->pushButtonDelete->setFont(fontSize_M());
setOrangeButtonStyleSettingsIcon(ui->pushButtonCancel);
setOrangeButtonStyleSettingsIcon(ui->pushButtonOk);
m_view->setStyleSheet("QGraphicsView {"
"border-top-left-radius: "+borderRadius()+"px;" // 左下角圆角
"border-top-right-radius: "+borderRadius()+"px;" // 右下角圆角
"}");
ui->frameDown->setStyleSheet("QFrame {"
"border-bottom-left-radius: "+borderRadius()+"px;" // 左下角圆角
"border-bottom-right-radius: "+borderRadius()+"px;" // 右下角圆角
"}");
}
//返回一个按钮-高和宽最小的一个数值
int PatternEditWidget::returnMinimumSize(QPushButton *button)
{
// 确保指针不是 nullptr以避免在按钮未正确初始化时导致的问题
if (button == NULL) {
return 0; // 或者抛出异常或处理这种情况
}
// 使用三元运算符来返回宽度和高度中的较大值
return button->width() < button->height() ? button->width() : button->height();
}
//刷新图形
void PatternEditWidget::refreshView(QString filePath,s32 scanX,s32 scanY)
{
#if(0)
QByteArray dat = g_pCurEmbData->getDispDat(SCENESIZE,SCENESIZE);
#endif
QList<drawItem> list;
list.clear();
m_filePath = filePath;
QFileInfo file(filePath);
QString ext = file.suffix().toUpper();
int maxX,minX,maxY,minY;
maxX = minX = maxY = minY = 0;
m_pointsNum = 0;
if(ext == "QUI")
{
DataFileQui qui;
qui.initFile(filePath);
qui.creatDrawData(scanX,scanY,SCENESIZE,SCENESIZE,maxX,minX,maxY,minY,m_pointsNum);
list = qui.getDrawData();
}
else if(ext == "DST")
{
DataFileDst dst;
dst.initFile(filePath);
}
else
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("Unsupported file format!");//不支持的文件格式!
dlg.setContentStr(str);
dlg.exec();
return;
}
if(list.size() <= 0)
{
ui->pushButtonEnlarge->setEnabled(false);
ui->pushButtonNarrow->setEnabled(false);
ui->pushButtonPre1->setEnabled(false);
ui->pushButtonNext1->setEnabled(false);
ui->pushButtonPre10->setEnabled(false);
ui->pushButtonNext10->setEnabled(false);
ui->pushButtonPreInsert->setEnabled(false);
ui->pushButtonNextInsert->setEnabled(false);
ui->pushButtonDelete->setEnabled(false);
ui->pushButtonOk->setEnabled(false);
return;
}
m_view->creatViewByList(list);
int num = m_view->getItemNums();
//只有格子图时加减针等按钮不可按
if(num <= 1)
{
ui->pushButtonEnlarge->setEnabled(false);
ui->pushButtonNarrow->setEnabled(false);
ui->pushButtonPre1->setEnabled(false);
ui->pushButtonNext1->setEnabled(false);
ui->pushButtonPre10->setEnabled(false);
ui->pushButtonNext10->setEnabled(false);
ui->pushButtonPreInsert->setEnabled(false);
ui->pushButtonNextInsert->setEnabled(false);
ui->pushButtonDelete->setEnabled(false);
ui->pushButtonOk->setEnabled(false);
}
else
{
ui->pushButtonEnlarge->setEnabled(true);
ui->pushButtonNarrow->setEnabled(true);
ui->pushButtonPre1->setEnabled(true);
ui->pushButtonNext1->setEnabled(true);
ui->pushButtonPre10->setEnabled(true);
ui->pushButtonNext10->setEnabled(true);
ui->pushButtonPreInsert->setEnabled(true);
ui->pushButtonNextInsert->setEnabled(true);
ui->pushButtonDelete->setEnabled(true);
ui->pushButtonOk->setEnabled(true);
}
double width = (double)(maxX-minX)/100.0;
QString str= tr("Pattern width: ") + QString("%1mm").arg(width);//花样宽度:
ui->labelWidth->setText(str);
double height = (double)(maxY-minY)/100.0;
str= tr("Pattern height: ") + QString("%1mm").arg(height);//花样高度:
ui->labelHeight->setText(str);
str= tr("Current number of needles: ") + QString("%1/%2").arg(0).arg(m_pointsNum);//当前针数:
ui->labelIndex->setText(str);
#if(0)
double width = g_pCurEmbData->getDatWidth()/100.0;
QString str= tr("Pattern width: ") + QString("%1mm").arg(width);//花样宽度:
ui->labelWidth->setText(str);
double height = g_pCurEmbData->getDatHeight()/100.0;
str= tr("Pattern height: ") + QString("%1mm").arg(height);//花样高度:
ui->labelHeight->setText(str);
#endif
QWidget::show();
}
void PatternEditWidget::on_pushButtonCancel_clicked()
{
this->hide();
}
//放大
void PatternEditWidget::on_pushButtonEnlarge_clicked()
{
m_view->enlargeView();
}
//缩小
void PatternEditWidget::on_pushButtonNarrow_clicked()
{
m_view->narrowView();
}
void PatternEditWidget::on_pushButtonPre1_clicked()
{
m_view->forwardAndBackward(-1);
}
void PatternEditWidget::on_pushButtonNext1_clicked()
{
m_view->forwardAndBackward(1);
}
void PatternEditWidget::on_pushButtonPre10_clicked()
{
m_view->forwardAndBackward(-10);
}
void PatternEditWidget::on_pushButtonNext10_clicked()
{
m_view->forwardAndBackward(10);
}
void PatternEditWidget::on_pushButtonUp_clicked()
{
m_view->moveScene(0,10);
}
void PatternEditWidget::on_pushButtonDn_clicked()
{
m_view->moveScene(0,-10);
}
void PatternEditWidget::on_pushButtonLeft_clicked()
{
m_view->moveScene(10,0);
}
void PatternEditWidget::on_pushButtonRight_clicked()
{
m_view->moveScene(-10,0);
}
void PatternEditWidget::on_pushButtonAuto_clicked()
{
m_view->autoView();
}
//向前插入一点
void PatternEditWidget::on_pushButtonPreInsert_clicked()
{
m_view->insertPoint(-1);
}
//向后插入一点
void PatternEditWidget::on_pushButtonNextInsert_clicked()
{
m_view->insertPoint(1);
}
//删除选中点
void PatternEditWidget::on_pushButtonDelete_clicked()
{
m_view->removeSelectPoint();
}
//保存文件
void PatternEditWidget::on_pushButtonOk_clicked()
{
//保存为qui文件覆盖原来的或另存为新的
PromptDialog promptDlg;
promptDlg.initDialog(PromptDialog::BTN_O_S_C);
promptDlg.setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to overwrite the source file?");//是否覆盖源文件?
promptDlg.setContentStr(str);
int val = promptDlg.exec();
if(val == 0)
{
return;
}
QList<GLineItem> lineList;
lineList.clear();
QList<GPathItem> pathList;
pathList.clear();
lineList = m_view->getLineItemList();
pathList = m_view->getPathItemList();
//求maxy因为实际数据与scanx和scany相差100倍所以乘以100
int firstX,endX;
firstX = endX= 0;
double maxY = S32_MIN;
int firstFlag = 0;
for(int i = 0; i < lineList.size(); i++)
{
for(int j = 0; j < lineList[i].points.size(); j++)
{
double x = lineList[i].points[j].x()*100.0;
double y = lineList[i].points[j].y()*100.0;
lineList[i].points[j].setX(x);
lineList[i].points[j].setY(y);
if(maxY < lineList[i].points[j].y())
{
maxY = lineList[i].points[j].y();
}
}
}
for(int i = 0; i < pathList.size(); i++)
{
for(int j = 0; j < pathList[i].points.size(); j++)
{
double x = pathList[i].points[j].x()*100.0;
double y = pathList[i].points[j].y()*100.0;
pathList[i].points[j].setX(x);
pathList[i].points[j].setY(y);
if(maxY < pathList[i].points[j].y())
{
maxY = pathList[i].points[j].y();
}
}
}
QByteArray fileData;
fileData.clear();
QFileInfo file(m_filePath);
QString ext = file.suffix().toUpper();
int flag = 0;
if(ext == "QUI")
{
DataFileQui qui;
qui.initFile(m_filePath);
QuiFileHead *head = qui.getQuiHead();
fileData.append((char*)head,sizeof(QuiFileHead));
unsigned char ch1,ch2;
//y向取反并按顺序保存
int idx = 0;//序号
int add = 0;
QPoint lastP;
while(1)
{
if(add >= lineList.size()+pathList.size()+200)
{
flag = 1;
break;//避免陷入死循环
}
if(idx >= lineList.size()+pathList.size())
{
break;
}
for(int i = 0; i < lineList.size(); i++)
{
if(lineList[i].order == idx)
{
unsigned short int type = lineList[i].type;
ch1 = static_cast<unsigned char>(type & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((type >> 8) & 0xFF); // 高字节
fileData.append(ch2);
unsigned short int pointsSize = lineList[i].points.size();
ch1 = static_cast<unsigned char>(pointsSize & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((pointsSize >> 8) & 0xFF); // 高字节
fileData.append(ch2);
for(int j = 0; j < lineList[i].points.size(); j++)
{
unsigned short int x = lineList[i].points[j].x();
if(firstFlag == 0)
{
firstX = x;
firstFlag = 1;
}
endX = x;
lastP.setX(x);
ch1 = static_cast<unsigned char>(x & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((x >> 8) & 0xFF); // 高字节
fileData.append(ch2);
unsigned short int y = maxY-lineList[i].points[j].y();
lastP.setY(y);
ch1 = static_cast<unsigned char>(y & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((y >> 8) & 0xFF); // 高字节
fileData.append(ch2);
}
idx++;
}
}
for(int i = 0; i < pathList.size(); i++)
{
if(pathList[i].order == idx)
{
unsigned short int type = pathList[i].type;
if((pathList[i].points.size() == 3 && type == QUI_TYPE_ARC) ||
(pathList[i].points.size() == 4 && type == QUI_TYPE_BES))//圆弧固定为3个点贝塞尔为4个点
{
ch1 = static_cast<unsigned char>(type & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((type >> 8) & 0xFF); // 高字节
fileData.append(ch2);
for(int j = 0; j < pathList[i].points.size(); j++)
{
unsigned short int x = pathList[i].points[j].x();
if(firstFlag == 0)
{
firstX = x;
firstFlag = 1;
}
endX = x;
lastP.setX(x);
ch1 = static_cast<unsigned char>(x & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((x >> 8) & 0xFF); // 高字节
fileData.append(ch2);
unsigned short int y = maxY-pathList[i].points[j].y();
lastP.setY(y);
ch1 = static_cast<unsigned char>(y & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((y >> 8) & 0xFF); // 高字节
fileData.append(ch2);
}
}
idx++;
}
}
add++;
}
//如果起点和终点x不一致则添加一段跨步使起点x和终点x相等
if(firstX != endX)
{
unsigned short int type = QUI_TYPE_STEP;
ch1 = static_cast<unsigned char>(type & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((type >> 8) & 0xFF); // 高字节
fileData.append(ch2);
unsigned short int pointsSize = 2;
ch1 = static_cast<unsigned char>(pointsSize & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((pointsSize >> 8) & 0xFF); // 高字节
fileData.append(ch2);
//第一个点
unsigned short int x = lastP.x();
ch1 = static_cast<unsigned char>(x & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((x >> 8) & 0xFF); // 高字节
fileData.append(ch2);
unsigned short int y = lastP.y();
ch1 = static_cast<unsigned char>(y & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((y >> 8) & 0xFF); // 高字节
fileData.append(ch2);
//第二个点
x = lastP.x()+(firstX-endX);
ch1 = static_cast<unsigned char>(x & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((x >> 8) & 0xFF); // 高字节
fileData.append(ch2);
y = lastP.y();
ch1 = static_cast<unsigned char>(y & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((y >> 8) & 0xFF); // 高字节
fileData.append(ch2);
}
//增加结束
int end = 0xffff;
ch1 = static_cast<unsigned char>(end & 0xFF); // 低字节
fileData.append(ch1);
ch2 = static_cast<unsigned char>((end >> 8) & 0xFF); // 高字节
fileData.append(ch2);
}
else if(ext == "QUIX")
{
DataFileQuix quix;
quix.initFile(m_filePath);
}
else if(ext == "DSR")
{
DataFileDsr dsr;
dsr.initFile(m_filePath);
}
if(flag != 0)
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("File save failed!");//文件保存失败!
dlg.setContentStr(str);
dlg.exec();
return;
}
if(val == 1)//覆盖
{
QFile file(m_filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
file.write(fileData);
file.close();
//将原来的png删除
QFile::remove(m_filePath+".preview.png");
emit siRemoveOldPng();
}
this->hide();
emit siEditFinish(1);
}
else if(val == 2)//另存为
{
WordsInputDialog wordInputDlg;
wordInputDlg.clean();
wordInputDlg.setTitleStr(tr("Name"));//命名
wordInputDlg.setOldWordsStr("");
if(wordInputDlg.exec() == 1)
{
//文件路径
QString name = wordInputDlg.getInputStr()+".qui";
QDir apppath(qApp->applicationDirPath());
QString filePath = apppath.path() + apppath.separator() + PATTERNPATH + apppath.separator();
QString fileName = filePath + name;
QFile file(fileName);
if(file.exists() == false)
{
QFile wfile(fileName);
if (wfile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
wfile.write(fileData);
wfile.close();
}
this->hide();
emit siEditFinish(2);
}
else
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("This file already exists!");//此文件已经存在!
dlg.setContentStr(str);
dlg.exec();
}
}
}
#if(0)
m_newDat.clear();
double unit = 100.0;
double minX;
double maxX;
double minY;
double maxY;
minX = S32_MAX;
maxX = S32_MIN;
minY = S32_MAX;
maxY = S32_MIN;
QList<QGraphicsEllipseItem *> list = m_view->getPointList();
//dsr数据
QByteArray datArray;
datArray.clear();
DsrStep absItemDat;
memset((char*)&absItemDat,0,sizeof(DsrStep));
s32 prex = 0;
s32 prey = 0;
s32 curx,cury;
curx = cury = 0;
//保存为dsr文件
for(int i = 0; i < list.size(); i++)
{
QPointF point = list[i]->pos();
absItemDat.ctrl = DSR_SEWING;
absItemDat.attr = 0;
absItemDat.dx = 0 - point.x() * unit;
absItemDat.dy = point.y() * unit;
curx = absItemDat.dx;
cury = absItemDat.dy;
int ddx = curx - prex;
int ddy = cury - prey;
double tar = atan2(ddy,ddx);
absItemDat.dr = (tar * 10000+0.5*(tar>0?1:-1));
if (minX > absItemDat.dx) { minX = absItemDat.dx;}
if (maxX < absItemDat.dx) { maxX = absItemDat.dx;}
if (minY > absItemDat.dy) { minY = absItemDat.dy;}
if (maxY < absItemDat.dy) { maxY = absItemDat.dy;}
datArray.append((char*)&absItemDat,sizeof(DsrStep));
prex = curx;//bin
prey = cury;//bin
}
int datlen = datArray.size()/sizeof(DsrStep);
for(int i = 0;i<datlen;i++)
{
DsrStep *absItemDat = reinterpret_cast<DsrStep*>(datArray.data() + i * sizeof(DsrStep));
absItemDat->dx -= maxX;
absItemDat->dy -= maxY;
}
//添加结束码
memset((char*)&absItemDat, 0, sizeof(DsrStep)); // 重置 absItemDat
absItemDat.ctrl = DATA_END;
absItemDat.attr = 0;
datArray.append((char*)&absItemDat,sizeof(DsrStep));
//生成文件头
DsrHead dsrHead;
memset((char*)&dsrHead,0,sizeof(DsrHead));
int itemNums = datArray.length() / sizeof(DsrStep);
//重新生成文件头
float ver = DSR_VERSION_5;
dsrHead.verCode = *((DWORD*)(&ver));
dsrHead.stitches = itemNums;
dsrHead.xyUnit = 1;
dsrHead.rangePx = maxX-minX;
dsrHead.rangePy = maxY-minY;
dsrHead.rangeNx = minX-minX;
dsrHead.rangeNy = minY-minY;
dsrHead.startX = 0;
dsrHead.startY = 0;
dsrHead.anchorX = 0;
dsrHead.anchorY = 0;
dsrHead.dataBegin = sizeof(DsrHead);
dsrHead.stepSize = itemNums*sizeof(DsrStep); // 数据字节数
datArray.insert(0,(char*)&dsrHead,sizeof(DsrHead));
m_newDat = datArray;
PromptDialog promptDlg;
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Do you want to save as a new file?");//是否保存为一个新文件?
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
QString filePath = g_pCurEmbData->getFilePath();
QFileInfo info(filePath);
//保存成dsr文件
QString dsrFilePath = filePath.remove(info.suffix()) + "dsr";
QFile file(dsrFilePath);
if(file.exists())//存在dsr文件
{
QFile::remove(dsrFilePath);
QFile::remove(dsrFilePath+".ds16");
QFile::remove(dsrFilePath+".preview.png");
}
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
qDebug() << "open file fail when wirte, path =" << filePath;
dsrFilePath.clear();
}
else
{
file.write(datArray);
#ifdef Q_OS_LINUX
system("sync");
#endif
file.close();
}
}
emit siEditPattern();
//this->hide();
#endif
}
void PatternEditWidget::slotShowCurrentIdx(int idx)
{
QString str= tr("Current number of needles: ") + QString("%1/%2").arg(idx).arg(m_pointsNum);//当前针数:
ui->labelIndex->setText(str);
}
void PatternEditWidget::on_pushButtonXValue_clicked()
{
int rslt=0;
m_XMoveValue= ui->pushButtonXValue->text().toDouble()*10;
NumerInputDialog ndlg(this);
ndlg.setTitleStr("X compensation value setting");
ndlg.setUnitStr("mm");
ndlg.setValueAndRange(m_XMoveValue, 0, 100, 1);
rslt = ndlg.exec();
if (rslt == 1)//点了确认按钮
{
s32 val = ndlg.getValue();
if (val != m_XMoveValue)//更改后的值不等于之前存的值
{
m_XMoveValue = val/10.0;
}
}
ui->pushButtonXValue->setText(QString::number(m_XMoveValue));
}
void PatternEditWidget::on_pushButtonYValue_clicked()
{
int rslt=0;
m_YMoveValue= ui->pushButtonYValue->text().toDouble()*10;
NumerInputDialog ndlg(this);
ndlg.setTitleStr("Y compensation value setting");
ndlg.setUnitStr("mm");
ndlg.setValueAndRange(m_YMoveValue, 0, 100, 1);
rslt = ndlg.exec();
if (rslt == 1)//点了确认按钮
{
s32 val = ndlg.getValue();
if (val != m_YMoveValue)//更改后的值不等于之前存的值
{
m_YMoveValue = val/10.0;
}
}
ui->pushButtonYValue->setText(QString::number(m_YMoveValue));
}
void PatternEditWidget::on_pushButtonXAdd_clicked()
{
if(m_view != NULL)
{
m_view->setXYMove(m_XMoveValue,0);
}
}
void PatternEditWidget::on_pushButtonXDec_clicked()
{
if(m_view != NULL)
{
m_view->setXYMove(0-m_XMoveValue,0);
}
}
void PatternEditWidget::on_pushButtonYAdd_clicked()
{
if(m_view != NULL)
{
m_view->setXYMove(0,m_YMoveValue);
}
}
void PatternEditWidget::on_pushButtonYDec_clicked()
{
if(m_view != NULL)
{
m_view->setXYMove(0,0-m_YMoveValue);
}
}