#ifndef NMVTKSCENE_H #define NMVTKSCENE_H #include "nmRender_global.h" #include #include class nmVTKRenderLayer; class vtkRenderer; /** * @brief 管理一个 Renderer 中的通用图层集合。 * * addLayer 成功后 Scene 接管图层所有权;失败时所有权仍归调用方。 * Scene 的增删操作不自动渲染,由容器在批量修改完成后统一 renderView。 */ class NM_RENDER_EXPORT nmVTKScene { public: /** @param pRenderer 非所有权指针,必须比 Scene 生命周期更长。 */ explicit nmVTKScene(vtkRenderer* pRenderer); /** @brief 先清空 Layer 和 Prop,再结束 Scene 生命周期。 */ ~nmVTKScene(); /** * @brief 挂载并登记图层。 * @return 图层未被其他 Scene 接管且挂载成功时返回 true。成功后 Scene * 接管 pLayer;失败时调用方仍负责删除 pLayer。 */ bool addLayer(nmVTKRenderLayer* pLayer); /** @brief 按稳定 ID 查询图层,返回值为 Scene 所有的非所有权指针。 */ nmVTKRenderLayer* getLayer(const QString& sLayerId) const; /** @brief 先从 Renderer 移除 Prop,再删除指定图层。 */ bool removeLayer(const QString& sLayerId); /** @brief 清空全部图层;不主动触发 Render。 */ void clear(); /** @brief 返回 Scene 当前拥有的图层数量。 */ int getLayerCount() const; private: Q_DISABLE_COPY(nmVTKScene) /** @brief 析构和公开 clear 共用的实际清理入口。 */ void clearLayers(); vtkRenderer* m_pRenderer; ///< 非所有权指针,由渲染容器持有。 QMap m_mapLayers; ///< Scene 独占已加入的图层。 }; #endif // NMVTKSCENE_H