private ScheduleRulesetAbridged ToAbridged(ScheduleRuleset obj) { var abridged = new ScheduleRulesetAbridged(obj.Identifier, obj.DaySchedules, obj.DefaultDaySchedule, obj.DisplayName, obj.UserData, obj.ScheduleRules, obj.HolidaySchedule, obj.SummerDesigndaySchedule, obj.WinterDesigndaySchedule, obj.ScheduleTypeLimit?.Identifier); //_typeLimits.Add(obj.ScheduleTypeLimit); return(abridged); }
public static ScheduleRuleset ToLadybugTools_ActivityLevel(this Profile profile, double value) { if (profile == null || double.IsNaN(value)) { return(null); } string uniqueName = Core.LadybugTools.Query.UniqueName(profile); if (string.IsNullOrWhiteSpace(uniqueName)) { return(null); } uniqueName = Core.LadybugTools.Query.UniqueName(typeof(ActivityLevel), uniqueName); ScheduleDay scheduleDay = new ScheduleDay( identifier: uniqueName, values: new List <double>() { value }, displayName: profile.Name, times: new List <List <int> >() { new List <int>() { 0, 0 } }); ScheduleRuleAbridged scheduleRuleAbridged = new ScheduleRuleAbridged( scheduleDay: scheduleDay.Identifier, applySunday: true, applyMonday: true, applyTuesday: true, applyWednesday: true, applyThursday: true, applyFriday: true, applySaturday: true); ScheduleRuleset scheduleRulset = new ScheduleRuleset( identifier: uniqueName, daySchedules: new List <ScheduleDay>() { scheduleDay }, defaultDaySchedule: scheduleDay.Identifier, displayName: profile.Name, userData: null, scheduleRules: new List <ScheduleRuleAbridged>() { scheduleRuleAbridged }); return(scheduleRulset); }
private ScheduleRuleset AbridgedToReal(ScheduleRulesetAbridged obj) { var typeLimit = _typeLimits.FirstOrDefault(_ => _.Identifier == obj.ScheduleTypeLimit); var realObj = new ScheduleRuleset(obj.Identifier, obj.DaySchedules, obj.DefaultDaySchedule, obj.DisplayName, obj.UserData, obj.ScheduleRules, obj.HolidaySchedule, obj.SummerDesigndaySchedule, obj.WinterDesigndaySchedule, typeLimit); return(realObj); }
public static HoneybeeSchema.ScheduleRuleset CreateSchedule(Control parent = default) { var dialog = new Dialog_ScheduleTypeLimit(); var dialog_rc = dialog.ShowModal(parent); if (dialog_rc == null) { return(null); } var typeLimit = dialog_rc; var dayId = Guid.NewGuid().ToString(); var dayName = $"New Schedule Day {dayId.Substring(0, 5)}"; var newDay = new ScheduleDay( dayId, new List <double> { 0.3 }, dayName, new List <List <int> >() { new List <int> { 0, 0 } } ); var id = Guid.NewGuid().ToString(); var newSch = new ScheduleRuleset( id, new List <ScheduleDay> { newDay }, dayId, $"New Schedule Ruleset {id.Substring(0, 5)}" ); newSch.ScheduleTypeLimit = typeLimit; var dialog_sch = new Honeybee.UI.Dialog_Schedule(newSch); var dialog_sch_rc = dialog_sch.ShowModal(parent); return(dialog_sch_rc); }
public static ScheduleRuleset ToLadybugTools(this Profile profile, ProfileType profileType = ProfileType.Undefined) { if (profile == null) { return(null); } string uniqueName = Core.LadybugTools.Query.UniqueName(profile); if (string.IsNullOrWhiteSpace(uniqueName)) { return(null); } //TODO: Add more sophisticated Method to create ScheduleRulesetAbridged List <Profile> profiles = profile.GetProfiles()?.ToList(); if (profiles == null) { profiles = new List <Profile>(); } if (profiles.Count == 0) { profiles.Add(profile); } profiles.RemoveAll(x => x == null); if (profiles.Count == 0) { return(null); } Dictionary <System.Guid, ScheduleDay> dictionary_ScheduleDay = new Dictionary <System.Guid, ScheduleDay>(); foreach (Profile profile_Temp in profiles) { System.Guid guid = profile_Temp.Guid; if (dictionary_ScheduleDay.ContainsKey(guid)) { continue; } ScheduleDay scheduleDay = profile_Temp.ToLadybugTools_ScheduleDay(); if (scheduleDay == null) { continue; } dictionary_ScheduleDay[guid] = scheduleDay; } if (dictionary_ScheduleDay == null || dictionary_ScheduleDay.Count == 0) { return(null); } int index = 0; while (profiles.Count < 7) { profiles.Add(profiles[index]); index++; } Dictionary <System.Guid, ScheduleRuleAbridged> dictionary_ScheduleRuleAbridged = new Dictionary <System.Guid, ScheduleRuleAbridged>(); for (int i = 0; i < 7; i++) { System.Guid guid = profiles[i].Guid; if (!dictionary_ScheduleDay.ContainsKey(guid)) { continue; } ScheduleDay scheduleDay = dictionary_ScheduleDay[guid]; ScheduleRuleAbridged scheduleRuleAbridged; if (!dictionary_ScheduleRuleAbridged.TryGetValue(guid, out scheduleRuleAbridged)) { scheduleRuleAbridged = new ScheduleRuleAbridged(scheduleDay.Identifier); dictionary_ScheduleRuleAbridged[guid] = scheduleRuleAbridged; } switch (i) { case 0: scheduleRuleAbridged.ApplyMonday = true; break; case 1: scheduleRuleAbridged.ApplyTuesday = true; break; case 2: scheduleRuleAbridged.ApplyWednesday = true; break; case 3: scheduleRuleAbridged.ApplyThursday = true; break; case 4: scheduleRuleAbridged.ApplyFriday = true; break; case 5: scheduleRuleAbridged.ApplySaturday = true; break; case 6: scheduleRuleAbridged.ApplySunday = true; break; } } List <ScheduleDay> scheduleDays = dictionary_ScheduleDay.Values.ToList(); List <ScheduleRuleAbridged> scheduleRuleAbridgedes = dictionary_ScheduleRuleAbridged.Values.ToList(); ScheduleRuleset result = new ScheduleRuleset( identifier: uniqueName, daySchedules: scheduleDays, defaultDaySchedule: scheduleDays.First().Identifier, displayName: profile.Name, userData: null, scheduleRules: scheduleRuleAbridgedes); return(result); }
public static ProgramType ToLadybugTools(this Space space, AdjacencyCluster adjacencyCluster, ProfileLibrary profileLibrary) { InternalCondition internalCondition = space.InternalCondition; if (internalCondition == null) { return(null); } string uniqueName = Core.LadybugTools.Query.UniqueName(internalCondition); if (string.IsNullOrWhiteSpace(uniqueName)) { return(null); } People people = null; Lighting lighting = null; ElectricEquipment electricEquipment = null; Infiltration infiltration = null; Setpoint setpoint = null; if (profileLibrary != null) { double area = double.NaN; if (!space.TryGetValue(SpaceParameter.Area, out area)) { area = double.NaN; } Dictionary <ProfileType, Profile> dictionary = internalCondition.GetProfileDictionary(profileLibrary); if (dictionary.ContainsKey(ProfileType.Occupancy)) { Profile profile = dictionary[ProfileType.Occupancy]; if (profile != null) { double gain = Analytical.Query.OccupancyGain(space); if (double.IsNaN(gain)) { gain = 0; } ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerPeople = gain; if (double.IsNaN(gainPerPeople)) { gainPerPeople = 0; } double occupancy = Analytical.Query.CalculatedOccupancy(space); if (!double.IsNaN(occupancy) && occupancy != 0) { gainPerPeople = gainPerPeople / occupancy; } ScheduleRuleset scheduleRuleset_ActivityLevel = profile.ToLadybugTools_ActivityLevel(gainPerPeople); if (scheduleRuleset_ActivityLevel != null) { double peoplePerArea = Analytical.Query.CalculatedPeoplePerArea(space); if (double.IsNaN(peoplePerArea)) { peoplePerArea = 0; } double latentFraction = double.NaN; double sensibleOccupancyGain = Analytical.Query.OccupancySensibleGain(space); double latentOccupancyGain = Analytical.Query.OccupancyLatentGain(space); if (!double.IsNaN(sensibleOccupancyGain) || !double.IsNaN(latentOccupancyGain)) { latentFraction = latentOccupancyGain / (latentOccupancyGain + sensibleOccupancyGain); } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.OccupancyRadiantProportion, out double occuplancyRadiantProportion)) { occuplancyRadiantProportion = 0.3; } if (double.IsNaN(latentFraction)) { latentFraction = 0; } people = new People( identifier: string.Format("{0}_People", uniqueName), peoplePerArea: peoplePerArea, occupancySchedule: scheduleRuleset, displayName: profile.Name, userData: null, activitySchedule: scheduleRuleset_ActivityLevel, radiantFraction: occuplancyRadiantProportion, latentFraction: latentFraction); } } } } if (dictionary.ContainsKey(ProfileType.Lighting)) { Profile profile = dictionary[ProfileType.Lighting]; if (profile != null) { double gain = Analytical.Query.CalculatedLightingGain(space); if (double.IsNaN(gain)) { gain = 0; } ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerArea = gain; if (double.IsNaN(gainPerArea)) { gainPerArea = 0; } if (!double.IsNaN(area) && area != 0) { gainPerArea = gainPerArea / area; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.LightingRadiantProportion, out double lightingRadiantProportion)) { lightingRadiantProportion = 0.32; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.LightingViewCoefficient, out double lightingViewCoefficient)) { lightingViewCoefficient = 0.25; } lighting = new Lighting( identifier: string.Format("{0}_Lighting", uniqueName), wattsPerArea: gainPerArea, schedule: scheduleRuleset, visibleFraction: lightingViewCoefficient, radiantFraction: lightingRadiantProportion, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.EquipmentSensible)) { double gain = Analytical.Query.CalculatedEquipmentSensibleGain(space); if (double.IsNaN(gain)) { gain = 0; } Profile profile = dictionary[ProfileType.EquipmentSensible]; if (profile != null) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double gainPerArea = gain; if (double.IsNaN(gainPerArea)) { gainPerArea = 0; } if (!double.IsNaN(area) && area != 0) { gainPerArea = gainPerArea / area; } if (!internalCondition.TryGetValue(Analytical.InternalConditionParameter.EquipmentRadiantProportion, out double equipmentRadiantProportion)) { equipmentRadiantProportion = 0; } electricEquipment = new ElectricEquipment( identifier: string.Format("{0}_ElectricEquipment", uniqueName), wattsPerArea: gainPerArea, schedule: scheduleRuleset, radiantFraction: equipmentRadiantProportion, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.Infiltration)) { Profile profile = dictionary[ProfileType.Infiltration]; if (profile != null) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { double airFlowPerExteriorArea = Query.InfiltrationAirFlowPerExteriorArea(adjacencyCluster, space); infiltration = new Infiltration( identifier: string.Format("{0}_Infiltration", uniqueName), flowPerExteriorArea: airFlowPerExteriorArea, schedule: scheduleRuleset, displayName: profile.Name); } } } if (dictionary.ContainsKey(ProfileType.Cooling) && dictionary.ContainsKey(ProfileType.Heating)) { Profile profile_Cooling = dictionary[ProfileType.Cooling]; Profile profile_Heating = dictionary[ProfileType.Heating]; if (profile_Cooling != null && profile_Heating != null) { ScheduleRuleset scheduleRuleset_Cooling = profile_Cooling.ToLadybugTools(); ScheduleRuleset scheduleRuleset_Heating = profile_Heating.ToLadybugTools(); if (scheduleRuleset_Cooling != null && scheduleRuleset_Heating != null) { setpoint = new Setpoint(string.Format("{0}_Setpoint", uniqueName), scheduleRuleset_Cooling, scheduleRuleset_Heating, string.Format("Heating {0} Cooling {1}", profile_Heating.Name, profile_Cooling.Name)); Profile profile; if (dictionary.TryGetValue(ProfileType.Humidification, out profile)) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { setpoint.HumidifyingSchedule = scheduleRuleset; } } if (dictionary.TryGetValue(ProfileType.Dehumidification, out profile)) { ScheduleRuleset scheduleRuleset = profile.ToLadybugTools(); if (scheduleRuleset != null) { setpoint.DehumidifyingSchedule = scheduleRuleset; } } } } } } ProgramType result = new ProgramType( identifier: uniqueName, displayName: internalCondition.Name, userData: null, people: people, lighting: lighting, electricEquipment: electricEquipment, infiltration: infiltration, setpoint: setpoint); return(result); }