Я хочу использовать 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). «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, если массив не найден.
NULL также возвращается, если массив с данным именем не является
vtkDataArray. Чтобы получить доступ к vtkStringArray, vtkUnicodeStringArray или
vtkVariantArray, используйте GetAbstractArray (const char * arrayName).
Других решений пока нет …