#ifndef NMVTKSCALARBARLAYER_H #define NMVTKSCALARBARLAYER_H #include "nmVTKRenderLayer.h" #include class vtkActor2D; class vtkLookupTable; class vtkPoints; class vtkPropAssembly; class vtkScalarBarActor; class vtkTextActor; /** * @brief 通用色标图层。 * * 色标只展示外部 LookupTable,不解析单位,也不自行计算数据范围。 */ class NM_RENDER_EXPORT nmVTKScalarBarLayer : public nmVTKRenderLayer { public: /** @brief 创建空色标,并将色标及独立二维装饰加入稳定根 Assembly。 */ explicit nmVTKScalarBarLayer(const QString& sLayerId); /** @brief 先解除 Renderer,再释放外部颜色表的共享引用。 */ virtual ~nmVTKScalarBarLayer(); /** @brief 共享外部 LookupTable 的 VTK 引用。 */ void setLookupTable(vtkLookupTable* pLookupTable); /** @brief 返回当前共享颜色表的非所有权指针。 */ vtkLookupTable* getLookupTable() const; /** @brief 使用 UTF-8 设置色标标题,不解释标题中的业务含义。 */ void setTitle(const QString& sTitle); /** @brief 返回调用方设置的标题。 */ QString getTitle() const; /** @brief 设置普通刻度格式,例如 %.6g;空格式返回 false。 */ bool setLabelFormat(const QString& sFormat); /** @brief 返回调用方最后设置的普通刻度格式。 */ QString getLabelFormat() const; /** @brief 设置 0~64 个普通刻度;常量色标使用 0。 */ bool setNumberOfLabels(int nLabelCount); /** @brief 返回当前普通刻度数量。 */ int getNumberOfLabels() const; /** * @brief 按 QVTK 视口像素尺寸更新固定宽度的响应式二维布局。 * @note 只修改 Actor 布局,不主动 Render,也不修改 LookupTable。 */ bool setViewportSize(int nWidth, int nHeight); /** @brief 返回当前视口和色带高度建议使用的普通刻度数量。 */ int getResponsiveLabelCount() const; /** @brief 配置低于显示范围的独立二维色块和说明文字。 */ void setBelowRangeSwatch(bool bVisible, const QString& sText); /** @brief 配置高于显示范围的独立二维色块和说明文字。 */ void setAboveRangeSwatch(bool bVisible, const QString& sText); /** * @brief 显示或隐藏常量属性的唯一业务值。 * * 该文字由独立 vtkTextActor 绘制,不启用共享 LUT 的 IndexedLookup, * 因而不会改变网格使用的连续颜色映射语义。 */ void setConstantValueLabel(bool bVisible, const QString& sText); /** @brief 设置归一化视口坐标中的左下角位置。 */ bool setPosition(double dX, double dY); /** @brief 设置归一化视口坐标中的宽度和高度。 */ bool setSize(double dWidth, double dHeight); /** @brief 返回图层持有的 vtkScalarBarActor 非所有权指针。 */ vtkScalarBarActor* getActor() const; private: Q_DISABLE_COPY(nmVTKScalarBarLayer) /** @brief 根据当前色标位置和尺寸同步全部独立二维装饰的位置。 */ void updateOverlayLayout(); /** @brief 从活动 LookupTable 同步上下越界色块的实际颜色。 */ void updateRangeSwatchColors(); vtkSmartPointer m_pLookupTable; ///< 共享外部颜色表引用。 vtkSmartPointer m_pRootAssembly; ///< Scene 挂载的稳定根 Prop。 vtkSmartPointer m_pActor; ///< 图层独占的二维色标 Actor。 vtkSmartPointer m_pTitleActor; ///< 独立左对齐 ASCII 标题。 vtkSmartPointer m_pConstantValueActor; ///< 常量属性唯一值文字。 vtkSmartPointer m_pBelowRangeSwatchPoints; ///< 下越界色块四角坐标。 vtkSmartPointer m_pBelowRangeSwatchActor; ///< 下越界独立色块。 vtkSmartPointer m_pBelowRangeTextActor; ///< 下越界说明文字。 vtkSmartPointer m_pAboveRangeSwatchPoints; ///< 上越界色块四角坐标。 vtkSmartPointer m_pAboveRangeSwatchActor; ///< 上越界独立色块。 vtkSmartPointer m_pAboveRangeTextActor; ///< 上越界说明文字。 QString m_sTitle; ///< 保留无损 Qt 标题,避免从 VTK 窄字符串反向解析。 QString m_sLabelFormat; ///< 普通刻度的 printf 风格格式字符串。 QString m_sConstantValueText; ///< 保留常量值文字,避免从 VTK 反向解析。 QString m_sBelowRangeText; ///< 下越界说明文字状态。 QString m_sAboveRangeText; ///< 上越界说明文字状态。 double m_dPositionX; ///< 色标左下角的归一化视口 X 坐标。 double m_dPositionY; ///< 色标左下角的归一化视口 Y 坐标。 double m_dWidth; ///< 色标在归一化视口中的宽度。 double m_dHeight; ///< 色标在归一化视口中的高度。 int m_nViewportWidth; ///< 最近一次有效 QVTK 视口像素宽度。 int m_nViewportHeight; ///< 最近一次有效 QVTK 视口像素高度。 }; #endif // NMVTKSCALARBARLAYER_H