|
|
#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<iSubWndFitting*>(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<QString, double>& 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;
|
|
|
}
|