2017-02-01 74 views
0

我想使用vtkArrayCalculator,用在的Paraview濾波器,如這裏描述的,當:ArrayCalculatorExamplevtkArrayCalculator - 分段故障訪問輸出

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"))); 

回答

2

我會建議分裂的vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity"))的長鏈,並使用調試器看到的中間結果是什麼。

當讀取GetArray的定義時,它聲明在各種條件下該函數可能返回NULL。檢查返回值GetArray;你很可能不會回到你期望的。

vtkDataArray * vtkFieldData ::的getArray(爲const char * arrayName中)
在線

不推薦使用。改爲使用GetAbstractArray(const char * arrayName)。

返回給定名稱的數組。如果找不到數組,則返回NULL。 如果給定名稱的數組不是 vtkDataArray,也會返回NULL。要訪問vtkStringArray,vtkUnicodeStringArray或 vtkVariantArray,請使用GetAbstractArray(const char * arrayName)。

+1

感謝您的提示,我再次查看了此命令,並在使用vtkFloatArray :: SafeDownCast()命令時發生錯誤,否則它不返回NULL。我發現,它實際上返回一個vtkDoubleArray。我認爲,VTK能夠從雙精度型轉換爲浮點型數組,但顯然這在我的情況下不起作用。感謝您查看我的問題,它幫助了很多! –