vtk实战(三十六)——读取结构化点云数据

#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkStructuredPointsReader.h>
#include <vtkImageDataGeometryFilter.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

int main()
{
    std::string inputFilename = "ironProt.vtk";

    vtkSmartPointer<vtkStructuredPointsReader> reader =
        vtkSmartPointer<vtkStructuredPointsReader>::New();
    reader->SetFileName(inputFilename.c_str());
    reader->Update();

    vtkSmartPointer<vtkImageDataGeometryFilter> geometryFilter =
        vtkSmartPointer<vtkImageDataGeometryFilter>::New();
    geometryFilter->SetInputConnection(reader->GetOutputPort());
    geometryFilter->Update();

    vtkSmartPointer<vtkPolyDataMapper> mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(geometryFilter->GetOutputPort());

    vtkSmartPointer<vtkActor> actor =
        vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    vtkSmartPointer<vtkRenderer> renderer =
        vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    renderer->AddActor(actor);
    renderer->SetBackground(.3, .6, .3); 
    renderWindow->Render();
    renderWindowInteractor->Start();

    return 0;
}

result

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VTK是一个用于可视和图形处理的开源库。它提供了很多用于创建、处理和呈现数据的工具和算法,包括可视结构数据集的功能。在VTK中使用OpenMP并行创建非结构数据集可以提高效率,加速计算过程。 以下是使用OpenMP并行创建非结构数据集的步骤: 1. 导入必要的头文件和命名空间。 ```c++ #include <vtkUnstructuredGrid.h> #include <vtkPoints.h> #include <vtkCellArray.h> #include <vtkSmartPointer.h> #include <vtkFloatArray.h> #include <vtkXMLUnstructuredGridWriter.h> #include <vtkXMLPUnstructuredGridWriter.h> #include <omp.h> using namespace std; ``` 2. 定义网格的参数,包括网格大小和网格分辨率。 ```c++ int nx = 100; int ny = 100; int nz = 100; int num_points = nx * ny * nz; ``` 3. 创建网格点的坐标数组,并使用OpenMP并行计算。 ```c++ vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->SetNumberOfPoints(num_points); #pragma omp parallel for for (int k = 0; k < nz; k++) { for (int j = 0; j < ny; j++) { for (int i = 0; i < nx; i++) { double x = i / double(nx - 1); double y = j / double(ny - 1); double z = k / double(nz - 1); int index = k * ny * nx + j * nx + i; points->SetPoint(index, x, y, z); } } } ``` 4. 创建单元格数组,并使用OpenMP并行计算。 ```c++ vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New(); cells->Allocate(num_points); #pragma omp parallel for for (int k = 0; k < nz - 1; k++) { for (int j = 0; j < ny - 1; j++) { for (int i = 0; i < nx - 1; i++) { int id0 = k * ny * nx + j * nx + i; int id1 = id0 + 1; int id2 = id0 + nx; int id3 = id2 + 1; int id4 = id0 + nx * ny; int id5 = id4 + 1; int id6 = id4 + nx; int id7 = id6 + 1; vtkSmartPointer<vtkHexahedron> hex = vtkSmartPointer<vtkHexahedron>::New(); hex->GetPointIds()->SetId(0, id0); hex->GetPointIds()->SetId(1, id1); hex->GetPointIds()->SetId(2, id3); hex->GetPointIds()->SetId(3, id2); hex->GetPointIds()->SetId(4, id4); hex->GetPointIds()->SetId(5, id5); hex->GetPointIds()->SetId(6, id7); hex->GetPointIds()->SetId(7, id6); cells->InsertNextCell(hex); } } } ``` 5. 将网格数据写入文件。 ```c++ vtkSmartPointer<vtkUnstructuredGrid> grid = vtkSmartPointer<vtkUnstructuredGrid>::New(); grid->SetPoints(points); grid->SetCells(VTK_HEXAHEDRON, cells); vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New(); writer->SetFileName("grid.vtu"); writer->SetInputData(grid); writer->Write(); ``` 以上就是在VTK中使用OpenMP并行创建非结构数据集的步骤,通过并行计算可以显著提高计算效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值