我想使用vtkArrayCalculator,用于Paraview过滤器,如下所述:ArrayCalculatorExample
vtkSmartPointer<vtkArrayCalculator> calculator = vtkSmartPointer<vtkArrayCalculator>::New();
calculator->SetInputData(input);
calculator->AddScalarArrayName("u");
calculator->SetFunction("u+1");
calculator->SetResultArrayName("wind_velocity");
calculator->Update();
vtkSmartPointer<vtkFloatArray> windVelocity =
vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity"));
现在我想用(或类似命令)访问数据
windVelocity->GetValue(0);
我收到“分段错误(核心转储)”。
“input”是vtkStructuredGrid,“u”是vtkDataArray(可以向下转换为vtkFloatArray而没有问题)。 可以通过
访问input->GetPointData()->GetArray("u");
我非常感谢每一个对我所做错事的暗示!
编辑:我已经尝试了以下
vtkSmartPointer<vtkFloatArray> windVelocity = vtkSmartPointer<vtkFloatArray>::New();
windVelocity->DeepCopy(vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity")));
答案 0 :(得分:2)
我建议拆分vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity"))
的长链并使用调试器来查看中间结果是什么。
在阅读GetArray
的定义时,它指出在各种条件下该函数可能会返回NULL
。检查GetArray
的返回值;很可能你没有回到你的期望。
vtkDataArray * vtkFieldData :: GetArray(const char * arrayName)
内联不建议使用。改为使用GetAbstractArray(const char * arrayName)。
返回给定名称的数组。如果找不到数组,则返回NULL。 如果具有给定名称的数组不是a,则也返回NULL vtkDataArray。访问vtkStringArray,vtkUnicodeStringArray或 vtkVariantArray,使用GetAbstractArray(const char * arrayName)。