スポンサーリンク
Blender 2.8のPythonで、オブジェクトを回転しようとして以下のようなコードを適当にコピペしたところ、
import bpy bpy.ops.transform.rotate(value=0.4,axis=(1.0,1.0,0.0))
TypeError: Converting py args to operator properties: : keyword "axis" unrecognized
Error: Python script failed, check the message in the system console
みたいな感じのエラーが出て修正できない。
によると、どうやらaxisはなくなったようで、しかもシンプルな方法がない(?)らしい。
上記記事では以下のようなrotate_object関数を自作して対応している。
import bpy from math import radians from mathutils import Matrix # objに現在のアクティブなオブジェクトを指定する obj = bpy.context.active_object def rotate_object(rot_mat): # decompose world_matrix's components, and from them assemble 4x4 matrices orig_loc, orig_rot, orig_scale = obj.matrix_world.decompose() # orig_loc_mat = Matrix.Translation(orig_loc) orig_rot_mat = orig_rot.to_matrix().to_4x4() orig_scale_mat = (Matrix.Scale(orig_scale[0],4,(1,0,0)) @ Matrix.Scale(orig_scale[1],4,(0,1,0)) @ Matrix.Scale(orig_scale[2],4,(0,0,1))) # # assemble the new matrix obj.matrix_world = orig_loc_mat @ rot_mat @ orig_rot_mat @ orig_scale_mat # Matrix.Rotationで回転行列を作成 # Matrix.Rotation( ラジアンの回転角 , 4 , 回転軸 ) # 4 は4x4行列の意味 # 回転軸は(x,y,z)形式の他に 'X' や 'Y' や'Z' のように軸名を指定することもできる rotate_object( Matrix.Rotation( radians(45), 4, (1,1,1) ) )
Blender 2.8で以下を実行
rotate_object( Matrix.Rotation( 0.349, 4, (1.0,1.0,0.0) ) )
Blende 2.79で以下を実行
bpy.ops.transform.rotate(value=0.349,axis=(1.0,1.0,0.0))
同じ結果が出力できた