参考:
https://docs.blender.org/api/current/bpy.msgbus.html
まず、Locationから位置変更した場合にメッセージを表示させる
import bpy #https://docs.blender.org/api/current/bpy.msgbus.html # Any Python object can act as the subscription's owner. owner = object() # この関数が呼び出される def msgbus_callback(*args): print("Something changed!", args) # locationを指定して、位置移動の時に呼び出されるようにする # ただしサイドバーのLocationの操作のみ対応 # [G]などで移動した場合は反応しない subscribe_to = bpy.context.object.location bpy.msgbus.subscribe_rna( key=subscribe_to, owner=owner, args=("hello",), # タプルなので引数一つの場合は(a,)のような形にしないといけない notify=msgbus_callback, )
さて回転の場合なのだが、
などとやってもエラーになる。
意訳 bpy.context.objectにrotationなんてない
ではどうするかというと、次のようにしてbpy.context.objectでつかえそうなものを調べる
import bpy li = dir( bpy.context.object ) for i in li: print(i)
以下出力。大量に出てくるが、locationのほかに、rotation_eulerなどを見つけられる。
__doc__
__module__
__slots__
active_material
active_material_index
active_shape_key
...
lineart
local_view_get
local_view_set
location
lock_location
lock_rotation
...
rotation_axis_angle
rotation_euler
rotation_mode
rotation_quaternion
scale
select_get
select_set
...
user_remap
users
users_collection
users_scene
vertex_groups
visible_get
visible_in_viewport_get
というわけで回転時に動かすにはbpy.context.object.rotation_eulerを指定する。
import bpy #https://docs.blender.org/api/current/bpy.msgbus.html # Any Python object can act as the subscription's owner. owner = object() # この関数が呼び出される def msgbus_callback(*args): print("Something changed!", args)
# rotation_eulerを指定して、回転の時に呼び出されるようにする # ただしサイドバーのRotationの操作のみ対応 # [R]などで移動した場合は反応しない subscribe_to = bpy.context.object.rotation_euler
bpy.msgbus.subscribe_rna( key=subscribe_to, owner=owner, args=("rotation-euler",), # タプルなので引数一つの場合は(a,)のような形にしないといけない notify=msgbus_callback, )