スクリプトを起動するスクリプト
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
7件表示
(全7件)
すべてのコメント一覧へ
投稿ツリー
-
スクリプトを起動するスクリプト
(jkani4, 2007/4/20 10:48)
-
Re: スクリプトを起動するスクリプト
(jkani4, 2007/4/20 12:11)
-
Re: スクリプトを起動するスクリプト
(yamyam, 2007/4/20 12:47)
-
Re: スクリプトを起動するスクリプト
(jkani4, 2007/4/20 13:08)
-
Re: スクリプトを起動するスクリプト
(まんだ, 2007/4/22 0:46)
-
Re: スクリプトを起動するスクリプト
(jkani4, 2007/4/22 3:54)
-
Re: スクリプトを起動するスクリプト
(jkani4, 2007/4/23 18:16)
スクリプトを起動するスクリプト
msg# 1
jkani4
投稿数: 98
みなさんお久しぶりです。jkani4です。
Blenderを拡張する練習として、小さいスクリプトを書いてみました。
今回作ったのは、
お気に入りのスクリプトを簡単に起動できるようにするためのスクリプトです。このスクリプトを作ってみようと思ったきっかけは、
「選択中のすべてのオブジェクトのdrawtype(wireとかsolidとか)を一括で変更する」という別のスクリプトを作ったのですが、メニューからいちいち選ぶのは面倒だな。。と思ったからでした。。(無精者)
もっと高機能なスクリプトはほかにもあるのですが、スクリプトを表示させるウインドウが広くないと使いにくいものが多いので、省スペース化を目標にしています。
まだまだ改善すべきところは多々ありますが、とりあえずひと段落しましたので、ご紹介させていただきました。
スクリプトは以下のURLにおいてありますので、興味のある方はご覧になってください。また、お気づきの点などありましたら、ご指摘ください。
ポケット倉庫@wiki
スクリプト実行時のスクリーンショットは、
LinuxとかBlenderとか
に掲載してあります。
Blenderを拡張する練習として、小さいスクリプトを書いてみました。
今回作ったのは、
お気に入りのスクリプトを簡単に起動できるようにするためのスクリプトです。このスクリプトを作ってみようと思ったきっかけは、
「選択中のすべてのオブジェクトのdrawtype(wireとかsolidとか)を一括で変更する」という別のスクリプトを作ったのですが、メニューからいちいち選ぶのは面倒だな。。と思ったからでした。。(無精者)
もっと高機能なスクリプトはほかにもあるのですが、スクリプトを表示させるウインドウが広くないと使いにくいものが多いので、省スペース化を目標にしています。
まだまだ改善すべきところは多々ありますが、とりあえずひと段落しましたので、ご紹介させていただきました。
スクリプトは以下のURLにおいてありますので、興味のある方はご覧になってください。また、お気づきの点などありましたら、ご指摘ください。
ポケット倉庫@wiki
スクリプト実行時のスクリーンショットは、
LinuxとかBlenderとか
に掲載してあります。
投票数:5
平均点:4.00
Re: スクリプトを起動するスクリプト
msg# 1.1
jkani4
投稿数: 98
少し補足です。
スクリプトを起動するスクリプトをテキストエディタで開き、
スクリプトの冒頭に書かれている
Group: 'Object'
の部分を
Group: 'Misc'
に変更してBlenderのスクリプトフォルダにおけば、ScriptWindowのScriptメニュー'Misc'で選択できます。今のままだとObjectメニューになってしまうので、ちょっと違いますね。
(Miscに入れるのはかなり横暴な気が。。 )
スクリプトを起動するスクリプトをテキストエディタで開き、
スクリプトの冒頭に書かれている
Group: 'Object'
の部分を
Group: 'Misc'
に変更してBlenderのスクリプトフォルダにおけば、ScriptWindowのScriptメニュー'Misc'で選択できます。今のままだとObjectメニューになってしまうので、ちょっと違いますね。
(Miscに入れるのはかなり横暴な気が。。 )
投票数:6
平均点:3.33
Re: スクリプトを起動するスクリプト
msg# 1.1.1
yamyam
居住地: そうや、うちはおおさかやー
投稿数: 4405
こんにちは。ランチャーですね。簡単に導入できていいですね。
Group は最初は 'Help' の方がいいんじゃないかと思っていましたが、問答無用でそこら辺のウィンドウを使用してしまうし、ScriptsWindow を開けていればそっちを使用はするものの、なら最初っからそこにある "Misc" でいいじゃん、と実行してから思いました。(笑)
そういうわけで Misc で合理的ではないかと。
Group は最初は 'Help' の方がいいんじゃないかと思っていましたが、問答無用でそこら辺のウィンドウを使用してしまうし、ScriptsWindow を開けていればそっちを使用はするものの、なら最初っからそこにある "Misc" でいいじゃん、と実行してから思いました。(笑)
そういうわけで Misc で合理的ではないかと。
投票数:35
平均点:3.71
Re: スクリプトを起動するスクリプト
msg# 1.1.1.1
jkani4
投稿数: 98
yamyamさんこんにちは。
使っていただいてありがとうございます。
ではMiscということでいこうと思います。
今は、登録された順番にスクリプトが並んでいるだけなので、
そのあたりをうまく分別できるようにできればと思っています。
あと、ランチャとは別のウインドウでスクリプトを起動できるような
オプションもあればいいなと思っています。
(別ウインドウで。。という指定方法は調査中)
ScriptWindowとは別に、ランチャー用のフローティングウインドウとか
があれば、もっとすっきりするのにな(3D ViewでNキーを押したときみたいに必要なときだけショートカットで表示させて)。。とスクリプトを
書きながら思っていました。
そのあたりを実現するには、本体のソースをいじらないといけないですね。。
2.45あたりのバージョンに期待してみます。
使っていただいてありがとうございます。
ではMiscということでいこうと思います。
今は、登録された順番にスクリプトが並んでいるだけなので、
そのあたりをうまく分別できるようにできればと思っています。
あと、ランチャとは別のウインドウでスクリプトを起動できるような
オプションもあればいいなと思っています。
(別ウインドウで。。という指定方法は調査中)
ScriptWindowとは別に、ランチャー用のフローティングウインドウとか
があれば、もっとすっきりするのにな(3D ViewでNキーを押したときみたいに必要なときだけショートカットで表示させて)。。とスクリプトを
書きながら思っていました。
そのあたりを実現するには、本体のソースをいじらないといけないですね。。
2.45あたりのバージョンに期待してみます。
投票数:15
平均点:7.33
Re: スクリプトを起動するスクリプト
msg# 1.1.1.1.1
まんだ
居住地: むかしは本州の西端
投稿数: 570
jkani4 さん、こんばんは。
スクリプト早速DLしてみました。とりあえず自分のスクリプト(bl2unitxt3d.pyとかいうやつ?を実行させて動くことを確認しました
引用:
BpyPanelsとかいう名前で計画はあったみたいです(ネタ帳)。
スクリプト早速DLしてみました。とりあえず自分のスクリプト(bl2unitxt3d.pyとかいうやつ?を実行させて動くことを確認しました
引用:
ScriptWindowとは別に、ランチャー用のフローティングウインドウとか
BpyPanelsとかいう名前で計画はあったみたいです(ネタ帳)。
投票数:6
平均点:5.00
Re: スクリプトを起動するスクリプト
msg# 1.1.1.1.1.1
jkani4
投稿数: 98
まんださん、こんばんわ。
スクリプトを試していただいてありがとうございました。
あれから、少し改良して、手元のバージョンではページ単位でスクリプトを登録できるように
なりました。使いかたとしては、「1ページ目にはオブジェクト関係のスクリプト」などのような感じができるようになります。
ページ名や、表示色などもカスタマイズできるような準備もできています。
ただ、ちょっと問題が。。
登録したスクリプト情報(スクリプト名や、スクリプトのパス)をBlender.Registryに保存しているのですが、どうやらバグがあるようで、ある一定個数以上の情報をレジストリに書き込もうとすると、レジストリ(自身に関するレジストリのみ)の情報がクリアされてしまいます。
(ドキュメントに書かれている、配列、文字列の上限数を越えていなくても発生します)
バグトラックを調べてみると、#6114にそれらしき問題が登録されていました。
この件の修正は4/17日にCVSにあげられたようなので、次のリリースまで待つか、
自分でビルドするしかなさそうです。
この調査に結構時間をとられてしまっていたので、「バグトラックを確認しておけばよかった。。。」と反省しました。
手元のバージョンを公開したいのですが。。。上記の問題が解決しないと
無理そうです。
BpyPanels、実現してほしかったです。。きっと便利なはず!
スクリプトを試していただいてありがとうございました。
あれから、少し改良して、手元のバージョンではページ単位でスクリプトを登録できるように
なりました。使いかたとしては、「1ページ目にはオブジェクト関係のスクリプト」などのような感じができるようになります。
ページ名や、表示色などもカスタマイズできるような準備もできています。
ただ、ちょっと問題が。。
登録したスクリプト情報(スクリプト名や、スクリプトのパス)をBlender.Registryに保存しているのですが、どうやらバグがあるようで、ある一定個数以上の情報をレジストリに書き込もうとすると、レジストリ(自身に関するレジストリのみ)の情報がクリアされてしまいます。
(ドキュメントに書かれている、配列、文字列の上限数を越えていなくても発生します)
バグトラックを調べてみると、#6114にそれらしき問題が登録されていました。
この件の修正は4/17日にCVSにあげられたようなので、次のリリースまで待つか、
自分でビルドするしかなさそうです。
この調査に結構時間をとられてしまっていたので、「バグトラックを確認しておけばよかった。。。」と反省しました。
手元のバージョンを公開したいのですが。。。上記の問題が解決しないと
無理そうです。
BpyPanels、実現してほしかったです。。きっと便利なはず!
投票数:4
平均点:7.50
Re: スクリプトを起動するスクリプト
msg# 1.1.1.1.1.1.1
jkani4
投稿数: 98
BpyRegistry.pyの中身を見てみました。
たしかに、ドキュメントや、コード中のコメントとは違う実装になっている部がありました。
ドキュメント、ソースのコメントには「配列(辞書、リスト、タプル)の要素数の最大値は60個」と書かれているのですが、
上記のソースコードでは、再起呼び出しされるたびにグローバル変数_ITEMS_NUMがどんどん累積されていってしまうので、「配列数のトータルが60個まで」ということに。グローバル変数_ITEMS_NUMは、Blenderを終了させるまで、メモリ上に残っているので、1度でも60よりも大きくなったらそれ以降は設定が保存できなくなります。
(今まで確認した挙動とソースの実装が一致していたので、気になっていた部分がスッキリしました)
CVSにコミットされた最新のソースは確認していないのですが、
おそらく、以下のコードでいいのではないかなと予測してます。
(スクリプト起動スクリプトの動作確認のために、次のリリースを待たずに修正しようかどうかはまだ迷ってます)
上のコードでうまく動いたかどうかは、後ほど。
PS.
ほかのかたが書かれたソースコードを読むのは、非常に参考になりますね。「こう書けば、すっきり記述できる」とか。
たしかに、ドキュメントや、コード中のコメントとは違う実装になっている部がありました。
def _sanitize(o):
省略。。
if t == dict:
keys = o.keys()
len_keys = len(keys)
_ITEMS_NUM += len_keys
if _ITEMS_NUM > MAX_ITEMS_NUM:
return None
for k in keys:
o[k] = _sanitize(o[k])
elif t in , tuple]:
len_seq = len(o)
_ITEMS_NUM += len_seq
if _ITEMS_NUM > MAX_ITEMS_NUM:
return None
result = []
for i in o: result.append(_sanitize(i))
return result
省略。。
上記のソースコードでは、再起呼び出しされるたびにグローバル変数_ITEMS_NUMがどんどん累積されていってしまうので、「配列数のトータルが60個まで」ということに。グローバル変数_ITEMS_NUMは、Blenderを終了させるまで、メモリ上に残っているので、1度でも60よりも大きくなったらそれ以降は設定が保存できなくなります。
(今まで確認した挙動とソースの実装が一致していたので、気になっていた部分がスッキリしました)
CVSにコミットされた最新のソースは確認していないのですが、
おそらく、以下のコードでいいのではないかなと予測してます。
(スクリプト起動スクリプトの動作確認のために、次のリリースを待たずに修正しようかどうかはまだ迷ってます)
def _sanitize(o):
省略。。
if t == dict:
keys = o.keys()
if len(keys) > MAX_ITEMS_NUM:
return None
for k in keys:
o[k] = _sanitize(o[k])
elif t in , tuple]:
if len(o) > MAX_ITEMS_NUM:
return None
result = []
for i in o: result.append(_sanitize(i))
return result
省略。。
上のコードでうまく動いたかどうかは、後ほど。
PS.
ほかのかたが書かれたソースコードを読むのは、非常に参考になりますね。「こう書けば、すっきり記述できる」とか。
投票数:5
平均点:4.00
7件表示
(全0件)
すべてのコメント一覧へ
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki