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)); }
//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); } }
public static double CalArea(this HoneybeeSchema.Room room) { var areas = room.Faces.Where(_ => _.FaceType == HoneybeeSchema.FaceType.Floor).Select(_ => _.CalArea()); return(areas.Sum()); }