本日は Blender2.8 の調査枠です。
Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。
Blender 2.8 Python API Documentation
以下のページを日本語訳しつつ実際に試しつつ記事を進めていきます。
docs.blender.org
docs.blender.org
今日は「クイックスタート」のコンテキストとオペレーターに関してです。
コンテキスト
名前またはリストからデータに直接アクセスできるのは便利ですが、Blender ではユーザーの選択物を操作する方が一般的です。
コンテキスト(ユーザの選択)は常に bpy.context からアクセスできます。
これは他の多くの属性とともにアクティブなオブジェクト、シーン、ツール設定を取得するために使用できます。
一般的な使用例:
>>> bpy.context.object >>> bpy.context.selected_objects >>> bpy.context.visible_bones
コンテキストは読み取り専用であることに注意してください。これらの値を直接変更することはできません。
ただし、API関数を実行するかデータAPIを使用すると、その値を変更できます。
以下の例はエラーが発生します。
bpy.context.object = obj
以下の例は期待通りに動作します。
bpy.context.view_layer.objects.active = obj ※ 公式ページに記載されている以下コマンドは Blneder 2.8 では動作しない bpy.context.scene.objects.active = obj
コンテキスト属性はアクセス先に応じて変わります。
例えば、[3Dビュー]には[Pythonコンソール]とは異なるコンテキストメンバーがあります。
そのため、コンテキスト属性にアクセスするときはユーザの状態に注意してください
詳しくは bpy.context APIリファレンスを確認してください。
docs.blender.org
オペレーター(ツール)
オペレーターは一般にボタン、メニュー項目、またはキーショートカットからユーザーがアクセスするツールです。
GUIの観点からはツールですが、Python は bpy.ops モジュールを介してこれらを実行できます。
例:
>>> bpy.ops.mesh.flip_normals() {'FINISHED'} >>> bpy.ops.mesh.hide(unselected=False) {'FINISHED'} >>> bpy.ops.object.transform_apply() {'FINISHED'}
メニューの ヘルプ -> 操作チートシート には、Python 構文の全てのオペレーターとそのデフォルト値のリストが表示されます。
これは Blender の全てのオペレーターの概要を知るのに便利です。
実行後、テキストエディタ―からテキストデータとして出力された"OperatiorList.txt"を開いて確認できます。
Poll()関数
多くのオペレーターには「ポーリング」機能があります。
これはカーソルが有効な領域にあるかオブジェクトが正しいモード(編集モード、ウェイトペイントなど)にあるかを確認します。
「ポーリング」機能が Python 内で失敗すると、例外が発生します。
例えば bpy.ops.view3d.render_border() をコンソールから呼び出すと、次のエラーが発生します。
RuntimeError: Operator bpy.ops.view3d.render_border.poll() failed, context is incorrect
この場合、コンテキスト(ユーザの選択)はアクティブなカメラのある3Dビューでなければなりません。
オペレーターが呼び出されるたびにtry / except句を使用しないようにするには、オペレーターの poll() 関数を呼び出します。
poll() 関数は、オペレーターが現在のコンテキストで実行できるかどうかを確認します。
例:
if bpy.ops.view3d.render_border.poll(): bpy.ops.view3d.render_border()