MRが楽しい

MRやVRについて学習したことを書き残す

Blender3.0で利用可能なpythonスクリプトを作る その128(オブジェクトのグローバル(ワールド)座標・回転・スケールの情報を取得する)

本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。

オブジェクトのグローバル(ワールド)座標・回転・スケールの情報を取得する

オブジェクトのグローバル(ワールド)座標・回転・スケールの情報を取得するには以下の matrix_world の情報を参照します。
docs.blender.org

更に decompose 関数を利用することで座標・回転・スケール情報を分けて取得することができます。
docs.blender.org

サンプルスクリプト

スクリプトの各関数はオブジェクトのグローバル(ワールド)座標・回転・スケールの情報をそれぞれ取得して返却します。

# bpyインポート
import bpy
# 型インポート
from mathutils import Vector
from mathutils import Quaternion
# 角度計算のため
import math

# 指定オブジェクトのグローバル座標(ワールド座標)を返す
def get_location_global(arg_targetobject:bpy.types.Object) -> Vector:
    """指定オブジェクトの頂点座標(グローバル座標)を返す

    Keyword Arguments:
        arg_targetobject {bpy.types.Object} -- 対象オブジェクト

    Returns:
        Vector -- グローバル座標
    """

    # グローバルのトランスフォームを取得する
    # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world)
    # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose)
    (translation, rotation, scale) = arg_targetobject.matrix_world.decompose()

    # 座標を返却する
    return translation

# 指定オブジェクトのグローバル回転(ワールド回転)を返す
def get_rotation_global(arg_targetobject:bpy.types.Object) -> Quaternion:
    """指定オブジェクトのグローバル回転(ワールド回転)を返す

    Keyword Arguments:
        arg_targetobject {bpy.types.Object} -- 対象オブジェクト

    Returns:
        Quaternion -- グローバル回転
    """

    # グローバルのトランスフォームを取得する
    # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world)
    # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose)
    (translation, rotation, scale) = arg_targetobject.matrix_world.decompose()

    # 回転を返却する
    return rotation

# 指定オブジェクトのグローバルスケール(ワールドスケール)を返す
def get_scale_global(arg_targetobject:bpy.types.Object) -> Vector:
    """指定オブジェクトのグローバルスケール(ワールドスケール)を返す

    Keyword Arguments:
        arg_targetobject {bpy.types.Object} -- 対象オブジェクト

    Returns:
        Vector -- グローバルスケール
    """

    # グローバルのトランスフォームを取得する
    # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world)
    # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose)
    (translation, rotation, scale) = arg_targetobject.matrix_world.decompose()

    # スケールを返却する
    return scale


# 関数の実行例
# 座標を取得する
location_world = get_location_global(bpy.data.objects.get("Cube"))
# 返却値をコンソールに表示する
print(type(location_world))
print(location_world)
# 回転を取得する
rotation_world = get_rotation_global(bpy.data.objects.get("Cube"))
# 返却値をコンソールに表示する
print(type(rotation_world))
print(rotation_world)
# スケールを取得する
scale_world = get_scale_global(bpy.data.objects.get("Cube"))
# 返却値をコンソールに表示する
print(type(scale_world))
print(scale_world)