pyvista.PolyDataFilters.compute_normals#

PolyDataFilters.compute_normals(cell_normals=True, point_normals=True, split_vertices=False, flip_normals=False, consistent_normals=True, auto_orient_normals=False, non_manifold_traversal=True, feature_angle=30.0, inplace=False, progress_bar=False)[ソース]#

メッシュのポイント法線やセル法線を計算します.

このフィルタでは,ポリゴンの順序を変更して,隣接するポリゴン間で方向の一貫性を保つことができます.鋭いエッジを分割し,別々の法線を使用してポイントを複製して,鮮明な (レンダリングされた) サーフェス定義を作成することができます.法線方向をグローバルに反転することもできます.

このアルゴリズムは,各ポリゴンの法線を決定し,共有ポイントで平均化することで機能します.シャープなエッジがある場合,エッジは分割され,ぼやけたエッジを防ぐために新しいポイントが生成されます(Phongシェーディングによる).

パラメータ:
cell_normalsbool, default: True

セル法線の計算.

point_normalsbool, default: True

ポイント法線の計算.

split_verticesbool, default: False

シャープエッジを分割します.元の点のインデックスは, "pyvistaOriginalPointIds" 配列で追跡されます.

flip_normalsbool, default: False

法線方向のグローバル反転を設定します.フリップすると,セルのポイントの法線方向と順序の両方が変更されます.

consistent_normalsbool, default: True

一貫したポリゴン順序の強制.

auto_orient_normalsbool, default: False

正しい法線方向の自動決定のオンとオフを切り替えます.注:これは,完全に閉じたサーフェス(つまり,境界エッジがありません.)で,非マニホールドエッジがないことを前提としています.これらの制約が満たされない場合,すべての賭けはオフになります.このオプションは計算が複雑になるため,レンダーしたイメージを検査して flip_normals フラグをオンにするかどうかを決定する必要がない場合に便利です.ただし,このフラグは flip_normals フラグと一緒に使用でき,両方が設定されている場合,出力のすべての法線は "inward" をポイントします.

non_manifold_traversalbool, default: True

非多様体エッジの横断のオンとオフを切り替えます.これを変更すると,トポロジループが原因でポリゴン順序の一貫性が損なわれる問題を防ぐことができます.

feature_anglefloat, default: 30.0

鋭いエッジを定義する角度.隣接するポリゴン間の角度の差がこの値より大きい場合,共有エッジは "鋭い" とみなされます.

inplacebool, default: False

in-placeメッシュを更新します.

progress_barbool, default: False

進行状況を示す進行状況バーを表示します.

戻り値:
pyvista.PolyData

セルとポイントの法線で更新されたメッシュ.

備考

"Normals" という名前の以前の配列は上書きされます.

法線はポリゴンと3角形ストリップに対してのみ計算されます.線分または頂点の法線は計算されません.

3角形ストリップは3角形ポリゴンに分割されます.3角形を再分割することもできます.

ポイントやセルの法線の配列を取得したい場合は, pyvista.PolyData.point_normals()pyvista.PolyData.cell_normals() を実行した方が簡単かもしれません.

球のサーフェスの点法線を計算します.

>>> import pyvista as pv
>>> sphere = pv.Sphere()
>>> sphere = sphere.compute_normals(cell_normals=False)
>>> normals = sphere['Normals']
>>> normals.shape
(842, 3)

または,法線を計算するときに新しいメッシュを作成し,セル法線とポイント法線の両方を計算します.

>>> import pyvista as pv
>>> sphere = pv.Sphere()
>>> sphere_with_norm = sphere.compute_normals()
>>> sphere_with_norm.point_data['Normals'].shape
(842, 3)
>>> sphere_with_norm.cell_data['Normals'].shape
(1680, 3)

このフィルターを使用したその他の例については, 表面の法線を計算します を参照してください.