public ADSK.ElementId[] ToRevit(Elements.Element hyparElement, LoadContext context) { var createdElements = new List <ADSK.ElementId>(); var floor = hyparElement as Elements.Floor; var curves = floor.Profile.Perimeter.ToRevitCurveArray(true); var floorType = new ADSK.FilteredElementCollector(context.Document) .OfClass(typeof(ADSK.FloorType)) .OfType <ADSK.FloorType>() .First(e => e.Name.Contains("Generic")); double offsetFromLevel = 0; var level = context.Level ?? FromHyparExtensions.GetLevelClosestToZ(Units.MetersToFeet(floor.Elevation), context.Document, out offsetFromLevel); var rvtFloor = context.Document.Create.NewFloor(curves, floorType, level, false, ADSK.XYZ.BasisZ); context.Document.Regenerate(); // we must regenerate the document before adding openings var allOpenings = floor.Openings.Select(o => o.Perimeter).Union(floor.Profile.Voids); foreach (var opening in allOpenings) { var openingProfile = opening.ToRevitCurveArray(true); var rvtOpen = context.Document.Create.NewOpening(rvtFloor, openingProfile, true); createdElements.Add(rvtOpen.Id); } offsetFromLevel += Units.MetersToFeet(floor.Thickness); rvtFloor.LookupParameter("Height Offset From Level")?.Set(Units.MetersToFeet(offsetFromLevel)); createdElements.Add(rvtFloor.Id); return(createdElements.ToArray()); }
public ADSK.ElementId[] ToRevit(Elements.Element hyparElement, LoadContext context) { var stdWall = hyparElement as Elements.StandardWall; if (stdWall == null) { return(Array.Empty <ADSK.ElementId>()); } var cl = stdWall.CenterLine.ToRevitCurve(true); var offsetFromLevel = 0.0; var level = context.Level ?? FromHyparExtensions.GetLevelClosestToZ(Units.MetersToFeet(stdWall.Transform.Origin.Z), context.Document, out offsetFromLevel); var rvtWall = ADSK.Wall.Create(context.Document, cl, level.Id, false); rvtWall.LookupParameter("Unconnected Height").Set(Units.MetersToFeet(stdWall.Height)); rvtWall.LookupParameter("Base Offset").Set(Units.MetersToFeet(offsetFromLevel)); // Letting the walls join as they are loaded causes many errors and walls that are missing. // For now we disallow joining. ADSK.WallUtils.DisallowWallJoinAtEnd(rvtWall, 0); ADSK.WallUtils.DisallowWallJoinAtEnd(rvtWall, 1); return(new ADSK.ElementId[] { rvtWall.Id }); }