diff --git a/CallManage/CallManage.h b/CallManage/CallManage.h index bf143bd..87e496a 100644 --- a/CallManage/CallManage.h +++ b/CallManage/CallManage.h @@ -48,6 +48,7 @@ signals: void sig_ShowParameterCard(QString strSlfName, QString strName);//参数表查看 void sig_ShowCurve(QMap> mapShowObject);//曲线数据查看 void sig_DepthShift(QString strSlfName, QString strName, double DepthOffset);//深度移动 + void sig_ShowTDT(QString strSlfName, QString strName);//TDT数据查看 void sig_ShowTable(QString strSlfName, QString strName);//表格数据查看 void sig_ShowWave(QString strSlfName, QString strName);//波列数据查看 void sig_WelllogInformation(QString strSlfName);//编辑测井信息 diff --git a/OSGDataModel/include/ObjWelllogTDT.h b/OSGDataModel/include/ObjWelllogTDT.h new file mode 100644 index 0000000..fff42ce --- /dev/null +++ b/OSGDataModel/include/ObjWelllogTDT.h @@ -0,0 +1,34 @@ +/** +* @file ObjWellLogTDT.h +* @brief 测井多维曲线数据模型 +* @date 2015-2-10 +* @author: WANGWEI +*/ +#ifndef PAI_FRAME_OSGWELLLOGTDT_H +#define PAI_FRAME_OSGWELLLOGTDT_H +#pragma warning( push ,0) +#include +#include "BaseObject.h" +#include "ObjWelllog.h" +#pragma warning( pop ) + +BEGIN_OSGDATAMODEL_NAMESPACE; + +class CObjWell; + +class OSGDATAMODEL_EXPORT CObjWellLogTDT: public CObjWellLog +{ + Q_OBJECT +public: + CObjWellLogTDT(); + virtual ~CObjWellLogTDT(); + virtual QUuid GetTypeID()const; +public: + Slf_TDT TDT; +}; + +using namespace pai::datamodel; +using namespace pai::ios::welllog; + +END_OSGDATAMODEL_NAMESPACE +#endif diff --git a/OSGDataModel/src/OSGDataModel.pro b/OSGDataModel/src/OSGDataModel.pro index 0741936..f4d7690 100644 --- a/OSGDataModel/src/OSGDataModel.pro +++ b/OSGDataModel/src/OSGDataModel.pro @@ -44,6 +44,7 @@ HEADERS += \ ../include/ObjWelllog.h \ ../include/ObjWelllogINP.h \ ../include/ObjWelllogTABLE.h \ + ../include/ObjWelllogTDT.h \ ../include/ObjWelllogWavefile.h \ ../include/TrackPoints.H \ ../include/WellLogWorkflowDataModel.h diff --git a/OSGDataModel/src/ObjWellLogTDT.cpp b/OSGDataModel/src/ObjWellLogTDT.cpp new file mode 100644 index 0000000..7847ce7 --- /dev/null +++ b/OSGDataModel/src/ObjWellLogTDT.cpp @@ -0,0 +1,30 @@ +#pragma warning( push ,0) +#include +#include + +#include "ObjWelllogTDT.h" +#include "ObjWell.h" +#pragma warning( pop ) + +BEGIN_OSGDATAMODEL_NAMESPACE; + +CObjWellLogTDT::CObjWellLogTDT() +{ + // SetIconName("icon/tdt.png"); +} + +CObjWellLogTDT::~CObjWellLogTDT() +{ + +} + +QUuid CObjWellLogTDT::GetTypeID()const +{ + return GetClassID_WellLogTDT(); +} + +// BEGIN_REGISTER_OBJECT(CObjWellLogTDT) +// QUuid(GetClassID_WellLogTDT()) +// END_REGISTER_OBJECT( CObjWellLogTDT ); + +END_OSGDATAMODEL_NAMESPACE diff --git a/Slfio/src/LogIO.cpp b/Slfio/src/LogIO.cpp index b745df4..ef5d485 100644 --- a/Slfio/src/LogIO.cpp +++ b/Slfio/src/LogIO.cpp @@ -292,8 +292,9 @@ CLogIO ::CLogIO() QString GetOilFieldName() { QString strProjectDir = QCoreApplication::applicationDirPath()+ QDir::separator() + ".."; - strProjectDir += QDir::separator(); - QString path=strProjectDir; + QDir dir(strProjectDir); + strProjectDir=dir.absolutePath(); + QString path=strProjectDir + QDir::separator(); path+="oilfield.ini"; FILE *fp=fopen(path.toStdString().c_str(),"rt"); char oilfield[200]; @@ -380,7 +381,7 @@ bool CLogIO ::Open(const char* szLogFileName,unsigned int nOpenFlags,int BlockLe if(ret<1) break; if(tem[0]) { QString strPathTmp1=strConfPath+GetOilFieldName()+tem+".ini"; - FILE *fp1=fopen(strPathTmp1.toStdString().c_str(),"r+t"); + FILE *fp1=fopen(strPathTmp1.toLocal8Bit().data()/*UTF8ToGBK()*//*strPathTmp1.toStdString().c_str()*/,"r+t"); if(fp1) { char buf1[100]; Slf_Menu[m_MenuNumber].clear(); diff --git a/WellLogUI/src/WellLogTableDialogNew.cpp b/WellLogUI/src/WellLogTableDialogNew.cpp index 8fc5c57..1da111e 100644 --- a/WellLogUI/src/WellLogTableDialogNew.cpp +++ b/WellLogUI/src/WellLogTableDialogNew.cpp @@ -15,6 +15,7 @@ #include "LogIO.h" //#include "CurveLineLog.h" #include "ObjWelllogTABLE.h" +#include "ObjWellLogTDT.h" //#include "DataManagger.h" #include "griddataadapter.h" @@ -185,6 +186,8 @@ void WellLogTableDialogNew::setName(QString strOldPath, QString strOldName, int pWellLog = new CObjWellLogWavefile; if (CURVE_OBJECT == m_ObjectType) pWellLog = new CObjWellLog; + if (TDT_OBJECT == m_ObjectType) + pWellLog = new CObjWellLogTDT; if (WAVE_OBJECT != m_ObjectType) m_pUI->horizontalScrollBar->hide(); pWellLog->SetSlfFileName(strOldPath); @@ -285,6 +288,12 @@ void WellLogTableDialogNew::InitWell() // swtichViewSize(); return; } + if (TDT_OBJECT == m_ObjectType) + { + m_DataTyle=valid_NULL; + m_gridData->initTDTWellLogData(D_TDTWellLogData,m_pWellLogs); + return; + } } bool WellLogTableDialogNew::InitWellLog() diff --git a/WellLogUI/src/griddataadapter.cpp b/WellLogUI/src/griddataadapter.cpp index aaefc96..78012ec 100644 --- a/WellLogUI/src/griddataadapter.cpp +++ b/WellLogUI/src/griddataadapter.cpp @@ -1986,7 +1986,7 @@ void GridDataAdapter::initTDTWellLogData(DType type,QList WellLogs fieldName="MD_"+QString::number(j); fieldName+="\n"+unit; m_TitleField.push_back(fieldName); - unit=TDT.TimeUnit; + unit=QString::fromLocal8Bit(TDT.TimeUnit); fieldName="TIME_"+QString::number(j); fieldName+="\n"+unit; m_TitleField.push_back(fieldName); diff --git a/common/geometryutils.cpp b/common/geometryutils.cpp index 75339f2..8e4df8d 100644 --- a/common/geometryutils.cpp +++ b/common/geometryutils.cpp @@ -388,6 +388,42 @@ QString toString(double value,char f,int dem,bool iscut,bool ise) if(iscut) return toString(cs); else return cs; } + +bool copyDirectoryFiles(const QString &fromDir, const QString &toDir, bool coverFileIfExist) +{ + QDir sourceDir(fromDir); + QDir targetDir(toDir); + if(!targetDir.exists()){ /**< 如果目标目录不存在,则进行创建 */ + if(!targetDir.mkdir(targetDir.absolutePath())) + return false; + } + + QFileInfoList fileInfoList = sourceDir.entryInfoList(); + foreach(QFileInfo fileInfo, fileInfoList){ + if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") + continue; + + if(fileInfo.isDir()){ /**< 当为目录时,递归的进行copy */ + if(!copyDirectoryFiles(fileInfo.filePath(), + targetDir.filePath(fileInfo.fileName()), + coverFileIfExist)) + return false; + } + else{ /**< 当允许覆盖操作时,将旧文件进行删除操作 */ + if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){ + targetDir.remove(fileInfo.fileName()); + } + + /// 进行文件copy + if(!QFile::copy(fileInfo.filePath(), + targetDir.filePath(fileInfo.fileName()))){ + return false; + } + } + } + return true; +} + QStringList GetSimilarCurves(QString curvename,char *INI,bool isEqu) { QStringList vars,temps; diff --git a/common/geometryutils.h b/common/geometryutils.h index 3b1f6d6..7387583 100644 --- a/common/geometryutils.h +++ b/common/geometryutils.h @@ -189,6 +189,7 @@ QString toString(float value,char f='f',int dem=3,bool iscut=1,bool ise=true); QString toString(double value,char f='f',int dem=3,bool iscut=1,bool ise=true); bool IsValidNmae(QString wellname); QString setdec(QString text,int dec=2,bool all=false); +bool copyDirectoryFiles(const QString &fromDir, const QString &toDir, bool coverFileIfExist); QStringList GetSimilarCurves(QString curvename,char *INI=NULL,bool isEQU=true); QString GetImagePath(); QString GetOutDataPath(); diff --git a/logPlus/mainwindow.cpp b/logPlus/mainwindow.cpp index 2b4f78e..2659f4f 100644 --- a/logPlus/mainwindow.cpp +++ b/logPlus/mainwindow.cpp @@ -98,6 +98,9 @@ MainWindow::MainWindow(QWidget *parent) : //关联信号槽,数据查看曲线数据 connect(CallManage::getInstance(), SIGNAL(sig_ShowCurve(QMap>)), this, SLOT(s_ShowCurve(QMap>))); + //关联信号槽,数据查看TDT数据 + connect(CallManage::getInstance(), SIGNAL(sig_ShowTDT(QString, QString)), this, SLOT(s_ShowTDT(QString, QString))); + //关联信号槽,数据查看表格数据 connect(CallManage::getInstance(), SIGNAL(sig_ShowTable(QString, QString)), this, SLOT(s_ShowTable(QString, QString))); @@ -237,6 +240,17 @@ void MainWindow::initTitleBar() m_resultMenu->addAction(QIcon( ::GetImagePath() + "icon/ExportSVG.png"), tr("&导出SVG"), this, SLOT(s_SaveAsSvg())); // QMenu* m_SystemToolMenu = this->menuBar()->addMenu(tr("系统工具(&T)")); + + QMenu *OilMenu=m_SystemToolMenu->addMenu(QIcon( ::GetImagePath() + "icon/oilfield.png"),tr("&切换油田")); + QString skinfilename=::GetConfPath()+ "data.ini"; + QSettings * pskins = new QSettings(skinfilename,QSettings::IniFormat); + pskins->setIniCodec(QTextCodec::codecForName("UTF-8")); + QStringList skins=pskins->value("oilfield",0).toStringList(); + for(int skinindex=0;skinindexaddAction(QIcon( ::GetImagePath() + "icon/oilfield.png"),skins.at(skinindex),this,SLOT(slotChangeOilField())); + } + delete pskins; // QMenu* m_helpMenu = this->menuBar()->addMenu(tr("帮助(&H)")); } @@ -247,6 +261,35 @@ void MainWindow::slotExitSystem() } +void MainWindow::slotChangeOilField() +{ + QAction* aaction=(QAction*)(QObject::sender()); + LoadOilfield(aaction->text()); +} +void MainWindow::LoadOilfield(QString oilfield) +{ + QString path=GetLogPlusPath()+QDir::separator()+"oilfield.ini"; + FILE *fp=fopen(path.toStdString().c_str(),"wt"); + if(fp){ + fprintf(fp,"%s\n",oilfield.toStdString().c_str()); + fclose(fp); + QString cs=GetConfPath()+oilfield; + QDir ss; + if(!ss.exists(cs)) { + ss.mkdir(cs); + QString sl=GetConfPath()+"胜利"; + copyDirectoryFiles(sl,cs,false); + } + cs=GetImagePath()+oilfield+"符号库"; + if(!ss.exists(cs)) { + ss.mkdir(cs); + QString sl=GetImagePath()+"符号库"; + copyDirectoryFiles(sl,cs,false); + } + } + ReadOilFieldName(); +} + //初始化工具栏 void MainWindow::initToolBar() { @@ -712,6 +755,21 @@ void MainWindow::s_ShowCurve(QMap> mapShowObject) } } +//TDT数据查看 +void MainWindow::s_ShowTDT(QString strSlfName, QString strName) +{ + if(m_centerWidgets) + { + WellLogTableDialogNew* pDialog = new WellLogTableDialogNew(); + pDialog->setName(strSlfName, strName, TDT_OBJECT); + QString wellname;QString path; + GetWellNameAndPath(strSlfName, wellname, path); + m_centerWidgets->addTab(pDialog, wellname + ":" + strName); + int iCount = m_centerWidgets->count(); + m_centerWidgets->m_pTabBar->setCurrentIndex(iCount-1); + } +} + //表格数据查看 void MainWindow::s_ShowTable(QString strSlfName, QString strName) { diff --git a/logPlus/mainwindow.h b/logPlus/mainwindow.h index bc201cd..0290d16 100644 --- a/logPlus/mainwindow.h +++ b/logPlus/mainwindow.h @@ -64,6 +64,7 @@ public: void ReadConfig(); bool closeProject(); + void LoadOilfield(QString oilfield); public slots: void s_New(); @@ -76,6 +77,7 @@ public slots: void s_SaveProject(); void s_CloseProject(); void slotExitSystem(); + void slotChangeOilField(); void s_Risize(); void s_AddOne(); @@ -89,6 +91,7 @@ public slots: void s_development(); void s_ShowParameterCard(QString strSlfName, QString strName);//参数卡数据查看 void s_ShowCurve(QMap> mapShowObject);//曲线数据查看 + void s_ShowTDT(QString strSlfName, QString strName);//TDT数据查看 void s_ShowTable(QString strSlfName, QString strName);//表格数据查看 void s_ShowWave(QString strSlfName, QString strName); //波列数据查看 void s_WelllogInformation(QString strSlfName);//编辑测井信息 diff --git a/logPlus/qtprojectwidgets.cpp b/logPlus/qtprojectwidgets.cpp index 2be67e2..5b1faee 100644 --- a/logPlus/qtprojectwidgets.cpp +++ b/logPlus/qtprojectwidgets.cpp @@ -448,10 +448,21 @@ void QtProjectWidgets::loadWellTree(QTreeWidgetItem *parent, QString fileFull, Q //itemWave->setData(0, Qt::UserRole + 1, indexSysInfo.at(1).toString()); // 存储额外数据,如ID // QIcon iconWave; - iconWave.addPixmap(QPixmap(GetImagePath() + "icon/Logs.png"), QIcon::Selected); - iconWave.addPixmap(QPixmap(GetImagePath() + "icon/Logs.png"), QIcon::Normal); + iconWave.addPixmap(QPixmap(GetImagePath() + "icon/tdt.png"), QIcon::Selected); + iconWave.addPixmap(QPixmap(GetImagePath() + "icon/tdt.png"), QIcon::Normal); itemWave->setIcon(0, iconWave); + //波列数据 + QTreeWidgetItem *itemTDT = new QTreeWidgetItem(); + itemTDT->setText(0, "TDT数据"); + itemTDT->setData(0, Qt::UserRole, "TDT"); // 存储额外数据,如ID + //itemTDT->setData(0, Qt::UserRole + 1, indexSysInfo.at(1).toString()); // 存储额外数据,如ID + // + QIcon iconWTDT; + iconWTDT.addPixmap(QPixmap(GetImagePath() + "icon/Logs.png"), QIcon::Selected); + iconWTDT.addPixmap(QPixmap(GetImagePath() + "icon/Logs.png"), QIcon::Normal); + itemTDT->setIcon(0, iconWTDT); + CLogIO * logio=new CLogIO(); if(!logio->Open(fileFull.toStdString().c_str(),CSlfIO::modeRead)) { @@ -665,6 +676,22 @@ void QtProjectWidgets::loadWellTree(QTreeWidgetItem *parent, QString fileFull, Q } itemWave->addChild(itemWaveChild); } + else if(TDT_OBJECT == curvetype) + { + //TDT-》树图 + QTreeWidgetItem *itemTDTChild = new QTreeWidgetItem(); + itemTDTChild->setText(0, strCurveName); + itemTDTChild->setData(0, Qt::UserRole, "TDTObject"); // 存储额外数据,如ID + itemTDTChild->setData(0, Qt::UserRole + 1, fileFull); // 存储额外数据,井次文件路径 + itemTDTChild->setData(0, Qt::UserRole + 2, wellname); // 存储额外数据,井名 + itemTDTChild->setData(0, Qt::UserRole + 3, strCurveName); // 存储额外数据,波列卡 + itemTDTChild->setIcon(0, iconWave); + if (0 == itemTDT->childCount()) + { + itemwell->addChild(itemTDT);//添加一级子节点 + } + itemTDT->addChild(itemTDTChild); + } } delete []curvename; delete []aliasname; @@ -712,6 +739,10 @@ void QtProjectWidgets::initMenu() _menuWaveObject = new QMenu(ui->treeWidget); initWaveObjectTreeMenu(_menuWaveObject, ui->treeWidget); + //TDT对象-右键菜单 + _menuTDTObject = new QMenu(ui->treeWidget); + initTDTObjectTreeMenu(_menuTDTObject, ui->treeWidget); + //表格对象-右键菜单 _menuTableObject = new QMenu(ui->treeWidget); initTableObjectTreeMenu(_menuTableObject, ui->treeWidget); @@ -863,7 +894,34 @@ void QtProjectWidgets::initWaveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidg connect(action_Delete, SIGNAL(triggered()), this, SLOT(onDeleteObject())); menu->addAction(action_Delete); } +//初始化TDT对象-右键菜单 +void QtProjectWidgets::initTDTObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget) +{ + QAction* action_TableObject = new QAction("数据查看", treeWidget); + action_TableObject->setIcon(QIcon(GetImagePath() + "icon/Sheet.png")); // 设置图标 + connect(action_TableObject, SIGNAL(triggered(bool)), this, SLOT(onShowTDT(bool))); + menu->addAction(action_TableObject); + QAction* action_ReName = new QAction("重命名", treeWidget); + action_ReName->setIcon(QIcon(GetImagePath() + "icon/Rename.png")); // 设置图标":/image/u174.png" + connect(action_ReName, SIGNAL(triggered()), this, SLOT(onReNameObject())); + menu->addAction(action_ReName); + + QAction* action_DepthShift = new QAction("深度移动", treeWidget); + action_DepthShift->setIcon(QIcon(GetImagePath() + "icon/RigidDepthShifting.png")); // 设置图标 + connect(action_DepthShift, SIGNAL(triggered(bool)), this, SLOT(onDepthShift(bool))); + menu->addAction(action_DepthShift); + + QAction* action_Copy = new QAction("复制", treeWidget); + action_Copy->setIcon(QIcon(GetImagePath() + "icon/Copy.png")); // 设置图标":/image/u174.png" + connect(action_Copy, SIGNAL(triggered()), this, SLOT(onCopySelObject())); + menu->addAction(action_Copy); + + QAction* action_Delete = new QAction("删除", treeWidget); + action_Delete->setIcon(QIcon(GetImagePath() + "icon/Delete.png")); // 设置图标":/image/u174.png" + connect(action_Delete, SIGNAL(triggered()), this, SLOT(onDeleteObject())); + menu->addAction(action_Delete); +} //初始化表格对象-右键菜单 void QtProjectWidgets::initTableObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget) { @@ -1152,7 +1210,7 @@ void QtProjectWidgets::onDepthShift(bool checked) foreach(QTreeWidgetItem *item, ui->treeWidget->selectedItems()) { QString strTreeTag = item->data(0, Qt::UserRole).toString(); - if (strTreeTag == "curveObject" || strTreeTag=="waveObject" || strTreeTag == "tableObject") + if (strTreeTag == "curveObject" || strTreeTag=="waveObject" || strTreeTag == "tableObject" || strTreeTag == "TDTObject") { QString strLineName = item->text(0); QString strSlfName = item->data(0, Qt::UserRole+1).toString(); @@ -1190,6 +1248,12 @@ void QtProjectWidgets::ApplyShiftDepth(QString strSlfName, QString strLineName, emit CallManage::getInstance()->sig_ReloadPlot("all", strSlfName, strLineName); } +//表格数据查看 +void QtProjectWidgets::onShowTDT(bool checked) +{ + emit CallManage::getInstance()->sig_ShowTDT(m_strSlfName, m_strCurveObjectName); +} + //表格数据查看 void QtProjectWidgets::onShowTable(bool checked) { @@ -2138,6 +2202,12 @@ void QtProjectWidgets::onItemClicked(QTreeWidgetItem* item, int index) m_strCurveObjectName = item->text(0); m_strSlfName = item->data(0, Qt::UserRole+1).toString(); } + else if (strTreeTag == "TDTObject"){ + //TDT-右键菜单 + popMenu = _menuTDTObject; + m_strCurveObjectName = item->text(0); + m_strSlfName = item->data(0, Qt::UserRole+1).toString(); + } else if (strTreeTag == "waveObject"){ //波列对象 popMenu = _menuWaveObject; diff --git a/logPlus/qtprojectwidgets.h b/logPlus/qtprojectwidgets.h index 59f11bd..e2e4e6d 100644 --- a/logPlus/qtprojectwidgets.h +++ b/logPlus/qtprojectwidgets.h @@ -52,6 +52,8 @@ public slots: void onShowCurve(bool checked = false); //数据查看 void ApplyShiftDepth(QString strSlfName, QString strLineName, double DepthOffset); void onDepthShift(bool checked = false); //深度移动 + //TDT + void onShowTDT(bool checked = false); //数据查看 //表格 void onShowTable(bool checked = false); //数据查看 //波列 @@ -92,6 +94,7 @@ public: QMenu *_menuCardObject; //参数卡 QMenu *_menuCurveObject; //曲线对象(AC、BS...) QMenu *_menuWaveObject; //波列对象 + QMenu *_menuTDTObject; //TDT对象 QMenu *_menuTableObject; //表格对象 QMenu *_menuWellName; //井名 QMenu *_menuSlfName; //井次 @@ -141,6 +144,8 @@ public: void initCurveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget); //初始化波列对象-右键菜单 void initWaveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget); + //初始化TDT对象-右键菜单 + void initTDTObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget); //初始化表格对象-右键菜单 void initTableObjectTreeMenu(QMenu *menu, QTreeWidget *treeWidget); //初始化根节点(井名称)-右键菜单