如何访问 pcl::PolygonMesh 内部的各个顶点?

问题描述 投票:0回答:1

我目前使用的是 Visual Studio 2022 我正在使用 vcpkg pcl:x64 库安装。 pcl版本:1.9.1-12 我期望能够访问每个多边形 3 个顶点。 不幸的是,我似乎无法访问与每个三角形关联的顶点。

#include <Eigen/Dense>
#include <pcl/common/io.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/passthrough.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/TextureMesh.h>

int main
{
    pcl::PolygonMesh mesh;
    pcl::io::loadPolygonFileOBJ("pathtomesh.meshfile.obj", mesh);
    pcl::PointXYZ v = mesh.polygons[0].vertices[0];
}

我收到的错误是: 不存在合适的构造函数来从“boost::random::seed_seq::result_type”转换为“pcl::PointXYZ”

c++ point-cloud-library
1个回答
1
投票

看起来 vertices 是一个 unsigned int 而不是 pcl::PointXYZ。这对我来说有点奇怪,因为我期望用双精度或浮点来存储顶点坐标。事实证明,mesh.polygons[0].vertices[0] 返回存储在点云中的网格中每个点的索引。因此,我能够通过将网格转换为 pcl::PointCloudpcl::PointXYZ 并将索引放入该函数来找到函数 mesh.polygons[0].vertices[0] 指向的点。

pcl::PolygonMesh mesh;
pcl::io::loadPolygonFileOBJ("D:\\testOBJs\\cube.obj", mesh);

pcl::PointCloud<pcl::PointXYZ>::Ptr allVertices(new pcl::PointCloud<pcl::PointXYZ>);

pcl::fromPCLPointCloud2(mesh.cloud, *allVertices);

std::cout << "All Vertices" << std::endl;
for (int i = 0; i < allVertices->size(); i++)
{
        std::cout << std::to_string(i) + "    " << allVertices->points[i] << std::endl;
}
std::cout << "All Polygons" << std::endl;
for (int i = 0; i < mesh.polygons.size(); i++)
{
        std::cout << std::endl;
        std::cout << mesh.polygons[i].vertices[0] << std::endl;
        std::cout << mesh.polygons[i].vertices[1] << std::endl;
        std::cout << mesh.polygons[i].vertices[2] << std::endl;
        std::cout << std::endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.