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/nmData/nmPebiResultSnapshotRenderA...

84 lines
3.3 KiB
C

#ifndef NMPEBIRESULTSNAPSHOTRENDERADAPTER_H
#define NMPEBIRESULTSNAPSHOTRENDERADAPTER_H
#include "nmData_global.h"
#include "nmPebiResultSnapshot.h"
#include <QSharedPointer>
#include <vtkSmartPointer.h>
#include <vtkType.h>
class vtkAlgorithmOutput;
class vtkDoubleArray;
class vtkTrivialProducer;
class vtkUnstructuredGrid;
/**
* @brief VTK
*
* UI UI
*
*/
class NM_DATA_EXPORT nmPebiResultSnapshotRenderAdapter
{
public:
/** @brief 压力帧与渲染网格之间的绑定方式。 */
enum PressureBindingMode
{
SharedPressureFrame = 0, ///< 临时共享快照压力数组,不产生整帧复制。
CopiedPressureFrame = 1 ///< 复制到可复用缓冲,隔离不可信下游流程。
};
/** @brief 创建尚未绑定快照的渲染适配器。 */
nmPebiResultSnapshotRenderAdapter();
/** @brief 解除 VTK 临时引用并释放适配器持有的只读快照。 */
~nmPebiResultSnapshotRenderAdapter();
/**
* @brief CellData
* @param pSnapshot
* @param eBindingMode
*/
bool initialize(
const QSharedPointer<const nmPebiResultSnapshot>& pSnapshot,
PressureBindingMode eBindingMode);
/** @brief 解除输出、压力数组和快照引用,使适配器恢复为空状态。 */
void clear();
/** @brief 将指定压力帧发布到当前 VTK 输出端口。 */
bool setPressureFrame(int nFrameIndex);
/** @brief 返回供 Mapper 或过滤器建立连接的 VTK 输出端口。 */
vtkAlgorithmOutput* getOutputPort() const;
/** @brief 返回当前已经绑定的压力帧下标,尚未切帧时为 -1。 */
int getCurrentFrameIndex() const;
/** @brief 返回适配器渲染网格的单元数。 */
vtkIdType getCellCount() const;
/** @brief 返回当前是否使用零整帧复制的共享压力模式。 */
bool isUsingSharedPressure() const;
private:
/** @brief 禁止复制包含 VTK 管道和快照引用的适配器。 */
nmPebiResultSnapshotRenderAdapter(
const nmPebiResultSnapshotRenderAdapter&);
/** @brief 禁止给适配器赋值。 */
nmPebiResultSnapshotRenderAdapter& operator=(
const nmPebiResultSnapshotRenderAdapter&);
private:
/** @brief 当前渲染使用的只读快照。 */
QSharedPointer<const nmPebiResultSnapshot> m_pSnapshot;
/** @brief 适配器独占的渲染网格,结构可与快照基础网格共享。 */
vtkSmartPointer<vtkUnstructuredGrid> m_pRenderGrid;
/** @brief 复制模式复用的单帧压力缓冲。 */
vtkSmartPointer<vtkDoubleArray> m_pPressureBuffer;
/** @brief 将独立渲染网格接入 VTK 管道的生产者。 */
vtkSmartPointer<vtkTrivialProducer> m_pProducer;
/** @brief 当前压力帧绑定方式。 */
PressureBindingMode m_eBindingMode;
/** @brief 当前已经绑定的压力帧下标。 */
int m_nCurrentFrameIndex;
};
#endif // NMPEBIRESULTSNAPSHOTRENDERADAPTER_H