セルの細分化#

単一の接続された3角形メッシュ内の3角形の数を増やします.

pyvista.PolyDataFilters.subdivide() フィルタは, butterflylooplinear の3つの異なるサブディビジョンアルゴリズムを使用してメッシュのセルをサブディバイドします.

import pyvista as pv
from pyvista import examples

まず, triangulated メッシュをロードして再分割しましょう. pyvista.DataSetFilters.triangulate() フィルタを使用して,使用しているメッシュが純粋な3角形であることを確認できます.

mesh = examples.download_bunny_coarse().triangulate()

cpos = [
    (-0.02788175062966399, 0.19293295656233056, 0.4334449972621349),
    (-0.053260899930287015, 0.08881197167521734, -9.016948161029588e-05),
    (-0.10170607813337212, 0.9686438023715356, -0.22668272496584665),
]

ここで,メッシュをいくつか分割して,結果を比較してみましょう.以下は,さまざまな小区分の比較プロットを作成するヘルパー関数です.

def plot_subdivisions(mesh, a, b):
    display_args = dict(show_edges=True, color=True)
    p = pv.Plotter(shape=(3, 3))

    for i in range(3):
        p.subplot(i, 0)
        p.add_mesh(mesh, **display_args)
        p.add_text("Original Mesh")

    def row_plot(row, subfilter):
        subs = [a, b]
        for i in range(2):
            p.subplot(row, i + 1)
            p.add_mesh(mesh.subdivide(subs[i], subfilter=subfilter), **display_args)
            p.add_text(f"{subfilter} subdivision of {subs[i]}")

    row_plot(0, "linear")
    row_plot(1, "butterfly")
    row_plot(2, "loop")

    p.link_views()
    p.view_isometric()
    return p

1レベルと3レベルの区画を実行します.

plotter = plot_subdivisions(mesh, 1, 3)
plotter.camera_position = cpos
plotter.show()
subdivide

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

Sphinx-Galleryによるギャラリー