Я пытаюсь выяснить, есть ли способ изменить угол обзора в блендере с помощью Python. Мне хотелось бы получить результат от нажатия 1, 3 или 7 на num. подушечка.Изменить угол обзора в блендере с помощью Python
Спасибо за любую помощь
Я пытаюсь выяснить, есть ли способ изменить угол обзора в блендере с помощью Python. Мне хотелось бы получить результат от нажатия 1, 3 или 7 на num. подушечка.Изменить угол обзора в блендере с помощью Python
Спасибо за любую помощь
Прежде всего, обратите внимание, что вы можете иметь несколько 3D просмотра открытых одновременно, и каждый из них может иметь свой собственный угол видового экрана, перспективы/настройки орто и т.д. Таким образом, ваш скрипт должен будет найдите все 3D-представления, которые могут присутствовать (что может быть не так), и решите, какие из них повлияют.
Начинается с объекта bpy.data, который имеет атрибут window_managers. У этой коллекции всегда есть только один элемент. Однако может быть один или несколько открытых windows. Каждое окно имеет screen, который разделен на один или несколько areas. Поэтому вам нужно выполнить поиск по всем областям для одного с пробелом type из «VIEW_3D». А затем пройдите через spaces этой области для одного (ов) с типом «VIEW_3D». Такое пространство будет иметь подкласс SpaceView3D. Это будет иметь атрибут region_3d типа RegionView3D. И, наконец, этот объект, в свою очередь, имеет атрибут view_matrix, который принимает значение типа Matrix, которое вы можете получить или установить.
Получил все это? :)
Отыскав право «Просмотр», вы можете изменить:
view.spaces[0].region_3d.view_matrix
view.spaces[0].region_3d.view_rotation
Обратите внимание, что region_3d.view_location является «look_at» цель, а не расположение камеры; вам нужно изменить view_matrix напрямую, если вы хотите переместить положение камеры (насколько мне известно), но вы можете легко отрегулировать поворот с помощью view_rotation довольно легко. Вы, вероятно, нужно прочитать, чтобы создать действительный кватернион, хотя: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
Возможно, что-то подобное может быть полезно:
class Utils(object):
def __init__(self, context):
self.context = context
@property
def views(self):
""" Returns the set of 3D views.
"""
rtn = []
for a in self.context.window.screen.areas:
if a.type == 'VIEW_3D':
rtn.append(a)
return rtn
def camera(self, view):
""" Return position, rotation data about a given view for the first space attached to it """
look_at = view.spaces[0].region_3d.view_location
matrix = view.spaces[0].region_3d.view_matrix
camera_pos = self.camera_position(matrix)
rotation = view.spaces[0].region_3d.view_rotation
return look_at, camera_pos, rotation
def camera_position(self, matrix):
""" From 4x4 matrix, calculate camera location """
t = (matrix[0][3], matrix[1][3], matrix[2][3])
r = (
(matrix[0][0], matrix[0][1], matrix[0][2]),
(matrix[1][0], matrix[1][1], matrix[1][2]),
(matrix[2][0], matrix[2][1], matrix[2][2])
)
rp = (
(-r[0][0], -r[1][0], -r[2][0]),
(-r[0][1], -r[1][1], -r[2][1]),
(-r[0][2], -r[1][2], -r[2][2])
)
output = (
rp[0][0] * t[0] + rp[0][1] * t[1] + rp[0][2] * t[2],
rp[1][0] * t[0] + rp[1][1] * t[1] + rp[1][2] * t[2],
rp[2][0] * t[0] + rp[2][1] * t[1] + rp[2][2] * t[2],
)
return output
Какую версию Blender? – Blender
Как насчет ['bpy.ops.view3d.viewnumpad'] (http://www.blender.org/documentation/blender_python_api_2_69_0/bpy.ops.view3d.html?highlight=numpad#bpy.ops.view3d.viewnumpad)? – gandalf3
см. Также http://blender.stackexchange.com/a/678/2762 –