¿Manera fácil de formatear mathutils.Matrix Vector como tupla (o lista) para json?

Aug 29 2020

Hola, actualmente estoy haciendo un sistema preestablecido de pose simple con json para armaduras específicas. Simplemente describe la matriz ósea no impulsada como json (exportar), luego importa y aplica los huesos de pose cuando hay un hueso del mismo nombre en la armadura de contexto.

Entonces, ¿existe una buena función de formato que convierta Blender Matrix o Vector como tupul para json? cuando obtengo Matrix of bones, bpy regresa así

'' 'Matriz (((1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 1.0)))' ''

luego ,, mat_z [0] devuelve Vector Vector ((1.0, 0.0, 0.0, 0.0))

Lo sé, puedo dividir cada componente, luego componer como tupul, para cada elemento 4 * 4, (o hacer una función que convierta la matriz avlue como tupul), pero creo que si me pierdo el paso fácil, ¿cuál bpy o python ya ofrecieron? o el módulo python json los formatea automáticamente sin convertir tupul? (Aunque no lo supongo)

Respuestas

3 batFINGER Aug 29 2020 at 18:17

Comprensión de listas

Se puede hacer con comprensión de listas para trabajar con cualquier matriz M x N

Ejemplo a continuación, como una lista de filas y una lista de columnas.

>>> M = Matrix.Translation((1, 2, 4))

>>> M
Matrix(((1.0, 0.0, 0.0, 1.0),
        (0.0, 1.0, 0.0, 2.0),
        (0.0, 0.0, 1.0, 4.0),
        (0.0, 0.0, 0.0, 1.0)))

>>> [list(row) for row in M]
[[1.0, 0.0, 0.0, 1.0], [0.0, 1.0, 0.0, 2.0], [0.0, 0.0, 1.0, 4.0], [0.0, 0.0, 0.0, 1.0]]

>>> [list(col) for col in M.col]
[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [1.0, 2.0, 4.0, 1.0]]
tokikake Aug 29 2020 at 10:10

Ah, fue simple. Solo necesito tuple () o list () (para lista) para convertir Matrix, Vector

si espero convertir 4 * 4 Matrix mat_z al tipo de lista mat_list

mat_list = [lista (mat_z [0], lista (mat_z [1]), lista (mat_z [2]), lista (mat_z [3])]

entonces podría obtener [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]], así que supongo que puedo volcar cada valor de matriz ósea como json.