Poll Method¶
メニューの Poll は、現在の Blender の状態で、そのメニューを利用できるか判定します。対象メニューの Advanced settings → Poll に条件を書きます。
return True:利用可能にする。return False:利用不可にする。表示形式や呼び出し方によって、項目が非表示または無効表示になる。
Keymap と Poll の役割¶
Keymap は「どこから呼ぶか」、Poll は「今、使ってよいか」を決めます。 Keymap をホットキーの登録先の「箱」と考えると、その違いを整理できます。
設定 |
決めること |
例 |
|---|---|---|
Keymap |
ホットキーを登録するエディターやモードの範囲 |
Object Mode の操作として登録する |
Poll |
その時点の状態が、使う条件を満たすか |
アクティブなオブジェクトがメッシュなら利用可能 |
Poll が調べる「今の状況」が コンテキストです。C.mode はモード、C.active_object はアクティブなオブジェクト、C.area はエディターのエリアを参照します。
たとえば Object Mode の Keymap に登録し、Poll を「アクティブなオブジェクトがメッシュ」にすると、同じモードでもメッシュとライトで判定結果が変わります。False は条件に合わないという正常な結果で、コードのエラーとは異なります。
Keymap の登録先に応じた範囲へ入力が届くことと、Poll が True を返すことは別です。Poll で対象を絞っても Keymap の範囲は広がりません。また、Poll はホットキー以外のメニュー呼び出しでも利用可否を判定します。
よく使う条件¶
各コードは メニューの Poll 欄へ貼る1行です。使う条件を一つ選びます。
利用したい状態 |
Poll のコード |
|---|---|
常に利用可能 |
|
Object Mode |
|
Mesh Edit Mode |
|
アクティブなオブジェクトがある |
|
アクティブなオブジェクトがメッシュ |
|
3D Viewport |
|
確認: 条件に合う状態と合わない状態を作り、同じメニューを呼び出します。たとえば Mesh Edit Mode の条件なら、メッシュの Edit Mode と Object Mode で確認します。呼び出し自体が届かない場合は Keymap の設定も確認してください。
Poll 欄の右側にある + から、よく使う条件を追加する補助メニューも開けます。追加後に条件を確認し、使う状態と使わない状態で試してください。
条件を組み合わせる¶
記法 |
意味 |
|---|---|
|
両方の条件を満たす |
|
どちらかを満たす |
|
条件を満たさない |
|
値が等しい / 等しくない |
|
指定した候補に含まれる |
Object Mode または Mesh Edit Mode で利用可能にする:
return C.mode in {'OBJECT', 'EDIT_MESH'}
メッシュがアクティブで、Object Mode のときに利用可能にする:
obj = C.active_object; return obj is not None and obj.type == 'MESH' and C.mode == 'OBJECT'
obj is not None を先に評価することで、対象がないときに obj.type を読まずに済みます。C.area や C.space_data も、存在と種類を確認してから、そのエディター固有の値を参照します。
Poll と分岐の使い分け¶
目的 |
設定する場所 |
|---|---|
メニューを利用できる状態を限定する |
そのメニューの Poll |
同じキーから状況に応じて別のメニューや操作を呼ぶ |
|
項目を実行したときに処理を選ぶ |
Command の条件分岐 |
状態に応じて UI の内容を変える |
Custom の描画コード |
Poll は繰り返し評価されるため、オブジェクトの追加や設定変更は行わず、状態を読み取って判定します。Poll が通っても、内部で呼ぶ Blender オペレーターの実行条件が整うわけではありません。poll() failed は 実行場所とタイミング を確認してください。
利用できないときの見分け方¶
状態 |
意味・確認すること |
|---|---|
メニューが無効 |
メニューの有効・無効を切り替える設定を確認する |
Poll が False |
正常な判定。モードや対象が条件に合っているか確認する |
Poll のコードがエラー |
構文や参照先に問題がある。警告・エラー内容を確認して修正する。False と同じ扱いだと考えない |
Poll は True だが呼び出せない |
Keymap、キーと修飾キー、マウスのある領域、ほかの操作との競合を確認する |
呼び出せても中の操作が動かない場合は、そのオペレーターが必要とするエディター・モード・対象も確認してください。
関連ページ¶
参考動画(原作者のチャンネル)¶
roaoao の動画一覧より。旧版の UI・手順を扱う参考動画です。