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/nmRender/nmVTKRenderLayer.h

77 lines
2.7 KiB
C

#ifndef NMVTKRENDERLAYER_H
#define NMVTKRENDERLAYER_H
#include "nmRender_global.h"
#include <QString>
#include <vtkSmartPointer.h>
class vtkProp;
class vtkRenderer;
class nmVTKScene;
/**
* @brief VTK
*
* ID PropRenderer attach
* detach Prop Scene
* Scene Qt GUI 线
*/
class NM_RENDER_EXPORT nmVTKRenderLayer
{
public:
/** @brief 析构时执行幂等 detach确保 Renderer 不保留 Prop。 */
virtual ~nmVTKRenderLayer() = 0;
/** @brief 返回不可翻译的稳定图层 ID。 */
QString getLayerId() const;
/**
* @brief Renderer Renderer
* @return Renderer Prop true
*/
bool attach(vtkRenderer* pRenderer);
/** @brief 从当前 Renderer 移除 Prop未挂载时安全返回。 */
void detach();
/** @brief 修改图层可见性,不主动触发 Render。 */
void setVisible(bool bVisible);
/** @brief 返回调用方最后设置的可见状态。 */
bool isVisible() const;
/** @brief 返回主 Prop 当前是否已加入某个 Renderer。 */
bool isAttached() const;
protected:
/** @param sLayerId 不可翻译且在图层生命周期内保持不变的稳定 ID。 */
explicit nmVTKRenderLayer(const QString& sLayerId);
/**
* @brief Prop
* @note Prop VTK
*/
bool setRenderProp(vtkProp* pProp);
/** @brief 返回本图层主 Prop 的非所有权指针。 */
vtkProp* getRenderProp() const;
/** @brief 返回当前挂载的 Renderer 非所有权指针。 */
vtkRenderer* getAttachedRenderer() const;
private:
Q_DISABLE_COPY(nmVTKRenderLayer)
friend class nmVTKScene;
/** @brief 由 Scene 在挂载前认领所有权;已有所属 Scene 时拒绝。 */
bool claimSceneOwnership(nmVTKScene* pScene);
/** @brief 仅允许当前所属 Scene 在删除图层前释放所有权。 */
bool releaseSceneOwnership(nmVTKScene* pScene);
const QString m_sLayerId; ///< 不参与翻译和界面显示的稳定查找键。
bool m_bVisible; ///< 在未挂载期间也保留调用方要求的可见状态。
vtkSmartPointer<vtkProp> m_pRenderProp; ///< 图层持有的主 Prop VTK 引用。
vtkRenderer* m_pRenderer; ///< 非所有权指针,仅在挂载期间有效。
nmVTKScene* m_pOwningScene; ///< 非所有权指针,用于阻止多个 Scene 重复接管。
};
#endif // NMVTKRENDERLAYER_H