複合データセット#
class: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の vtk.vtkMultiBlockDataSet クラスに似ています.
|
反復可能な多数のデータセットを保持する複合クラス. |