Я хочу использовать 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);
У меня возникает «ошибка сегментации (ядро сбрасывается)».
«input» - это vtkStructuredGrid, а «u» - это vtkDataArray (который может быть отключен в vtkFloatArray без проблем). Доступ к «u» доступен по адресу
input->GetPointData()->GetArray("u");
Каждый намек на то, что я делаю неправильно, очень ценится!
Edit: Я уже пробовал следующие
vtkSmartPointer<vtkFloatArray> windVelocity = vtkSmartPointer<vtkFloatArray>::New();
windVelocity->DeepCopy(vtkFloatArray::SafeDownCast(calculator->GetStructuredGridOutput()->GetPointData()->GetArray("wind_velocity")));
Благодаря вашей подсказке я снова посмотрел на эту команду, и ошибка возникает, когда я использую команду vtkFloatArray :: SafeDownCast(), иначе она не возвращает NULL. Я узнал, что на самом деле он возвращает vtkDoubleArray. Я думал, VTK может сбрасывать с двойного на массив с плавающей точкой, но, по-видимому, это не работает в моем случае. Спасибо, что заглянули в мою проблему, это очень помогло! –