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

vtkArrayCalculator - Segmentation fault when accessing the output

本文关键字:分段 错误 输出 语言 访问 vtkArrayCalculator      更新时间:2023-10-16

我想使用 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)。"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的定义时,它指出在各种条件下函数可能会返回NULL。检查 GetArray 的返回值;你很可能没有得到你所期望的。

vtkDataArray* vtkFieldData::GetArray ( const char * arrayName )
内嵌

不建议使用。请改用 GetAbstractArray(const char *arrayName)。

返回具有给定名称的数组。如果未找到数组,则返回 NULL。 如果具有给定名称的数组不是 vtkDataArray.要访问 vtkStringArray、vtkUnicodeStringArray,或 vtkVariantArray, use GetAbstractArray(const char *arrayName).