Comment accéder à l'emplacement du pivot?

Sep 08 2020

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

3 RonJensen Sep 07 2020 at 23:44

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.

2 batFINGER Sep 09 2020 at 06:56

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)