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