From 5944901b749e33c612142814e231660476674895 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sat, 7 May 2016 14:38:31 -0700 Subject: [PATCH] Quick optimization to hotspot in getConnectedPixelsOfSameColor (ran really slow on larger images) --- .../Imported/PolygonalImageProcessor.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/OSCADSharp/OSCADSharp/Solids/Imported/PolygonalImageProcessor.cs b/OSCADSharp/OSCADSharp/Solids/Imported/PolygonalImageProcessor.cs index 842542e..ec41126 100644 --- a/OSCADSharp/OSCADSharp/Solids/Imported/PolygonalImageProcessor.cs +++ b/OSCADSharp/OSCADSharp/Solids/Imported/PolygonalImageProcessor.cs @@ -145,21 +145,21 @@ namespace OSCADSharp.Solids.Imported { //TODO: Reorder sections for correct polygon winding - var color = section[0].Value; - OSCADObject pgon = new Polygon(section.Select(sec => sec.Key).ToList()); - pgon = pgon.Color(String.Format("[{0}, {1}, {2}]", color.R == 0 ? 0 : color.R / 255, color.G == 0 ? 0 : color.G / 255, color.B == 0 ? 0 : color.B / 255), color.A); - objects.Add(pgon); + //var color = section[0].Value; + //OSCADObject pgon = new Polygon(section.Select(sec => sec.Key).ToList()); + //pgon = pgon.Color(String.Format("[{0}, {1}, {2}]", color.R == 0 ? 0 : color.R / 255, color.G == 0 ? 0 : color.G / 255, color.B == 0 ? 0 : color.B / 255), color.A); + //objects.Add(pgon); - //foreach (var pair in section) - //{ - // var position = pair.Key; - // var color = pair.Value; - + foreach (var pair in section) + { + var position = pair.Key; + var color = pair.Value; - // //var cube = new Cube().Color(String.Format("[{0}, {1}, {2}]", color.R == 0 ? 0 : color.R / 255, color.G == 0 ? 0 : color.G / 255, color.B == 0 ? 0 : color.B / 255), color.A); - // //cube = cube.Translate(position.X, position.Y, 0); - // //objects.Add(cube); - //} + + var cube = new Cube().Color(String.Format("[{0}, {1}, {2}]", color.R == 0 ? 0 : color.R / 255, color.G == 0 ? 0 : color.G / 255, color.B == 0 ? 0 : color.B / 255), color.A); + cube = cube.Translate(position.X, position.Y, 0); + objects.Add(cube); + } } return objects; @@ -255,8 +255,7 @@ namespace OSCADSharp.Solids.Imported while (nextOrigins.Count > 0) { - origin = nextOrigins.Dequeue(); - colorGrouping.Remove(origin); + origin = nextOrigins.Dequeue(); List neighboringPoints = new List() { new Point(origin.Key.X, origin.Key.Y + 1), //Above @@ -285,7 +284,6 @@ namespace OSCADSharp.Solids.Imported var nbr = (KeyValuePair)grid[x, y]; if (!traversed.Contains(nbr) && nbr.Value.Equals(origin.Value)) { - colorGrouping.Remove(nbr); nextOrigins.Enqueue(nbr); neighbors.Add(nbr); traversed.Add(nbr); @@ -294,6 +292,8 @@ namespace OSCADSharp.Solids.Imported } } + colorGrouping.RemoveAll(elem => traversed.Contains(elem)); + return neighbors; }