#ifndef NMWXPEBIGRIDVIEWWIDGET_H #define NMWXPEBIGRIDVIEWWIDGET_H #include "nmSubWxs_global.h" #include class QAction; class QLabel; class QMenu; class QToolBar; class nmPebiGridSceneController; class nmPebiGridViewData; class nmWxVTKRenderContainerWidget; /** * @brief 二维 PEBI 网格预览业务组合控件。 * * 本类定位为网格几何检查窗口,只显示固定灰色表面、黑色单元边线和 * 可选的 XY 比例网格,不解释输入数据中的历史属性数组。右侧工具栏和 * 右键菜单复用同一批 QAction;通用导航、旋转中心、截图和打印能力由 * 内部 nmRender 容器提供,不继承业务视图基类。 * * 窗口状态由 setViewData/showLoading/showFailure/clearView 统一切换。 * 建网失败且存在旧数据时,场景继续显示上一次成功网格,黄色状态栏 * 单独提示失败原因;底部信息栏始终只描述当前保留的 PEBI 二维网格。 */ class NM_SUB_WXS_EXPORT nmWxPebiGridViewWidget : public QWidget { Q_OBJECT public: explicit nmWxPebiGridViewWidget(QWidget* pParent = nullptr); virtual ~nmWxPebiGridViewWidget(); /** @brief 装入完整数据并复用现有 Renderer、Scene、图层和工具栏。 */ bool setViewData(const nmPebiGridViewData& oViewData, QString* pError = nullptr); /** @brief 保留当前成功数据,只切换到渲染中状态页。 */ void showLoading(); /** @brief 有旧数据时恢复画面并显示提示,否则显示错误状态页。 */ void showFailure(const QString& sMessage); /** @brief 清除旧分析网格和视图命令状态。 */ void clearView(); /** @brief 当前场景是否保留一份绑定成功的网格数据。 */ bool hasViewData() const; private slots: /** @brief 切换世界坐标中的 XY 比例网格,不改变相机。 */ void onBoundsGridToggled(bool bVisible); /** @brief 向通用右键菜单追加本窗口独占的比例网格动作。 */ void appendContextMenuActions(QMenu* pMenu); private: Q_DISABLE_COPY(nmWxPebiGridViewWidget) /** @brief 创建右侧命令栏、状态提示栏和底部网格信息栏。 */ void createUi(); /** @brief 恢复无数据时的比例网格偏好和底栏文字。 */ void resetControls(); /** @brief 统一启停依赖有效网格的业务动作。 */ void setControlsEnabled(bool bEnabled); nmWxVTKRenderContainerWidget* m_pRenderContainer; ///< Qt 父对象拥有的通用渲染容器。 nmPebiGridSceneController* m_pSceneController; ///< 本类独占,必须先于容器销毁。 QToolBar* m_pToolBar; ///< Qt 父对象拥有的右侧竖向工具栏。 QAction* m_pBoundsGridAction; ///< 工具栏和右键菜单共享的比例网格动作。 QLabel* m_pGridInfoLabel; ///< 底栏左侧的网格类型、单元数和平面信息。 QLabel* m_pStatusLabel; ///< 建网失败且保留旧网格时使用的黄色提示栏。 bool m_bHasViewData; ///< 与场景控制器的成功数据状态保持同步。 }; #endif // NMWXPEBIGRIDVIEWWIDGET_H