我在Paraview中显示一个vtkUNiformGrid,它包含(除了其他东西)每个点中的3分量流向量。当我使用体积渲染显示数据集时,它只显示罚款。但是,当我将箭头字形添加到相同的数据时,它们确实显示相同的数据,但在其他地方,较小和多个副本(数量为9)。也许图像更好地表达了我的意思:
我有点不知道在哪里看。我搞砸了什么?其他想法?
答案 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);
标量和矢量数据集现在都匹配: