You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
2 months ago
|
// License: Apache 2.0. See LICENSE file in root directory.
|
||
|
// Copyright(c) 2018 Intel Corporation. All Rights Reserved.
|
||
|
|
||
|
#ifndef __RS_CONVERTER_CONVERTER_PLY_H
|
||
|
#define __RS_CONVERTER_CONVERTER_PLY_H
|
||
|
|
||
|
|
||
|
#include "../converter.hpp"
|
||
|
|
||
|
|
||
|
namespace rs2 {
|
||
|
namespace tools {
|
||
|
namespace converter {
|
||
|
|
||
|
class converter_ply : public converter_base {
|
||
|
protected:
|
||
|
std::string _filePath;
|
||
|
|
||
|
public:
|
||
|
converter_ply(const std::string& filePath)
|
||
|
: _filePath(filePath)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
std::string name() const override
|
||
|
{
|
||
|
return "PLY converter";
|
||
|
}
|
||
|
|
||
|
void convert(rs2::frame& frame) override
|
||
|
{
|
||
|
rs2::pointcloud pc;
|
||
|
start_worker(
|
||
|
[this, &frame, pc]() mutable {
|
||
|
auto frameset = frame.as<rs2::frameset>();
|
||
|
auto frameDepth = frameset.get_depth_frame();
|
||
|
auto frameColor = frameset.get_color_frame();
|
||
|
|
||
|
if (frameDepth && frameColor) {
|
||
|
if (frames_map_get_and_set(rs2_stream::RS2_STREAM_ANY, frameDepth.get_frame_number())) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
pc.map_to(frameColor);
|
||
|
|
||
|
auto points = pc.calculate(frameDepth);
|
||
|
|
||
|
std::stringstream filename;
|
||
|
filename << _filePath
|
||
|
<< "_" << std::setprecision(14) << std::fixed << frameDepth.get_timestamp()
|
||
|
<< ".ply";
|
||
|
|
||
|
points.export_to_ply(filename.str(), frameColor);
|
||
|
|
||
|
std::stringstream metadata_file;
|
||
|
metadata_file << _filePath
|
||
|
<< "_metadata_" << std::setprecision(14) << std::fixed << frameDepth.get_timestamp()
|
||
|
<< ".txt";
|
||
|
|
||
|
metadata_to_txtfile(frameDepth, metadata_file.str());
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif
|