Blender VSE Python Operator bpy.ops.transform.seq_slide.poll() failed, context is incorrect エラーに対応

VideoSequenceEditor

48フレーム移動させるために下記のコードを実行したらエラーとなった

はじめに

実行したコード

import bpy bpy.ops.transform.seq_slide(value=(48, 0))
Code language: JavaScript (javascript)

出てきたエラー

RuntimeError: Operator bpy.ops.transform.seq_slide.poll() failed, context is incorrect

このエラー自体 Blenderで Script 使っている人からすればあるあるなのかもしれない。

しかし私はハマってしまったので色々調べた結果です

調べた内容

文化ヒナゲシ制作所雑記帳 BlenderPythonScript

上記を確認すると、context をオーバーライドすると正常に動く場合があるとのこと。

そのコード

import bpy for area in bpy.context.screen.areas: if area.type == 'TIMELINE': context = bpy.context.copy() context['area'] = area for rgn in area.regions: if rgn.type == 'WINDOW': context['region'] = rgn break bpy.ops.time.view_all(context)
Code language: JavaScript (javascript)

しかしコードを見る限り TIMELINE とか書いてあるし、動きそうにない。

念の為、試してみてもやはり同じエラーとなった。

自分がやりたいのは Video Sequence Editor である。

しかしVideo Sequence Editor の名前がわからない。という事で検索。

【Blender 2.8 アドオン開発】003 Blender 内のデータにアクセスしよう(Context と データ構造 と レイアウト) – めもてう

こちらを読み。なんとなく理解ができた。どうやら私がやろうとしているコードは Video Sequence Editor が受け付けているコマンドで
それを Text Editor 上で実行しようとしているからエラーになっているようだ。

※認識に誤りがあったら教えて下さいm( )m

上記のページにあった下記コードを実行して、Video Sequence Editor の名前を調べる

import bpy window = bpy.context.window workspace = window.workspace print(workspace.name + " : Workspace") for screen in workspace.screens: print(" " + screen.name + " : Screen") for area in screen.areas: print(" " + area.type + " : Area") for region in area.regions: print(" " + region.type + " : Region")
Code language: PHP (php)

結果

SEQUENCE_EDITOR だったので最初のコードと組み合わせる。

import bpy for area in bpy.context.screen.areas: if area.type == 'SEQUENCE_EDITOR': context = bpy.context.copy() context['area'] = area for rgn in area.regions: if rgn.type == 'WINDOW': context['region'] = rgn break bpy.ops.transform.seq_slide(context, value=(48, 0))
Code language: JavaScript (javascript)

最後に実行している seq_slide の第一引数が増えている点に注意が必要

動いてくれました。

コメント

タイトルとURLをコピーしました