发布
社区首页 >问答首页 >使用Python为每个单元从VTK(vtu)文件中提取矢量数据,

使用Python为每个单元从VTK(vtu)文件中提取矢量数据,
EN

Stack Overflow用户
提问于 2018-12-29 17:47:02
回答 1查看 1.7K关注 0票数 0

我有大量(~200)的VTK(VTU) XML文件,在X、Y和Z方向上包含一些矢量数据作为组件。它是用base64编码的。我试图编写一个简单的python代码来逐个读取这些VTU(xml)文件并提取向量信息,并以某种形式存储它。我对编程很陌生,我搜索了很多,但是找不到任何关于这方面的教程或文档。有人能帮我从VTU文件中提取特定的向量信息吗?我的VTU文件看起来像这样。

代码语言:javascript
代码运行次数:0
复制
    <?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" header_type="UInt32" compressor="vtkZLibDataCompressor">
  <UnstructuredGrid>
    <FieldData>
      <DataArray type="Float64" Name="timeInPs" NumberOfTuples="1" format="appended" RangeMin="3830100.0073"         RangeMax="3830100.0073"         offset="0"                   />
    </FieldData>
    <Piece NumberOfPoints="611"                  NumberOfCells="2379"                >
      <PointData Scalars="Material" Vectors="Magnetization">
        <DataArray type="Float64" Name="Magnetization" NumberOfComponents="3" format="appended" RangeMin="1"                    RangeMax="1"                    offset="48"                  />
        <DataArray type="Int32" Name="Material" format="appended" RangeMin="0"                    RangeMax="0"                    offset="16484"               />
      </PointData>
      <CellData>
      </CellData>
      <Points>
        <DataArray type="Float32" Name="Points" NumberOfComponents="3" format="appended" RangeMin="1.6616296724e-15"     RangeMax="5.000000259"          offset="16544"               >
          <InformationKey name="L2_NORM_RANGE" location="vtkDataArray" length="2">
            <Value index="0">
              1.6616296724e-15
            </Value>
            <Value index="1">
              5.000000259
            </Value>
          </InformationKey>
        </DataArray>
      </Points>
      <Cells>
        <DataArray type="Int64" Name="connectivity" format="appended" RangeMin=""                     RangeMax=""                     offset="23988"               />
        <DataArray type="Int64" Name="offsets" format="appended" RangeMin=""                     RangeMax=""                     offset="46064"               />
        <DataArray type="UInt8" Name="types" format="appended" RangeMin=""                     RangeMax=""                     offset="50312"               />
      </Cells>
    </Piece>
  </UnstructuredGrid>
  <AppendedData encoding="base64">
   _AQAAAACAAAAIAAAAEAAAAA==eJzT2fGWYZWFryMAECkDQg==AQAAAACAAABIOQAAFTAAAA==eJwtm3k81N/D6TM==eJzj4hoFo2AUjIJRMApGwSgYBWQCABzvXO8=
  </AppendedData>
</VTKFile>
EN

Stack Overflow用户

回答已采纳

发布于 2019-01-07 10:48:25

来自VTKExamples

代码语言:javascript
代码运行次数:0
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# by Panos Mavrogiorgos, email: pmav99 <> gmail

import vtk.vtk

# The source file
file_name = "path/to/your/file.vtu"

# Read the source file.
reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName(file_name)
reader.Update()  # Needed because of GetScalarRange
output = reader.GetOutput()
scalar_range = output.GetScalarRange()

# Create the mapper that corresponds the objects of the vtk.vtk file
# into graphics elements
mapper = vtk.vtkDataSetMapper()
mapper.SetInputData(output)
mapper.SetScalarRange(scalar_range)

# Create the Actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# Create the Renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(1, 1, 1)  # Set background to white

# Create the RendererWindow
renderer_window = vtk.vtkRenderWindow()
renderer_window.AddRenderer(renderer)

# Create the RendererWindowInteractor and display the vtk_file
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderer_window)
interactor.Initialize()
interactor.Start()
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53971939

复制
相关文章

相似问题

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