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,
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);

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)));
//修改曲线选择状态 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()
@ -209,7 +212,26 @@ void FormInfo::paintEvent(QPaintEvent* event)
}
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")
@ -459,6 +481,20 @@ QColor FormInfo::getBackColor()
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)
{

View File

@ -54,6 +54,9 @@ public slots:
QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill,
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:
QString m_strUuid;
QString m_strSlfName;
@ -63,6 +66,7 @@ public:
QString m_strAliasName;//显示名称
QString m_strUnit;//单位
int m_iSelect=0; //iSelect=0未知1标准曲线2主曲线3从曲线
QString m_strType;//类型curve, wave
//
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)));
//曲线选中,置顶
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 &&
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_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_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)));
}
@ -53,7 +53,7 @@ int FormWell::insertColumn(int nw)
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 &&
m_strWellName == strWellName &&

View File

@ -48,7 +48,7 @@ public slots:
//新建空白道,没有曲线
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

View File

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

View File

@ -13,6 +13,7 @@
#include "PropertyWidget.h"
#include "LogModuleParamers.h"
#include "LogModuleConsole.h"
#include "DepPairs.h"
extern int g_iOneWidth; //道宽
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_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);
@ -485,13 +486,13 @@ void MainWindowCurve::initToolBar_2()
connect(m_ShiftAc, &QAction::triggered, this, &MainWindowCurve::s_Shift);
connect(m_MoveShiftAc, &QAction::triggered, this, &MainWindowCurve::s_MoveShift);
// connect(m_DepthShiftAc, &QAction::triggered, this, &MainWindowCurve::s_DepthShift);
// connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard);
// connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction);
connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard);
connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction);
// 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_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve);
// connect(m_ClearSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearSetCurve);
connect(m_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve);
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 sret;
@ -1167,10 +1611,10 @@ void MainWindowCurve::mousePressEvent(QMouseEvent *event)
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)
{
@ -1181,7 +1625,7 @@ void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWe
m_SelectTableItem.m_strSlfName=strSlfName;
m_SelectTableItem.m_strTrackName=strTrackName;
m_SelectTableItem.m_strLineName=strLineName;
//m_SelectTableItem.m_strType="";//类型curve, wave
m_SelectTableItem.m_strFormInfoType=strFormInfoType; //类型curveObject / waveObject / JiegutextObject
}
else
{
@ -1191,6 +1635,7 @@ void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWe
m_SelectTableItem.m_strSlfName="";
m_SelectTableItem.m_strTrackName="";
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);
//取消所有选中单元格
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 "formmultiheads.h"
#include "qtprojectwidgets.h"
#include "CurveLine.h"
#pragma execution_character_set("utf-8")
@ -18,7 +19,7 @@ struct SelectTableItem
QString m_strSlfName="";
QString m_strTrackName="";
QString m_strLineName="";
QString m_strType="";//类型curve, wave
QString m_strFormInfoType="";//类型curve, wave
};
namespace Ui {
@ -56,7 +57,7 @@ public slots:
void onItemClicked(QTableWidgetItem* item);
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:
void dragEnterEvent(QDragEnterEvent* event);
@ -75,10 +76,17 @@ public:
//当前选中数据表格
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;
QtProjectWidgets *m_leftWidgets = NULL; //左侧工程区
QLineEdit *spinbox1;
@ -173,6 +181,16 @@ public slots:
void MoveShift(QString strSlfName, QString strLineName, float sdep,float edep,float delta);
void s_MoveShift(); // 深度分段平移校正
void slotRun();
//设置/取消标准曲线
void s_Standard();
//设置/取消校正曲线
void s_Correction();
//自动对比
void s_autocor();
//清除全部曲线设置
void s_ClearAllSetCurve();
//清除全部从曲线设置
void s_ClearSetCurve();
//
void s_showHeadTable(); //显示/隐藏图头

View File

@ -308,7 +308,7 @@ void PreQTableWidget::mouseReleaseEvent(QMouseEvent *event)
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_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)));
//线宽
@ -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 &&
m_strSlfName == strSlfName &&

View File

@ -114,7 +114,7 @@ public slots:
void removeSelectedGraph();
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);
//
emit CallManage::getInstance()->sig_Raise(strUuid, strSlfName, strWellName, strTrackName, "", 2);
emit CallManage::getInstance()->sig_Raise(strUuid, strSlfName, strWellName, strTrackName, "", 2, "");
}
else {
qDebug()<<"QMyTableWidget mouseReleaseEvent, item=null";