#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <cvb/composite.hpp>
#include <cvb/device_factory.hpp>
#include <cvb/driver/driver.hpp>
#include <cvb/driver/multi_part_image.hpp>
#include <cvb/image.hpp>
#include <cvb/plane_enumerator.hpp>
#include <cvb/point_cloud.hpp>
#include <cvb/utilities/utilities.hpp>
int main() {
try {
const constexpr auto numElemsToAcquire = 10;
auto infoList =
if (infoList.empty()) {
std::cout << "Discovered" << std::endl;
throw std::runtime_error(
"There is no available device for this demonstration.");
}
infoList[0].AccessToken(), Cvb::AcquisitionStack::GenTL);
const auto numStreams = device->StreamCount();
for (auto i = 0; i < numElemsToAcquire; i++) {
auto [pointCloud, waitStatus, enumerator] =
if (waitStatus != Cvb::WaitStatus::Ok) {
std::cout << "wait status not ok: " << static_cast<int>(waitStatus)
<< std::endl;
break;
}
if (composite->Purpose() == Cvb::CompositePurpose::PointCloud) {
const auto numberOfElements = composite->ItemCount();
std::cout << "Found " << numberOfElements << " point cloud parts"
<< std::endl;
auto xyz = Cvb::get<Cvb::PlaneEnumeratorPtr>(composite->ItemAt(0));
if (!xyz) {
std::cout << "Composite xyz is not a plane enumerator" << std::endl;
break;
}
if (!Cvb::holds_alternative<Cvb::PlanePtr>(composite->ItemAt(1))) {
std::cout << "Composite confidence is not a plane" << std::endl;
break;
}
if (!Cvb::holds_alternative<Cvb::ImagePtr>(composite->ItemAt(2))) {
std::cout << "Composite image is not an image" << std::endl;
break;
}
auto rgbImage = Cvb::get<Cvb::ImagePtr>(composite->ItemAt(2));
Cvb::PlaneRole::PixRGB_R);
Cvb::PlaneRole::PixRGB_G);
Cvb::PlaneRole::PixRGB_B);
composite->InsertItemAt(composite->ItemCount(), rPlane);
composite->InsertItemAt(composite->ItemCount(), gPlane);
composite->InsertItemAt(composite->ItemCount(), bPlane);
pointCloud->Save("xyzrgb.pcd");
} else {
std::cout << "The composite contains something unexpected" << std::endl;
break;
}
}
stream->Stop();
} catch (const std::exception &e) {
std::cout << e.what() << std::endl;
}
return 0;
}
static CompositePtr FromObject(std::shared_ptr< T > object)
static std::vector< DiscoveryInformation > Discover()
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)
static PlanePtr FromImagePlane(const ImagePlane &imagePlane, PlaneRole role=PlaneRole::Undefined)