示例#1
0
        public static Elements.Floor[] FloorsFromRevitFloor(ADSK.Document doc, ADSK.Floor revitFloor)
        {
            var profiles  = GetProfilesOfTopFacesOfFloor(doc, revitFloor);
            var thickness = revitFloor.LookupParameter("Thickness")?.AsDouble();

            var floors = new List <Elements.Floor>();

            foreach (var profile in profiles)
            {
                var zMove     = profile.Perimeter.Vertices.Max(v => v.Z);
                var transform = new ElemGeom.Transform(0, 0, -zMove);

                var zeroedProfile = transform.OfProfile(profile);

                transform.Invert();
                var floorThickness = thickness.HasValue ? Elements.Units.FeetToMeters(thickness.Value) : Elements.Units.FeetToMeters(1);
                // Revit floors are extrusions down, and currently Hypar floors are extrusions up, so we also must move by the floor thickness
                transform.Move(new Vector3(0, 0, -floorThickness));
                var floor = new Elements.Floor(zeroedProfile,
                                               floorThickness,
                                               transform);
                floors.Add(floor);
            }
            return(floors.ToArray());
        }