Implemented ellipse shape application

This commit is contained in:
SpoinkyNL committed 2019-12-17 22:42:17 +01:00
1 parent 6c05bc5410
commit b74a1b2871
11 files changed
+104 -54

No files matched your search

@@ -7,6 +7,7 @@ using Artemis.Core.Models.Profile.LayerShapes;
using Artemis.UI.Properties;
using Artemis.UI.Services.Interfaces;
using SkiaSharp;
using SkiaSharp.Views.WPF;
namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization.Tools
{
@@ -44,8 +45,9 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization.Tools
if (ProfileEditorService.SelectedProfileElement is Layer layer)
{
GetShapePosition(out var point, out var size);
layer.LayerShape = new Ellipse(layer) {Size = size, Position = point};
if (!(layer.LayerShape is Ellipse))
layer.LayerShape = new Ellipse(layer);
layer.LayerShape.SetFromUnscaledRectangle(DragRectangle.ToSKRect());
ProfileEditorService.UpdateSelectedProfileElement();
}
}
@@ -65,25 +67,5 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization.Tools
if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
_shiftDown = true;
}
private void GetShapePosition(out SKPoint point, out SKSize size)
{
var layer = (Layer) ProfileEditorService.SelectedProfileElement;
var x = layer.Leds.Min(l => l.RgbLed.AbsoluteLedRectangle.Location.X);
var y = layer.Leds.Min(l => l.RgbLed.AbsoluteLedRectangle.Location.Y);
var width = layer.Leds.Max(l => l.RgbLed.AbsoluteLedRectangle.Location.X + l.RgbLed.AbsoluteLedRectangle.Size.Width) - x;
var height = layer.Leds.Max(l => l.RgbLed.AbsoluteLedRectangle.Location.Y + l.RgbLed.AbsoluteLedRectangle.Size.Height) - y;
var widthScale = width / 100f;
var heightScale = height / 100f;
var rect = new Rect(
x - width / DragRectangle.X,
y - height / DragRectangle.Y,
width / DragRectangle.Width,
height / DragRectangle.Height
);
point = new SKPoint(0.5f,0.5f);
size = new SKSize((float) (DragRectangle.Width * widthScale), (float) (DragRectangle.Height * heightScale));
}
}
}