Извлечение векторных данных из файла VTK (vtu) с использованием Python для каждой ячейки, - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть большое количество (~ 200) XML-файлов VTK (VTU), содержащих некоторые векторные данные в качестве компонентов в направлении X, Y и Z.Это в некоторой кодировке base64 .Я пытаюсь написать простой код на Python, чтобы читать эти файлы VTU (xml) один за другим, извлекать векторную информацию и сохранять ее в некоторой форме.Я новичок в программировании, я много искал, но не могу найти учебники или документацию по этому вопросу.Может ли кто-нибудь помочь мне, предложив способ извлечения конкретной векторной информации из файла VTU?Мой файл VTU выглядит следующим образом.

    <?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>

1 Ответ

0 голосов
/ 07 января 2019

Из VTKE примеров

#!/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()
...