示例#1
0
        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());
        }
示例#2
0
        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 });
        }