c++ - 获取 vtkPoint 数据坐标的顺序指针

标签 c++ pointers vtk

我编写了以下函数来存储 vtkPoint 的 (x, y, z)在 double 类型的数组中和大小 3*N , 其中N是顶点(或点)的数量。

double* myClass::getMyPoints(void)
{
    double* vertices = new double[this->m_numberOfVertices * 3];    
    for (vtkIdType ivert = 0; ivert < this->m_numberOfVertices; ivert++)
        for (auto i = 0; i < 3; ++i)
            this->m_points->GetPoint(ivert, &vertices[3 * ivert]);

    return vertices;
}

哪里m_pointsmyClass 的成员类型为 vtkSmartPointer<vtkPoints> .

这个函数做我想做的并且工作得很好。我想知道是否有一种优雅的方式来获取顺序指针。我试过 GetVoidPointer() ,这看起来像一个优雅的单行代码,以避免 for循环但在函数返回后无法正确获取坐标 vertices .

(double*)(m_points->GetData()->GetVoidPointer(0));

有人可以帮我吗?

最佳答案

vtkPoints 在内部将其数据存储为 float 数组而不是 double 数组。因此,您可能需要修改函数以使用 float* 而不是 double*。如果我们想为 vtkPoints 使用 double 数组,那么我们应该调用 SetDataTypeToDouble()vtkPoints 对象上。

#include <stdio.h>
#include <stdlib.h>
#include <vtkPoints.h>
#include <vtkSmartPointer.h>

int main(){
    // Create data
    auto N = 5;
    vtkNew<vtkPoints> pts;
    pts->SetDataTypeToDouble();
    for(auto i=0; i < N; ++i)
         pts->InsertNextPoint(rand()%100,rand()%100,rand()%100);

    // Read using for loop
    std::cout<< "Using for loop ... " << std::endl;
    for( auto j=0; j < N; ++j ){
         double p[3];
         pts->GetPoint( j, p );
         std::cout<< p[0] << "," << p[1] << "," << p[2] << std::endl;
    }

    // Read using GetVoidPointer()
    std::cout<< "Using GetVoidPointer() ... " << std::endl;
    auto data_ptr = (double*) pts->GetData()->GetVoidPointer(0);
    for( auto k = 0; k < N; ++k )
           std::cout<< *(data_ptr + 3*k) << ","
                 << *(data_ptr + 3*k + 1) << ","
                 << *(data_ptr + 3*k + 2) << std::endl;

    return 0;
}

结果如下:

Test that there are N = 5 tuples.
Using for loop ... 
83,86,77
15,93,35
86,92,49
21,62,27
90,59,63
Using GetVoidPointer() ... 
83,86,77
15,93,35
86,92,49
21,62,27
90,59,63

关于c++ - 获取 vtkPoint 数据坐标的顺序指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51905940/

相关文章:

c - 我有类似这段代码的东西,如果有办法的话,我想知道如何获取传入的数组元素的数量

c++ - 如何将不可编译的配置文件添加到QT Project中?

c++ - Xcode、C++ 和 SFML。库问题

c++ - 我再次对指针感到困惑

c++ - 了解 vtu 文件大小

file-format - 如何以 VTK 文件格式表示体素体积?

python - 将 vtkTimerCallback 与 QVTKRenderWindowInteractor 一起使用不起作用

c++ - 我的函数应该接受指针还是智能指针?

c++ - opencv数组大于255

c++ - 将指针地址从二维数组转移到结构