Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to access individual points? #307

Open
kjgbrt opened this issue Oct 10, 2024 · 0 comments
Open

How to access individual points? #307

kjgbrt opened this issue Oct 10, 2024 · 0 comments
Labels

Comments

@kjgbrt
Copy link

kjgbrt commented Oct 10, 2024

Hello, first of all thank you for the library and the fantastic effort. This library seems like the more promising option on vcpkg, compared to the original library I believe this one is forked from. I'm well aware that there are no official tutorials and that the documentation is very limited. In the future, I'd honestly like to help a little bit to help others not lose so much time.

My main issue: I need to use E57 format to access a point cloud because it's the only format that seems to work for other tools I'm working with. I'm trying to work with a toy example, so I made a very simple trapezoid of 8 points and exported the ascii format to e57 via cloud compare. The points are really just the following:

0.0 0.0 0.0
4.0 0.0 0.0
4.0 4.0 0.0
0.0 4.0 0.0
1.0 1.0 2.0
3.0 1.0 2.0
3.0 3.0 2.0
1.0 3.0 2.0

So, I'm really just dipping my toes in E57 to get what I need (and actually keep working with data in PCL). However, I've spent nearly 2 days trying to access each point in what I feel is a very intuitive way: trying to iterate over some kind of array in a loop and print to screen. However, no matter what I've searched, including in this repo's unittesting files, I can't print the value of a single point to screen. Sorry for the rant, and I'm sorry to ask what seems like a novice question, but could someone please help me complete the code below. Thank you very very much in advance.

// above: #include <E57Format/E57SimpleReader.h>
// (... int main, etc ...)
    // load with e57 lib, then convert to point cloud
    e57::ReaderOptions opts;
    e57::Reader fe(fpath, opts);
    int scanIndex = 0;
    e57::Data3D scanHeader;

    fe.ReadData3D(scanIndex, scanHeader);
    int const npts = scanHeader.pointCount;
    cout << "npoints: " << npts << endl;

    // this part doesn't work correctly
    e57::Data3DPointsFloat pointsData(scanHeader);
    e57::CompressedVectorReader vectorReader = fe.SetUpData3DPointsData(scanIndex, npts, pointsData);
    pcl::PointXYZ ipt(pointsData.cartesianX[0], pointsData.cartesianY[0], pointsData.cartesianZ[0]);
    cout << "sample: " << ipt << endl; // somehow scaled / 

current output:

npoints: 8
sample: (-4.31602e+08,-4.31602e+08,-4.31602e+08)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants