如何将 vtkpolydata 转换为 vtkimagedata?

How to convert vtkpolydata into vtkimagedata?

本文关键字:vtkimagedata 转换 vtkpolydata      更新时间:2023-10-16

在vtp(或xml?(文件中,我有一组点,每个点的位置(x,y,z(,质量(m(和密度(rho(。

他们看起来像这样

<?xml version="1.0"?>
<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian" header_type="UInt32" compressor="vtkZLibDataCompressor">
<PolyData>
<Piece NumberOfPoints="524288"               NumberOfVerts="0"                    NumberOfLines="0"                    NumberOfStrips="0"                    NumberOfPolys="0"                   >
<PointData>
<DataArray type="Float32" Name="vx" format="appended" RangeMin="-10617.716797"        RangeMax="11650.322266"         offset="0"                   />
<DataArray type="Float32" Name="vy" format="appended" RangeMin="-12008.198242"        RangeMax="11676.560547"         offset="2554076"             />
<DataArray type="Float32" Name="vz" format="appended" RangeMin="-10880.447266"        RangeMax="11361.508789"         offset="5104080"             />
<DataArray type="Float32" Name="mass" format="appended" RangeMin="0.16916139424"        RangeMax="0.83083856106"        offset="7655432"             />
<DataArray type="Float32" Name="uu" format="appended" RangeMin="0"                    RangeMax="117252.91406"         offset="7742064"             />
<DataArray type="Float32" Name="hh" format="appended" RangeMin="0"                    RangeMax="4.1185030937"         offset="8877700"             />
<DataArray type="Float32" Name="mu" format="appended" RangeMin="1.2307692766"         RangeMax="1.2307692766"         offset="10032668"            />
<DataArray type="Float32" Name="rho" format="appended" RangeMin="0"                    RangeMax="49503150080"          offset="10038236"            />
<DataArray type="Float32" Name="phi" format="appended" RangeMin="-1.3579902649"        RangeMax="1.2645899057"         offset="11265024"            />
<DataArray type="Int64" Name="id" format="appended" RangeMin="0"                    RangeMax="524287"               offset="13840232"            />
<DataArray type="UInt16" Name="mask" format="appended" RangeMin="0"                    RangeMax="3"                    offset="15044924"            />
</PointData>
<CellData>
</CellData>
<Points>
<DataArray type="Float32" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0.89113022864"        RangeMax="110.020575"           offset="15133592"            />
</Points>
<Verts>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin=""                     RangeMax=""                     offset="22080132"            />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin=""                     RangeMax=""                     offset="22080148"            />
</Verts>
<Lines>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin=""                     RangeMax=""                     offset="22080164"            />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin=""                     RangeMax=""                     offset="22080180"            />
</Lines>
<Strips>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin=""                     RangeMax=""                     offset="22080196"            />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin=""                     RangeMax=""                     offset="22080212"            />
</Strips>
<Polys>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin=""                     RangeMax=""                     offset="22080228"            />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin=""                     RangeMax=""                     offset="22080244"            />
</Polys>
</Piece>
</PolyData>
<AppendedData encoding="base64">
...
</AppendedData>
</VTKFile

我想使用它来做一些体积渲染,因此我需要将其作为 ImageData。

我的第一个愚蠢方法是:使用vtkXMLImageDataReader而不是vtkXMLPolyDataReader。它显然不起作用。

我该怎么做才能将其转换为ImageData或使其与任何卷映射器一起使用?

谢谢

使用vtkplotter,您可以从一组稀疏的点创建 vtkVolume 插值:

from vtkplotter import *
mymesh = ... # vtkPolyData with pointdata
vol = interpolateToVolume(Actor(mymesh))
#write(vol, 'output.vti')
show(vol)

看这里。

我可能在问题中遗漏了一些东西。但据我了解,您可以简单地遵循以下示例:链接