2021-06-17 VTK单元/节点属性数据切换显示

场景

有限元数据渲染时,同时存在节点属性数据和单元属性数据,交互界面操作时,需要根据用户的选择实时渲染单元数据或者节点数据。
最初的想法是:

  1. 实例化一个 vtkUnstructuredGrid 对象 unStructGrid
  2. 设置节点序列信息 cells 和单元序列信息 points
  3. 需要渲染节点属性信息时,通过节点属性信息 pointScalars 进行赋值,并且通过 SetScalarModeToUsePointData() 方法设置 mapper 只显示节点属性
unStructGrid->GetPointData()->SetScalars(pointScalars);
ugridMapper->SetScalarModeToUsePointData();

需要渲染单元属性信息时,通过单元属性信息 cellScalars 进行赋值,并且通过 SetScalarModeToUseCellData() 方法设置 mapper 只显示单元属性

unStructGrid->GetCellData()->SetScalars(cellScalars); 
ugridMapper->SetScalarModeToUseCellData();
  1. unStructGrid 对象传入 vtk 渲染管线
ugridMapper->SetInputData(unStructGrid);
...

问题

在切换过程中,最初节点属性渲染正常,切换至单元属性渲染正常,但是切换回节点属性渲染则出现异常,数据传输没有问题,界面只显示一个颜色且无变化,再切换至单元属性却能正常渲染。

分析

可能是 vtkMapper 关于渲染模式的选择存在冲突限制。

解决

始终只选择节点属性数据进行渲染。不做 SetScalarModeToUsePointDataSetScalarModeToUseCellData 的切换。
同时实例化一个 vtkUnstructuredGrid 对象 unStructGrid_tem 和一个 vtkCellDataToPointData 对象 c2p,利用 c2p 将单元属性数据转换为节点属性数据,然后将节点属性数据赋值到 unStructGrid 进行渲染。

unStructGrid_temp->GetCellData()->SetScalars(cellScalars); //单元属性信息
c2p->SetInputData(unStructGrid_temp);//单元属性转化 为节点属性
c2p->Update();

unStructGrid->GetPointData()->SetScalars(c2p->GetOutput()->GetPointData()->GetScalars());
ugridMapper->SetInputData(unStructGrid);

你可能感兴趣的:(2021-06-17 VTK单元/节点属性数据切换显示)