优化裂痕绘图方法,提升速度

This commit is contained in:
jiayulong 2026-01-05 10:03:59 +08:00
parent b27ab19ef8
commit 414d131a3c
2 changed files with 49 additions and 20 deletions

View File

@ -22,7 +22,15 @@ CPickFrac::CPickFrac(QMyCustomPlot *myCustomPlot, QString strSlfName, QString cs
m_bTypeDraw[i] = true; m_bTypeDraw[i] = true;
} }
//支持框选------------------
//myCustomPlot->m_bDrawCore_PHYSICS = true;
ReadData(strSlfName, csCurve); ReadData(strSlfName, csCurve);
// myCustomPlot->setSelectionRectMode(QCP::SelectionRectMode::srmSelect);
// myCustomPlot->graph(0)->setSelectable(QCP::SelectionType::stMultipleDataRanges);// stSingleData
// myCustomPlot->setInteractions(QCP::iSelectAxes | QCP::iSelectLegend | QCP::iSelectPlottables | QCP::iMultiSelect); // 轴、图例、图表可以被选择,并且是多选的方式
} }
CPickFrac::~CPickFrac(void) CPickFrac::~CPickFrac(void)
@ -147,7 +155,7 @@ void CPickFrac::drawOne(FRAC_TABLE_Crack frac, QString cs, int iType, int nLineW
int j,nPoint=360; int j,nPoint=360;
float x,y,h,oy; float x,y,h,oy;
float PI,xScale,xx; float PI,xScale,xx;
PI=2.*3.14159265/nPoint; PI=2.*3.14159265/(float)nPoint;
h = frac.AorX/2.0; h = frac.AorX/2.0;
oy = -(frac.DEP+h); oy = -(frac.DEP+h);
@ -169,12 +177,32 @@ void CPickFrac::drawOne(FRAC_TABLE_Crack frac, QString cs, int iType, int nLineW
xVec.append(x); xVec.append(x);
yVec.append(y); yVec.append(y);
} }
for(j=0; j<nPoint-1; j++) // for(j=0; j<nPoint-1; j++)
{ // {
QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot); // QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot);
qcpItemLine->start->setCoords(yVec[j], xVec[j]); // qcpItemLine->start->setCoords(yVec[j], xVec[j]);
qcpItemLine->end->setCoords(yVec[j+1], xVec[j+1]); // qcpItemLine->end->setCoords(yVec[j+1], xVec[j+1]);
qcpItemLine->setPen(pPen); // qcpItemLine->setPen(pPen);
// }
{
//
m_myCustomPlot->addGraph();
QString strLineName = "";
if(strLineName=="")
{
strLineName = QString("曲线 %1").arg(m_myCustomPlot->graphCount());
}
m_myCustomPlot->graph()->setName(strLineName);
m_myCustomPlot->graph()->setData(xVec, yVec);
m_myCustomPlot->graph()->setLineStyle((QCPGraph::LineStyle)(QCPGraph::lsLine));//lsNone 曲线 lsLine
m_myCustomPlot->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(QCPScatterStyle::ssDot)));//ssNone点ssDot
//
QPen graphPen;
graphPen.setColor(crColor);
graphPen.setWidthF(nLineWidth);
graphPen.setStyle(Qt::SolidLine);//实线
m_myCustomPlot->graph()->setPen(graphPen);
} }
break; break;
case 2: //连线 case 2: //连线
@ -182,8 +210,8 @@ void CPickFrac::drawOne(FRAC_TABLE_Crack frac, QString cs, int iType, int nLineW
for(j=0; j<nPoint-1; j++) for(j=0; j<nPoint-1; j++)
{ {
QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot); QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot);
qcpItemLine->start->setCoords(-frac.point[j].y, frac.point[j].x); qcpItemLine->start->setCoords(frac.point[j].x, -frac.point[j].y);
qcpItemLine->end->setCoords(-frac.point[j+1].y, frac.point[j+1].x); qcpItemLine->end->setCoords(frac.point[j+1].x, -frac.point[j+1].y);
qcpItemLine->setPen(pPen); qcpItemLine->setPen(pPen);
j++;//j+2 j++;//j+2
} }
@ -193,14 +221,14 @@ void CPickFrac::drawOne(FRAC_TABLE_Crack frac, QString cs, int iType, int nLineW
for(j=0; j<nPoint; j++) for(j=0; j<nPoint; j++)
{ {
QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot); QCPItemLine *qcpItemLine = new QCPItemLine(m_myCustomPlot);
qcpItemLine->start->setCoords(-frac.point[j].y, frac.point[j].x); qcpItemLine->start->setCoords(frac.point[j].x, -frac.point[j].y);
if(j>=(nPoint-1)) if(j>=(nPoint-1))
{ {
qcpItemLine->end->setCoords(-frac.point[0].y, frac.point[0].x); qcpItemLine->end->setCoords(frac.point[0].x, -frac.point[0].y);
} }
else else
{ {
qcpItemLine->end->setCoords(-frac.point[j+1].y, frac.point[j+1].x); qcpItemLine->end->setCoords(frac.point[j+1].x, -frac.point[j+1].y);
} }
qcpItemLine->setPen(pPen); qcpItemLine->setPen(pPen);
} }
@ -211,8 +239,8 @@ void CPickFrac::drawOne(FRAC_TABLE_Crack frac, QString cs, int iType, int nLineW
if(nPoint>=2) if(nPoint>=2)
{ {
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(m_myCustomPlot); QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(m_myCustomPlot);
qcpItemLine->point1->setCoords(-frac.point[0].y, frac.point[0].x);//位置 qcpItemLine->point1->setCoords(frac.point[0].x, -frac.point[0].y);//位置
qcpItemLine->point2->setCoords(-frac.point[1].y, frac.point[1].x);//位置 qcpItemLine->point2->setCoords(frac.point[1].x, -frac.point[1].y);//位置
qcpItemLine->setPen(pPen); qcpItemLine->setPen(pPen);
} }
break; break;

View File

@ -1297,16 +1297,16 @@ void FormDraw::s_addCrack(QString strUuid, QString strSlfName, QString strWellNa
curv->xAxis->ticker()->setTickCount(10);//x个主刻度 curv->xAxis->ticker()->setTickCount(10);//x个主刻度
curv->yAxis->ticker()->setTickCount(60);//y个主刻度 curv->yAxis->ticker()->setTickCount(60);//y个主刻度
//对调XY轴在最前面设置 // //对调XY轴在最前面设置
QCPAxis *yAxis = curv->yAxis; // QCPAxis *yAxis = curv->yAxis;
QCPAxis *xAxis = curv->xAxis; // QCPAxis *xAxis = curv->xAxis;
curv->xAxis = yAxis; // curv->xAxis = yAxis;
curv->yAxis = xAxis; // curv->yAxis = xAxis;
//裂缝 //裂缝
QString strWaveName = "FRAC_HOLE.TABLE"; QString strWaveName = "FRAC_HOLE.TABLE";
int _nSamples = 360;
//注意没有对调XY轴
CPickFrac *pickFrac = new CPickFrac(curv, strSlfName, strWaveName, iMyWidth); CPickFrac *pickFrac = new CPickFrac(curv, strSlfName, strWaveName, iMyWidth);
// //
@ -2231,6 +2231,7 @@ void FormDraw::initWave2(QMyCustomPlot *widget, QString strSlfName, QString strW
// widget->xAxis = yAxis; // widget->xAxis = yAxis;
// widget->yAxis = xAxis; // widget->yAxis = xAxis;
//注意不对调XY轴
float nPerHight = 50;//25 float nPerHight = 50;//25
float nSpace = 1; float nSpace = 1;
for (int i=0; i<m_Record; i++) for (int i=0; i<m_Record; i++)