Exemplo n.º 1
0
        public static Shell Shell(this HoneybeeSchema.Room room)
        {
            if (room == null)
            {
                return(null);
            }

            List <HoneybeeSchema.Face> faces = room.Faces;

            if (faces == null && faces.Count < 3)
            {
                return(null);
            }

            List <Face3D> face3Ds = new List <Face3D>();

            foreach (HoneybeeSchema.Face face in room.Faces)
            {
                Face3D face3D = Convert.ToSAM(face.Geometry);
                if (face3D == null)
                {
                    return(null);
                }

                face3Ds.Add(face3D);
            }

            return(new Shell(face3Ds));
        }
Exemplo n.º 2
0
        //ObjRef to ObjRef
        public static Brep ToRoomBrepObj(ObjRef roomBrepObj, double maxRoofFloorAngle = 30, double tolerance = 0.0001)
        {
            //check if Null, valid, solid
            if (!CheckIfBrepObjectValid(roomBrepObj))
            {
                throw new ArgumentException("Input geometry is not a valid object to convert to honeybee room!");
            }

            //create new room
            //Create honeybee room object here.
            var closedBrep = roomBrepObj.Brep().DuplicateBrep();
            var dupBrep    = closedBrep.ToAllPlaneBrep(tolerance);
            var subFaces   = dupBrep.Faces;

            var hbFaces = subFaces.Select(_ => _.ToHBFace(maxRoofFloorAngle)).ToList();

            for (int i = 0; i < hbFaces.Count; i++)
            {
                var faceEnt = new FaceEntity(hbFaces[i]);
                var bFace   = dupBrep.Surfaces[i];
                bFace.UserData.Add(faceEnt);
            }

            var id        = roomBrepObj.ObjectId;
            var newObjRef = new ObjRef(id);
            var room      = new HoneybeeSchema.Room($"Room_{id}", hbFaces, new HoneybeeSchema.RoomPropertiesAbridged());

            room.DisplayName = $"My Room {id.ToString().Substring(0, 5)}";
            var ent = new RoomEntity(room, newObjRef);

            //Add this RoomEntity to brep's userdata at the end.
            dupBrep.UserData.Add(ent);


#if DEBUG
            if (!dupBrep.TryGetRoomEntity().IsValid)
            {
                throw new ArgumentException("Failed to convert to honeybee room!");
            }
#endif

            return(dupBrep);


            //Local method
            bool CheckIfBrepObjectValid(ObjRef roomObj)
            {
                if (roomObj == null)
                {
                    throw new NullReferenceException();
                }

                var brep = roomObj.Brep();

                if (brep == null)
                {
                    throw new NullReferenceException();
                }
                if (!brep.IsValid)
                {
                    throw new ArgumentException("Input geometry is not a valid object to convert to honeybee room!");
                }

                if (!brep.IsSolid)
                {
                    throw new ArgumentException("This rhino object is not a water-tight solid!");
                }

                brep.DeleteHBEntity(duplicate: false);

                return(true);
            }
        }
Exemplo n.º 3
0
        public static double CalArea(this HoneybeeSchema.Room room)
        {
            var areas = room.Faces.Where(_ => _.FaceType == HoneybeeSchema.FaceType.Floor).Select(_ => _.CalArea());

            return(areas.Sum());
        }