diff --git a/src/Mod/Points/App/PointsAlgos.cpp b/src/Mod/Points/App/PointsAlgos.cpp index cfa2bc7370..6cedffb590 100644 --- a/src/Mod/Points/App/PointsAlgos.cpp +++ b/src/Mod/Points/App/PointsAlgos.cpp @@ -46,6 +46,9 @@ #include #include +#include +#include + using namespace Points; void PointsAlgos::Load(PointKernel &points, const char *FileName) @@ -1303,6 +1306,242 @@ void PcdReader::readBinary(bool transpose, // ---------------------------------------------------------------------------- +E57Reader::E57Reader() +{ +} + +E57Reader::~E57Reader() +{ +} + +void E57Reader::read(const std::string& filename) +{ + try { + // get settings + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Points/E57"); + bool useColor = hGrp->GetBool("UseColor", true); + bool checkState = hGrp->GetBool("CheckInvalidState", true); + float minDistance = hGrp->GetFloat("MinDistance", -1.); + + // read file + e57::ImageFile imfi(filename, "r"); + e57::StructureNode root = imfi.root(); + if (root.isDefined("data3D")) { + e57::VectorNode data3D(root.get("data3D")); + for (int child=0; child sdb; + for (int i=0; i0)) { + if (Base::Distance(last,pt)(rgb[ptr_rgb[0]*buf_size+i])/255.0f; + c.g = static_cast(rgb[ptr_rgb[1]*buf_size+i])/255.0f; + c.b = static_cast(rgb[ptr_rgb[2]*buf_size+i])/255.0f; + if (inty) { c.a = intensity[i]; } + colors.push_back(c); + } + } + } + } + } + else { + Base::Console().Message("Missing channels xyz."); + } + } + } + } + catch (...) { + points.clear(); + throw Base::BadFormatError("E57"); + } +} + +// ---------------------------------------------------------------------------- + Writer::Writer(const PointKernel& p) : points(p) { width = p.size(); diff --git a/src/Mod/Points/App/PointsAlgos.h b/src/Mod/Points/App/PointsAlgos.h index fb2b849b76..e3814012ae 100644 --- a/src/Mod/Points/App/PointsAlgos.h +++ b/src/Mod/Points/App/PointsAlgos.h @@ -115,6 +115,14 @@ private: Eigen::MatrixXd& data); }; +class E57Reader : public Reader +{ +public: + E57Reader(); + ~E57Reader(); + void read(const std::string& filename); +}; + class Writer { public: