vtkArrayCalculator — ошибка сегментации при доступе к выходу

Я хочу использовать 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")));

0

Решение

Я бы предложил разделить длинную цепочку 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).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]