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.
84 lines
3.3 KiB
C++
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
|