Пример #1
0
        public static Elements.Column ColumnFromRevitColumn(ADSK.FamilyInstance column, Document doc)
        {
            if (column.Category.Id.IntegerValue != (int)BuiltInCategory.OST_Columns)
            {
                throw new InvalidCastException("The incoming family instance is not a column");
            }

            var geom      = column.get_Geometry(new Options());
            var downfaces = geom.Where(g => g.GetType() == typeof(Solid)).Cast <Solid>().Where(s => s != null).SelectMany(s => s.GetMostLikelyHorizontalFaces(30, true));

            var profile = downfaces.First().GetProfiles(true).First();

            if (profile.Area() < 0)
            {
                profile = profile.Reverse();
            }

            var baseCenter = (column.Location as LocationPoint).Point.ToVector3(true);

            baseCenter.Z = baseCenter.Z + Elements.Units.FeetToMeters((doc.GetElement(column.LevelId) as Level).Elevation);
            var transform = new Elements.Geometry.Transform(-baseCenter.X, -baseCenter.Y, -baseCenter.Z);

            var zeroedProfile = transform.OfProfile(profile);

            transform.Invert();

            var col = new Elements.Column(transform.Origin, Elements.Units.FeetToMeters(GetHeightFromColumn(column)), zeroedProfile);

            return(col);
        }
Пример #2
0
        /// <summary>
        /// Return a new profile that is this profile scaled about the origin by the desired amount.
        /// </summary>
        public Elements.Geometry.Profile Scale(double amount)
        {
            var transform = new Elements.Geometry.Transform();

            transform.Scale(amount);

            return(transform.OfProfile(this));
        }