Browse Source

Added missing Vec4D serialization factory

Krzysztof Krysiński 1 month ago
parent
commit
46429b0bd0

+ 35 - 0
src/PixiEditor/Models/Serialization/Factories/VecD4SerializationFactory.cs

@@ -0,0 +1,35 @@
+using Drawie.Numerics;
+
+namespace PixiEditor.Models.Serialization.Factories;
+
+public class VecD4SerializationFactory : SerializationFactory<byte[], Vec4D>
+{
+    public override string DeserializationId { get; } = "PixiEditor.VecD4";
+
+    public override byte[] Serialize(Vec4D original)
+    {
+        byte[] result = new byte[sizeof(double) * 4];
+        BitConverter.GetBytes(original.X).CopyTo(result, 0);
+        BitConverter.GetBytes(original.Y).CopyTo(result, sizeof(double));
+        BitConverter.GetBytes(original.Z).CopyTo(result, sizeof(double) * 2);
+        BitConverter.GetBytes(original.W).CopyTo(result, sizeof(double) * 3);
+        return result;
+    }
+
+    public override bool TryDeserialize(object serialized, out Vec4D original,
+        (string serializerName, string serializerVersion) serializerData)
+    {
+        if (serialized is byte[] { Length: sizeof(double) * 4 } bytes)
+        {
+            original = new Vec4D(
+                BitConverter.ToDouble(bytes, 0),
+                BitConverter.ToDouble(bytes, sizeof(double)),
+                BitConverter.ToDouble(bytes, sizeof(double) * 2),
+                BitConverter.ToDouble(bytes, sizeof(double) * 3));
+            return true;
+        }
+
+        original = default;
+        return false; 
+    }
+}