如何将vtkpolydata转换为vtkimagedata?

问题描述 投票:0回答:2

在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或使其与任何volumeMapper兼容?

谢谢

c++ vtk
2个回答
0
投票
使用vtkplotter,您可以从一组稀疏点创建一个vtkVolume插值:

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

请参见here

0
投票
我可能在问题中遗漏了一些东西。但是据我了解,您可以简单地遵循此示例:link
© www.soinside.com 2019 - 2024. All rights reserved.