複合データセット#

class:pyvista.MultiBlock クラスは,反復処理可能な多くのデータセットを保持するための複合クラスです. MultiBlock はほとんどリストのように振る舞いますが,辞書のような機能も持っています.

リスト型機能#

空の複合データセットを作成します

import pyvista as pv
from pyvista import examples
blocks = pv.MultiBlock()
blocks
InformationBlocks
MultiBlockValues
N Blocks0
X Bounds0.000, 0.000
Y Bounds0.000, 0.000
Z Bounds0.000, 0.000
IndexNameType

コレクションにデータを追加します.

blocks.append(pv.Sphere())
blocks.append(pv.Cube(center=(0, 0, -1)))

MultiBlock をプロットすると,その中に含まれるすべてのメッシュをプロットします.

blocks.plot(smooth_shading=True)
../../_images/composite_3_0.png

MultiBlock はリスト形式であるため,インデックスを使用して個々のブロックにアクセスすることができます.

blocks[0]  # Sphere
HeaderData Arrays
PolyDataInformation
N Cells1680
N Points842
N Strips0
X Bounds-4.993e-01, 4.993e-01
Y Bounds-4.965e-01, 4.965e-01
Z Bounds-5.000e-01, 5.000e-01
N Arrays1
NameFieldTypeN CompMinMax
NormalsPointsfloat323-1.000e+001.000e+00

ブロックの長さは len() によってアクセスすることができます.

len(blocks)
2

または n_blocks 属性で指定します.

blocks.n_blocks
2

具体的には, MultiBlockcollections.abc.MutableSequence で, append, pop, insert などの操作をサポートします.これらの操作の中には,辞書のような使い方をするために,オプションで名前を指定することができるものです.

blocks.append(pv.Cone(), name="cone")
cone = blocks.pop(-1)  # Pops Cone
blocks.reverse()

また, MultiBlock はブロックを取得または設定するためのスライシングをサポートしています.

blocks[0:2]  # The Sphere and Cube objects in a new ``MultiBlock``
InformationBlocks
MultiBlockValues
N Blocks2
X Bounds-0.500, 0.500
Y Bounds-0.500, 0.500
Z Bounds-1.500, 0.500
IndexNameType
0Block-01PolyData
1Block-00PolyData

辞書的な機能#

MultiBlock は,いくつかの辞書機能も持っています. ブロックの名前を設定して,それらにアクセスすることができます.

blocks = pv.MultiBlock([pv.Sphere(), pv.Cube()])
blocks.set_block_name(0, "sphere")
blocks.set_block_name(1, "cube")
blocks["sphere"]  # Sphere
HeaderData Arrays
PolyDataInformation
N Cells1680
N Points842
N Strips0
X Bounds-4.993e-01, 4.993e-01
Y Bounds-4.965e-01, 4.965e-01
Z Bounds-5.000e-01, 5.000e-01
N Arrays1
NameFieldTypeN CompMinMax
NormalsPointsfloat323-1.000e+001.000e+00

注意点として, MultiBlock は辞書ではないので,一意なキーを強制することはできません. キーは None であることも可能です. 辞書のような機能を使用する際には,問題を回避するために特別な注意を払う必要があります.

PyVistaはリスト操作をするときに,キーの順序を正しく保とうとします.

blocks.reverse()
blocks.keys()
['cube', 'sphere']

辞書のような機能は,ファイルからデータを読み込むときに便利です. データにアクセスするためには,インデックスよりもキーの方が分かりやすい場合が多いです. pyvista.examples.download_cavity()MultiBlock 構造をネストした OpenFoam のデータセットです. トップレベルのオブジェクトには,2 つのエントリがあります.

data = examples.download_cavity()
data.keys()
['internalMesh', 'boundary']

"internalMesh" は, pyvista.UnstructuredGrid

data["internalMesh"]
HeaderData Arrays
UnstructuredGridInformation
N Cells400
N Points882
X Bounds0.000e+00, 1.000e-01
Y Bounds0.000e+00, 1.000e-01
Z Bounds0.000e+00, 1.000e-02
N Arrays4
NameFieldTypeN CompMinMax
UPointsfloat3230.000e+001.000e+00
pPointsfloat3210.000e+000.000e+00
UCellsfloat3230.000e+000.000e+00
pCellsfloat3210.000e+000.000e+00

"boundary" は,別の pyvista.MultiBlock

data["boundary"]
InformationBlocks
MultiBlockValues
N Blocks3
X Bounds0.000, 0.100
Y Bounds0.000, 0.100
Z Bounds0.000, 0.010
IndexNameType
0movingWallPolyData
1fixedWallsPolyData
2frontAndBackPolyData

pyvista.MultiBlock の辞書のような機能を使うことで,外部から入ってきたデータを簡単に調べたり使ったりすることができます. 各キーの名前は,データセットの人間にとって理解しやすい部分に対応しています.

data["boundary"].keys()
['movingWall', 'fixedWalls', 'frontAndBack']

このクラスの使用例

MultiBlock APIリファレンス#

pyvista.MultiBlock クラスは,PyVistaで空間的に参照される全てのデータセットに 共通な アトリビュートを保持します.この基本クラスはVTKの vtk.vtkMultiBlockDataSet クラスに似ています.

pyvista.MultiBlock(*args, **kwargs)

反復可能な多数のデータセットを保持する複合クラス.