vtkArrayCalculator - 访问输出时出现分段错误

vtkArrayCalculator - Segmentation fault when accessing the output

我想使用 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);

我得到一个 "Segmentation fault (core dumped)"。

"input" 是一个 vtkStructuredGrid,"u" 是一个 vtkDataArray(可以毫无问题地转换为 vtkFloatArray)。 "u" 可以通过

访问
input->GetPointData()->GetArray("u");

非常感谢对我做错的每一个提示!

编辑:我已经尝试了以下

vtkSmartPointer<vtkFloatArray> windVelocity = vtkSmartPointer<vtkFloatArray>::New();
windVelocity->DeepCopy(vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity")));

我建议拆分 vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity")) 的长链并使用调试器查看中间结果是什么。

在阅读 GetArray 的定义时,它指出在各种条件下该函数可能 return NULL。检查 GetArray 的 return 值;很可能你没有得到你期望的结果。

vtkDataArray* vtkFieldData::GetArray ( const char * arrayName )
inline

Not recommended for use. Use GetAbstractArray(const char *arrayName) instead.

Return the array with the name given. Returns NULL if array not found. A NULL is also returned if the array with the given name is not a vtkDataArray. To access vtkStringArray, vtkUnicodeStringArray, or vtkVariantArray, use GetAbstractArray(const char *arrayName).