Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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()));
            }
        }