複合データセット#
pyvista.MultiBlock クラスは,反復処理可能な多くのデータセットを保持するための複合クラスです. MultiBlock はほとんどリストのように振る舞いますが,辞書のような機能も持っています.
リスト型機能#
空の複合データセットを作成します
import pyvista as pv
from pyvista import examples
blocks = pv.MultiBlock()
blocks
| Information | Blocks | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
コレクションにデータを追加します.
blocks.append(pv.Sphere())
blocks.append(pv.Cube(center=(0, 0, -1)))
MultiBlock をプロットすると,その中に含まれるすべてのメッシュをプロットします.
blocks.plot(smooth_shading=True)
MultiBlock はリスト形式であるため,インデックスを使用して個々のブロックにアクセスすることができます.
blocks[0] # Sphere
| Header | Data Arrays | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
ブロックの長さは len() によってアクセスすることができます.
len(blocks)
2
または n_blocks 属性で指定します.
blocks.n_blocks
2
具体的には, MultiBlock は collections.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``
| Information | Blocks | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
辞書的な機能#
MultiBlock は,いくつかの辞書機能も持っています. ブロックの名前を設定して,それらにアクセスすることができます.
blocks = pv.MultiBlock([pv.Sphere(), pv.Cube()])
blocks.set_block_name(0, "sphere")
blocks.set_block_name(1, "cube")
blocks["sphere"] # Sphere
| Header | Data Arrays | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
注意点として, 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"]
| Header | Data Arrays | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
"boundary" は,別の pyvista.MultiBlock .
data["boundary"]
| Information | Blocks | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
pyvista.MultiBlock の辞書のような機能を使うことで,外部から入ってきたデータを簡単に調べたり使ったりすることができます. 各キーの名前は,データセットの人間にとって理解しやすい部分に対応しています.
data["boundary"].keys()
['movingWall', 'fixedWalls', 'frontAndBack']
このクラスの使用例
MultiBlock APIリファレンス#
pyvista.MultiBlock クラスは,PyVistaで空間的に参照される全てのデータセットに 共通な アトリビュートを保持します.この基本クラスはVTKの vtkMultiBlockDataSet クラスに似ています.
|
反復可能な多数のデータセットを保持する複合クラス. |