Comment accéder à l'emplacement du pivot?
Je veux juste obtenir l'emplacement du pivot du modèle 3D!
J'ai essayé de mettre le curseur en position pivot et d'imprimer l'emplacement du curseur
import bpy
bpy.ops.view3d.snap_cursor_to_selected()
print(bpy.context.scene.cursor.location)
J'ai eu cette erreur:
RuntimeError: Operator bpy.ops.view3d.snap_cursor_to_selected.poll() failed, context is incorrect
Error: Python script failed, check the message in the system console
Réponses
Les objets pivotent autour de leurs origines, ou (0, 0, 0) dans leur espace local. La position d'un objet est simplement l'emplacement de son origine dans l'espace du monde. Vous pouvez l'obtenir en tant que vecteur à partir de la variable d'emplacement de l'objet:
import bpy
obj = bpy.context.active_object
print(obj.location)
Si vous souhaitez réellement définir l'emplacement du curseur:
bpy.context.scene.cursor.location = obj.location
Voir Comment obtenir la position et la rotation d'un objet via un script? pour un look plus approfondi.
Mondial et local
L'emplacement du curseur de scène est en coordonnées globales.
Pour un objet ob
Ce que vous voyez dans le champ de localisation d'un objet est sa traduction de matrice de base.
ob.matrix_basis.translation # == ob.location
, Rarement pour un objet avec des parents et / ou des contraintes sera ob.locationégalement l'emplacement global de l'origine de l'objet. Un objet avec ob.location == (0, 0, 0)peut être globalement n'importe où dans la scène via le parentage ou une contrainte d'emplacement de copie vers un autre objet.
L'utilisation ob.matrix_world.translationassurera des coordonnées globales (ou mondiales), par conséquent pour définir l'emplacement du curseur sur l'emplacement global des objets
scene.cursor.location = ob.matrix_world.translation
Soyez très prudent de mélanger les deux. (mondial et local)