Einfache Möglichkeit, mathutils.Matrix Vector als Tupel (oder Liste) für json zu formatieren?

Aug 29 2020

Hallo, ich mache gerade ein einfaches Pose-Preset-System mit json für bestimmte Armaturen. Es beschreibt nur nicht getriebene Knochenmatrix als json (Export), importiert und beantragt Pose-Knochen, wenn sich im Kontextarmatur der gleichnamige Knochen befindet.

Gibt es dann eine gute Formatfunktion, die Blender Matrix oder Vector als Tupul für JSON konvertiert? Wenn ich eine Matrix von Knochen bekomme, kehre ich so zurück

Matrix ((((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)))

dann ,, mat_z [0] Vektorvektor zurückgeben ((1.0, 0.0, 0.0, 0.0))

Ich weiß, ich kann jede Komponente teilen und dann als Tupul für jedes 4 * 4-Element komponieren (oder eine Funktion erstellen, die Matrix-Avlue als Tupul konvertiert). Aber ich denke, wenn ich einen einfachen Schritt verpasse, welches bpy oder Python wird bereits angeboten? oder Python JSON Modul automatisch formatieren, ohne Tupul zu konvertieren? (Obwohl ich das nicht vermute)

Antworten

3 batFINGER Aug 29 2020 at 18:17

Listenverständnis

Kann mit Listenverständnis durchgeführt werden, um mit jeder M x N-Matrix zu arbeiten

Beispiel unten als Liste von Zeilen und als Liste von Spalten.

>>> 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, es war einfach. Ich brauche nur tuple () oder list () (für list), um Matrix, Vector zu konvertieren

Wenn ich hoffe, 4 * 4 Matrix mat_z in Listentyp mat_list konvertieren zu können

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

dann könnte ich [[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]] bekommen, also nehme ich an, ich kann Geben Sie jeden Knochenmatrixwert als json aus.