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

时间:2017-02-01 21:24:31

标签: c++ vtk paraview

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

1 个答案:

答案 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)。