MRが楽しい

MRやVRについて学習したことを書き残す

Blender 2.8のPython APIドキュメントを少しずつ読み解く ベストプラクティス その1

本日は Blender2.8 の調査枠です。
今回から Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。

Blender 2.8 Python API Documentation

以下のページを日本語訳しつつ実際に試して記事を進めていきます。
docs.blender.org
docs.blender.org

今日は「ベストプラクティス」の「ユーザーインターフェースのレイアウト」までです。
f:id:bluebirdofoz:20191018094421j:plain

ベストプラクティス

独自のスクリプトを作成する場合、Pythonは生産性を高めるのに最適です。
しかし同時に独自の記法により、他の人が理解しにくいスクリプトを作成することもできてしまいます。

他の人と協力したい場合、またはスクリプトBlenderに含めたい場合、私たちが推奨するプラクティスがあります。
作成者するスクリプトが個人のものであれば、このプラクティスは利用しなくても問題ありません。

スタイルの規則

Blender / Pythonの開発では、Pythonが推奨するスタイルガイドを選択しました。
これにより、スクリプト間でスタイルが混在することを回避し、他のプロジェクトのPythonスクリプトを使いやすくしています。

スクリプトにスタイルガイドを適用すると、最終的にBlenderに組み込むことも簡単になります。
このスタイルガイドは「pep8」として知られます。詳しくは以下のページを参照ください。
www.python.org

「pep8」の代表的な記法リスト
・クラス名のキャメルキャップ(要素後の最初の文字を大文字とする記法) 例:MyClass
・モジュール名は全て小文字でアンダースコアで単語を区切る 例:my_module
・4つのスペースインデント(タブ無し)
演算子周りのスペース 例:1 + 1(1+1とは記述しない)
・明示的なインポートのみを使用する(* でのインポートはしない)
・単一行:(if val: body など)を使用せず、2行に分割する

また「pep8」と同様に、BlenderPythonスクリプトに使用される他の規則があります。

・列挙型には一重引用符を使用し、文字列には二重引用符を使用します。
 両方とも文字列ですが、内部API列挙型では限られたセットからの一意のアイテムです。
 以下に一礼を示します。

bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.filepath = "//render_out"

・「pep8」は行が79文字を超えてはならないと定義しています。
 これは制限が強すぎるため、スクリプトごとのオプションとしています。

定期的にBlenderスクリプトの「pep8」準拠のチェックを実行しています。
このチェックに含まれるスクリプトについては、以下の行をスクリプトの先頭にコメントとして追加します。

# <pep8 compliant>

行長チェックを有効にするには、代わりに以下のコメントを使用します。

# <pep8-80 compliant>

ユーザーインターフェースのレイアウト

UIレイアウトを作成するときの注意事項は以下の通りです。

UIコードはシンプルです。適切なレイアウトを簡単に作成するために、レイアウト宣言があります。

レイアウトの例を以下に示します。

layout()

基本的なレイアウトは、シンプルなトップ->ボトムレイアウトです。

layout.prop()
layout.prop()

f:id:bluebirdofoz:20191018094509j:plain

layout.row()

1行に複数のプロパティが必要な場合は、row()を使用します。

row = layout.row()
row.prop()
row.prop()

f:id:bluebirdofoz:20191018094525j:plain

layout.column()

列にプロパティが必要な場合は、column()を使用します。

col = layout.column()
col.prop()
col.prop()

f:id:bluebirdofoz:20191018094542j:plain

layout.split()

これを使用して、より複雑なレイアウトを作成できます。
例えば、レイアウトを分割し、2つのcolumn()レイアウトを隣同士に作成できます。
行に2つのプロパティが必要な場合は分割を使用しないでください。そのためにrow()を使用します。

split = layout.split()

col = split.column()
col.prop()
col.prop()

col = split.column()
col.prop()
col.prop()

f:id:bluebirdofoz:20191018094559j:plain

レイアウト宣言にはこれらの変数名のみを使用してください。

row():レイアウトの行
column():レイアウトの烈
split():レイアウトの分割
column_flow():レイアウトのフロー
サブレイアウトのsub(たとえば、列内の列)

bluebirdofoz.hatenablog.com

参考ページ

colorful-pico.net