Re: スクリプトを起動するスクリプト
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) «
-
Re: スクリプトを起動するスクリプト (jkani4, 2007/4/22 3:54)
-
Re: スクリプトを起動するスクリプト (まんだ, 2007/4/22 0:46)
-
Re: スクリプトを起動するスクリプト (jkani4, 2007/4/20 13:08)
-
Re: スクリプトを起動するスクリプト (yamyam, 2007/4/20 12:47)
-
Re: スクリプトを起動するスクリプト (jkani4, 2007/4/20 12:11)
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
ログイン
クイックリンク
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