Compositeピッキング#

pyvista.Plotter.enable_block_picking() を使用して, pyvista.MultiBlock の個々のブロックをピックする方法を示します.

import numpy as np

import pyvista as pv

MultiBlockデータセットの作成#

pyvista.ParametricSuperEllipsoid() を使って100個のスーパーエリプソイドを作成する.

def make_poly():
    """Create a superellipsoid in a random location."""
    poly = pv.ParametricSuperEllipsoid(
        n1=np.random.random(),
        n2=np.random.random() * 2,
        u_res=50,
        v_res=50,
    )
    poly.points += np.random.random(3) * 20
    return poly


# Assemble the multiblock and plot it using the default plotting settings
blocks = pv.MultiBlock([make_poly() for _ in range(100)])
blocks.plot()
composite picking

ブロックピッキングを有効にする#

pyvista.Plotterblocks を追加し,ブロックのピッキングを有効にします. また,物理ベースのレンダリングを有効にして,ブロックがクリックされたときにブロックの色を赤に設定し,ブロックに既に色が設定されている場合は色を解除するようにコールバックを設定します.

pl = pv.Plotter()
actor, mapper = pl.add_composite(blocks, color="w", pbr=True, metallic=True)


def callback(index, *args):
    """Change a block to red if color is unset, and back to the actor color if set."""
    if mapper.block_attr[index].color is None:
        mapper.block_attr[index].color = "r"
    else:
        mapper.block_attr[index].color = None


pl.enable_block_picking(callback, side="left")
pl.background_color = "w"
pl.show()
composite picking

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

Sphinx-Galleryによるギャラリー