Browse Source

Some validation

flabbet 11 months ago
parent
commit
c0ac08e749

+ 12 - 4
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/VectorLayerNode.cs

@@ -14,10 +14,18 @@ public class VectorLayerNode : LayerNode, ITransformableObject
 {
     public Matrix3X3 TransformationMatrix
     {
-        get => ShapeData.TransformationMatrix;
-        set => ShapeData.TransformationMatrix = value;
+        get => ShapeData?.TransformationMatrix ?? Matrix3X3.Identity;
+        set
+        {
+            if (ShapeData == null)
+            {
+                return;
+            }
+            
+            ShapeData.TransformationMatrix = value;
+        }
     }
-    
+
     public ShapeVectorData? ShapeData { get; set; }
 
     protected override bool AffectedByChunkResolution => true;
@@ -59,7 +67,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject
 
     public override ShapeCorners GetTransformationCorners(KeyFrameTime frameTime)
     {
-        return ShapeData.TransformationCorners;
+        return ShapeData?.TransformationCorners ?? new ShapeCorners();
     }
 
     public override Node CreateCopy()

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

@@ -81,7 +81,7 @@ internal class TransformSelected_UpdateableChange : UpdateableChange
 
         if (memberData.Count == 1 && firstLayer is VectorLayerNode vectorLayer)
         {
-            tightBounds = vectorLayer.ShapeData.GeometryAABB;
+            tightBounds = vectorLayer.ShapeData?.GeometryAABB ?? default;
         }
 
         for (var i = 1; i < memberData.Count; i++)
@@ -100,6 +100,9 @@ internal class TransformSelected_UpdateableChange : UpdateableChange
                 tightBounds = tightBounds.Union(layerTightBounds.Value);
             }
         }
+        
+        if (tightBounds == default)
+            return false;
 
         tightBoundsSize = tightBounds.Size;
 

+ 3 - 0
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -54,6 +54,9 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor
         
         ShapeCorners masterCorners = memberCorners.Count == 1 ? memberCorners.FirstOrDefault().Value : new ShapeCorners(memberCorners.Values.Select(static c => c.AABBBounds).Aggregate((a, b) => a.Union(b)));
         
+        if (masterCorners.AABBBounds.Width == 0 || masterCorners.AABBBounds.Height == 0)
+            return ExecutionState.Error;
+        
         document.TransformHandler.ShowTransform(DocumentTransformMode.Scale_Rotate_Shear_Perspective, true, masterCorners, Type == ExecutorType.Regular);
         internals!.ActionAccumulator.AddActions(
             new TransformSelected_Action(masterCorners, tool.KeepOriginalImage, memberCorners, false, document.AnimationHandler.ActiveFrameBindable));