diff --git a/OpenNest.Core/CNC/CuttingStrategy/ContourCuttingStrategy.cs b/OpenNest.Core/CNC/CuttingStrategy/ContourCuttingStrategy.cs index 4e0de86..34ac3bb 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/ContourCuttingStrategy.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/ContourCuttingStrategy.cs @@ -309,7 +309,12 @@ namespace OpenNest.CNC.CuttingStrategy if (shape.Entities.Count == 1 && shape.Entities[0] is Circle circle) return circle.Rotation; - return shape.ToPolygon().RotationDirection(); + var polygon = shape.ToPolygon(); + + if (polygon.Vertices.Count < 3) + return RotationType.CCW; + + return polygon.RotationDirection(); } private LeadIn ClampLeadInForCircle(LeadIn leadIn, Circle circle, Vector contourPoint, double normalAngle) diff --git a/OpenNest/Controls/FilterPanel.cs b/OpenNest/Controls/FilterPanel.cs index 0b6ea16..9f245ca 100644 --- a/OpenNest/Controls/FilterPanel.cs +++ b/OpenNest/Controls/FilterPanel.cs @@ -170,10 +170,11 @@ namespace OpenNest.Controls layersList.Items.Clear(); var layers = entities .Where(e => e.Layer != null) - .Select(e => e.Layer.Name) - .Distinct(); + .Select(e => e.Layer) + .GroupBy(l => l.Name) + .Select(g => g.First()); foreach (var layer in layers) - layersList.Items.Add(layer, true); // checked = visible + layersList.Items.Add(layer.Name, layer.IsVisible); layersPanel.HeaderText = $"Layers ({layersList.Items.Count})"; @@ -191,10 +192,10 @@ namespace OpenNest.Controls // Line Types lineTypesList.Items.Clear(); var lineTypes = entities - .Select(e => e.LineTypeName ?? "Continuous") - .Distinct(); + .GroupBy(e => e.LineTypeName ?? "Continuous") + .Select(g => new { Name = g.Key, Visible = g.Any(e => e.IsVisible) }); foreach (var lt in lineTypes) - lineTypesList.Items.Add(lt, true); // checked = visible + lineTypesList.Items.Add(lt.Name, lt.Visible); lineTypesPanel.HeaderText = $"Line Types ({lineTypesList.Items.Count})";