1.开发自动校深功能 2.可设置标准曲线、主从曲线,并支持删除所有设置

This commit is contained in:
jiayulong 2026-01-26 18:06:51 +08:00
parent dda5d51cfa
commit 13b12a96bc
18 changed files with 1948 additions and 27 deletions

View File

@ -119,7 +119,10 @@ signals:
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax, QString strOtherScaleType, QColor frontColor, QColor backColor, QString newFillMode, bool bFillNow); float vMin, float vMax, QString strOtherScaleType, QColor frontColor, QColor backColor, QString newFillMode, bool bFillNow);
//置顶层,并取消其他表格的选中状态 //置顶层,并取消其他表格的选中状态
void sig_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType); void sig_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType);
//修改曲线选择状态 iSelect=0未知1标准曲线2主校曲线3从校曲线
void sig_ChangeLineStatus(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iSelect);
//插件测试 //插件测试
void sig_testPlugin(QString strInfo); void sig_testPlugin(QString strInfo);

22
logPlus/CurveLine.cpp Normal file
View File

@ -0,0 +1,22 @@
#include "CurveLine.h"
CurveLine::CurveLine()
{
m_LeftDepth = -1;
m_RightDepth = -1;
}
void CurveLine::SetLeftDepth(float depth)
{
m_LeftDepth = depth;
}
float CurveLine::GetLeftDepth() const
{
return m_LeftDepth;
}
void CurveLine::SetRightDepth(float depth)
{
m_RightDepth = depth;
}
float CurveLine::GetRightDepth() const
{
return m_RightDepth;
}

29
logPlus/CurveLine.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef CCURVELINE
#define CCURVELINE
class CurveLine
{
public:
CurveLine();
/**
* @brief
*/
void SetLeftDepth(float depth);
/**
* @brief
*/
float GetLeftDepth() const;
/**
* @brief
*/
void SetRightDepth(float depth);
/**
* @brief
*/
float GetRightDepth() const;
private:
float m_LeftDepth;
float m_RightDepth;
public:;
};
#endif

1235
logPlus/DepPairs.cpp Normal file

File diff suppressed because it is too large Load Diff

125
logPlus/DepPairs.h Normal file
View File

@ -0,0 +1,125 @@
//////////////////////////////////////////////////////////////////
///
/// 测录井信息综合平台
///
/// 编制:王卫
///
/// 版权:中国石化集团石油工程技术研究院
///
/// 2010年10月-
///
#ifndef __DEPPAIR_H__
#define __DEPPAIR_H__
#include <qfile.h>
extern "C"
{
int GetDepPairs(float* curve1,float stdep1,float endep1,float rlev1,
float* curve2,float stdep2,float endep2,float rlev2,float cmins,
float winLength,float stepLength, float searchLength,
float *FirstDep,
float *SecondDep,
float *corc);
int getDepPairs(float* curve1,float stdep1,float endep1,float rlev1,
float* curve2,float stdep2,float endep2,float rlev2,
float *FirstDep,
float *SecondDep);
int AutoCompZone(char *Filename,char *Filename1,char *CurveName1,char *CurveName2,
float *FirstDep,
float *SecondDep);
bool AutoCompute(char *Filename,char *Filename1,char *CurveName1,char *CurveName2);
int AutoComp(char *Filename,char *Filename1,char *CurveName1,char *CurveName2,
float cmins,
float winLength,float stepLength, float searchLength,
float *FirstDep,
float *SecondDep,
float *corc);
}
class CMemRdWt;
// Draw depth-pairs 对象
struct CCurve{
float stdep,endep,rlev;
float *val;
float GetValue(float dep)
{
if(dep>=endep) return 0;
if(dep<stdep) return 0;
int k=(dep-stdep)/rlev+0.5;
return val[k];
}
};
struct DPoint
{
DPoint()
{
x=0;
y=0;
}
DPoint(float x1,float y1)
{
x=x1;
y=y1;
}
float x;
float y;
};
class DepPairs
{
protected:
public:
DepPairs::DepPairs(float* curve1,float stdep1,float endep1,float rlev1,
float* curve2,float stdep2,float endep2,float rlev2,float cmins,
float winLength,float stepLength, float searchLength
);
~DepPairs();
struct CCurve Curve1,Curve2;
int SetRef;
double fun(DPoint &p1, DPoint &p2, DPoint &p3);
int GetGDots(int n1,DPoint *x1,int n);
void DepthSort(float *xxx,int number);
int m_nDepPairsNum;
// Auto shift depth
float last_edep;
double DepLevel,StartDepth,EndDepth;
float *FirstDep;
float *SecondDep;
float *corc;
FILE *fp_temp;
int AdmRun(float *curve1,float *curve2,float *cc);
float wl,sl,step,dr1,dr2,cmin,elast;
float xmin1,xmin2,xmax1,xmax2;
int emp,size,type,way,ipar;
void qs(float *datx,float *daty,float *datc,int left,int right);
void detscl(float sdeps,float edeps);
float ampl(int n,float *x);
float corr(int n,float *x,float *y,int size,int emp);
void cor(int iwl,int isl,float *x,float *y,float *c,int size,int emp);
float act(float *x,int n,int way);
void actvty(int iwl,int isl,float *dr,int way,float *x,float *c);
void adjust(int n,int way,float *c);
int signum(float x);
int optim(int n,float *x,float *y,float *c,float cmins,float elast);
int paral(int n,float *x,float *y,float *c,int retype=0);
int joincurve(float sdeps,float edeps,float *datx,float *daty,float *datc,
float wl,float sl,float step,float dr1,float dr2,
int type,int size,int way,int emp,int ipar,
float cmins,float xelast);
int adm(float stem,float etem ,float cmins,
float winLength,float stepLength, float searchLength,float *datx1,float *daty1,float *datc1);
int MMax(float depth,int isl,float *x,float *y,float *c,float cmins);
int MMax(float depth,float ydep,int isl,float *c,float cmins);
int GetDots(int n1,float sdeps,float edeps,float rlev,float *x,int n);
int GetCompare(int datn,float sdeps,float edeps,float* datx1,float* daty1,float* datc1,float cmins,float xelast);
int mCurrent;
public:
// 显示比例改变时,重新对象计算边框
// 删除对象
int ShiftNum;
// 是否现实边框
};
#endif //__DEPPAIR_H__

View File

@ -56,6 +56,9 @@ FormInfo::FormInfo(QWidget *parent, QString strSlfName, QString strWellName, QSt
this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QString, QColor, QColor, QString, bool))); this, SLOT(s_ChangeFillMode(QString, QString, QString, QString, QString, QString, QString, QColor, QString, QString, float, float, QString, QColor, QColor, QString, bool)));
//修改曲线选择状态 iSelect=0未知1标准曲线2主曲线3从曲线
connect(CallManage::getInstance(), SIGNAL(sig_ChangeLineStatus(QString, QString, QString, QString, QString, int)), this, SLOT(s_ChangeLineStatus(QString, QString, QString, QString, QString, int)));
} }
FormInfo::~FormInfo() FormInfo::~FormInfo()
@ -209,7 +212,26 @@ void FormInfo::paintEvent(QPaintEvent* event)
} }
return; return;
} }
painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, m_strAliasName);
//iSelect=0未知1标准曲线2主校曲线3从校曲线
QString strAliasNameTmp = m_strAliasName;
if(m_iSelect==0)
{
strAliasNameTmp = strAliasNameTmp;
}
else if(m_iSelect==1)
{
strAliasNameTmp = strAliasNameTmp + "-标";
}
else if(m_iSelect==2)
{
strAliasNameTmp = strAliasNameTmp + "-主校";
}
else if(m_iSelect==3)
{
strAliasNameTmp = strAliasNameTmp + "-从校";
}
painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, strAliasNameTmp);
} }
if(m_strType=="waveObject") if(m_strType=="waveObject")
@ -459,6 +481,20 @@ QColor FormInfo::getBackColor()
return m_backColor; return m_backColor;
} }
//修改曲线选择状态 iSelect=0未知1标准曲线2主曲线3从曲线
void FormInfo::s_ChangeLineStatus(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iSelect)
{
if(m_strUuid == strUuid &&
m_strSlfName == strSlfName &&
m_strWellName == strWellName &&
m_strTrackName == strTrackName &&
m_strLineName == strLineName)
{
m_iSelect = iSelect;
update();
}
}
//属性-左刻度 //属性-左刻度
void FormInfo::s_ChangeLeftScale(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale) void FormInfo::s_ChangeLeftScale(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale)
{ {

View File

@ -54,6 +54,9 @@ public slots:
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
float vMin, float vMax, QString strOtherScaleType, QColor frontColor, QColor backColor, QString newFillMode, bool bFillNow); float vMin, float vMax, QString strOtherScaleType, QColor frontColor, QColor backColor, QString newFillMode, bool bFillNow);
//修改曲线选择状态 iSelect=0未知1标准曲线2主曲线3从曲线
void s_ChangeLineStatus(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iSelect);
public: public:
QString m_strUuid; QString m_strUuid;
QString m_strSlfName; QString m_strSlfName;
@ -63,6 +66,7 @@ public:
QString m_strAliasName;//显示名称 QString m_strAliasName;//显示名称
QString m_strUnit;//单位 QString m_strUnit;//单位
int m_iSelect=0; //iSelect=0未知1标准曲线2主曲线3从曲线
QString m_strType;//类型curve, wave QString m_strType;//类型curve, wave
// //
double m_dWidth;//线宽 double m_dWidth;//线宽

View File

@ -111,11 +111,11 @@ FormTrack::FormTrack(QWidget *parent, QString strWellName, QString strTrackName)
this, SLOT(s_addTDT(QString, QString, QString, QString, QString, QString, QColor, double, float, float, QString))); this, SLOT(s_addTDT(QString, QString, QString, QString, QString, QString, QColor, double, float, float, QString)));
//曲线选中,置顶 //曲线选中,置顶
connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int))); connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString)));
} }
void FormTrack::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType) void FormTrack::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType)
{ {
if(m_strUuid == strUuid && if(m_strUuid == strUuid &&
m_strWellName == strWellName && m_strWellName == strWellName &&

View File

@ -108,7 +108,7 @@ public slots:
void s_addTubingstring(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType); void s_addTubingstring(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType);
void s_addTDT(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType); void s_addTDT(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType);
void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType); void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType);
}; };

View File

@ -31,7 +31,7 @@ FormWell::FormWell(QWidget *parent, QString strWellName) :
connect(CallManage::getInstance(), SIGNAL(sig_NewTrack_No_Line(QString, QString, QString)), this, SLOT(s_NewTrack_No_Line(QString, QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_NewTrack_No_Line(QString, QString, QString)), this, SLOT(s_NewTrack_No_Line(QString, QString, QString)));
//曲线选中,置顶 //曲线选中,置顶
connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int))); connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString)));
connect(CallManage::getInstance(), SIGNAL(sig_NewCol(QStringList)), this, SLOT(s_NewCol(QStringList))); connect(CallManage::getInstance(), SIGNAL(sig_NewCol(QStringList)), this, SLOT(s_NewCol(QStringList)));
} }
@ -53,7 +53,7 @@ int FormWell::insertColumn(int nw)
return ncolCount; return ncolCount;
} }
void FormWell::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType) void FormWell::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType)
{ {
if(m_strUuid == strUuid && if(m_strUuid == strUuid &&
m_strWellName == strWellName && m_strWellName == strWellName &&

View File

@ -48,7 +48,7 @@ public slots:
//新建空白道,没有曲线 //新建空白道,没有曲线
void s_NewTrack_No_Line(QString strUuid, QString strWellName, QString strTrackName); void s_NewTrack_No_Line(QString strUuid, QString strWellName, QString strTrackName);
void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType); void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType);
}; };
#endif // FORMWELL_H #endif // FORMWELL_H

View File

@ -31,6 +31,8 @@ SOURCES += \
../common/geometryutils.cpp \ ../common/geometryutils.cpp \
CStringType.cpp \ CStringType.cpp \
ConsoleOutputWidget.cpp \ ConsoleOutputWidget.cpp \
CurveLine.cpp \
DepPairs.cpp \
DrawFac.cpp \ DrawFac.cpp \
DrawNrad.cpp \ DrawNrad.cpp \
DrawTvd.cpp \ DrawTvd.cpp \
@ -87,6 +89,8 @@ HEADERS += \
../common/geometryutils.h \ ../common/geometryutils.h \
CStringType.h \ CStringType.h \
ConsoleOutputWidget.h \ ConsoleOutputWidget.h \
CurveLine.h \
DepPairs.h \
DraggablePixmap.h \ DraggablePixmap.h \
DrawFac.h \ DrawFac.h \
DrawNrad.h \ DrawNrad.h \

View File

@ -13,6 +13,7 @@
#include "PropertyWidget.h" #include "PropertyWidget.h"
#include "LogModuleParamers.h" #include "LogModuleParamers.h"
#include "LogModuleConsole.h" #include "LogModuleConsole.h"
#include "DepPairs.h"
extern int g_iOneWidth; //道宽 extern int g_iOneWidth; //道宽
extern QString g_prjname; extern QString g_prjname;
@ -114,7 +115,7 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) :
connect(CallManage::getInstance(), SIGNAL(sig_changeDepth(QString, QString, QString, int, int)), this, SLOT(s_changeDepth(QString, QString, QString, int, int))); connect(CallManage::getInstance(), SIGNAL(sig_changeDepth(QString, QString, QString, int, int)), this, SLOT(s_changeDepth(QString, QString, QString, int, int)));
connect(CallManage::getInstance(), SIGNAL(sig_changeWidth(QString, QString, QString, QString, int, int)), this, SLOT(s_changeWidth(QString, QString, QString, QString, int, int))); connect(CallManage::getInstance(), SIGNAL(sig_changeWidth(QString, QString, QString, QString, int, int)), this, SLOT(s_changeWidth(QString, QString, QString, QString, int, int)));
//曲线选中,置顶 //曲线选中,置顶
connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int))); connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString)));
//图头 //图头
m_dock1=new QDockWidget(tr(""),this); m_dock1=new QDockWidget(tr(""),this);
@ -485,13 +486,13 @@ void MainWindowCurve::initToolBar_2()
connect(m_ShiftAc, &QAction::triggered, this, &MainWindowCurve::s_Shift); connect(m_ShiftAc, &QAction::triggered, this, &MainWindowCurve::s_Shift);
connect(m_MoveShiftAc, &QAction::triggered, this, &MainWindowCurve::s_MoveShift); connect(m_MoveShiftAc, &QAction::triggered, this, &MainWindowCurve::s_MoveShift);
// connect(m_DepthShiftAc, &QAction::triggered, this, &MainWindowCurve::s_DepthShift); // connect(m_DepthShiftAc, &QAction::triggered, this, &MainWindowCurve::s_DepthShift);
// connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard); connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard);
// connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction); connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction);
// connect(m_ShiftotherAc, &QAction::triggered, this, &MainWindowCurve::s_Shiftother); // connect(m_ShiftotherAc, &QAction::triggered, this, &MainWindowCurve::s_Shiftother);
// connect(m_autocorAc, &QAction::triggered, this, &MainWindowCurve::s_autocor); connect(m_autocorAc, &QAction::triggered, this, &MainWindowCurve::s_autocor);
// connect(m_runcorAc, &QAction::triggered, this, &MainWindowCurve::s_runcor); // connect(m_runcorAc, &QAction::triggered, this, &MainWindowCurve::s_runcor);
// connect(m_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve); connect(m_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve);
// connect(m_ClearSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearSetCurve); connect(m_ClearSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearSetCurve);
} }
@ -785,6 +786,449 @@ void MainWindowCurve::s_MoveShift()
} }
} }
//设置/取消标准曲线
void MainWindowCurve::s_Standard()
{
if(m_SelectTableItem.m_iTableType==0) {
QMessageBox::warning(this, "提示", "请选择要校正的对象!");
return;
}
if(m_SelectTableItem.m_iTableType==1) {
QMessageBox::warning(this, "提示", "该功能不支持对井次校正,如果需要井次校正请到数据树上进行!");
return;
}
if(m_SelectTableItem.m_iTableType==3 && m_SelectTableItem.m_strFormInfoType=="curveObject")
{
//曲线
}
else
{
QMessageBox::warning(this, "提示", "该功能只支持曲线! 请选择要校正的曲线!");
return;
}
//主校曲线中,去掉本条曲线
if(m_RightCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_RightCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_RightCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_RightCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//主校曲线中,切换为不选择
m_RightCurve.m_iTableType=0;
m_RightCurve.m_strUuid = "";
m_RightCurve.m_strWellName = "";
m_RightCurve.m_strSlfName="";
m_RightCurve.m_strTrackName="";
m_RightCurve.m_strLineName="";
m_RightCurve.m_strFormInfoType="";
}
//从校曲线中,去掉本条曲线
for(int i=0; i<m_ShiftCurves.size(); i++)
{
SelectTableItem m_TempCurve = m_ShiftCurves[i];
//当前已经选中为从校曲线
if(m_TempCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_TempCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_TempCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_TempCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//删除从校曲线
m_ShiftCurves.removeAt(i);
break;
}
}
//iSelect=0未知1标准曲线2主校曲线3从校曲线
//当前有标准曲线
if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject")
{
//当前已经选中为标准曲线
if(m_LeftCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_LeftCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_LeftCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_LeftCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0);
//标准曲线中,切换为不选择
m_LeftCurve.m_iTableType=0;
m_LeftCurve.m_strUuid = "";
m_LeftCurve.m_strWellName = "";
m_LeftCurve.m_strSlfName="";
m_LeftCurve.m_strTrackName="";
m_LeftCurve.m_strLineName="";
m_LeftCurve.m_strFormInfoType="";
}
else
{
//修改原来的标准曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, 0);
//修改当前曲线选择状态 iSelect=1标准曲线
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 1);
//设置标准曲线
m_LeftCurve = m_SelectTableItem;
}
}
else
{
//当前没有标准曲线
//修改当前曲线选择状态 iSelect=1标准曲线
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 1);
//设置标准曲线
m_LeftCurve = m_SelectTableItem;
}
}
//设置/取消校正曲线
void MainWindowCurve::s_Correction()
{
if(m_SelectTableItem.m_iTableType==0) {
QMessageBox::warning(this, "提示", "请选择要校正的对象!");
return;
}
if(m_SelectTableItem.m_iTableType==1) {
QMessageBox::warning(this, "提示", "该功能不支持对井次校正,如果需要井次校正请到数据树上进行!");
return;
}
if(m_SelectTableItem.m_iTableType==3 && m_SelectTableItem.m_strFormInfoType=="curveObject")
{
//曲线
}
else
{
QMessageBox::warning(this, "提示", "该功能只支持曲线! 请选择要校正的曲线!");
return;
}
//标准曲线中,去掉本条曲线
//当前有标准曲线
if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject")
{
//当前已经选中为标准曲线
if(m_LeftCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_LeftCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_LeftCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_LeftCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//标准曲线中,切换为不选择
m_LeftCurve.m_iTableType=0;
m_LeftCurve.m_strUuid = "";
m_LeftCurve.m_strWellName = "";
m_LeftCurve.m_strSlfName="";
m_LeftCurve.m_strTrackName="";
m_LeftCurve.m_strLineName="";
m_LeftCurve.m_strFormInfoType="";
}
}
//从校曲线中,去掉本条曲线
for(int i=0; i<m_ShiftCurves.size(); i++)
{
SelectTableItem m_TempCurve = m_ShiftCurves[i];
//当前已经选中为从校曲线
if(m_TempCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_TempCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_TempCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_TempCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0);
//删除从校曲线
m_ShiftCurves.removeAt(i);
return;
}
}
//iSelect=0未知1标准曲线2主校曲线3从校曲线
//当前有主校曲线
if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject")
{
//当前已经选中为主校曲线
if(m_RightCurve.m_strSlfName == m_SelectTableItem.m_strSlfName &&
m_RightCurve.m_strWellName == m_SelectTableItem.m_strWellName &&
m_RightCurve.m_strTrackName == m_SelectTableItem.m_strTrackName &&
m_RightCurve.m_strLineName == m_SelectTableItem.m_strLineName)
{
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0);
//主校曲线中,切换为不选择
m_RightCurve.m_iTableType=0;
m_RightCurve.m_strUuid = "";
m_RightCurve.m_strWellName = "";
m_RightCurve.m_strSlfName="";
m_RightCurve.m_strTrackName="";
m_RightCurve.m_strLineName="";
m_RightCurve.m_strFormInfoType="";
}
else
{
//修改当前曲线选择状态 iSelect=3从校曲线
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 3);
//设置从校曲线
m_ShiftCurves.append(m_SelectTableItem);
}
}
else
{
//当前没有主校曲线
//修改当前曲线选择状态 iSelect=2主校曲线
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 2);
//设置主校曲线
m_RightCurve = m_SelectTableItem;
}
}
// quick sort
void qsort(QVector<CurveLine *>&datx,int left,int right,int idx)
{
if(right<left+1) return;
int i,j;
float x,y;
i=left;
j=right;
x=datx[(left+right)/2]->GetLeftDepth();
do
{
if(idx==0)
{
while(datx[i]->GetLeftDepth()<x && i<right) i++;
while(datx[j]->GetLeftDepth()>x && j>left ) j--;
}
else
{
while(datx[i]->GetLeftDepth()>x && i<right) i++;
while(datx[j]->GetLeftDepth()<x && j>left ) j--;
}
if(i<=j)
{
CurveLine *yy=datx[i];
datx[i]=datx[j];
datx[j]=yy;
i++;j--;
}
} while(i<=j);
if(left<j) qsort(datx,left,j,idx);
if(i<right) qsort(datx,i,right,idx);
}
//自动对比
void MainWindowCurve::s_autocor()
{
//当前有标准曲线
if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject")
{
}
else
{
QMessageBox::warning(this, "提示", "请先选择标准曲线!");
return;
}
//当前有主校曲线
if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject")
{
}
else
{
QMessageBox::warning(this, "提示", "请先选择校正曲线!");
return;
}
//
static float cmins=0.9;
static float winLength=4;
static float stepLength=2;
static float searchLength=4;
static float stdep=-9999;
static float endep=-9999;
//
QDialog dialog(NULL);
dialog.setModal(false);
Qt::WindowFlags flags = dialog.windowFlags();
flags |= Qt::WindowStaysOnTopHint;
flags &= ~Qt::WindowContextHelpButtonHint;
dialog.setWindowFlags(flags);
dialog.setWindowTitle("自动对比参数");
QFormLayout form(&dialog);
form.addRow(new QLabel("输入窗长:"));
// Value1
QString value1 = QString("窗长: ");
QLineEdit *spinbox1 = new QLineEdit(&dialog);
spinbox1->setText(toString(winLength));
form.addRow(value1, spinbox1);
value1 = QString("步长: ");
QLineEdit *spinbox2 = new QLineEdit(&dialog);
form.addRow(value1, spinbox2);
spinbox2->setText(toString(stepLength));
value1 = QString("搜索长度: ");
QLineEdit *spinbox3 = new QLineEdit(&dialog);
form.addRow(value1, spinbox3);
spinbox3->setText(toString(searchLength));
value1 = QString("最小相关系数: ");
QLineEdit *spinbox4 = new QLineEdit(&dialog);
form.addRow(value1, spinbox4);
spinbox4->setText(toString(cmins));
value1 = QString("起始深度: ");
QLineEdit *spinbox5 = new QLineEdit(&dialog);
form.addRow(value1, spinbox5);
spinbox5->setText(toString(stdep));
value1 = QString("终止深度: ");
QLineEdit *spinbox6 = new QLineEdit(&dialog);
form.addRow(value1, spinbox6);
spinbox6->setText(toString(endep));
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, &dialog);
form.addWidget(&buttonBox);
QObject::connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
dialog.show();
if (dialog.exec() == QDialog::Accepted) {
// Do something here
}
else return;
winLength=spinbox1->text().toFloat();
stepLength=spinbox2->text().toFloat();
searchLength=spinbox3->text().toFloat();
cmins=spinbox4->text().toFloat();
stdep=spinbox5->text().toFloat();
endep=spinbox6->text().toFloat();
//
float* FirstDep=new float[5000];
float* SecondDep=new float[5000];
float* corc=new float[5000];
*FirstDep=stdep;
*SecondDep=endep;
int num=AutoComp((char *)m_LeftCurve.m_strSlfName.toStdString().c_str(),
(char *)m_RightCurve.m_strSlfName.toStdString().c_str(),
(char *)m_LeftCurve.m_strLineName.toStdString().c_str(),
(char *)m_RightCurve.m_strLineName.toStdString().c_str(),
cmins,
winLength,
stepLength,
searchLength,
FirstDep,
SecondDep,
corc
);
for(int i=0;i<num;i++)
{
CurveLine * pLine = new CurveLine();
pLine->SetLeftDepth(FirstDep[i]);
pLine->SetRightDepth(SecondDep[i]);
m_mergeLineList.append(pLine);
}
delete FirstDep;
delete SecondDep;
delete corc;
qsort(m_mergeLineList,0,m_mergeLineList.size()-1,0);
if(num>0) {
CString szBuffer="";
CString szBuffer1="";
for(int i=0;i<num;i++)
{
float sdep=m_mergeLineList[i]->GetLeftDepth();
float edep=m_mergeLineList[i]->GetRightDepth();
szBuffer1.Format("%g %g\r\n",sdep,edep);
szBuffer+=szBuffer1;
}
CMemRdWt mem;
if(mem.Open(m_RightCurve.m_strSlfName.toStdString().c_str()))
{
WriteShiftMessage(mem,szBuffer,"Create depths Pairs:","depth_inp");
}
}
}
//清除全部曲线设置
void MainWindowCurve::s_ClearAllSetCurve()
{
//标准曲线中,去掉本条曲线
//当前有标准曲线
if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject")
{
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, 0);
//标准曲线中,切换为不选择
m_LeftCurve.m_iTableType=0;
m_LeftCurve.m_strUuid = "";
m_LeftCurve.m_strWellName = "";
m_LeftCurve.m_strSlfName="";
m_LeftCurve.m_strTrackName="";
m_LeftCurve.m_strLineName="";
m_LeftCurve.m_strFormInfoType="";
}
//主校曲线中,去掉本条曲线
//当前有主校曲线
if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject")
{
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_RightCurve.m_strSlfName, m_RightCurve.m_strWellName, m_RightCurve.m_strTrackName, m_RightCurve.m_strLineName, 0);
//主校曲线中,切换为不选择
m_RightCurve.m_iTableType=0;
m_RightCurve.m_strUuid = "";
m_RightCurve.m_strWellName = "";
m_RightCurve.m_strSlfName="";
m_RightCurve.m_strTrackName="";
m_RightCurve.m_strLineName="";
m_RightCurve.m_strFormInfoType="";
}
//从校曲线中,去掉本条曲线
for(int i=m_ShiftCurves.size()-1; i>-1; i--)
{
SelectTableItem m_TempCurve = m_ShiftCurves[i];
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_TempCurve.m_strSlfName, m_TempCurve.m_strWellName, m_TempCurve.m_strTrackName, m_TempCurve.m_strLineName, 0);
//删除从校曲线
m_ShiftCurves.removeAt(i);
}
}
//清除全部从曲线设置
void MainWindowCurve::s_ClearSetCurve()
{
//从校曲线中,去掉本条曲线
for(int i=m_ShiftCurves.size()-1; i>-1; i--)
{
SelectTableItem m_TempCurve = m_ShiftCurves[i];
//修改当前曲线选择状态 iSelect=0未知
emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_TempCurve.m_strSlfName, m_TempCurve.m_strWellName, m_TempCurve.m_strTrackName, m_TempCurve.m_strLineName, 0);
//删除从校曲线
m_ShiftCurves.removeAt(i);
}
}
QStringList MainWindowCurve::insertCol(int nW) QStringList MainWindowCurve::insertCol(int nW)
{ {
QStringList sret; QStringList sret;
@ -1167,10 +1611,10 @@ void MainWindowCurve::mousePressEvent(QMouseEvent *event)
PropertyService()->initWidgetProperty(m_strUuid, m_iScale); PropertyService()->initWidgetProperty(m_strUuid, m_iScale);
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1); emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1, "");
} }
void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType) void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType)
{ {
if(m_strUuid == strUuid) if(m_strUuid == strUuid)
{ {
@ -1181,7 +1625,7 @@ void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWe
m_SelectTableItem.m_strSlfName=strSlfName; m_SelectTableItem.m_strSlfName=strSlfName;
m_SelectTableItem.m_strTrackName=strTrackName; m_SelectTableItem.m_strTrackName=strTrackName;
m_SelectTableItem.m_strLineName=strLineName; m_SelectTableItem.m_strLineName=strLineName;
//m_SelectTableItem.m_strType="";//类型curve, wave m_SelectTableItem.m_strFormInfoType=strFormInfoType; //类型curveObject / waveObject / JiegutextObject
} }
else else
{ {
@ -1191,6 +1635,7 @@ void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWe
m_SelectTableItem.m_strSlfName=""; m_SelectTableItem.m_strSlfName="";
m_SelectTableItem.m_strTrackName=""; m_SelectTableItem.m_strTrackName="";
m_SelectTableItem.m_strLineName=""; m_SelectTableItem.m_strLineName="";
m_SelectTableItem.m_strFormInfoType="";
} }
@ -1216,7 +1661,7 @@ void MainWindowCurve::onItemClicked(QTableWidgetItem* item)
PropertyService()->initWellProperty(m_strUuid, strSlfName, strWellName, m_iY1, m_iY2); PropertyService()->initWellProperty(m_strUuid, strSlfName, strWellName, m_iY1, m_iY2);
//取消所有选中单元格 //取消所有选中单元格
emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1); emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1, "");
} }

View File

@ -6,6 +6,7 @@
#include "geometryutils.h" #include "geometryutils.h"
#include "formmultiheads.h" #include "formmultiheads.h"
#include "qtprojectwidgets.h" #include "qtprojectwidgets.h"
#include "CurveLine.h"
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
@ -18,7 +19,7 @@ struct SelectTableItem
QString m_strSlfName=""; QString m_strSlfName="";
QString m_strTrackName=""; QString m_strTrackName="";
QString m_strLineName=""; QString m_strLineName="";
QString m_strType="";//类型curve, wave QString m_strFormInfoType="";//类型curve, wave
}; };
namespace Ui { namespace Ui {
@ -56,7 +57,7 @@ public slots:
void onItemClicked(QTableWidgetItem* item); void onItemClicked(QTableWidgetItem* item);
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);
void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType); void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType);
public slots: public slots:
void dragEnterEvent(QDragEnterEvent* event); void dragEnterEvent(QDragEnterEvent* event);
@ -75,10 +76,17 @@ public:
//当前选中数据表格 //当前选中数据表格
SelectTableItem m_SelectTableItem; SelectTableItem m_SelectTableItem;
FormMultiHeads *m_formMultiHeads; //左侧工程区 //当前选中,标准曲线
SelectTableItem m_LeftCurve;
//当前选中,主校曲线
SelectTableItem m_RightCurve;
//从校曲线
QList<SelectTableItem> m_ShiftCurves;
//曲线拼接线列表
QVector<CurveLine*> m_mergeLineList;
FormMultiHeads *m_formMultiHeads;
QDockWidget *m_dock1; QDockWidget *m_dock1;
QtProjectWidgets *m_leftWidgets = NULL; //左侧工程区 QtProjectWidgets *m_leftWidgets = NULL; //左侧工程区
QLineEdit *spinbox1; QLineEdit *spinbox1;
@ -173,6 +181,16 @@ public slots:
void MoveShift(QString strSlfName, QString strLineName, float sdep,float edep,float delta); void MoveShift(QString strSlfName, QString strLineName, float sdep,float edep,float delta);
void s_MoveShift(); // 深度分段平移校正 void s_MoveShift(); // 深度分段平移校正
void slotRun(); void slotRun();
//设置/取消标准曲线
void s_Standard();
//设置/取消校正曲线
void s_Correction();
//自动对比
void s_autocor();
//清除全部曲线设置
void s_ClearAllSetCurve();
//清除全部从曲线设置
void s_ClearSetCurve();
// //
void s_showHeadTable(); //显示/隐藏图头 void s_showHeadTable(); //显示/隐藏图头

View File

@ -308,7 +308,7 @@ void PreQTableWidget::mouseReleaseEvent(QMouseEvent *event)
PropertyService()->initCurveProperty(formInfo, strListOtherLine, listMin, listMax, strListOtherScaleType); PropertyService()->initCurveProperty(formInfo, strListOtherLine, listMin, listMax, strListOtherScaleType);
//曲线置顶显示,激活可选 //曲线置顶显示,激活可选
emit CallManage::getInstance()->sig_Raise(m_strUuid, formInfo->m_strSlfName, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName, 3); emit CallManage::getInstance()->sig_Raise(m_strUuid, formInfo->m_strSlfName, formInfo->m_strWellName, formInfo->m_strTrackName, formInfo->m_strLineName, 3, formInfo->m_strType);
} }
} }
} }

View File

@ -64,7 +64,7 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel
connect(CallManage::getInstance(), SIGNAL(sig_ChangeScaleType(QString, QString, QString, QString, QString, QString)), this, SLOT(s_ChangeScaleType(QString, QString, QString, QString, QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_ChangeScaleType(QString, QString, QString, QString, QString, QString)), this, SLOT(s_ChangeScaleType(QString, QString, QString, QString, QString, QString)));
//曲线选中,置顶 //曲线选中,置顶
connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int))); connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString)));
//颜色 //颜色
connect(CallManage::getInstance(), SIGNAL(sig_ChangeLineColor(QString, QString, QString, QString, QString, QColor)), this, SLOT(s_ChangeLineColor(QString, QString, QString, QString, QString, QColor))); connect(CallManage::getInstance(), SIGNAL(sig_ChangeLineColor(QString, QString, QString, QString, QString, QColor)), this, SLOT(s_ChangeLineColor(QString, QString, QString, QString, QString, QColor)));
//线宽 //线宽
@ -639,7 +639,7 @@ void QMyCustomPlot::removeSelectedGraphByTitle()
// } // }
} }
void QMyCustomPlot::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType) void QMyCustomPlot::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType)
{ {
if(m_strUuid == strUuid && if(m_strUuid == strUuid &&
m_strSlfName == strSlfName && m_strSlfName == strSlfName &&

View File

@ -114,7 +114,7 @@ public slots:
void removeSelectedGraph(); void removeSelectedGraph();
void removeSelectedGraphByTitle(); void removeSelectedGraphByTitle();
void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType); void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType);
//属性 //属性
//左刻度 //左刻度

View File

@ -147,7 +147,7 @@ void QMyTableWidget::mouseReleaseEvent(QMouseEvent *event)
PropertyService()->initTrackProperty(item, iWidth, this, iCurrentCol); PropertyService()->initTrackProperty(item, iWidth, this, iCurrentCol);
// //
emit CallManage::getInstance()->sig_Raise(strUuid, strSlfName, strWellName, strTrackName, "", 2); emit CallManage::getInstance()->sig_Raise(strUuid, strSlfName, strWellName, strTrackName, "", 2, "");
} }
else { else {
qDebug()<<"QMyTableWidget mouseReleaseEvent, item=null"; qDebug()<<"QMyTableWidget mouseReleaseEvent, item=null";