From ac0655565e5cc11ddd93dcde1770e20609d02be2 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Fri, 20 Dec 2019 23:33:36 +0100 Subject: [PATCH] Fixed editor freezing on layer updates --- .../Visualization/ProfileLayerViewModel.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs index 76861ee7d..00bc0dfa4 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLayerViewModel.cs @@ -52,7 +52,9 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization return; } - var layerGeometry = Geometry.Empty; + var group = new GeometryGroup(); + group.FillRule = FillRule.Nonzero; + foreach (var led in Layer.Leds) { Geometry geometry; @@ -74,9 +76,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization throw new ArgumentOutOfRangeException(); } - layerGeometry = Geometry.Combine(layerGeometry, geometry, GeometryCombineMode.Union, null, 5, ToleranceType.Absolute); + group.Children.Add(geometry); } + var layerGeometry = group.GetOutlinedPathGeometry(); + var opacityGeometry = Geometry.Combine(Geometry.Empty, layerGeometry, GeometryCombineMode.Exclude, new TranslateTransform()); layerGeometry.Freeze(); opacityGeometry.Freeze(); @@ -124,7 +128,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization ViewportRectangle = Rect.Empty; return; } - + 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;