Sto cercando di scoprire se c'è un modo per cambiare l'angolo della vista in blender usando Python. Vorrei un risultato come si otterrebbe premendo 1, 3 o 7 sul num. pad.Cambia l'angolo della vista in blender usando Python
Grazie per tutto l'aiuto
Sto cercando di scoprire se c'è un modo per cambiare l'angolo della vista in blender usando Python. Vorrei un risultato come si otterrebbe premendo 1, 3 o 7 sul num. pad.Cambia l'angolo della vista in blender usando Python
Grazie per tutto l'aiuto
Prima di tutto, si noti che è possibile avere più viste 3D aperte contemporaneamente, e ciascuno può avere il proprio angolo viewport, la prospettiva/impostazioni orto, ecc Quindi, lo script dovrà cercare tutte le viste 3D che potrebbero essere presenti (che potrebbero essere assenti) e decidere quale (i) interesserà.
Inizia con l'oggetto bpy.data, che ha un attributo window_managers. Questa collezione sembra avere sempre un solo elemento. Tuttavia, potrebbero esserci uno o più codici windows aperti. Ogni finestra ha un screen, che è diviso in uno o più areas. Quindi è necessario cercare attraverso tutte le aree per uno con uno spazio type di "VIEW_3D". E poi cacciare attraverso lo spaces di questa area per uno (i) con tipo "VIEW_3D". Tale spazio sarà della sottoclasse SpaceView3D. Questo avrà un attributo region_3d di tipo RegionView3D. Infine, questo oggetto ha a sua volta un attributo chiamato view_matrix, che accetta un valore di tipo Matrix che è possibile ottenere o impostare.
Hai ottenuto tutto questo? :)
Una volta individuato il giusto 'view', è possibile modificare:
view.spaces[0].region_3d.view_matrix
view.spaces[0].region_3d.view_rotation
Nota che il region_3d.view_location è il bersaglio 'look_at', non la posizione della telecamera; devi modificare view_matrix direttamente se vuoi spostare la posizione della camera (per quanto ne so), ma puoi facilmente regolare la rotazione usando view_rotation abbastanza facilmente. Avrete probabilmente bisogno di leggere questo per generare un quaternione valida però: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
Forse qualcosa di simile può essere utile:
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
Quale versione di Blender? – Blender
Che dire di ['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
vedere anche http://blender.stackexchange.com/a/678/2762 –