Browse Source

Merge pull request #944 from PixiEditor/feature/vectorInput

Added vector input to a vector layer
Krzysztof Krysiński 2 months ago
parent
commit
70164d9d8b

+ 1 - 1
src/Drawie

@@ -1 +1 @@
-Subproject commit 9a9a3814a43945c70badcfafc9e936d18943df7c
+Subproject commit 06d7adbd41c53f0319c07b07d99faab57b376560

+ 38 - 28
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/VectorLayerNode.cs

@@ -18,38 +18,45 @@ namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
 [NodeInfo("VectorLayer")]
 [NodeInfo("VectorLayer")]
 public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorNode, IRasterizable, IScalable
 public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorNode, IRasterizable, IScalable
 {
 {
+    public InputProperty<ShapeVectorData> InputVector { get; }
     public OutputProperty<ShapeVectorData> Shape { get; }
     public OutputProperty<ShapeVectorData> Shape { get; }
     public OutputProperty<Matrix3X3> Matrix { get; }
     public OutputProperty<Matrix3X3> Matrix { get; }
 
 
     public Matrix3X3 TransformationMatrix
     public Matrix3X3 TransformationMatrix
     {
     {
-        get => ShapeData?.TransformationMatrix ?? Matrix3X3.Identity;
+        get => RenderableShapeData?.TransformationMatrix ?? Matrix3X3.Identity;
         set
         set
         {
         {
-            if (ShapeData == null)
+            if (RenderableShapeData == null)
             {
             {
                 return;
                 return;
             }
             }
 
 
-            ShapeData.TransformationMatrix = value;
+            RenderableShapeData.TransformationMatrix = value;
         }
         }
     }
     }
 
 
-    public ShapeVectorData? ShapeData
+    public ShapeVectorData? EmbeddedShapeData
     {
     {
         get => Shape.Value;
         get => Shape.Value;
         set => Shape.Value = value;
         set => Shape.Value = value;
     }
     }
 
 
-    IReadOnlyShapeVectorData IReadOnlyVectorNode.ShapeData => ShapeData;
+    public ShapeVectorData? RenderableShapeData
+    {
+        get => InputVector.Value ?? EmbeddedShapeData;
+    }
+
+    IReadOnlyShapeVectorData IReadOnlyVectorNode.ShapeData => RenderableShapeData;
 
 
 
 
-    public override VecD GetScenePosition(KeyFrameTime time) => ShapeData?.TransformedAABB.Center ?? VecD.Zero;
-    public override VecD GetSceneSize(KeyFrameTime time) => ShapeData?.TransformedAABB.Size ?? VecD.Zero;
+    public override VecD GetScenePosition(KeyFrameTime time) => RenderableShapeData?.TransformedAABB.Center ?? VecD.Zero;
+    public override VecD GetSceneSize(KeyFrameTime time) => RenderableShapeData?.TransformedAABB.Size ?? VecD.Zero;
 
 
     public VectorLayerNode()
     public VectorLayerNode()
     {
     {
         AllowHighDpiRendering = true;
         AllowHighDpiRendering = true;
+        InputVector = CreateInput<ShapeVectorData>("Input", "INPUT", null);
         Shape = CreateOutput<ShapeVectorData>("Shape", "SHAPE", null);
         Shape = CreateOutput<ShapeVectorData>("Shape", "SHAPE", null);
         Matrix = CreateOutput<Matrix3X3>("Matrix", "MATRIX", Matrix3X3.Identity);
         Matrix = CreateOutput<Matrix3X3>("Matrix", "MATRIX", Matrix3X3.Identity);
     }
     }
@@ -63,7 +70,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
     protected override void DrawWithoutFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface,
     protected override void DrawWithoutFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface,
         Paint paint)
         Paint paint)
     {
     {
-        if (ShapeData == null)
+        if (RenderableShapeData == null)
         {
         {
             return;
             return;
         }
         }
@@ -73,7 +80,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
 
 
     protected override void DrawWithFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface, Paint paint)
     protected override void DrawWithFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface, Paint paint)
     {
     {
-        if (ShapeData == null)
+        if (RenderableShapeData == null)
         {
         {
             return;
             return;
         }
         }
@@ -89,7 +96,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
         }
         }
         else
         else
         {
         {
-            return ShapeData?.TransformedVisualAABB;
+            return RenderableShapeData?.TransformedVisualAABB;
         }
         }
 
 
         return null;
         return null;
@@ -103,18 +110,18 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
             return base.RenderPreview(renderOn, context, elementToRenderName);
             return base.RenderPreview(renderOn, context, elementToRenderName);
         }
         }
 
 
-        if (ShapeData == null)
+        if (RenderableShapeData == null)
         {
         {
             return false;
             return false;
         }
         }
 
 
         using var paint = new Paint();
         using var paint = new Paint();
 
 
-        VecI tightBoundsSize = (VecI)ShapeData.TransformedVisualAABB.Size;
+        VecI tightBoundsSize = (VecI)RenderableShapeData.TransformedVisualAABB.Size;
 
 
         VecI translation = new VecI(
         VecI translation = new VecI(
-            (int)Math.Max(ShapeData.TransformedAABB.TopLeft.X, 0),
-            (int)Math.Max(ShapeData.TransformedAABB.TopLeft.Y, 0));
+            (int)Math.Max(RenderableShapeData.TransformedAABB.TopLeft.X, 0),
+            (int)Math.Max(RenderableShapeData.TransformedAABB.TopLeft.Y, 0));
 
 
         VecI size = tightBoundsSize + translation;
         VecI size = tightBoundsSize + translation;
 
 
@@ -123,7 +130,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
             return false;
             return false;
         }
         }
 
 
-        Matrix3X3 matrix = ShapeData.TransformationMatrix;
+        Matrix3X3 matrix = RenderableShapeData.TransformationMatrix;
 
 
         if (!context.ProcessingColorSpace.IsSrgb)
         if (!context.ProcessingColorSpace.IsSrgb)
         {
         {
@@ -150,45 +157,48 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
     public override void SerializeAdditionalData(Dictionary<string, object> additionalData)
     public override void SerializeAdditionalData(Dictionary<string, object> additionalData)
     {
     {
         base.SerializeAdditionalData(additionalData);
         base.SerializeAdditionalData(additionalData);
-        additionalData["ShapeData"] = ShapeData;
+        additionalData["ShapeData"] = EmbeddedShapeData;
     }
     }
 
 
     internal override void DeserializeAdditionalData(IReadOnlyDocument target,
     internal override void DeserializeAdditionalData(IReadOnlyDocument target,
         IReadOnlyDictionary<string, object> data, List<IChangeInfo> infos)
         IReadOnlyDictionary<string, object> data, List<IChangeInfo> infos)
     {
     {
         base.DeserializeAdditionalData(target, data, infos);
         base.DeserializeAdditionalData(target, data, infos);
-        ShapeData = (ShapeVectorData)data["ShapeData"];
+        EmbeddedShapeData = (ShapeVectorData)data["ShapeData"];
 
 
-        if (ShapeData == null)
+        if (EmbeddedShapeData == null)
         {
         {
             return;
             return;
         }
         }
 
 
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
-            (RectI)ShapeData.TransformedAABB, ChunkyImage.FullChunkSize));
+            (RectI)EmbeddedShapeData.TransformedAABB, ChunkyImage.FullChunkSize));
 
 
         infos.Add(new VectorShape_ChangeInfo(Id, affected));
         infos.Add(new VectorShape_ChangeInfo(Id, affected));
     }
     }
 
 
     protected override int GetContentCacheHash()
     protected override int GetContentCacheHash()
     {
     {
-        return HashCode.Combine(base.GetContentCacheHash(), ShapeData?.GetCacheHash() ?? 0);
+        return HashCode.Combine(
+            base.GetContentCacheHash(),
+            EmbeddedShapeData?.GetCacheHash() ?? 0,
+            RenderableShapeData?.GetCacheHash() ?? 0);
     }
     }
 
 
     public override RectD? GetTightBounds(KeyFrameTime frameTime)
     public override RectD? GetTightBounds(KeyFrameTime frameTime)
     {
     {
-        return ShapeData?.TransformedVisualAABB ?? null;
+        return RenderableShapeData?.TransformedVisualAABB ?? null;
     }
     }
 
 
     public override ShapeCorners GetTransformationCorners(KeyFrameTime frameTime)
     public override ShapeCorners GetTransformationCorners(KeyFrameTime frameTime)
     {
     {
-        return ShapeData?.TransformationCorners ?? new ShapeCorners();
+        return RenderableShapeData?.TransformationCorners ?? new ShapeCorners();
     }
     }
 
 
     public void Rasterize(DrawingSurface surface, Paint paint)
     public void Rasterize(DrawingSurface surface, Paint paint)
     {
     {
         int layer = surface.Canvas.SaveLayer(paint);
         int layer = surface.Canvas.SaveLayer(paint);
-        ShapeData?.RasterizeTransformed(surface.Canvas);
+        RenderableShapeData?.RasterizeTransformed(surface.Canvas);
 
 
         surface.Canvas.RestoreToCount(layer);
         surface.Canvas.RestoreToCount(layer);
     }
     }
@@ -197,7 +207,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
     {
     {
         return new VectorLayerNode()
         return new VectorLayerNode()
         {
         {
-            ShapeData = (ShapeVectorData?)ShapeData?.Clone(),
+            EmbeddedShapeData = (ShapeVectorData?)EmbeddedShapeData?.Clone(),
             ClipToPreviousMember = this.ClipToPreviousMember,
             ClipToPreviousMember = this.ClipToPreviousMember,
             EmbeddedMask = this.EmbeddedMask?.CloneFromCommitted(),
             EmbeddedMask = this.EmbeddedMask?.CloneFromCommitted(),
             AllowHighDpiRendering = this.AllowHighDpiRendering
             AllowHighDpiRendering = this.AllowHighDpiRendering
@@ -206,19 +216,19 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
 
 
     public void Resize(VecD multiplier)
     public void Resize(VecD multiplier)
     {
     {
-        if (ShapeData == null)
+        if (EmbeddedShapeData == null)
         {
         {
             return;
             return;
         }
         }
 
 
-        if(ShapeData is IScalable resizable)
+        if(EmbeddedShapeData is IScalable resizable)
         {
         {
             resizable.Resize(multiplier);
             resizable.Resize(multiplier);
         }
         }
         else
         else
         {
         {
-            ShapeData.TransformationMatrix =
-                ShapeData.TransformationMatrix.PostConcat(Matrix3X3.CreateScale((float)multiplier.X,
+            EmbeddedShapeData.TransformationMatrix =
+                EmbeddedShapeData.TransformationMatrix.PostConcat(Matrix3X3.CreateScale((float)multiplier.X,
                     (float)multiplier.Y));
                     (float)multiplier.Y));
         }
         }
     }
     }

+ 8 - 8
src/PixiEditor.ChangeableDocument/Changes/Drawing/CombineStructureMembersOnto_Change.cs

@@ -187,7 +187,7 @@ internal class CombineStructureMembersOnto_Change : Change
         if (targetLayer is not VectorLayerNode vectorLayer)
         if (targetLayer is not VectorLayerNode vectorLayer)
             throw new InvalidOperationException("Target layer is not a vector layer");
             throw new InvalidOperationException("Target layer is not a vector layer");
 
 
-        ShapeVectorData targetData = vectorLayer.ShapeData ?? null;
+        ShapeVectorData targetData = vectorLayer.EmbeddedShapeData ?? null;
         VectorPath? targetPath = targetData?.ToPath();
         VectorPath? targetPath = targetData?.ToPath();
 
 
         var reversed = toCombine.Reverse().ToHashSet();
         var reversed = toCombine.Reverse().ToHashSet();
@@ -197,16 +197,16 @@ internal class CombineStructureMembersOnto_Change : Change
             if (target.FindMember(guid) is not VectorLayerNode vectorNode)
             if (target.FindMember(guid) is not VectorLayerNode vectorNode)
                 continue;
                 continue;
 
 
-            if (vectorNode.ShapeData == null)
+            if (vectorNode.EmbeddedShapeData == null)
                 continue;
                 continue;
 
 
-            VectorPath path = vectorNode.ShapeData.ToPath();
+            VectorPath path = vectorNode.EmbeddedShapeData.ToPath();
 
 
             if (targetData == null)
             if (targetData == null)
             {
             {
-                targetData = vectorNode.ShapeData;
+                targetData = vectorNode.EmbeddedShapeData;
                 targetPath = new VectorPath();
                 targetPath = new VectorPath();
-                targetPath.AddPath(path, vectorNode.ShapeData.TransformationMatrix, AddPathMode.Append);
+                targetPath.AddPath(path, vectorNode.EmbeddedShapeData.TransformationMatrix, AddPathMode.Append);
 
 
                 if (originalPaths.ContainsKey(frame))
                 if (originalPaths.ContainsKey(frame))
                     originalPaths[frame].Dispose();
                     originalPaths[frame].Dispose();
@@ -215,7 +215,7 @@ internal class CombineStructureMembersOnto_Change : Change
             }
             }
             else
             else
             {
             {
-                targetPath.AddPath(path, vectorNode.ShapeData.TransformationMatrix, AddPathMode.Append);
+                targetPath.AddPath(path, vectorNode.EmbeddedShapeData.TransformationMatrix, AddPathMode.Append);
                 path.Dispose();
                 path.Dispose();
             }
             }
         }
         }
@@ -241,7 +241,7 @@ internal class CombineStructureMembersOnto_Change : Change
             data.Path = targetPath;
             data.Path = targetPath;
         }
         }
 
 
-        vectorLayer.ShapeData = data;
+        vectorLayer.EmbeddedShapeData = data;
 
 
         return new AffectedArea(new HashSet<VecI>());
         return new AffectedArea(new HashSet<VecI>());
     }
     }
@@ -383,7 +383,7 @@ internal class CombineStructureMembersOnto_Change : Change
         if (!originalPaths.TryGetValue(frame, out var path))
         if (!originalPaths.TryGetValue(frame, out var path))
             throw new InvalidOperationException("Original path not found");
             throw new InvalidOperationException("Original path not found");
 
 
-        targetLayer.ShapeData = new PathVectorData(path);
+        targetLayer.EmbeddedShapeData = new PathVectorData(path);
         return new VectorShape_ChangeInfo(targetLayer.Id, new AffectedArea(new HashSet<VecI>()));
         return new VectorShape_ChangeInfo(targetLayer.Id, new AffectedArea(new HashSet<VecI>()));
     }
     }
 
 

+ 6 - 6
src/PixiEditor.ChangeableDocument/Changes/Drawing/PreviewShiftLayers_UpdateableChange.cs

@@ -47,8 +47,8 @@ internal class PreviewShiftLayers_UpdateableChange : InterruptableUpdateableChan
 
 
             if (layer is VectorLayerNode transformableObject)
             if (layer is VectorLayerNode transformableObject)
             {
             {
-                originalShapes[layerGuid] = transformableObject.ShapeData;
-                transformableObject.ShapeData = null;
+                originalShapes[layerGuid] = transformableObject.EmbeddedShapeData;
+                transformableObject.EmbeddedShapeData = null;
             }
             }
         }
         }
 
 
@@ -78,7 +78,7 @@ internal class PreviewShiftLayers_UpdateableChange : InterruptableUpdateableChan
                 StrokeJoin join = StrokeJoin.Miter;
                 StrokeJoin join = StrokeJoin.Miter;
                 StrokeCap cap = StrokeCap.Butt;
                 StrokeCap cap = StrokeCap.Butt;
                 
                 
-                (vectorLayer.ShapeData as PathVectorData)?.Path.Dispose();
+                (vectorLayer.EmbeddedShapeData as PathVectorData)?.Path.Dispose();
 
 
                 var originalShape = originalShapes[layerGuid];
                 var originalShape = originalShapes[layerGuid];
 
 
@@ -107,7 +107,7 @@ internal class PreviewShiftLayers_UpdateableChange : InterruptableUpdateableChan
                     StrokeLineCap = cap
                     StrokeLineCap = cap
                 };
                 };
                 
                 
-                vectorLayer.ShapeData = newShapeData;
+                vectorLayer.EmbeddedShapeData = newShapeData;
                 changes.Add(new VectorShape_ChangeInfo(layerGuid, ShiftLayer_UpdateableChange.AffectedAreaFromBounds(target, layerGuid, frame)));
                 changes.Add(new VectorShape_ChangeInfo(layerGuid, ShiftLayer_UpdateableChange.AffectedAreaFromBounds(target, layerGuid, frame)));
             }
             }
         }
         }
@@ -143,8 +143,8 @@ internal class PreviewShiftLayers_UpdateableChange : InterruptableUpdateableChan
             }
             }
             else if (layer is VectorLayerNode transformableObject)
             else if (layer is VectorLayerNode transformableObject)
             {
             {
-                (transformableObject.ShapeData as PathVectorData)?.Path.Dispose();
-                transformableObject.ShapeData = originalShapes[layerGuid];
+                (transformableObject.EmbeddedShapeData as PathVectorData)?.Path.Dispose();
+                transformableObject.EmbeddedShapeData = originalShapes[layerGuid];
             }
             }
         }
         }
 
 

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/TransformSelected_UpdateableChange.cs

@@ -85,7 +85,7 @@ internal class TransformSelected_UpdateableChange : InterruptableUpdateableChang
 
 
         if (memberData.Count == 1 && firstLayer is VectorLayerNode vectorLayer)
         if (memberData.Count == 1 && firstLayer is VectorLayerNode vectorLayer)
         {
         {
-            tightBounds = vectorLayer.ShapeData?.GeometryAABB ?? default;
+            tightBounds = vectorLayer.EmbeddedShapeData?.GeometryAABB ?? default;
         }
         }
 
 
         for (var i = 1; i < memberData.Count; i++)
         for (var i = 1; i < memberData.Count; i++)

+ 6 - 6
src/PixiEditor.ChangeableDocument/Changes/Vectors/ConvertToCurve_Change.cs

@@ -24,7 +24,7 @@ internal class ConvertToCurve_Change : Change
     {
     {
         if (target.TryFindNode(memberId, out VectorLayerNode? node))
         if (target.TryFindNode(memberId, out VectorLayerNode? node))
         {
         {
-            return node.ShapeData != null && node.ShapeData is not PathVectorData;
+            return node.EmbeddedShapeData != null && node.EmbeddedShapeData is not PathVectorData;
         }
         }
 
 
         return false;
         return false;
@@ -34,10 +34,10 @@ internal class ConvertToCurve_Change : Change
         out bool ignoreInUndo)
         out bool ignoreInUndo)
     {
     {
         VectorLayerNode node = target.FindNodeOrThrow<VectorLayerNode>(memberId);
         VectorLayerNode node = target.FindNodeOrThrow<VectorLayerNode>(memberId);
-        originalData = node.ShapeData;
+        originalData = node.EmbeddedShapeData;
 
 
         // TODO: Stroke Line cap and join is missing? Validate
         // TODO: Stroke Line cap and join is missing? Validate
-        node.ShapeData = new PathVectorData(originalData.ToPath())
+        node.EmbeddedShapeData = new PathVectorData(originalData.ToPath())
         {
         {
             Fill = originalData.Fill,
             Fill = originalData.Fill,
             FillPaintable = originalData.FillPaintable,
             FillPaintable = originalData.FillPaintable,
@@ -51,7 +51,7 @@ internal class ConvertToCurve_Change : Change
 
 
         ignoreInUndo = false;
         ignoreInUndo = false;
 
 
-        var aabb = node.ShapeData.TransformedVisualAABB;
+        var aabb = node.EmbeddedShapeData.TransformedVisualAABB;
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
             (RectI)aabb, ChunkyImage.FullChunkSize));
             (RectI)aabb, ChunkyImage.FullChunkSize));
 
 
@@ -61,11 +61,11 @@ internal class ConvertToCurve_Change : Change
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     {
     {
         VectorLayerNode node = target.FindNodeOrThrow<VectorLayerNode>(memberId);
         VectorLayerNode node = target.FindNodeOrThrow<VectorLayerNode>(memberId);
-        node.ShapeData = originalData;
+        node.EmbeddedShapeData = originalData;
 
 
         node.AllowHighDpiRendering = originalHighDpiRendering;
         node.AllowHighDpiRendering = originalHighDpiRendering;
 
 
-        var aabb = node.ShapeData.TransformedVisualAABB;
+        var aabb = node.EmbeddedShapeData.TransformedVisualAABB;
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
             (RectI)aabb, ChunkyImage.FullChunkSize));
             (RectI)aabb, ChunkyImage.FullChunkSize));
 
 

+ 9 - 9
src/PixiEditor.ChangeableDocument/Changes/Vectors/SetShapeGeometry_UpdateableChange.cs

@@ -28,12 +28,12 @@ internal class SetShapeGeometry_UpdateableChange : InterruptableUpdateableChange
     {
     {
         if (target.TryFindNode<VectorLayerNode>(TargetId, out var node))
         if (target.TryFindNode<VectorLayerNode>(TargetId, out var node))
         {
         {
-            if (IsIdentical(node.ShapeData, Data))
+            if (IsIdentical(node.EmbeddedShapeData, Data))
             {
             {
                 return false;
                 return false;
             }
             }
 
 
-            originalData = (ShapeVectorData?)node.ShapeData?.Clone();
+            originalData = (ShapeVectorData?)node.EmbeddedShapeData?.Clone();
             return true;
             return true;
         }
         }
 
 
@@ -50,9 +50,9 @@ internal class SetShapeGeometry_UpdateableChange : InterruptableUpdateableChange
     {
     {
         var node = target.FindNode<VectorLayerNode>(TargetId);
         var node = target.FindNode<VectorLayerNode>(TargetId);
 
 
-        node.ShapeData = Data;
+        node.EmbeddedShapeData = Data;
 
 
-        RectD aabb = node.ShapeData.TransformedAABB.RoundOutwards();
+        RectD aabb = node.EmbeddedShapeData.TransformedAABB.RoundOutwards();
         aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
         aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
 
 
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
@@ -80,9 +80,9 @@ internal class SetShapeGeometry_UpdateableChange : InterruptableUpdateableChange
             return new None();
             return new None();
         }
         }
 
 
-        node.ShapeData = Data;
+        node.EmbeddedShapeData = Data;
 
 
-        RectD aabb = node.ShapeData.TransformedAABB.RoundOutwards();
+        RectD aabb = node.EmbeddedShapeData.TransformedAABB.RoundOutwards();
         aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
         aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
 
 
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
         var affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
@@ -94,13 +94,13 @@ internal class SetShapeGeometry_UpdateableChange : InterruptableUpdateableChange
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     {
     {
         var node = target.FindNode<VectorLayerNode>(TargetId);
         var node = target.FindNode<VectorLayerNode>(TargetId);
-        node.ShapeData = originalData;
+        node.EmbeddedShapeData = originalData;
 
 
         AffectedArea affected = new AffectedArea();
         AffectedArea affected = new AffectedArea();
 
 
-        if (node.ShapeData != null)
+        if (node.EmbeddedShapeData != null)
         {
         {
-            RectD aabb = node.ShapeData.TransformedAABB.RoundOutwards();
+            RectD aabb = node.EmbeddedShapeData.TransformedAABB.RoundOutwards();
             aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
             aabb = aabb with { Size = new VecD(Math.Max(1, aabb.Size.X), Math.Max(1, aabb.Size.Y)) };
 
 
             affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(
             affected = new AffectedArea(OperationHelper.FindChunksTouchingRectangle(

+ 1 - 1
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/LineExecutor.cs

@@ -85,7 +85,7 @@ internal abstract class LineExecutor<T> : SimpleShapeToolExecutor where T : ILin
             if(node is null)
             if(node is null)
                 return ExecutionState.Error;
                 return ExecutionState.Error;
 
 
-            if (node.ShapeData is not IReadOnlyLineData data)
+            if (node.EmbeddedShapeData is not IReadOnlyLineData data)
             {
             {
                 ActiveMode = ShapeToolMode.Preview;
                 ActiveMode = ShapeToolMode.Preview;
                 return ExecutionState.Success;
                 return ExecutionState.Success;