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 の第一引数が増えている点に注意が必要
動いてくれました。