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