From d3fb6a43cde09e29654a882992cab3b060d0cd40 Mon Sep 17 00:00:00 2001 From: "DESKTOP-450PEFP\\mainc" Date: Sat, 17 Jan 2026 22:35:34 +0800 Subject: [PATCH] =?UTF-8?q?DCA=E8=A3=82=E7=BC=9D=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrawBase/include/DrawBase.h | 9 +- DrawBase/src/DrawBase.cpp | 10 +- logPlus/formdraw.cpp | 213 ++++++++++++++++++++++++++++++++++++ logPlus/formdraw.h | 4 + logPlus/formtrack.cpp | 4 + logPlus/formwell.cpp | 4 +- logPlus/mainwindowcurve.cpp | 19 ++++ logPlus/mainwindowcurve.h | 1 + 8 files changed, 254 insertions(+), 10 deletions(-) diff --git a/DrawBase/include/DrawBase.h b/DrawBase/include/DrawBase.h index 9becf79..b50734c 100644 --- a/DrawBase/include/DrawBase.h +++ b/DrawBase/include/DrawBase.h @@ -3,7 +3,8 @@ //格线类型 //字体对齐方式 -#define LEFT Qt::AlignLeft +// #include "VecCoordinate.h" +#define LEFT Qt::AlignLeft #define RIGHT Qt::AlignRight// 1 #define CENTER Qt::AlignCenter// 2 #define VCENTER Qt::AlignVCenter//3 @@ -16,7 +17,7 @@ // #include "HeadObj.h" // #include "QtWellLogTrackNode.h" #include "drawbase_global.h" -#include "VecCoordinate.h" +// #include "VecCoordinate.h" #include #pragma warning( pop ) //#ifdef _WINDOWS @@ -67,8 +68,8 @@ public: virtual ~CDrawBase(); virtual void Destory(); public: - virtual float ConvertY(eCoordType eInCoordType, double flDep, - eCoordType eOutCoordType ); + // virtual float ConvertY(eCoordType eInCoordType, double flDep, + // eCoordType eOutCoordType ); float ConvertY(float fDep); virtual void _Build(); virtual void DrawCurve(QPainter* pdc,QRectF mrt); diff --git a/DrawBase/src/DrawBase.cpp b/DrawBase/src/DrawBase.cpp index 4ef7899..ca9528f 100644 --- a/DrawBase/src/DrawBase.cpp +++ b/DrawBase/src/DrawBase.cpp @@ -1172,11 +1172,11 @@ float CDrawBase::ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float // } // return x; } -float CDrawBase::ConvertY(eCoordType eInCoordType, double flDep, - eCoordType eOutCoordType ) -{ - return ConvertY(flDep); -} +// float CDrawBase::ConvertY(eCoordType eInCoordType, double flDep, +// eCoordType eOutCoordType ) +// { +// return ConvertY(flDep); +// } // float CDrawBase::YConvertToGEO(float y) // { // CQtWellTrackNode *pWellNode = GetWellTrackNode(); diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index 6bf3e72..47f989d 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -160,6 +160,10 @@ void FormDraw::setDrawData(QStringList listdt) { initRose(curv); } + else if("dcaObject" == strType) + { + initDCA(curv); + } curv->replot(); connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); @@ -4635,6 +4639,215 @@ void FormDraw::addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const Q pLine->setPoints(myPolygon); } +void FormDraw::initDCA(QMyCustomPlot *widget) +{ + widget->m_iX1 = 0; + widget->m_iX2 = 360; + widget->m_iY1 = g_iY1; + widget->m_iY2 = g_iY2; + // + widget->xAxis->setRange(widget->m_iX1, widget->m_iX2); + widget->yAxis->setRange(g_iY1, g_iY2); + + //对调XY轴,在最前面设置 + QCPAxis *yAxis = widget->yAxis; + QCPAxis *xAxis = widget->xAxis; + widget->xAxis = yAxis; + widget->yAxis = xAxis; + + CMemRdWt mrw; + m_PointNum = 0 ; + + float *DCA,*AZIX_DCA; + DWORD m_nSamples = 0; + float m_flRlev2 = 0.0f; + if ( mrw.Open(m_strSlfName.toStdString().c_str()) ) // 打开井文件 + { + QString m_csCurveFd=("DCA"); // 方位/倾角 曲线名 + int iIndex = mrw.OpenWave(m_csCurveFd.toStdString().c_str()); + if (iIndex >= 0) + { + Slf_WAVE WaveInfo; + mrw.GetWaveInfo(iIndex,&WaveInfo); + m_SDep = WaveInfo.StartDepth; + m_EDep = WaveInfo.EndDepth; + m_Rlev = WaveInfo.DepLevel; + m_nSamples = WaveInfo.TimeSamples; + m_flRlev2 = WaveInfo.TimeLevel; + if(m_flRlev2<=0) m_flRlev2=0.1; + m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5)); + DCA=new float[(m_PointNum+1)*m_nSamples]; + mrw.ReadWave(iIndex,m_SDep,m_PointNum,DCA); + float DCA_MAX=0; + for(DWORD i=0;iItemNum=m_nSamples; + //---------------------------- + } + QString m_csCurveFw=("AZIX_DCA"); // 方位/倾角 曲线名 + //AZIX_DCA + iIndex = mrw.OpenWave(m_csCurveFw.toStdString().c_str()); + if (iIndex >= 0) + { + Slf_WAVE WaveInfo; + mrw.GetWaveInfo(iIndex,&WaveInfo); + m_SDep = WaveInfo.StartDepth; + m_EDep = WaveInfo.EndDepth; + m_Rlev = WaveInfo.DepLevel; + m_nSamples = WaveInfo.TimeSamples; + m_flRlev2 = WaveInfo.TimeLevel; + if(m_flRlev2<=0) m_flRlev2=0.1; + m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5)); + AZIX_DCA=new float[(m_PointNum+1)*m_nSamples]; + mrw.ReadWave(iIndex,m_SDep,m_PointNum,AZIX_DCA); + mrw.CloseWave(iIndex); + // AZIX_DCA_Mes.Format(("%s曲线信息:\r\n\r\n顶深:%f\r\n底深:%f\r\n深度间隔:%f\r\n样本点数:%d\r\n元素个数:%d"),m_csCurveFd,m_SDep,m_EDep,m_Rlev,m_PointNum,m_nSamples); + + //---------------------------- + } + mrw.Close(); //关闭井文件 + } + + // 计算显示深度 + float sdepc,edepc; + sdepc = -g_iY2; + edepc = -g_iY1; + if ( sdepc > m_EDep ) sdepc=m_EDep; + if ( edepc > m_EDep ) edepc = m_EDep; + if(edepcsetPen(pPen); + // pDC->setRenderHint(QPainter::Antialiasing, true); + // float scale = (m_RightVal-m_LeftVal)/ rt.width(); + float scale1 = m_Amp/ widget->m_iX2; + //计算坐标 + float x,x1,y=9999999.0; + int e0=(sdepc-m_SDep)/m_Rlev+0.5; + if(sdepcm_MoveSdep&&depm_EDep) e=(m_EDep-m_SDep)/m_Rlev; + }*/ + + //方位 + float val=AZIX_DCA[e*m_nSamples+npad]; + if(val<0)val+=360.; + else if(val>360.)val-=360; + // if(val<=m_LeftVal)x=rt.left(); + // else if(val>=m_RightVal)x=rt.right(); + // else x = ComputeCurvePos(val,m_LeftVal,0,rt.left(),0,0,scale); + x = val; + points[npoint].setX(x); + points[npoint].setY(y+0.5); + //异常幅度 + val=DCA[e*m_nSamples+npad]; + if(val<=0)x1=0; + else if(val>=m_Amp)x1=widget->m_iX2; + else + { + x1 = ComputeCurvePos(val,0,m_Amp, 0, 0,0,scale1); + } + float ix=x1+x; + if(ix>widget->m_iX2)ix=widget->m_iX2; + points1[npoint].setX(ix); + points1[npoint].setY(y+0.5); + //if(!m_IsFill)//连线 + { + if(val>0) + { + QCPItemLine *qcpItemLine = new QCPItemLine(widget); + qcpItemLine->setPen(QPen(m_crFill[npad],1)); + qcpItemLine->start->setCoords(points[npoint].y(), points[npoint].x());//圆心位置 + qcpItemLine->end->setCoords(points1[npoint].y(),points1[npoint].x());//圆心位置 + } + } + npoint++; + } + + QCPGraph * pgra = widget->graph(npad); + if(pgra == NULL) + { + pgra = widget->addGraph(); + pgra->setPen(QPen(Qt::black,1)); + } + + QVector vx; + QVector vy; + for (int k = 0 ; k < npoint-1 ; k++) + { + vx << points[k].y(); + vy << points[k].x(); + } + pgra->setData(vx, vy); + + for(int i=0;i flMax) { + x = flMax; + } + return x; +} + //岩心实验数据 void FormDraw::initCorePhysics(QMyCustomPlot *widget, QString strSlfName, QString strLineName) { diff --git a/logPlus/formdraw.h b/logPlus/formdraw.h index 858af43..ea52732 100644 --- a/logPlus/formdraw.h +++ b/logPlus/formdraw.h @@ -189,6 +189,10 @@ public: //玫瑰图 void initRose(QMyCustomPlot *widget); void addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen); + + // DCA检测 + void initDCA(QMyCustomPlot *widget); + float ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin=-99999,float flMax=99999); signals: //void sig_AddLine(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); diff --git a/logPlus/formtrack.cpp b/logPlus/formtrack.cpp index 2d86dcb..dbb1b3b 100644 --- a/logPlus/formtrack.cpp +++ b/logPlus/formtrack.cpp @@ -235,6 +235,10 @@ void FormTrack::setDrawDt(QStringList listdt, float vmax, float vmin) { strAliasName = "玫瑰图"; } + else if("dcaObject" == strType) + { + strAliasName = "裂缝检测"; + } QString strUnit = ""; QColor lineColor=QColor(0,0,0); double width=2; diff --git a/logPlus/formwell.cpp b/logPlus/formwell.cpp index 295e866..0b93c21 100644 --- a/logPlus/formwell.cpp +++ b/logPlus/formwell.cpp @@ -356,8 +356,10 @@ void FormWell::s_NewCol(QStringList listdt) QString strTrackName = "道" + QString::number(columnCount+1); if(strType == "depthObject") strTrackName = "深度"; - if(strType == "roseObject") + else if(strType == "roseObject") strTrackName = "玫瑰图"; + else if(strType == "dcaObject") + strTrackName = "DCA检测"; FormTrack *formTrack = NULL; //总行数 diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 1fe1403..5e08b5a 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -389,6 +389,7 @@ void MainWindowCurve::initToolBar() connect(m_pinlvAc, &QAction::triggered, this, &MainWindowCurve::s_pinLvAc);//频率统计图 connect(m_ganzhuangtuAc, &QAction::triggered, this, &MainWindowCurve::s_NewGanZhuangTu);//杆状图 connect(m_roseAc, &QAction::triggered, this, &MainWindowCurve::s_roseAc);//玫瑰图 + connect(m_DCAAc, &QAction::triggered, this, &MainWindowCurve::s_dcaAc); connect(m_collapseAc, &QAction::triggered, this, &MainWindowCurve::s_Jykt);//井眼垮塌矢量图 connect(m_deviAc, &QAction::triggered, this, &MainWindowCurve::s_Denv);//井斜方位图 connect(m_electric_imagingAc, &QAction::triggered, this, &MainWindowCurve::s_DrawImage);//图像 @@ -1176,6 +1177,24 @@ void MainWindowCurve::s_roseAc() emit CallManage::getInstance()->sig_NewCol(dt); } +void MainWindowCurve::s_dcaAc() +{ + int nW = 180; + QStringList sret = this->insertCol(nW); + if(sret.length() <= 0) + return; + + QStringList dt; + dt << m_strUuid; + dt << sret.at(0); + dt << sret.at(1); + dt << ""; + dt << "dcaObject"; + dt << QString::number(nW); + //新建道 + emit CallManage::getInstance()->sig_NewCol(dt); +} + //井眼垮塌矢量图 void MainWindowCurve::s_Jykt() { diff --git a/logPlus/mainwindowcurve.h b/logPlus/mainwindowcurve.h index 7b8c024..3e2a2fb 100644 --- a/logPlus/mainwindowcurve.h +++ b/logPlus/mainwindowcurve.h @@ -127,6 +127,7 @@ public slots: void s_pinLvAc(); // 频率统计 void s_NewGanZhuangTu(); // 杆状图 void s_roseAc(); // 玫瑰图 + void s_dcaAc(); // DCA分析 void s_Jykt(); // 井眼垮塌矢量图 void s_Denv(); // 井斜方位图 void s_DrawImage(); // 图像 成图