#pragma once #include "iSubWndBaseFit.h" #include "nmSubWnd_global.h" #include class nmWxPebiGridViewWidget; class nmDataAnalyzeManager; class nmCalculationPebiGridTask; class QTimer; class QStackedLayout; class NM_SUB_WND_EXPORT nmSubWndGrid : public iSubWndBaseFit { Q_OBJECT public: /** * @brief 创建绑定到指定数据管理器的网格成果窗口。 * @param bGeneratePebiGrid 为 true 时根据当前 Map 输入重新划分网格。 * @param pDataManager 窗口所属数据管理器,不转移所有权。 */ explicit nmSubWndGrid(QWidget *parent = 0, QString sExt = "", double pebiGridControl = 150.0, bool bGeneratePebiGrid = true, nmDataAnalyzeManager* pDataManager = nullptr); ~nmSubWndGrid(); /** @brief 切换窗口所属数据管理器,并安全处理仍在运行的旧网格任务。 */ void setDataManager(nmDataAnalyzeManager* pDataManager); // 配置窗体 virtual void configWnd(QString sPrevInfo); // 初始化UI virtual void initUI(); virtual QWidget* initUiMainWx(); // 成果保存加载 virtual bool loadRsts(); virtual bool saveRsts(); virtual bool onConfirmClosing(); public slots: /** @brief 只响应当前数据管理器的数据变化,忽略切换前已排队的旧信号。 */ void onDataManagerChanged(); /** @brief 合并连续数据变化请求,并启动本窗口的防抖计时。 */ void updateGrid(); /** @brief 防抖结束后启动或排队一次后台 PEBI 网格任务。 */ void onDebounceTimeout(); /** @brief 网格任务完成后刷新本窗口 VTK 视图。 */ void onPebiGridGenerated(bool success); /** @brief 回收完成的任务;运行期间有新请求时补做最后一次重建。 */ void onPebiGridTaskFinished(); public: // 执行命令:通常来自Ribbon virtual bool runCmdBy(QString sName, QString sID); // 生成PEBI网格 bool generatePebiGrid(); private: /** @brief 使用渲染容器状态页显示“正在生成网格”。 */ void showGridLoading(); /** @brief 从 DataManager 构建最新 ViewData 并刷新稳定的网格视图。 */ void showGridResult(); /** @brief 网格失败时恢复旧网格;没有旧网格则显示明确失败提示。 */ void showGridFailure(); /** @brief 清除当前 ViewData,防止切换分析后继续显示旧分析网格。 */ void clearGridResultView(); /** @brief 从防抖开始登记建网活动,使同一分析的求解等待最终提交。 */ void beginGridGenerationState(nmDataAnalyzeManager* pDataManager); /** @brief 结束本窗口登记的建网活动,并通知等待中的求解流程。 */ void endGridGenerationState(nmDataAnalyzeManager* pDataManager, bool bSucceeded); /** @brief 判断当前任务之后是否仍有防抖或合并后的网格更新。 */ bool hasPendingGridUpdate() const; QStackedLayout* m_pMainLayout; ///< 持有稳定 PEBI 网格视图的主布局。 nmWxPebiGridViewWidget* m_pGridView; ///< 组合 nmRender 的稳定 PEBI 网格视图。 QTimer* m_pDebounceTimer; ///< 本窗口独立防抖定时器,避免跨窗口刷新。 QPointer m_pDataManager; ///< 窗口所属数据管理器,销毁后自动置空。 QPointer m_pGridTask; ///< 当前后台网格任务,完成后自动回收。 QPointer m_pGridTaskDataManager; ///< 当前网格任务创建时绑定的数据管理器。 QPointer m_pGridGenerationDataManager; ///< 本窗口登记建网状态的管理器。 bool m_bGridUpdatePending; ///< 任务运行期间是否又收到网格更新请求。 // PEBI GridControl控制参数,对应HX_NWTM_GRID_INPUT::GridControl double m_dPebiGridControl; bool m_bGeneratePebiGrid; ///< 是否根据当前 Map 几何重新生成 PEBI 网格。 };