DCA裂缝检测效果实现
This commit is contained in:
parent
250854711b
commit
d3fb6a43cd
|
|
@ -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 <QImage>
|
||||
#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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;i<m_PointNum*m_nSamples;i++)if(DCA_MAX<DCA[i])DCA_MAX=DCA[i];
|
||||
mrw.CloseWave(iIndex);
|
||||
// DCA_Mes.Format(("%s曲线信息:\r\n\r\n顶深:%f\r\n底深:%f\r\n深度间隔:%f\r\n样本点数:%d\r\n元素个数:%d\r\n最大异常值:%f"),m_csCurveFw,m_SDep,m_EDep,m_Rlev,m_PointNum,m_nSamples,DCA_MAX);
|
||||
//mFillMes->ItemNum=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(edepc<sdepc) edepc=sdepc;
|
||||
|
||||
float m_PlotSdep=sdepc;
|
||||
float m_PlotEdep=edepc;
|
||||
|
||||
m_LeftVal = 0;
|
||||
m_RightVal = 360;
|
||||
float m_Amp = 5000;
|
||||
|
||||
QColor m_crFill[4];
|
||||
m_crFill[0] = QColor(qRgb(255,0,0));
|
||||
m_crFill[1] = QColor(qRgb(0,255,0));
|
||||
m_crFill[2]= QColor(qRgb(0,0,255));
|
||||
m_crFill[3]= QColor(qRgb(0,0,0));
|
||||
|
||||
// float mOffset =m_MoveDep/m_Rlev;
|
||||
// 绘制
|
||||
// QRectF wrt;
|
||||
int dep=0;
|
||||
// float detp=m_PlotSdep;
|
||||
// 分配内存
|
||||
int nPointNum=(edepc+-sdepc)/m_Rlev+0.5;
|
||||
if(nPointNum<1) return;
|
||||
|
||||
QPointF *points,*points1;
|
||||
points = new QPointF[2*nPointNum+1];
|
||||
points1 = new QPointF[nPointNum+10];
|
||||
QPen pPen,pPen_PAD;
|
||||
|
||||
// pPen = QPen(m_crCurve,m_nCurveLineWidth);
|
||||
// //pPen.setColor();
|
||||
// pDC->setPen(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(sdepc<m_SDep)e0=(sdepc-m_SDep)/m_Rlev-0.5;
|
||||
for(int npad=0;npad<m_nSamples;npad++)
|
||||
{
|
||||
int e=0;
|
||||
int npoint=0;
|
||||
float dep=sdepc;
|
||||
// edepc+=fabs(m_MoveDep);
|
||||
while(dep<=edepc-m_Rlev)
|
||||
{
|
||||
e=(dep-m_SDep)/m_Rlev+0.5;
|
||||
y = dep * -1.0f;//mrt.top() + (dep-m_PlotSdep)*flDepthScale;
|
||||
// if(y<mrt.top()) y=mrt.top();
|
||||
dep=(e+1)*m_Rlev+m_SDep;
|
||||
if(e<0) continue;
|
||||
|
||||
/*if(m_MoveDep&&dep>m_MoveSdep&&dep<m_MoveEdep)
|
||||
{
|
||||
e+=mOffset;
|
||||
if(e<0) e=0;
|
||||
if(e*m_Rlev+m_SDep>m_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<double> vx;
|
||||
QVector<double> 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<npoint;i++)
|
||||
{
|
||||
points[npoint+i]=points1[npoint-1-i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float FormDraw::ComputeCurvePos(float flVal, float lsc, float rsc, float lps, float rps, int iType, float scale, float flMin, float flMax)
|
||||
{
|
||||
float x;
|
||||
{
|
||||
x = lps+(flVal-lsc)/scale;
|
||||
}
|
||||
if (x < flMin) {
|
||||
x = flMin;
|
||||
}
|
||||
if (x > flMax) {
|
||||
x = flMax;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
//岩心实验数据
|
||||
void FormDraw::initCorePhysics(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
//总行数
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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(); // 图像 成图
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user