显示vtkUniformGrid时的paraview错误?

时间:2014-03-11 21:24:54

标签: vtk paraview

我在Paraview中显示一个vtkUNiformGrid,它包含(除了其他东西)每个点中的3分量流向量。当我使用体积渲染显示数据集时,它只显示罚款。但是,当我将箭头字形添加到相同的数据时,它们确实显示相同的数据,但在其他地方,较小和多个副本(数量为9)。也许图像更好地表达了我的意思: screenshot

我有点不知道在哪里看。我搞砸了什么?其他想法?

2 个答案:

答案 0 :(得分:0)

为了帮助您进行调试,请打开第二个布局窗口并选择“电子表格视图”,然后查看要应用字形过滤器的源。您尝试在PointData下绘制的矢量数据是?然后检查字形过滤器属性,向量下拉框表示您要绘制的数组。

答案 1 :(得分:0)

仅仅为了记录,原因实际上是以错误的方式将数据写入vtkDoubleArray - 数组有3个组件,索引实际上是应有的1/3,x /穿插的y / z值(正如我所知,在下三分之一处给出了3x3模式);我假设组件是连续存储的,显然不是这种情况。

旧代码是这样的:

auto flow=vtkSmartPointer<vtkDoubleArray>::New();
flow->SetNumberOfComponents(3);

auto grid=vtkSmartPointer<vtkUniformGrid>::New();
grid->SetDimensions(...);
grid->GetPointData()->AddArray(flow);

for(int i:{0,1,2}) flow->FillComponent(i,0);

for(ijk: ... /* traverses the grid, each point potentially more than once */ ){
   vtkIdType dataId=grid->ComputePointId(ijk);
   // XXX: this is what caused troubles:
   double* f0=flow->GetPointer(dataId);
   f[0]+=dx;
   f[1]+=dy;
   f[2]+=dz;
}

循环体的正确版本是:

double f[3];
flow->GetTupleValue(dataId,f); // copy the data
f[0]+=dx;
f[1]+=dy;
f[2]+=dz;
flow->SetTupleValue(dataId,f);

标量和矢量数据集现在都匹配: screenshot-improved

相关问题