Open12

Blender関連の、記事にするほどでもない知見のまとめ

ピン留めされたアイテム
nikogolinikogoli

概要

「有用だが記事にするほどの分量ではない話」のまとめ

ピン留めされたアイテム
nikogolinikogoli

◇ invoke で出すポップアップパネルの一覧 🔝

ポップアップ一覧
基本は retrun context.window_manager.invoke_xxx(self, ...)

nikogolinikogoli

◇ Blender 2.8以降での「エディター切り替え」機能について 🔝

  • 「画像/UV」・「ノード関連の3つ」・「グラフ/ドライバー」・「ドープシート/タイムライン」はSpaceの属性の設定が必要
  • 通常は space_data.mode = "xx"だが、Node Editor だけspace_data.tree_type = "xx"なので注意

それだけだと内容が寂しすぎるので、駄文を追加した
https://gist.github.com/nikogoli/286759be45b129b56fcd6a092a109baa

nikogolinikogoli

◇ メニューの追加登録ができるメニューについて 🔝

  • ぬっち氏の本での記述のように、「右クリック→ソースを編集」を使って class名を調べるのが良い
nikogolinikogoli

github のやつ、実用に足るとは言い難いのでもうちょっとなんとかしたい
Notion でやろうかなと思うが、ページ作成のAPI実装待ちかな・・・

nikogolinikogoli

◇ ポップアップ版テキストエディタ 🔝

Blender の text 入力 (StringProperty) は複数行の入力に向いていない。この点への対応策として、web ブラウザにおけるポップアップ的な挙動を Blender 上で実現する。

具体的な挙動

  • ボタンを押すと、テキストエディタが新規ウィンドウで開く
  • このウィンドウを閉じると、そこに記述した内容が自動的に StringProperty に反映される
gif

script

仕組みの雑な説明

オペレーターのモーダルモードを利用する

  1. オペレーターが呼び出されたとき、invoke()で新規ウィンドウをテキストエディタとして開き、その状態でのウィンドウの数を記録し、モーダルモードに移行する
  2. modal()の中でウィンドウの数を監視し、記録されたウィンドウの数より少ない場合はテキストデータの中身を StringProperty に反映させ、モーダルモードを終了する
  3. マウスがあるとプリファレンスの draw() が勝手に呼ばれるので、変更後の StringProperty の表示に自動的に変わる (本当はモーダル終了時にtag_redraw()するべき)