トライアングル ストリップ#

この例では,トライアングル ストリップを使ったシンプルな pyvista.PolyData を構築する方法を紹介します.

トライアングルストリップは,隣接する3角形の連結をより効率的に保存する方法です.

import numpy as np

import pyvista as pv

# Create an array of points
points = np.array(
    [
        [1.0, 0.0, 0.0],
        [0.0, 0.0, 0.0],
        [1.0, 1.0, 0.0],
        [0.0, 1.0, 0.0],
        [1.0, 2.0, 0.0],
        [0.0, 2.0, 0.0],
        [1.0, 3.0, 0.0],
        [0.0, 3.0, 0.0],
    ]
)

ストリップの連結を構築する#

最初の要素は帯の点の数で,次の3つの要素は最初の3角形で,残りの点は帯が伸びている場所です.

strips = np.array([8, 0, 1, 2, 3, 4, 5, 6, 7])


# build the mesh
mesh = pv.PolyData(points, strips=strips)
mesh
PolyDataInformation
N Cells1
N Points8
N Strips1
X Bounds0.000e+00, 1.000e+00
Y Bounds0.000e+00, 3.000e+00
Z Bounds0.000e+00, 0.000e+00
N Arrays0


トライアングル ストリップをプロットする#

PolyData をプロットし, add_point_labels() を用いてポイントラベルを含めれば,トライアングル ストリップを用いて PolyData がどのように構築されるかが分かります.

pl = pv.Plotter()
pl.add_mesh(mesh, show_edges=True)
pl.add_point_labels(mesh.points, range(mesh.n_points))
pl.camera_position = 'yx'
pl.camera.zoom(1.2)
pl.show()
create polydata strips

トライアングル ストリップに変換する#

triangulate を使用すると,ストリップを3角形の面に変換することができます.

trimesh = mesh.triangulate()
trimesh
PolyDataInformation
N Cells6
N Points8
N Strips0
X Bounds0.000e+00, 1.000e+00
Y Bounds0.000e+00, 3.000e+00
Z Bounds0.000e+00, 0.000e+00
N Arrays0


この新しい pyvista.PolyData を使って,VTK がトライアングル ストリップを個々の面としてどのように表現するかを見ることができます.

同じデータであっても,この基本的な例では,顔の配列の方がはるかに大きい(〜3倍)ことがわかります.

注釈

VTK の面配列は,面配列の各面に対して必ずパディング(面の点の数)を含んでいます.これは,以下の面配列の初期値である 3 に相当します.

faces = trimesh.faces.reshape(-1, 4)
faces
array([[3, 0, 1, 2],
       [3, 2, 1, 3],
       [3, 2, 3, 4],
       [3, 4, 3, 5],
       [3, 4, 5, 6],
       [3, 6, 5, 7]])

3角形をストリップに変換する#

strip() を使用して, pyvista.PolyData からストリップに面を変換します.ここでは,デモンストレーションのために,3角形化されたメッシュをストリップされたメッシュに戻します.

restripped = trimesh.strip()
restripped
PolyDataInformation
N Cells1
N Points8
N Strips1
X Bounds0.000e+00, 1.000e+00
Y Bounds0.000e+00, 3.000e+00
Z Bounds0.000e+00, 0.000e+00
N Arrays0


strip フィルタの出力は,予想通り,元の mesh と同じです.

restripped == mesh
True

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

Sphinx-Galleryによるギャラリー