gpt4 book ai didi

c++ - 将 3D 数组( vector )转换为 vtk 非结构化网格

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:57 24 4
gpt4 key购买 nike

我有一堆黑白图像,我将它们作为包含 0 和 1 的 3D vector 存储在我的 C++ 代码中。我想将这个 3D vector 转换为 vtk 非结构化网格,每个体素都是一个正交元素。有没有图书馆可以做到这一点

最佳答案

可以使用 vtk 将体素作为基本单元来创建非结构化网格。检查这个document提供有关其他可用细胞类型的详细信息。要创建这样的网格,您应该解析 vector 的内容并创建每个体素,然后将其添加到网格中,如以下 python 代码中所做的那样(现在没有可用于测试的 C++,但语法很容易移植):

import vtk

voxelPoints = vtk.vtkPoints()
voxelPoints.SetNumberOfPoints(8)
voxelPoints.InsertPoint(0, 0, 0, 0)
voxelPoints.InsertPoint(1, 1, 0, 0)
voxelPoints.InsertPoint(2, 0, 1, 0)
voxelPoints.InsertPoint(3, 1, 1, 0)
voxelPoints.InsertPoint(4, 0, 0, 1)
voxelPoints.InsertPoint(5, 1, 0, 1)
voxelPoints.InsertPoint(6, 0, 1, 1)
voxelPoints.InsertPoint(7, 1, 1, 1)

aVoxel = vtk.vtkVoxel()
aVoxel.GetPointIds().SetId(0, 0)
aVoxel.GetPointIds().SetId(1, 1)
aVoxel.GetPointIds().SetId(2, 2)
aVoxel.GetPointIds().SetId(3, 3)
aVoxel.GetPointIds().SetId(4, 4)
aVoxel.GetPointIds().SetId(5, 5)
aVoxel.GetPointIds().SetId(6, 6)
aVoxel.GetPointIds().SetId(7, 7)

aVoxelGrid = vtk.vtkUnstructuredGrid()
aVoxelGrid.InsertNextCell(aVoxel.GetCellType(), aVoxel.GetPointIds())
aVoxelGrid.SetPoints(voxelPoints)

aVoxelMapper = vtk.vtkDataSetMapper()
aVoxelMapper.SetInputData(aVoxelGrid)

aVoxelActor = vtk.vtkActor()
aVoxelActor.SetMapper(aVoxelMapper)
aVoxelActor.GetProperty().SetDiffuseColor(1, 0, 0)

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
ren.AddActor(aVoxelActor)

# Render the scene and start interaction.
iren.Initialize()
renWin.Render()
iren.Start()

关于c++ - 将 3D 数组( vector )转换为 vtk 非结构化网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com