Я пишу плагин ParaView версии 5.1.2 на C ++ для визуализации данных облака точек, полученных с помощью датчика LiDAR. Я заметил, что Velodyne имеет пользовательское приложение ParaView с открытым исходным кодом для визуализации своих данных LiDAR, которое называется Veloview. Я настроил часть их кода для начала, но я застрял сейчас.
До сих пор я писал программу для чтения, которая берет файл pcap и отображает облако точек, которое может воспроизводиться кадр за кадром. Я также написал источник ParaView, который прослушивает порт и захватывает пакеты udp, а после того, как они захвачены, использует устройство чтения, чтобы разделить их на кадры и визуализировать ПК.
Теперь я хотел бы взять живые пакеты udp и визуализировать облако точек в режиме реального времени по завершении каждого кадра.
У меня проблемы с выполнением этого из-за структуры плагина ParaView. В настоящее время мой читатель отображает фрейм при вызове метода RequestData. Мой метод выглядит примерно так.
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector){
vtkPolyData* output = vtkPolyData::GetData(outputVector);
vtkInformation* info = outputVector->GetInformationObject(0);
int timestep = 0;
if (info->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP()))
{
double timeRequest = info->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP());
int length = info->Length(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
timestep = static_cast<int>(floor(timeRequest + 0.5));
}
this->Open();
// GetFrame returns a vtkSmartPointer<vtkPolyData> that is the frame
output->ShallowCopy(this->GetFrame(timestep));
this->Close();
return 1;
}
Метод RequestData вызывается каждый раз, когда временной шаг обновляется в интерфейсе ParaView. Затем кадр с этого временного шага копируется в выходной вектор.
Я не уверен, как реализовать это с живыми данными, потому что в этом случае метод RequestData не вызывается, потому что не запрашиваются временные шаги. Я видел, что есть способ сохранить выполнение RequestData, используя CONTINUE_EXECUTING () таким образом.
request->Set(vtkStreamingDemandDrivenPipeline::CONTINUE_EXECUTING(), 1);
Но я не знаю, предполагается ли это использовать для визуализации живых данных.
На данный момент мне интересно просто читать живые пакеты и выбрасывать их, как только их кадр рендерится. Кто-нибудь знает, как мне этого добиться?