#include "nmSubWndDataAnalyzeController.h" #include "iSubWndFitting.h" #include "nmDataAnalyzeContext.h" #include "ZxBaseUtil.h" #include "ZxDataWell.h" #include "ZxRstWnd.h" #include "ZxSegmentInfo.h" namespace { // 将数据层保存的窗口指针还原为窗口层接口指针 iSubWndFitting* toFitting(void* pFitting) { return static_cast(pFitting); } // nmSubWnd模块加载时注册上下文提供者,避免在nmSubWndUtils中增加初始化代码 struct nmSubWndDataAnalyzeControllerRegistrar { nmSubWndDataAnalyzeControllerRegistrar() { nmDataAnalyzeContext::setProvider(nmSubWndDataAnalyzeController::instance()); } }; nmSubWndDataAnalyzeControllerRegistrar s_registrar; } // 获取窗口层上下文控制器单例 nmSubWndDataAnalyzeController* nmSubWndDataAnalyzeController::instance() { static nmSubWndDataAnalyzeController s_controller; return &s_controller; } // 获取界面当前选择的流动段索引 bool nmSubWndDataAnalyzeController::getCurrentSegmentIndex(void* pFitting, int& nIndexF) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } ZxSegmentInfo* pSegInfo = pSubWndFitting->getSegmentInfo(); if(pSegInfo == nullptr) { return false; } nIndexF = pSegInfo->m_nIndexF; return true; } // 获取基础数据中的PVT相态类型 bool nmSubWndDataAnalyzeController::getBasicPft(void* pFitting, PvtFluidType& eType) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } eType = pSubWndFitting->getBasicPft(); return true; } // 按参数名获取PVT基础参数值 bool nmSubWndDataAnalyzeController::getPvtParaValues(void* pFitting, const QStringList& listParas, QMap& mapValues) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } return pSubWndFitting->getPvtParaValues(listParas, mapValues); } // 获取基础数据分层数据 bool nmSubWndDataAnalyzeController::getBasicDataLayers(void* pFitting, VVecVariant& vvecLayerData) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } return pSubWndFitting->getBasicDataLayers(vvecLayerData); } // 获取指定相态和参数名对应的PVT曲线结果 bool nmSubWndDataAnalyzeController::getPvtRstOf(void* pFitting, PvtFluidType eType, const QString& sPara, VecDouble& vecX, VecDouble& vecY) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } return pSubWndFitting->getPvtRstOf(eType, sPara, vecX, vecY); } // 获取Diffusion页面中某个参数的具体数值 bool nmSubWndDataAnalyzeController::getDiffusionParaOf(void* pFitting, DiffusionSubOption dso, const QString& sPara, double& d) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } return pSubWndFitting->getDiffusionParaOf(dso, sPara, d); } // 获取Diffusion页面中指定子项的计算结果 bool nmSubWndDataAnalyzeController::getDiffusionRstOf(void* pFitting, DiffusionSubOption dso, VVecDouble& vvec) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } return pSubWndFitting->getDiffusionRstOf(dso, vvec); } // 组装当前井和当前结果窗口对应的数值结果保存目录 bool nmSubWndDataAnalyzeController::getSaveResultDir(void* pFitting, const QString& sRstCode, QString& sDir) { iSubWndFitting* pSubWndFitting = toFitting(pFitting); if(pSubWndFitting == nullptr) { return false; } ZxRstWnd* pRstWnd = pSubWndFitting->getRstUtilWnd(); if(pRstWnd == nullptr) { return false; } ZxDataWell* pDataWell = pSubWndFitting->getDataWell(); if(pDataWell == nullptr) { return false; } sDir = ZxBaseUtil::getWellDirOf(pDataWell->getName(), "Nm"); sDir += sRstCode + "/" + pRstWnd->getCode(); return true; }