def drag_bone(self,context, event ,bone=None):
### math.atan2(0.5, 0.5)*180/math.pi
if bone != None:
bone.hide = False
mouse_vec_norm = (self.cursor_location - self.mouse_click_vec).normalized()
mouse_vec = (self.cursor_location - self.mouse_click_vec)
angle = (math.atan2(mouse_vec_norm[0], mouse_vec_norm[2])*180/math.pi)
cursor_local = self.armature.matrix_world.inverted() * self.cursor_location
cursor_local[1] = 0
if event.shift:
if angle > -22.5 and angle < 22.5:
### up
bone.tail = Vector((bone.head[0],cursor_local[1],cursor_local[2]))
elif angle > 22.5 and angle < 67.5:
### up right
bone.tail = (bone.head + Vector((mouse_vec[0],0,mouse_vec[0])))
elif angle > 67.5 and angle < 112.5:
### right
bone.tail = Vector((cursor_local[0],cursor_local[1],bone.head[2]))
elif angle > 112.5 and angle < 157.5:
### down right
bone.tail = (bone.head + Vector((mouse_vec[0],0,-mouse_vec[0])))
elif angle > 157.5 or angle < -157.5:
### down
bone.tail = Vector((bone.head[0],cursor_local[1],cursor_local[2]))
elif angle > -157.5 and angle < -112.5:
### down left
bone.tail = (bone.head + Vector((mouse_vec[0],0,mouse_vec[0])))
elif angle > -112.5 and angle < -67.5:
### left
bone.tail = Vector((cursor_local[0],cursor_local[1],bone.head[2]))
elif angle > -67.5 and angle < -22.5:
### left up
bone.tail = (bone.head + Vector((mouse_vec[0],0,-mouse_vec[0])))
else:
bone.tail = cursor_local
评论列表
文章目录