438 lines
15 KiB
C++
438 lines
15 KiB
C++
#pragma warning( push , 0 )
|
||
#include <QList>
|
||
#include "ui_chooseShiftCurves.h"
|
||
#include <QStandardItemModel>
|
||
#include <QDialog>
|
||
#include "chooseShiftCurvesDlg.h"
|
||
#include <QFileDialog>
|
||
#include "DataImport.h"
|
||
#include "ObjWelllog.h"
|
||
#include <QPushButton>
|
||
#include <QGridLayout>
|
||
#include <QLineEdit>
|
||
#include <QGroupBox>
|
||
#include <QHeaderView>
|
||
#include <QDebug>
|
||
#include "selectwelldialog.h"
|
||
|
||
///////////////////////////////////////////////////////////////
|
||
/// 表格的列,方便代码维护和修改
|
||
#ifndef T_ALL_COLUMN_COUNT_
|
||
/// 表格共有几列
|
||
#define T_ALL_COLUMN_COUNT_ 2
|
||
/// 是否选中对应的列
|
||
#define T_COLUMN_IS_CHECK_ 0
|
||
/// 井名称对应列
|
||
#define T_COLUMN_NAME_ 1
|
||
/// 表格共有几列
|
||
#define T_ALL_COLUMN_COUNT_ 3
|
||
/// 是否选中对应的列
|
||
#define T_COLUMN_IS_CHECK_ 0
|
||
/// 井名称对应列
|
||
#define T_COLUMN_NAME_ 1
|
||
/// 井东西方向坐标对应的列
|
||
#define T_COLUMN_OUTNAME_ 2
|
||
|
||
#endif
|
||
|
||
#pragma warning( pop )
|
||
|
||
extern QString g_prjname;
|
||
extern int g_SelectWellIndex;
|
||
|
||
QList<SelectTableItem> g_pShiftCurves;
|
||
|
||
CchooseShiftCurvesDlg::CchooseShiftCurvesDlg(QList<SelectTableItem> exnames, bool isHaveCurve)
|
||
:m_pDialog( NULL )
|
||
{
|
||
m_Names = exnames;
|
||
m_isHaveCurve = isHaveCurve;
|
||
m_pTableModel = NULL;
|
||
m_pDialog = new Ui_chooseShiftCurves();
|
||
m_pDialog->setupUi( this );
|
||
connect( m_pDialog->btn_Ok,SIGNAL(clicked()),this,SLOT(slotOnOkBtnClicked()) );
|
||
m_pDialog->btn_Ok->setIcon(QIcon( ::GetImagePath() + "icon/OK.png" ));
|
||
|
||
connect( m_pDialog->btn_Cancel,SIGNAL(clicked()),this,SLOT(slotOnCancelBtnClicked()));
|
||
m_pDialog->btn_Cancel->setIcon(QIcon( ::GetImagePath() + "icon/Cancel.png" ));
|
||
|
||
connect( m_pDialog->pushButton_3,SIGNAL(clicked()),this,SLOT(slotSelectAllClicked()));
|
||
connect( m_pDialog->pushButton_4,SIGNAL(clicked()),this,SLOT(slotCancelSelectClicked()));
|
||
connect( m_pDialog->pushButton_5,SIGNAL(clicked()),this,SLOT(slotSelectWellClicked()));
|
||
}
|
||
|
||
CchooseShiftCurvesDlg::~CchooseShiftCurvesDlg()
|
||
{
|
||
|
||
}
|
||
void CchooseShiftCurvesDlg::Init(QList<SelectTableItem> ShiftCurves)
|
||
{
|
||
g_pShiftCurves = ShiftCurves;
|
||
m_pTableModel = new QStandardItemModel();
|
||
m_pTableModel->setHorizontalHeaderItem(0, new QStandardItem("序号"));
|
||
m_pTableModel->setHorizontalHeaderItem(1, new QStandardItem("曲线名"));
|
||
m_pTableModel->setHorizontalHeaderItem(2, new QStandardItem("类型"));
|
||
m_pTableModel->setHorizontalHeaderItem(3, new QStandardItem("起始深度"));
|
||
m_pTableModel->setHorizontalHeaderItem(4, new QStandardItem("终止深度"));
|
||
m_pDialog->tableView->setModel(m_pTableModel);
|
||
}
|
||
|
||
void CchooseShiftCurvesDlg::slotOnOkBtnClicked()
|
||
{
|
||
g_pShiftCurves.clear();
|
||
|
||
int nRowCount = m_pTableModel->rowCount();
|
||
for(int i = 0; i < nRowCount; i++)
|
||
{
|
||
if(m_pTableModel->item(i,T_COLUMN_IS_CHECK_)->checkState()==Qt::Checked) {
|
||
SelectTableItem tmpCurve;
|
||
tmpCurve.m_iTableType=0;
|
||
tmpCurve.m_strUuid = "";
|
||
tmpCurve.m_strWellName = m_strWellName;
|
||
tmpCurve.m_strSlfName=m_strSlfName;
|
||
tmpCurve.m_strTrackName="";
|
||
tmpCurve.m_strLineName=m_pTableModel->item(i,T_COLUMN_NAME_)->text();
|
||
tmpCurve.m_strFormInfoType="";
|
||
|
||
int curvetype = m_pTableModel->item(i,T_COLUMN_NAME_)->data().toInt();
|
||
if(curvetype>CARD_OBJECT || 0 == curvetype)
|
||
{
|
||
//表格数据
|
||
tmpCurve.m_strFormInfoType = "tableObject";
|
||
|
||
}
|
||
else if(CURVE_OBJECT == curvetype)
|
||
{
|
||
//曲线
|
||
tmpCurve.m_strFormInfoType = "curveObject";
|
||
}
|
||
else if(CARD_OBJECT == curvetype)
|
||
{
|
||
//参数卡
|
||
}
|
||
else if(WAVE_OBJECT == curvetype)
|
||
{
|
||
//波列
|
||
tmpCurve.m_strFormInfoType = "waveObject";
|
||
}
|
||
else if(TDT_OBJECT == curvetype)
|
||
{
|
||
//TDT-》树图
|
||
}
|
||
g_pShiftCurves.append(tmpCurve);
|
||
}
|
||
}
|
||
this->accept();
|
||
}
|
||
|
||
void CchooseShiftCurvesDlg::slotOnCancelBtnClicked()
|
||
{
|
||
this->reject();
|
||
}
|
||
void CchooseShiftCurvesDlg::slotSelectAllClicked()
|
||
{
|
||
for(int i = 0; i < m_pTableModel->rowCount(); i++)
|
||
{
|
||
m_pTableModel->item(i,T_COLUMN_IS_CHECK_)->setCheckState( Qt::Checked );
|
||
}
|
||
}
|
||
void CchooseShiftCurvesDlg::slotSelectWellClicked()
|
||
{
|
||
QStringList listSlf;
|
||
QStringList listWell;
|
||
|
||
//直方图,获取当前工程下的slf
|
||
QVector<QString> vecSlfList;
|
||
QVector<QString> vecWellList;
|
||
bool bRet = getAllSlf(g_prjname, vecSlfList, vecWellList);
|
||
if(bRet)
|
||
{
|
||
for(int i=0; i<vecWellList.size(); i++)
|
||
{
|
||
listWell.append(vecWellList[i]);
|
||
listSlf.append(vecSlfList[i]);
|
||
}
|
||
}
|
||
|
||
if(listWell.size()<=0)
|
||
{
|
||
QMessageBox::warning(this, "提示", "没有可选择井", "确定");
|
||
return;
|
||
}
|
||
|
||
// 创建对话框
|
||
SelectWellDialog *dlg = new SelectWellDialog(nullptr);
|
||
dlg->setInfo(listWell, listSlf);
|
||
//
|
||
dlg->setAttribute(Qt::WA_DeleteOnClose);//关闭时,自动删除窗口对象
|
||
int result = dlg->exec();//模态对话框
|
||
if (result == QDialog::Accepted) {
|
||
// 处理用户点击了确定按钮的逻辑
|
||
qDebug() << "Accepted=";
|
||
SetTableView(listWell[g_SelectWellIndex], listSlf[g_SelectWellIndex]);
|
||
}
|
||
else if (result == QDialog::Rejected) {
|
||
// 处理用户点击了取消按钮的逻辑
|
||
qDebug() << "Rejected=";
|
||
}
|
||
else {
|
||
// 处理其他情况的逻辑
|
||
qDebug() << "other=";
|
||
}
|
||
|
||
// CQtDataTreeDialog dialog;
|
||
// dialog.exec();
|
||
// SetTableView(listWell[g_SelectWellIndex], listSlf[g_SelectWellIndex]);
|
||
}
|
||
|
||
void CchooseShiftCurvesDlg::SetTableView(QString strWellName, QString fileFull)
|
||
{
|
||
m_strSlfName = fileFull;
|
||
m_strWellName = strWellName;
|
||
|
||
if(!m_pTableModel) return;
|
||
//先清空
|
||
m_pTableModel->clear();
|
||
|
||
CLogIO * logio=new CLogIO();
|
||
if(!logio->Open(fileFull.toStdString().c_str(),CSlfIO::modeRead))
|
||
{
|
||
delete logio;
|
||
QString aa=fileFull+"文件打开失败,请检查!";
|
||
qDebug() << aa;
|
||
//AppendConsole(pai::log::PAI_ERROR,aa);
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
Slf_FILE_MESSAGE mssage;
|
||
logio->GetFileMessage(mssage);
|
||
|
||
if(strWellName != QString(QString::fromLocal8Bit(mssage.WellName)))
|
||
{
|
||
delete logio;
|
||
return;
|
||
}
|
||
|
||
char* curvename=new char[65];
|
||
curvename[64]='\0';
|
||
char* aliasname=new char[65];
|
||
aliasname[64]='\0';
|
||
//
|
||
int nSlfCount = logio->GetObjectCount();
|
||
|
||
//
|
||
int iCount = nSlfCount;
|
||
if(m_Names.size()>0)
|
||
{
|
||
QString slf=m_Names[0].m_strSlfName;
|
||
slf.replace("\\","/");
|
||
QString slf1=fileFull;
|
||
slf1.replace("\\","/");
|
||
if(slf1.compare(slf,Qt::CaseInsensitive)==0)
|
||
{
|
||
if(m_Names[0].m_strWellName == strWellName)
|
||
{
|
||
iCount = nSlfCount-m_Names.size();
|
||
}
|
||
}
|
||
|
||
}
|
||
m_pTableModel->setRowCount(iCount);
|
||
|
||
int iIndex = 0;
|
||
for(int i = 0; i< nSlfCount; i++)
|
||
{
|
||
float sdep=0, edep=0;
|
||
|
||
logio->GetObjectName(i,curvename,NULL,aliasname);
|
||
if(!logio->IsObject(i)) {
|
||
logio->DiscardObject(i);
|
||
continue;
|
||
};
|
||
if(logio->GetObjectStatus(i)!=OBJECT_NORMAL)
|
||
{
|
||
continue;
|
||
}
|
||
short curvetype=logio->GetObjectType(i);
|
||
//
|
||
short Attribute=0,SubAttribute=0;
|
||
logio->GetObjectAttribute(i,&Attribute,&SubAttribute);
|
||
|
||
QString strCurveName = QString::fromLocal8Bit(curvename);
|
||
if(curvetype>CARD_OBJECT || 0 == curvetype)
|
||
{
|
||
qDebug() << "strCurveName: " << strCurveName;
|
||
//表格数据
|
||
|
||
}
|
||
else if(CURVE_OBJECT == curvetype)
|
||
{
|
||
//曲线
|
||
//判断曲线有效性
|
||
Slf_CURVE acurveinfo;
|
||
logio->GetCurveInfo(i,&acurveinfo);
|
||
if(acurveinfo.DepLevel!=0&&(acurveinfo.EndDepth-acurveinfo.StartDepth>0))
|
||
{
|
||
if(acurveinfo.MaxValue==acurveinfo.MinValue||acurveinfo.MaxValue==-99999||acurveinfo.MaxValue==-9999||acurveinfo.MinValue==999999||acurveinfo.MinValue==999999||acurveinfo.MinValue==99999||acurveinfo.MinValue==99999||acurveinfo.MinValue==-9999){
|
||
int curveindex=logio->OpenSlfTable(i,-1);
|
||
if(curveindex>-1)
|
||
{
|
||
MyDataTypeEnum vVdl;
|
||
DWORD count=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5;
|
||
DWORD len=count*acurveinfo.CodeLen;
|
||
acurveinfo.MinValue=99999999;
|
||
acurveinfo.MaxValue=-99999999;
|
||
if(acurveinfo.CodeLen==8) acurveinfo.MinValue=99999999;
|
||
vVdl.vchar=new char[len];
|
||
len=logio->ReadCurve(curveindex, acurveinfo.StartDepth,count,(void *)vVdl.vchar);
|
||
if(!len) {
|
||
QString cs;
|
||
char buf[1000];
|
||
sprintf(buf,"%s %f-%f",acurveinfo.Name,acurveinfo.StartDepth,acurveinfo.EndDepth);
|
||
cs=buf;
|
||
int flag = QMessageBox::warning(NULL,"提示",QString(cs+"\n曲线信息异常!删除该曲线可能需要较长时间,建议复制正常曲线等信息到新文件,然后删除此文件。是否此时直接将该曲线删除?"),QMessageBox::Yes,QMessageBox::No);
|
||
if(flag==QMessageBox::Yes) logio->DiscardObject(i);
|
||
delete vVdl.vchar;
|
||
continue;
|
||
}
|
||
for(int kk=0;kk<count;kk=kk+10)
|
||
{
|
||
float buf[200];
|
||
buf[0]=0;
|
||
float temp=logio->GetData(acurveinfo.RepCode,&vVdl.vchar[kk*acurveinfo.CodeLen],buf);
|
||
|
||
#ifdef WIN32
|
||
if(_isnan(temp)||!_finite(temp)) continue;
|
||
#else
|
||
if(qIsNaN(temp)||!qIsFinite(temp)) continue;
|
||
#endif // WIN32
|
||
|
||
if(acurveinfo.MaxValue<temp) if(temp!=-9999.0&&temp!=-999.25&&temp!=-99999.0)acurveinfo.MaxValue=temp;
|
||
if(acurveinfo.MinValue>temp) if(temp!=-9999.0&&temp!=-999.25&&temp!=-99999.0)acurveinfo.MinValue=temp;
|
||
}
|
||
logio->SetCurveInfo(curveindex,&acurveinfo);
|
||
delete vVdl.vchar;
|
||
}
|
||
}
|
||
}
|
||
else if(acurveinfo.DepLevel==0||acurveinfo.StartDepth<-100000||acurveinfo.StartDepth>100000)
|
||
{
|
||
QString cs;
|
||
char buf[1000];
|
||
sprintf(buf,"%s %f-%f",acurveinfo.Name,acurveinfo.StartDepth,acurveinfo.EndDepth);
|
||
cs=buf;
|
||
int flag = QMessageBox::warning(NULL,"提示",QString(cs+"\n曲线信息异常!删除该曲线可能需要较长时间,建议复制正常曲线等信息到新文件,然后删除此文件。是否此时直接将该曲线删除?"),QMessageBox::Yes,QMessageBox::No);
|
||
if(flag==QMessageBox::Yes) logio->DiscardObject(i);
|
||
continue;
|
||
}
|
||
|
||
//下拉列表
|
||
int ret=0;
|
||
if(iCount != nSlfCount)//同一口井,且已经选择校正曲线
|
||
{
|
||
for(int iLoop=0; iLoop<m_Names.size(); iLoop++)
|
||
{
|
||
if(strCurveName.compare(m_Names[iLoop].m_strLineName, Qt::CaseInsensitive)==0)
|
||
{
|
||
ret=1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(ret) continue;
|
||
|
||
sdep = acurveinfo.StartDepth;
|
||
edep = acurveinfo.EndDepth;
|
||
}
|
||
else if(CARD_OBJECT == curvetype)
|
||
{
|
||
|
||
}
|
||
else if(WAVE_OBJECT == curvetype)
|
||
{
|
||
//波列
|
||
Slf_WAVE _wave;
|
||
logio->GetWaveInfo(i, &_wave);
|
||
sdep = _wave.StartDepth;
|
||
edep = _wave.EndDepth;
|
||
}
|
||
else if(TDT_OBJECT == curvetype)
|
||
{
|
||
//TDT-》树图
|
||
|
||
}
|
||
|
||
//组织表格数据---------------------------
|
||
QStandardItem* item = new QStandardItem();
|
||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable);
|
||
item->setCheckState(Qt::Unchecked);
|
||
char buf[100];
|
||
sprintf(buf,"%d",iIndex+1);
|
||
item->setText(buf);
|
||
m_pTableModel->setItem(iIndex,T_COLUMN_IS_CHECK_,item);
|
||
|
||
item = new QStandardItem();
|
||
item->setText(strCurveName);
|
||
item->setData(qVariantFromValue(curvetype));
|
||
item->setEditable(false);
|
||
m_pTableModel->setItem(iIndex,T_COLUMN_NAME_,item);
|
||
|
||
item = new QStandardItem();
|
||
if(curvetype==CURVE_OBJECT) item->setText("曲线");
|
||
else if(curvetype==WAVE_OBJECT) item->setText("波列");
|
||
else if(curvetype==TABLEE_OBJECT) item->setText("表格");
|
||
else item->setText("");
|
||
m_pTableModel->setItem(iIndex,T_COLUMN_OUTNAME_,item);
|
||
|
||
item = new QStandardItem();
|
||
if(curvetype==CURVE_OBJECT || curvetype==WAVE_OBJECT) {
|
||
char buf[200];
|
||
sprintf(buf,"%g",sdep);//pLog->GetTopDepth()
|
||
item->setText(buf);
|
||
}
|
||
else item->setText("");
|
||
m_pTableModel->setItem(iIndex,T_COLUMN_OUTNAME_+1,item);
|
||
|
||
item = new QStandardItem();
|
||
if(curvetype==CURVE_OBJECT || curvetype==WAVE_OBJECT) {
|
||
char buf[200];
|
||
sprintf(buf,"%g",edep);//pLog->GetBottomDepth()
|
||
item->setText(buf);
|
||
}
|
||
else item->setText("");
|
||
m_pTableModel->setItem(iIndex,T_COLUMN_OUTNAME_+2,item);
|
||
|
||
if(g_pShiftCurves.size()>0) {
|
||
int countTmp=g_pShiftCurves.size();
|
||
for(int j=0;j<countTmp;j++) {
|
||
QString slf=g_pShiftCurves[j].m_strSlfName;
|
||
slf.replace("\\","/");
|
||
QString slf1=fileFull;
|
||
slf1.replace("\\","/");
|
||
if(slf1.compare(slf,Qt::CaseInsensitive)==0){
|
||
if(g_pShiftCurves[j].m_strLineName.compare(strCurveName,Qt::CaseInsensitive)==0) {
|
||
m_pTableModel->item(iIndex, T_COLUMN_IS_CHECK_)->setCheckState( Qt::Checked );
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//编号
|
||
iIndex++;
|
||
}
|
||
delete []curvename;
|
||
delete []aliasname;
|
||
delete logio;
|
||
//delete []pEntry;
|
||
}
|
||
}
|
||
void CchooseShiftCurvesDlg::slotCancelSelectClicked()
|
||
{
|
||
for(int i = 0; i < m_pTableModel->rowCount(); i++)
|
||
{
|
||
m_pTableModel->item(i,T_COLUMN_IS_CHECK_)->setCheckState( Qt::Unchecked );
|
||
}
|
||
}
|