При помощи Blender Python API можно управлять не только объектами, но и видом из 3D вьюпорта. Как и у любого объекта сцены, у вьюпорта есть матрица, при помощи которой вьюпорт можно перемещать в нужное положение.
Для того чтобы взаимодействовать с вьюпортом, сначала нужно получить его рабочую область.
Пробежим циклом по всем открытым рабочим областям, пока не найдем область вьюпорта:
1 2 |
for area in bpy.context.screen.areas: if area.type == 'VIEW_3D': |
Взаимодействовать с матрицей вьюпорта можно через его 3d регион.
Получить доступ к 3d региону вьюпорта, имея его рабочую область, можно следующим образом:
1 |
region = area.spaces[0].region_3d |
Получить матрицу положения вьюпорта из региона можно через его свойство view_matrix
1 2 3 4 5 6 |
print(region.view_matrix) #<Matrix 4x4 ( 0.6794, 0.7337, 0.0000, 0.2145) # (-0.2413, 0.2234, 0.9444, 0.0000) # ( 0.6929, -0.6416, 0.3289, 21.5210) # ( 0.0000, 0.0000, 0.0000, 1.0000)> |
Для того чтобы сохранить местоположение вьюпорта, нужно сохранить эту матрицу:
1 |
stored_view = region.view_matrix.copy() |
Через это же свойство view_matrix можно задать для вьюпорта новое положение, присвоив ему матрицу с нужными значениями.
Например, для установки 3D вьюпорта во фронтальный вид, нужно присвоить матрице вьюпорта следующее значение:
1 2 3 4 5 6 |
region.view_matrix = Matrix(( ( 1.0000, -0.0000, 0.0000, 0.0000), ( 0.0000, -0.0000, 1.0000, 0.0000), (-0.0000, -1.0000, -0.0000, -0.0000), ( 0.0000, 0.0000, 0.0000, 1.0000) )) |
А для того, чтобы вернуть вьюпорт в первоначальное положение – присвоить view_matrix ранее сохраненное значение.
1 |
region.view_matrix = stored_view |