private static void DF_AssignBoundaryConditions(IReadOnlyCollection <SpatialObjectWrapper> objects) { foreach (var so in objects) { var offset = so.Self.get_Parameter(BuiltInParameter.ROOM_LOWER_OFFSET).AsDouble(); var boundaryCurves = so.Room2D.FloorBoundary.GetCurves(so.Level.Elevation + offset); for (var i = 0; i < boundaryCurves.Count; i++) { var currentBc = so.Room2D.BoundaryConditions[i]; if (currentBc is Schemas.Surface) { continue; } // (Konrad) Adiabatic can only be assigned to Boundaries that don't have a Window. var allowAdiabatic = so.Room2D.WindowParameters[i] == null; var bc = BoundaryConditionBase.DF_Init(objects.Where(x => !Equals(x, so) && x.Level.Id == so.Level.Id), boundaryCurves[i], so, allowAdiabatic); if (bc is Outdoors) { continue; } so.Room2D.BoundaryConditions[i] = bc; } var holeCurves = so.Room2D.FloorHoles.SelectMany(x => x.GetCurves(so.Level.Elevation + offset)).ToList(); for (var i = 0; i < holeCurves.Count; i++) { var currentBc = so.Room2D.BoundaryConditions[boundaryCurves.Count + i]; if (currentBc is Schemas.Surface) { continue; } // (Konrad) Adiabatic can only be assigned to Boundaries that don't have a Window. var allowAdiabatic = so.Room2D.WindowParameters[boundaryCurves.Count + i] == null; var bc = BoundaryConditionBase.DF_Init(objects.Where(x => !Equals(x, so) && x.Level.Id == so.Level.Id), holeCurves[i], so, allowAdiabatic); if (bc is Outdoors) { continue; } so.Room2D.BoundaryConditions[boundaryCurves.Count + i] = bc; } } }
public static HB.AnyOf <HB.Outdoors, HB.Surface> ToHoneybeeAnyOf(this BoundaryConditionBase bc) { switch (bc) { case Adiabatic unused: case Ground unused1: return(new HB.AnyOf <HB.Outdoors, HB.Surface>(new HB.Outdoors())); case Outdoors outdoors: return(new HB.AnyOf <HB.Outdoors, HB.Surface>(outdoors.ToHoneybee() as HB.Outdoors)); case Surface surface: return(new HB.AnyOf <HB.Outdoors, HB.Surface>(surface.ToHoneybee() as HB.Surface)); default: return(new HB.AnyOf <HB.Outdoors, HB.Surface>(new HB.Outdoors())); } }