QuiltingHMI/datafile/datafilequi.cpp
2024-02-06 15:10:48 +08:00

1015 lines
25 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "datafilequi.h"
DataFileQui::DataFileQui()
{
clear();
}
void DataFileQui::convertDataToEmbAbs(s16 flag)
{
m_absData.clear();
getQuiMinMax();
QuiFileHead head;
// 图形数据
int i, datasize, idx;
BYTE ch1, ch2;
WORD tmpls,lsdata;
double deltx1, delty1, deltx2, delty2;
double threex[4], threey[4];
s16 nmstep;
double factorx, factory, unitmuti;
memcpy(&head, m_quiFileData.data(), sizeof(QuiFileHead));
unitmuti = getMutiUnit(head.unit);
double scanx = head.scanX * unitmuti; // 宽度
double scany = head.scanY * unitmuti; // 长度
if (scanx < 1)
{
scanx = 1;
}
if (scany < 1)
{
scany = 1;
}
// 计算缩放系数
factorx = (double)((m_maxX-m_minX) / (scanx));
factory = (double)((m_maxY-m_minY) / (scany));
if(factorx == 0){factorx = 1;}
if(factory == 0){factory = 1;}
// factorx = 1;
// factory = 1;
if(flag != 1)
{
factorx = 1;
factory = 1;
}
nmstep = head.normalStep * unitmuti;
if(nmstep == 0)
{
nmstep = 200; //单位0.01mm2mm
}
i = sizeof(QuiFileHead);
datasize = m_quiFileData.size();
DsAbsItem absItem;
memset(&absItem,0,sizeof(DsAbsItem));
//将第一个点加进来
absItem.ctrl = m_firstPoint.ctrl;
absItem.ax = m_firstPoint.x / factorx;
absItem.ay = m_firstPoint.y / factory;
m_absData.append((char*)&absItem,sizeof(DsAbsItem));
while(i < datasize)
{
// 图元类型
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
tmpls = (unsigned short) (ch2 * 256) + ch1;
if(tmpls == 0xffff) // 结束
{
break;
}
switch(tmpls)
{
case QUI_TYPE_LINE: // 直线
case QUI_TYPE_STEP: // 跨步
case QUI_TYPE_HSTEP: // 翻头跨步
{
//增加剪线
if(tmpls == QUI_TYPE_STEP || tmpls == QUI_TYPE_HSTEP)
{
if((u32)m_absData.size() >= sizeof(DsAbsItem))
{
memcpy((char*)&absItem,m_absData.data()+m_absData.size()-sizeof(DsAbsItem),sizeof(DsAbsItem));
absItem.ctrl = DATA_CUTTRD;
m_absData.append((char*)&absItem,sizeof(DsAbsItem));
}
}
// 点个数
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
lsdata = (unsigned short)ch2 * 256 + ch1;
if (lsdata > 1)
{
// 第一个点
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
deltx2 = (ch2 * 256.0 + ch1)/factorx;
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
delty2 = (ch2 * 256.0 + ch1)/factory;
for(idx = 1; idx < lsdata; idx++) // 其余的点
{
deltx1 = deltx2;
delty1 = delty2;
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
deltx2 = (ch2 * 256.0 + ch1)/factorx;
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
delty2 = (ch2 * 256.0 + ch1)/factory;
// 处理直线
calcLine(deltx1, delty1, deltx2, delty2, nmstep, m_absData, tmpls);
}
if (idx != lsdata)
{
break;
}
}
break;
}
case QUI_TYPE_ARC: // 三点圆弧
{
for (idx = 0; idx < 3; idx++)
{
// 点x
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threex[idx] = (ch2 * 256.0 + ch1)/factorx;
// 点y
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threey[idx] = (ch2 * 256.0 + ch1)/factory;
}
calcCurve(threex, threey, nmstep, m_absData);
if (idx != 3)
{
break;
}
break;
}
case QUI_TYPE_BES: // 贝塞尔曲线
{
for (idx = 0; idx < 4; idx++)
{
// 点x
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threex[idx] = (ch2 * 256.0 + ch1)/factorx;
// 点y
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threey[idx] = (ch2 * 256.0 + ch1)/factory;
}
// 处理贝塞尔曲线
QList<QPointF> splineListXY;//拟合后的点
splineListXY.clear();
getBezierPointList(threex, threey, nmstep,splineListXY);
QList<QPointF> splitListXY;//均分后的点
splitListXY.clear();
if(splineListXY.size() > 0)
{
getCurvePointFillLine(splineListXY,nmstep,splitListXY,0,OBJECT_STITCHLEN_NEW_SAMALL);
}
//添加贝塞尔曲线数据点
for(int i = 0; i < splitListXY.size(); i++)
{
memset(&absItem,0,sizeof(DsAbsItem));
deltx1 = splitListXY[i].x();
delty1 = splitListXY[i].y();
absItem.ctrl = DATA_SEWING;
absItem.ax = deltx1;
absItem.ay = delty1;
m_absData.append((char*)&absItem,sizeof(DsAbsItem));
}
//calcBezier(threex, threey, nmstep, m_absData);
if (idx != 4)
{
break;
}
break;
}
default:
break;
}
}
//生成绝对坐标数据的文件头
creatAbsHeadAndAr();
}
void DataFileQui::creatAbsHeadAndAr()
{
DataDs16FileHead dhead;
memset(&dhead, 0, sizeof(DataDs16FileHead));
int stepSize = m_absData.size()/sizeof(DsAbsItem);
if(stepSize <= 0)
{
return;
}
DsAbsItem * absDataPtr = (DsAbsItem *)(m_absData.data());
double minX, maxX, minY, maxY;
minX = S32_MAX;
maxX = S32_MIN;
minY = S32_MAX;
maxY = S32_MIN;
double prex,prey,curx,cury,dx,dy,ar;
prex = prey = curx = cury = dx = dy = ar = 0;
//取反并求最大最小值
for (int i = 0; i < stepSize; i++)
{
absDataPtr->ax *= QUI_DATADIRX;
absDataPtr->ay *= QUI_DATADIRY;
curx = absDataPtr->ax;
cury = absDataPtr->ay;
if(curx > maxX)
{
maxX = curx;
}
if(curx < minX)
{
minX = curx;
}
if(cury > maxY)
{
maxY = cury;
}
if(cury < minY)
{
minY = cury;
}
absDataPtr++;
}
absDataPtr = (DsAbsItem *)(m_absData.data());
double begX = absDataPtr->ax;//起始点
double begY = absDataPtr->ay;
int begR = 0;
//求dr并将每点坐标都减去第一点坐标
for (int i = 0; i < stepSize; i++)
{
curx = absDataPtr->ax;
cury = absDataPtr->ay;
dx = curx - prex;
dy = cury - prey;
double tar = atan2(dy,dx);
ar = (tar*10000+0.5*(tar>0?1:-1));
absDataPtr->ar = ar;
prex = curx;
prey = cury;
//将每个坐标都减去起始点坐标
absDataPtr->ax -= begX;
absDataPtr->ay -= begY;
absDataPtr->ar -= begR;
absDataPtr++;
}
//增加结束码
if((u32)m_absData.size() >= sizeof(DsAbsItem))
{
DsAbsItem absItem;
memset(&absItem,0,sizeof(DsAbsItem));
memcpy((char*)&absItem,m_absData.data()+m_absData.size()-sizeof(DsAbsItem),sizeof(DsAbsItem));
absItem.ctrl = DATA_NULL;
m_absData.append((char*)&absItem,sizeof(DsAbsItem));
stepSize++;
}
m_maxX = maxX-begX;
m_minX = minX-begX;
m_maxY = maxY-begY;
m_minY = minY-begY;
//生成文件头
dhead.maxX = maxX;
dhead.maxY = maxY;
dhead.minX = minX;
dhead.minY = minY;
dhead.beginX = begX-minX;//起始点减去最小值
dhead.beginY = begY-minY;//起始点减去最小值
dhead.beginR = begR;
dhead.anchorX = 0;
dhead.anchorY = 0;
dhead.itemNums = stepSize;
dhead.dataSize = stepSize*sizeof(DsAbsItem); // 数据字节数
dhead.bytesPerItem = sizeof(DsAbsItem); // 每项占的字节数
dhead.dataChecksum = calcCheckSum32((u8 *)(m_absData.data()) , dhead.dataSize);; // 数据累加校验和
dhead.checkCrc = calcCrc16((u8 *)(&dhead), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验6个字段分别为文件名称字节数项个数每项字节数每块字节数数据累加和的CRC校验值
dhead.fileid = dhead.checkCrc;
m_absData.insert(0,(char*)&dhead,sizeof(DataDs16FileHead));
}
void DataFileQui::getQuiMinMax()
{
QuiFileHead head;
memcpy(&head, m_quiFileData.data(), sizeof(QuiFileHead));
int i, idx, datasize;
unsigned char ch1, ch2;
unsigned short tmpls, lsdata;
double deltx, delty;
double threex[4], threey[4];
int first = 0;
double minx, maxx, miny, maxy;
minx = S32_MAX;
maxx = S32_MIN;
miny = S32_MAX;
maxy = S32_MIN;
i = sizeof(QuiFileHead);
datasize = m_quiFileData.size();
while(i < datasize)
{
// 图元类型
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
tmpls = (unsigned short) (ch2 * 256) + ch1;
if(tmpls == 0xffff) // 结束
{
break;
}
switch(tmpls)
{
case QUI_TYPE_LINE: // 直线(折线)
case QUI_TYPE_STEP: // 跨步
case QUI_TYPE_HSTEP: // 翻头跨步
{
// 点个数
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
lsdata = (unsigned short)ch2 * 256 + ch1;
if (lsdata > 1)
{
for(idx = 0; idx < lsdata; idx++) // 点
{
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
deltx = (ch2 * 256.0 + ch1);
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
delty = (ch2 * 256.0 + ch1);
if (first == 0)
{
m_firstPoint.x = deltx;
m_firstPoint.y = delty;
if(tmpls == QUI_TYPE_LINE)
{
m_firstPoint.ctrl = DATA_SEWING;
}
else
{
m_firstPoint.ctrl = DATA_OFFSET;
}
first = 1;
}
if(deltx > maxx)
{
maxx = deltx;
}
if(deltx < minx)
{
minx = deltx;
}
if(delty > maxy)
{
maxy = delty;
}
if(delty < miny)
{
miny = delty;
}
}
if (idx != lsdata)
{
break;
}
}
}
break;
case QUI_TYPE_ARC: // 三点圆弧
{
for (idx = 0; idx < 3; idx++)
{
// 点x
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threex[idx] = (ch2 * 256.0 + ch1);
// 点y
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threey[idx] = (ch2 * 256.0 + ch1);
if (first == 0)
{
m_firstPoint.x = threex[0];
m_firstPoint.y = threey[0];
m_firstPoint.ctrl = DATA_SEWING;
first = 1;
}
}
if (idx != 3)
{
break;
}
if(isThreePointOnALine(threex, threey) >= 1) // 3点共线
{
// printf("three point on a line\n");
if(threex[0] > maxx) maxx = threex[0];
if(threex[1] > maxx) maxx = threex[1];
if(threex[2] > maxx) maxx = threex[2];
if(threex[0] < minx) minx = threex[0];
if(threex[1] < minx) minx = threex[1];
if(threex[2] < minx) minx = threex[2];
if(threey[0] > maxy) maxy = threey[0];
if(threey[1] > maxy) maxy = threey[1];
if(threey[2] > maxy) maxy = threey[2];
if(threey[0] < miny) miny = threey[0];
if(threey[1] < miny) miny = threey[1];
if(threey[2] < miny) miny = threey[2];
}
else
{
// printf("before GetArcMinMax\n");
// printf("minx=%.2f,maxx=%.2f,miny=%.2f,maxy=%.2f\n", minx, maxx, miny, maxy);
getArcMinMax(threex, threey, &minx, &maxx, &miny, &maxy);
// printf("after GetArcMinMax\n");
// printf("minx=%.2f,maxx=%.2f,miny=%.2f,maxy=%.2f\n", minx, maxx, miny, maxy);
}
}
break;
case QUI_TYPE_BES: // 贝塞尔曲线
{
for (idx = 0; idx < 4; idx++)
{
// 点x
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threex[idx] = (ch2 * 256.0 + ch1);
// 点y
if (i >= datasize){break;}
ch1 = m_quiFileData.at(i++);
if (i >= datasize){break;}
ch2 = m_quiFileData.at(i++);
threey[idx] = (ch2 * 256.0 + ch1);
if (first == 0)
{
m_firstPoint.x = threex[0];
m_firstPoint.y = threey[0];
m_firstPoint.ctrl = DATA_SEWING;
first = 1;
}
}
if (idx != 4)
{
break;
}
getBezierMinMax(threex, threey, &minx, &maxx, &miny, &maxy);
}
break;
}
}
if (first == 0)
{
minx = 0;
maxx = 0;
miny = 0;
maxy = 0;
m_firstPoint.x = 0;
m_firstPoint.y = 0;
m_firstPoint.ctrl = 0;
}
m_minX = minx;
m_maxX = maxx;
m_minY = miny;
m_maxY = maxy;
return;
}
int DataFileQui::checkFileHead()
{
if (m_quiFileData.size() >= (int)sizeof(QuiFileHead))
{
QuiFileHead * pHead;
pHead = (QuiFileHead *)(m_quiFileData.data());
if (pHead->normalStep < 1)
{
pHead->normalStep = 40;
}
if (pHead->miniStep < 1)
{
pHead->miniStep = 40;
}
if (pHead->scanX < 1)
{
pHead->scanX = m_maxX - m_minX;
}
if (pHead->scanY < 1)
{
pHead->scanY = m_maxY - m_minY;
}
QFile wrfile(m_fileFullPathName);
if(!wrfile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
return -1;
}
else
{
wrfile.write(m_quiFileData);
wrfile.close();
}
}
return 0;
}
double DataFileQui::getMutiUnit(int unit)
{
double unitmuti;
if (unit == 0x00) // 0x00: 0.1mm;
{
unitmuti = 10;
}
else if (unit == 0x01) // 0x01: 1/1000inch;
{
unitmuti = 2.54;
}
else if (unit == 0x02) // 0x02: 0.04mm
{
unitmuti = 10;
}
else
{
unitmuti = 1;
}
return unitmuti;
}
void DataFileQui::initFile(const QString &fullPathName)
{
clear();
QFileInfo file(fullPathName);
if (file.exists() && file.isFile())
{
m_fileFullPathName = fullPathName;
}
else
{
qDebug() << "Init file failed path =" << m_fileFullPathName;
}
loadFile();
}
void DataFileQui::clear()
{
m_firstPoint.x = 0;
m_firstPoint.y = 0;
m_firstPoint.ctrl = 0;
m_minX = INT32_MAX;
m_maxX = INT32_MIN;
m_minY = INT32_MAX;
m_maxY = INT32_MIN;
m_fileFullPathName.clear(); // 文件路径
m_quiFileData.clear(); // 文件数据内容
m_absData.clear(); // 转换后的数据
}
void DataFileQui::loadFile()
{
QFile rdfile(m_fileFullPathName);
if(!rdfile.open(QIODevice::ReadOnly))
{
qDebug() << "open file fail when read, path =" << m_fileFullPathName;
return;
}
m_quiFileData = rdfile.readAll();
rdfile.close();
}
int DataFileQui::createPreviewImage(QImage *pImg, int saveflag, int penwidth, int reDraw)
{
#if(1)
s16 existFlag = 1;
if(reDraw == 0)//图片存在则不重画
{
existFlag = 0;
// 图片是否存在,存在则返回
QString previewPath = getFileFullPathName() + ".preview.png";
QFile imageFile(previewPath);
if (imageFile.exists())
{
return 0;
}
}
#endif
int newimgflag = 0;
QImage * pImage;
int width, height;
if (pImg == NULL)
{
width = QUI_PREVIEW_WIDTH;
height = QUI_PREVIEW_HEIGHT;
pImage = new QImage(width, height, IMAGE_TYPE);
newimgflag = 1;
}
else
{
pImage = pImg;
}
width = pImage->width();
height = pImage->height();
if (width <= QUI_PREVIEW_SIDE*2 || height <= QUI_PREVIEW_SIDE*2)
{
if (pImage != NULL && newimgflag == 1)
{
delete pImage;
}
qDebug("preview img too small");
return -1;
}
memset(pImage->bits(), 0x00, pImage->byteCount());
QPainter painter(pImage);
QColor backcolor(255, 255, 255, 0); // 透明背景
// 背景
QPen pen;
pen.setWidth(penwidth);
pen.setColor(backcolor);
painter.setPen(pen);
painter.setBrush(backcolor);
painter.drawRect(0, 0, width, height);
// 图形
//qDebug()<<"convertDataToAbs defore";
convertDataToEmbAbs(existFlag); // 转换为绝对坐标数据
//qDebug()<<"convertDataToAbs end";
// absdat数据
int size = m_absData.size();
if (size <= (int)sizeof(DataDs16FileHead))
{
qDebug("2 data less then head size");
return -1;
}
DataDs16FileHead * pAbsHead = (DataDs16FileHead *)(m_absData.data());
int datasize = size - sizeof(DataDs16FileHead);
if (datasize <= 0)
{
qDebug("absdat dataBegin err");
return -1;
}
int stepsize = datasize/sizeof(DsAbsItem);
if (stepsize <= 0)
{
qDebug("absdat data size err");
return -1;
}
DsAbsItem * pData = (DsAbsItem *)(m_absData.data() + sizeof(DataDs16FileHead));
DsAbsItem * absDataPtr = pData;
//--------
// 图形显示区域
int dpminx = QUI_PREVIEW_SIDE;
int dpmaxx = width - QUI_PREVIEW_SIDE;
int dpminy = QUI_PREVIEW_SIDE;
int dpmaxy = height - QUI_PREVIEW_SIDE;
// 计算缩放系数
double factor, temp;
if ((dpmaxx - dpminx) <= 0 || (dpmaxy - dpminy) <= 0)
{
return -1;
}
factor = (double)(fabs(m_maxX - m_minX)) / (dpmaxx - dpminx); // 按x计算的缩放系数
temp = (double)(fabs(m_maxY - m_minY)) / (dpmaxy - dpminy); // 按x计算的缩放系数
if (temp >= factor) // 使用较大的缩放系数
{
factor = temp;
}
// 计算显示参数,按照图形的实际位置显示(数据坐标零点对应图形中心)
double dpx = (double)((dpminx+dpmaxx)/2 - ((m_maxX+m_minX)/factor)/2);
double dpy = (double)((dpminy+dpmaxy)/2 - ((m_maxY+m_minY)/factor)/2);
// 显示花样图形
u8 ctrlByte;
double dx;
double dy;
double datposx, datposy;
double curx, cury, prex, prey;
datposx = pAbsHead->beginX;
datposy = pAbsHead->beginY;
curx = (datposx) / factor + dpx;
cury = (datposy) / factor + dpy;
if (QUI_SHOWDIRX == -1)
{
curx = (width)-curx;
}
if (QUI_SHOWDIRY == -1)
{
cury = (height)-cury;
}
absDataPtr = pData;
QColor color = QColor(Qt::green);
pen.setColor(color);
painter.setPen(pen);
for (int i = 0; i < stepsize; i++)
{
// 读入一个针步数据
ctrlByte = absDataPtr->ctrl;
prex = curx;
prey = cury;
dx = absDataPtr->ax;
dy = absDataPtr->ay;
datposx = dx;
datposy = dy;
curx = (datposx) / factor + dpx;
cury = (datposy) / factor + dpy;
if (QUI_SHOWDIRX == -1)
{
curx = (width)-curx;
}
if (QUI_SHOWDIRY == -1)
{
cury = (height)-cury;
}
if(i == 0)
{
absDataPtr++;
continue;
}
if ( ctrlByte == DATA_SEWING)
{
painter.drawLine(prex, prey, curx, cury);
}
else
{
//qDebug("other type=0x%x", ctrlByte);
}
absDataPtr++;
}
// 保存成文件
QString preview = getFileFullPathName();
if (saveflag != 0 && preview.isEmpty() == false)
{
#if (1)
preview += ".preview.png";
pImage->save(preview, "png");
#endif
}
if (pImage != NULL && newimgflag == 1)
{
delete pImage;
}
return 0;
}
QuiFileHead *DataFileQui::getQuiHead()
{
if(m_quiFileData.size() <= 0)
{
loadFile();
}
QuiFileHead *head = NULL;
int size = m_quiFileData.size();
if (size <= (int)(sizeof(QuiFileHead)))
{
return head;
}
head = (QuiFileHead *)(m_quiFileData.data());
return head;
}
void DataFileQui::writePatternParaToFile(QuiFileHead *head)
{
if(m_quiFileData.size() <= 0)
{
return;
}
memcpy(m_quiFileData.data(),(char*)head,sizeof(QuiFileHead));
QFile wfile(m_fileFullPathName);
if(!wfile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
qDebug() << "open file fail when read, path =" << m_fileFullPathName;
return;
}
wfile.write(m_quiFileData);
wfile.close();
}
void DataFileQui::moveDataBeginPonit(s32 left, s32 front)
{
if((u32)m_absData.size() > sizeof(DataDs16FileHead))
{
DataDs16FileHead *dhead = (DataDs16FileHead *)( m_absData.data());
dhead->beginX += left;
dhead->beginY += front;
dhead->maxX += left;
dhead->minX += left;
dhead->maxY += front;
dhead->minY += front;
}
}
int DataFileQui::getStitchNums()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return pHead->itemNums;
}
int DataFileQui::getDatWidth()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return (pHead->maxX - pHead->minX);
}
int DataFileQui::getDatHeight()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return (pHead->maxY - pHead->minY);
}
int DataFileQui::getMaxX()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return pHead->maxX;
}
int DataFileQui::getMinX()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return pHead->minX;
}
int DataFileQui::getMaxY()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return pHead->maxY;
}
int DataFileQui::getMinY()
{
if(m_absData.size() <= 0)
{
return 0;
}
DataDs16FileHead * pHead = (DataDs16FileHead *)((m_absData.data()));
return pHead->minY;
}