/// <summary> /// Breaks initial zones into generally rectangular pieces. /// Subdivides those pieces into rooms based on program sizes and quotas. /// </summary> /// <param name="zm"></param> /// <param name="pm"></param> public static void RoomConfiguration(ZoneManifest zm, ProgramManifest pm) { foreach (ZonePackage zone in zm.Zones) { zone.Rooms = new List <RoomPackage>(); List <Brep> rectangularizedZoneRegions = Breps.Rectangularize(zone); //Slice rectangularized zone regions into room lanes. foreach (Brep region in rectangularizedZoneRegions) { Update.Room.LaneConfiguration(region, zone, pm); } //Perform final measurements and prepare rooms for population. for (int i = 0; i < zone.Rooms.Count; i++) { var room = zone.Rooms[i]; Update.Room.Orientation(room, zone); Update.Room.ProgramHint(room, zone, i); } } }