c++ - 如何将 vtkpolydata 转换为 vtkimagedata?
问题描述
在 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。
我的第一个愚蠢的方法是:使用 avtkXMLImageDataReader
而不是 a vtkXMLPolyDataReader
。它显然没有用。
我该怎么做才能将其转换为ImageData
任何 volumeMapper 或使其与任何 volumeMapper 一起使用?
谢谢
解决方案
使用vtkplotter
您可以从一组稀疏点创建一个 vtkVolume 插值:
from vtkplotter import *
mymesh = ... # vtkPolyData with pointdata
vol = interpolateToVolume(Actor(mymesh))
#write(vol, 'output.vti')
show(vol)
看这里。
推荐阅读
- python - 名称 other_script 未定义
- reactjs - Redux-saga 没有在我的 reactJS 应用程序中运行
- scala - 如何使 scala 2.12.11 代码在 scala 2.13.2 中运行?
- kubernetes - OPA Gatekeeper 可以用来审计 K8s PodDisruptionBudget 状态字段吗?
- javascript - 反应 javascript 获取 python
- web - Recaptcha - 在不同的应用程序中使用相同的站点密钥是否安全/良好的做法
- python-3.x - vtkOBJReader 对象没有 Object (.obj) 文件的属性 SetFileNameMTL (.mtl)
- c# - C#中使用网络信息的网线状态
- c# - 无法访问 GridView -> TemplateField -> EditItemTemplate 中的某些元素的问题
- android - 计算年龄不准确