ポイントセルスカラー#

この例では,データセットに個々のセルの点スカラーを追加する方法を説明します.

import numpy as np

from pyvista import examples

は,サンプルの UnstructuredGrid から最初の 4 つのセルをロードします.すべての点が中心で結合されているため,点の数が32より少ないことに注意してください.

grid = examples.load_hexbeam().extract_cells(range(4))
grid
HeaderData Arrays
UnstructuredGridInformation
N Cells4
N Points18
X Bounds0.000e+00, 1.000e+00
Y Bounds0.000e+00, 1.000e+00
Z Bounds0.000e+00, 5.000e-01
N Arrays5
NameFieldTypeN CompMinMax
sample_point_scalarsPointsint6411.000e+002.860e+02
VTKorigIDPointsint6410.000e+009.000e+01
vtkOriginalPointIdsPointsint6410.000e+009.000e+01
sample_cell_scalarsCellsint3211.000e+004.000e+00
vtkOriginalCellIdsCellsint6410.000e+003.000e+00


プロットポイントスカラー#

この時点では,このデータセットに点またはセルのスカラーだけを割り当てることができます.まず,簡単な点スカラーをプロットしてみよう.

grid.point_data['Point Data'] = range(grid.n_points)
grid.plot(scalars='Point Data')
point cell scalars

プロットセルスカラー#

次に,セルのスカラーをプロットしてみます.単純にセルインデックスを元に代入しています.

grid.cell_data['Cell Data'] = range(grid.n_cells)
grid.plot(scalars='Cell Data')
point cell scalars

セルを分割する#

もし,各セルの各ポイントにデータを割り当てて,それをプロットしたかったら,これらの6面体のセルはすべて同じポイントを共有しているので,単純に不可能です.個々のセルを分割するには, pyvista.DataSetFilters.separate_cells() を使用してセルを分割します.

このフィルタを適用すると, pyvista.UnstructuredGrid は32個のポイントを含むようになり,各セルに8個のポイントが含まれるようになりました.これは,各セルに8個ずつ,合計32個のポイントが含まれるようになります.

split_cells = grid.separate_cells()
split_cells
HeaderData Arrays
UnstructuredGridInformation
N Cells4
N Points32
X Bounds0.000e+00, 1.000e+00
Y Bounds0.000e+00, 1.000e+00
Z Bounds0.000e+00, 5.000e-01
N Arrays7
NameFieldTypeN CompMinMax
sample_point_scalarsPointsint6411.000e+002.860e+02
VTKorigIDPointsint6410.000e+009.000e+01
vtkOriginalPointIdsPointsint6410.000e+009.000e+01
Point DataPointsint6410.000e+001.700e+01
sample_cell_scalarsCellsint3211.000e+004.000e+00
vtkOriginalCellIdsCellsint6410.000e+003.000e+00
Cell DataCellsint6410.000e+003.000e+00


プロットポイント セルデータ#

これで,各セルに対して各ポイントの値をプロットできるようになりました.これもやはり点データに割り当てることになる.

ここではわかりやすくするために numpy.hstack() を使っていますが,データの長さと点の数が一致していれば,この方法を使うことができるでしょう.

プロットされた値が,セル内では連続的に見え,セル間では不連続に見える様子をご覧ください.これは,有限要素法の解から応力と歪みがどのように計算されるかに一致します.

split_cells.point_data['Point Cell Data'] = np.hstack(
    (
        np.linspace(0, 8, 8),  # cell 0
        np.linspace(0, 12, 8),  # cell 1
        np.linspace(0, 16, 8),  # cell 2
        np.linspace(0, 20, 8),  # cell 3
    )
)
split_cells.plot(scalars='Point Cell Data')
point cell scalars

Total running time of the script: (0 minutes 1.001 seconds)

Sphinx-Galleryによるギャラリー