From 088c0f6c39de26bb82e004482e803f95ccd14ae2 Mon Sep 17 00:00:00 2001 From: James Bradley Date: Thu, 25 Jul 2024 12:22:36 -0400 Subject: [PATCH] group by thickness and apply --- .../WallsLOD200/src/WallsLOD200.cs | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/LayoutFunctions/WallsLOD200/src/WallsLOD200.cs b/LayoutFunctions/WallsLOD200/src/WallsLOD200.cs index a22be930..e05de2ab 100644 --- a/LayoutFunctions/WallsLOD200/src/WallsLOD200.cs +++ b/LayoutFunctions/WallsLOD200/src/WallsLOD200.cs @@ -29,26 +29,31 @@ public static WallsLOD200Outputs Execute(Dictionary inputModels, walls = SplitWallsByLevels(walls, levels, random); - var wallGroups = walls.GroupBy(w => w.AdditionalProperties["Level"] ?? w.Transform.Origin.Z); - - foreach (var group in wallGroups) + var wallThicknessGroups = walls.GroupBy(w => w.Thickness); + foreach (var thicknessGroup in wallThicknessGroups) { - var level = levels.FirstOrDefault(l => l.Id.ToString() == group.Key.ToString()) ?? new Level(0, 3, null); - var lines = UnifyLines(group.ToList().Select(wall => + var thickness = thicknessGroup.Key; + var wallGroups = thicknessGroup.GroupBy(w => w.AdditionalProperties["Level"] ?? w.Transform.Origin.Z); + + foreach (var group in wallGroups) { - var transform = new Transform(wall.Transform); - transform.Move(0, 0, -level.Elevation); // To keep the level.Elevation logic below, negate the wall's Z-position. - return wall.CenterLine.TransformedLine(transform); - }).ToList()); - var roundedZLines = lines.Select(l => + var level = levels.FirstOrDefault(l => l.Id.ToString() == group.Key.ToString()) ?? new Level(0, 3, null); + var lines = UnifyLines(group.ToList().Select(wall => { - var roundedStart = new Vector3(l.Start.X, l.Start.Y, Math.Round(l.Start.Z, 5)); - var roundedEnd = new Vector3(l.End.X, l.End.Y, Math.Round(l.End.Z, 5)); - return new Line(roundedStart, roundedEnd); - } - ); - var newWalls = roundedZLines.Select(mc => new StandardWall(mc, 0.13335, level.Height ?? 3, random.NextMaterial(), new Transform().Moved(0, 0, level.Elevation))); - output.Model.AddElements(newWalls); + var transform = new Transform(wall.Transform); + transform.Move(0, 0, -level.Elevation); // To keep the level.Elevation logic below, negate the wall's Z-position. + return wall.CenterLine.TransformedLine(transform); + }).ToList()); + var roundedZLines = lines.Select(l => + { + var roundedStart = new Vector3(l.Start.X, l.Start.Y, Math.Round(l.Start.Z, 5)); + var roundedEnd = new Vector3(l.End.X, l.End.Y, Math.Round(l.End.Z, 5)); + return new Line(roundedStart, roundedEnd); + } + ); + var newWalls = roundedZLines.Select(mc => new StandardWall(mc, thickness, level.Height ?? 3, random.NextMaterial(), new Transform().Moved(0, 0, level.Elevation))); + output.Model.AddElements(newWalls); + } } }