Python:blenderオブジェクトの名前取得方法

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2016/6/28 15:07 | 最終変更
ytr  新米   投稿数: 3
はじめまして。

Blender上で 'Cube' オブジェクトを選択している状態だとして、
Python Console 上で以下のコードを実行しまして、
  1. >> C.object
  2. bpy.data.objects['Cube']
  3. >> str( C.object )
  4. '<bpy_struct, Object("Cube")>'

この2行目の表示を"bpy.data.objects['Cube']"という文字列として得ることはできるでしょうか?
builtin関数か何かがすでにあると思っているのですが。

modifier や constraint でも、その変数経路を示してくれて、
組む側に便利な形式なので、debug メッセージに使いたいです。

以下調べたこと。
・データブロックを網羅的に周って同じ文字列を組むことはできます。

・pythonインタプリンタに read-eval-printループ の print にあたる処理があると踏んで blender source の
release/scripts/modules/console_python.py
を眺めましたがそれらしいものを見つけられませんでした。(あまり読解できませんでした)

よろしくおねがいします。

環境:
blender v2.76
Python 3.4.2 (default, Nov 24 2014, 15:22:10)
Linux p2201503 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016/6/29 1:17
Shige  長老   投稿数: 306
名前だけ取得すればいいなら、

import bpy

obj = bpy.context.object
obj_name = obj.name

print(obj_name)

で、コンソールに選択したオブジェクトの名前が出ますけど、そういう意味ですか?(質問に質問で返すやつw)
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016/6/29 13:54 | 最終変更
ytr  新米   投稿数: 3
ありがとうございます。
ですが name プロパティではありません。

選択中の Plane オブジェクトが、
・Armature モディファイアだけを持っていて、
・Material をひとつだけ持っている
として
  1. >>> C.object
  2. bpy.data.objects['Plane']
  3. >>> C.object.modifiers[0]
  4. bpy.data.objects['Plane'].modifiers["Armature"]
  5. >>> C.object.material_slots[0].material
  6. bpy.data.materials['Material']
ここの 2, 4, 6行目の文字列、blender object を指す python 表現としてそのまま使える文字列として得たいです。
これが Console に出力されるのは、未評価でトップに object が流れた場合だけで、python 中で扱う方法が分かりません。

bpy.data.objects[*] と bpy.data.meshes[*] だけに対応すると以下のような実装です。
もっと簡単な方法や既存の関数があると思いまして、それの質問です。

ソースが上手く貼れないのでここに
http://pastebin.com/QxyKa87W
投票数:13 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016/6/29 15:56
Shige  長老   投稿数: 306
あ〜なるほど意味がわかりました。が、Blenderartist.orgあたりで尋ねた方が答えは早いかもしれませんね。お役に立てませんでm(_ _)m
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016/6/29 20:40 | 最終変更
ytr  新米   投稿数: 3
Shigeさん、お返事どうも。
自己解決しました。
blender というより python の機能でした。

>>> repr( C.object )
"bpy.data.objects['Plane']"
>>> repr( C.object.modifiers[0] )
"bpy.data.objects['Plane'].modifiers["Armature"]'
投票数:0 平均点:0.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki