¿Manera fácil de formatear mathutils.Matrix Vector como tupla (o lista) para json?
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
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]]
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.