Pārlūkot izejas kodu

Fixed transforming issues

Krzysztof Krysiński 3 mēneši atpakaļ
vecāks
revīzija
f5d68da098

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Shapes/Data/EllipseVectorData.cs

@@ -21,7 +21,7 @@ public class EllipseVectorData : ShapeVectorData, IReadOnlyEllipseData
         RectD.FromCenterAndSize(Center, Radius * 2).Inflate(StrokeWidth / 2);
 
     public override ShapeCorners TransformationCorners =>
-        new ShapeCorners(Center, Radius * 2).WithMatrix(TransformationMatrix);
+        new ShapeCorners(VisualAABB).WithMatrix(TransformationMatrix);
 
 
     public EllipseVectorData(VecD center, VecD radius)

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Shapes/Data/RectangleVectorData.cs

@@ -27,7 +27,7 @@ public class RectangleVectorData : ShapeVectorData, IReadOnlyRectangleData
     }
 
     public override ShapeCorners TransformationCorners =>
-        new ShapeCorners(Center, Size).WithMatrix(TransformationMatrix);
+        new ShapeCorners(VisualAABB).WithMatrix(TransformationMatrix);
 
 
     public RectangleVectorData(VecD center, VecD size)

+ 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)
         {
-            tightBounds = vectorLayer.EmbeddedShapeData?.GeometryAABB ?? default;
+            tightBounds = vectorLayer.EmbeddedShapeData?.VisualAABB ?? default;
         }
 
         for (var i = 1; i < memberData.Count; i++)

+ 5 - 5
src/PixiEditor/Views/Overlays/TransformOverlay/TransformOverlay.cs

@@ -702,14 +702,14 @@ internal class TransformOverlay : Overlay
         const double offsetInPixels = 30;
         double offsetToScale = offsetInPixels / ZoomScale;
         ShapeCorners scaled = Corners.AsRotated(-Corners.RectRotation, Corners.RectCenter);
+        var aabb = scaled.AABBBounds;
         ShapeCorners scaledCorners = new ShapeCorners()
         {
-            BottomLeft = scaled.BottomLeft - new VecD(offsetToScale, -offsetToScale),
-            BottomRight = scaled.BottomRight + new VecD(offsetToScale, offsetToScale),
-            TopLeft = scaled.TopLeft - new VecD(offsetToScale, offsetToScale),
-            TopRight = scaled.TopRight - new VecD(-offsetToScale, offsetToScale),
+            BottomLeft = aabb.BottomLeft - new VecD(offsetToScale, -offsetToScale),
+            BottomRight = aabb.BottomRight + new VecD(offsetToScale, offsetToScale),
+            TopLeft = aabb.TopLeft - new VecD(offsetToScale, offsetToScale),
+            TopRight = aabb.TopRight - new VecD(-offsetToScale, offsetToScale),
         };
-
         scaledCorners = scaledCorners.AsRotated(Corners.RectRotation, Corners.RectCenter);
 
         return base.TestHit(point) || scaledCorners.IsPointInside(point);