首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中对VTU文件进行体素化

在python中对VTU文件进行体素化
EN

Stack Overflow用户
提问于 2020-05-10 19:16:05
回答 2查看 215关注 0票数 0

如何使用python对附加的vtk未结构化文件(VTU)进行音效处理?理想情况下,我希望定义区域(xmin=-9, xmax=9)(ymin=-9, ymax=9)以及像素数(例如,每个方向上的(256,256) ),并将该区域提取到像素网格中并存储在文件中(填充了中空区域)。

VTUfile

下面是我如何将文件读入polyData

代码语言:javascript
复制
import vtk

# Read the source file.
reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName("internal.vtu")
reader.Update()  
polydata = reader.GetOutput()

如何将polydata现在转换为具有上述详细信息的文件?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-11 08:38:27

不确定这是否有帮助,我最近在使用vtkplotter时遇到了类似的问题,这可能会对你有用:

代码语言:javascript
复制
from vtkplotter import *
import numpy as np

g = load('internal.vtu')
g.pointColors("p", cmap='terrain')

pts = g.points()
field = g.getPointArray('U')
ars = Arrows(pts-field/5, pts+field/5, c='k')

zpr = np.linspace(-15,15, num=25)
probes = np.c_[np.zeros_like(zpr)-10, np.zeros_like(zpr), zpr]

str_lns = streamLines(g, probes, activeVectors='U', maxPropagation=60, lw=2)
str_lns.pointColors(cmap='jet')
str_lns.GetProperty().LightingOff()
str_lns.mapper().SetResolveCoincidentTopologyToPolygonOffset()

show(g, ars, Points(probes), str_lns, elevation=90)

vol = interpolateToVolume(g, dims=(50,2,50), bounds=(-9,9,0,0,-9,9))
# vol.imagedata() # retrieves the vtkImageData obj
lego = vol.legosurface(cmap='terrain')

show(lego, newPlotter=True, elevation=90)

票数 1
EN

Stack Overflow用户

发布于 2020-05-11 16:04:14

纯VTK应答

您应该使用vtkResampleToImage过滤器。https://vtk.org/doc/nightly/html/classvtkResampleToImage.html (文档是面向c++的,但方法在python中是相同的)

仅供参考,阅读器的输出是一个vtkUnstructuredGrid对象。polydata是用于3D曲面对象的另一种vtk数据集。查看此处了解更多信息:https://lorensen.github.io/VTKExamples/site/VTKFileFormats/#dataset-format

代码语言:javascript
复制
import vtk

reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName("/home/nicolas/Tmp/discourse/internal.vtu")
reader.Update()

toImage = vtk.vtkResampleToImage()
toImage.SetInputConnection(reader.GetOutputPort())
toImage.SetUseInputBounds(False)
toImage.SetSamplingDimensions(256,1,256)
toImage.SetSamplingBounds(-9, 9, -0.1, 0, -9, 9)
toImage.Update()

imageData = toImage.GetOutput()
imageData.GetPointData().SetActiveScalars("U")

# Visualization
mapper = vtk.vtkDataSetMapper()
mapper.SetInputConnection(toImage.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
renderWindow.Render()
renderWindowInteractor.Start()

# Write to file 
writer = vtk.vtkXMLImageDataWriter()
writer.SetFileName(filename)
writer.SetInputData(imageData)
writer.Write()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61711074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档