You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmSubWnd/nmSubWndMain.h

265 lines
7.4 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include "iSubWndBaseFit.h"
#include "nmSubWnd_global.h"
#include "nmCalculationDefine.h"
#include <QVector>
class ZxObjBase;
class ZxObjCurve;
class ZxDataObject;
class nmGuiPlot;
class ZxTableView;
class iDockBaseWx;
class nmWxParaProperty;
class nmDataDemo;
class QToolBar;
class nmDataWellBase;
class nmDataAnalyzeManager;
class nmCalculationDllPebiSolverTask;
class QWidget;
class QObject;
class NM_SUB_WND_EXPORT nmSubWndMain : public iSubWndBaseFit {
Q_OBJECT
public:
explicit nmSubWndMain(QWidget *parent = 0, QString sExt = "");
~nmSubWndMain();
// 配置窗体
virtual void configWnd(QString sPrevInfo);
// 初始化UI
virtual void initUI();
virtual QWidget* initUiMainWx();
virtual void initUiDockWxs();
virtual void initUiDockPtys();
// 成果保存加载
virtual bool loadRsts();
virtual bool saveRsts();
#ifdef QT_DEBUG
// 示例演示增加Dock并且追加至程序主窗口
void initUiTop();
#endif
// 窗体初始后允许数据加载及刷新
virtual void firstLoadAndUpdate();
// 窗体创建完毕之后的尾处理
virtual void finalDeals();
// 当前窗体激活时被调用
virtual void onActivated();
#ifdef QT_DEBUG
// 更新左右Dock数据
void updateDockWxs();
// 更新图形
void updatePlots();
/// @brief 从当前井获取压力数据
/// @param sType 具体类型,比如压力、流量、温度等
/// @param sCode 指定Code如果不指定则返回满足条件的第一条
ZxDataObject* getDataObjOf(QString sType, QString sCode = "");
// 把曲线数据刷新至表格
void updateTableByCurve(ZxObjCurve* pObjCurve, ZxTableView* pTableView);
#endif
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onDeserialized();
// 成果保存加载TODO参考nmSubWndDemo
// virtual bool loadRss();
// virtual bool saveRss();
// 窗体关闭之前的确认
virtual bool onConfirmClosing();
protected:
// 绑定图形信号
virtual void bindChartSignals(iGuiPlot* pWxPlot);
// 重新调整工具栏
virtual void reAdjustToolbar(QToolBar*);
public:
// 执行命令:通常来自图形右侧/左侧的工具栏
virtual bool runActionOf(QString sAction);
// 执行命令通常来自Ribbon
virtual bool runCmdBy(QString sName, QString sID);
/// @brief 命令是否Enabled的状态判断通常来自Ribbon
/// @param b (out)trueEnabled falsedisabled
/// @param sName (in),Cmd Name
/// @param nID (in),Cmd ID
/// @param bLicensed (in),当前是否有授权
/// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令)
virtual bool checkCmdEnable(bool &b, \
QString sName, int nID, \
bool bLicensed);
// 返回当前绘图对象,供外界获取绘图数据
nmGuiPlot* getWxPlot() const;
// 根据分析数据绘制对应的地图信息
void updateMapByDataManager(nmDataAnalyzeManager* pDataManager);
signals:
void sigFreshRnStates(QStringList list);
void sigShowProgressAbout(bool);
public slots:
// Obj选择状态改变
void slotObjSelChanged(ZxObjBase*, bool);
// Obj数据发生了改变
void slotObjPtsChanged(ZxObjBase*);
// 当前窗体所有信息的保存,比如关闭时提问的保存
virtual bool slotSaveAll();
// 求解完成
void on_calculationFinished(NM_Calculation_Result);
// DLL线程只返回成功/失败,这里转换回原来的计算结果处理流程。
void on_solverTaskFinished(bool isSuccessed);
void onProgressUpdated(int progress); // 新增槽函数,用于更新进度条
// 选择查看井数据
void onWellSelected(const QString& wellName);
// 点击左侧按钮求解生成操作
void onGenerateButtonClicked();
void slotUpdateFakeProgress(); // 用于定时器触发
void onDialogCmdDestroyed(QObject*);
private:
// 更新添加的井(从之前创建的井中选择)
void updateSelectedWells(QList<ZxDataWell*>);
// 地质图导入
void geologicalMapImport();
// 比例尺
void drawMeasuringScale();
// 地质图隐藏
void geologicalMapHide();
// 隐藏公共的Dock视图
void setTopDocksVisible(bool visible);
// 画多边形边界
void drawPolygonOutline();
// 画正方形边界
void drawSquareOutline();
// 画圆形边界
void drawRoundOutline();
// 画断层
void drawFault();
// 选择井
void selectWell();
// 画井点
void drawWell();
// 画裂缝
void drawCrack();
// 画区域
void drawRegion();
// 区域标识
void drawRegionMark();
// 储层特性
void reservoirCharacteristics();
// 几何分层
void geoLayering();
// 网格生成
void generationMesh();
// 求解和分析
void solveAndAnalyze();
// 删除图元
void deleteOneObj();
// 锁定
void setLocked();
// 生成DFN
void generateDFN();
// Show
void displaySetting();
// 测量
void drawMeasure();
// Geo模型
void drawGeoRef();
// 模型位置
void drawPointerPos();
// 显示测量对话框
QWidget* showMeasureDialog();
// 显示模型位置对话框
QWidget* showPointerPosDialog();
void bindDialogCmdDestroyed(QWidget* dialog, int nId);
void bindMeasureDialog(QWidget* measureDlg);
bool isDialogCmdOpened(int nId) const;
void markDialogCmdOpened(int nId);
void markDialogCmdClosed(int nId);
// 从菜单点击绘制除非ToolBar上的点击
void triggerToolBarAction(int index);
// 合并数据到流量端分析窗口
void mergeAnaResultToFitting();
// 半对数曲线数据
bool inithalfLog(QVector<QVector<double >> & vvecLogPreData, QVector<iCurveDesc>& vecDescs,bool isPreLoadData);
// 双对数曲线数据
bool initloglog(QVector<QVector<double >> & vvecLogPreData, QVector<iCurveDesc>& vecDescs,bool isHistoryData);
// 压力历史曲线数据
bool initPreHistory(QVector<QVector<double >> & vvecHistoryData, QVector<iCurveDesc>& vecDescs,bool isHistoryData);
// 根据原始压力数据、计算出半对数、双对数数据
//void calculationLogData(nmDataWellBase* pWellData,QVector<QVector<double>>& vvecHistoryData,QVector<QVector<double>>& vvecLogPreData,QVector<QVector<double>>& vvecSemiLogPreData);
private:
// 绘图相关
nmGuiPlot* m_pWxPlot;
// 锁定状态
bool m_lockState;
QVector<int> m_openDialogCmdIds; // 已打开对话框对应的命令ID
iDockBaseWx* m_pWxDockParas; //模型参数
nmWxParaProperty* m_pWxParas;
iDockBaseWx* m_pWxDockData1; //表格数据样例1
ZxTableView* m_pTableView1;
iDockBaseWx* m_pWxDockData2; //表格数据样例2
ZxTableView* m_pTableView2;
private:
// 求解进度条
QProgressDialog* m_pProgressDlg;
nmCalculationDllPebiSolverTask* m_pSolverTask; // 当前窗口直接持有的DLL求解线程任务
QTimer* m_pFakeProgressTimer; // 用于模拟进度的定时器
int m_nVirtualProgress; // 记录当前的模拟进度值
int m_nSlowDownCounter; // 记录定时器触发次数,用于控制减速节奏
#ifdef QT_DEBUG
// 示例演示增加Dock并且追加至程序主窗口
iDockBaseWx* m_pWxDockTemp;
QListWidget* m_pListWxTemp;
#endif
// QDSZ
QToolBar* m_pPlotToolBar;
};