/// <summary> /// Private function conforming a list of Rooms to another list of Rooms. /// </summary> /// <param name="fitRooms">Rooms that will conform the 'to' list of Rooms.</param> /// <param name="toRooms">List of Rooms to which the 'fitted' Rooms will conform.</param> /// <param name="toStory">Indicates whether the new Room should conform to the Story Perimeter. True by default.</param> /// <returns> /// A list of Rooms. /// </returns> private List <Room> FitRooms(List <Room> fitRooms, List <Room> toRooms, bool toStory = true) { if (toRooms.Count == 0) { return(fitRooms); } var addRooms = new List <Room>(); var toPolygons = new List <Polygon>(); foreach (Room toRoom in toRooms) { toPolygons.Add(toRoom.Perimeter); } Polygon storyPerimeter = Perimeter; if (!toStory) { storyPerimeter = null; } foreach (Room fitRoom in fitRooms) { var perimeters = Shaper.FitTo(fitRoom.Perimeter, storyPerimeter, toPolygons); for (int i = 0; i < perimeters.Count; i++) { var addRoom = new Room() { Color = fitRoom.Color, Elevation = fitRoom.Elevation, Height = fitRoom.Height, Name = fitRoom.Name, Perimeter = perimeters[i] }; addRooms.Add(addRoom); } } return(addRooms); }