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


我收到“分段错误(核心已转储)”。

“输入”是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。
  如果具有给定名称的数组不是a,则还返回NULL。
  vtkDataArray。要访问vtkStringArray,vtkUnicodeStringArray或
  vtkVariantArray,请使用GetAbstractArray(const char * arrayName)。

09-04 02:04