コード例 #1
0
        /***************************************************/

        private static FamilyInstance FamilyInstance_CurveDrivenStructural(Document document, FamilySymbol familySymbol, Curve curve, Element host, RevitSettings settings)
        {
            Level level = document.LevelBelow(curve, settings);

            if (level == null)
            {
                return(null);
            }

            BuiltInCategory builtInCategory = (BuiltInCategory)familySymbol.Category.Id.IntegerValue;
            StructuralType  structuralType  = builtInCategory.StructuralType();

            FamilyInstance familyInstance = document.Create.NewFamilyInstance(curve, familySymbol, level, structuralType);

            if (familyInstance == null)
            {
                return(null);
            }

            if (host != null)
            {
                familyInstance.HostIgnoredWarning();
            }

            return(familyInstance);
        }
コード例 #2
0
        /***************************************************/

        private static FamilyInstance FamilyInstance_TwoLevelBased(Document document, FamilySymbol familySymbol, XYZ origin, Transform orientation, Element host, RevitSettings settings)
        {
            Level level = document.LevelBelow(origin, settings);

            if (level == null)
            {
                return(null);
            }

            BuiltInCategory builtInCategory = (BuiltInCategory)familySymbol.Category.Id.IntegerValue;
            StructuralType  structuralType  = builtInCategory.StructuralType();

            FamilyInstance familyInstance = document.Create.NewFamilyInstance(origin, familySymbol, level, structuralType);

            if (familyInstance == null)
            {
                return(null);
            }

            familyInstance.TwoLevelBasedByPointWarning();

            XYZ x = orientation?.BasisX;

            if (x != null)
            {
                if (Math.Abs(x.Z) > settings.AngleTolerance)
                {
                    familyInstance.ProjectedOnXYWarning();
                }

                XYZ    xdir  = orientation.ProjectedX(settings);
                double angle = XYZ.BasisX.AngleOnPlaneTo(xdir, XYZ.BasisZ);
                if (Math.Abs(angle) > settings.AngleTolerance)
                {
                    Line dir = Line.CreateBound(origin, origin + XYZ.BasisZ);
                    ElementTransformUtils.RotateElement(document, familyInstance.Id, dir, angle);
                    document.Regenerate();
                }
            }

            if (host != null)
            {
                familyInstance.HostIgnoredWarning();
            }

            return(familyInstance);
        }
コード例 #3
0
        /***************************************************/
        /****       Private Methods - Curve Based       ****/
        /***************************************************/

        private static FamilyInstance FamilyInstance_TwoLevelsBased(Document document, FamilySymbol familySymbol, Curve curve, Element host, RevitSettings settings)
        {
            Line line = curve as Line;

            if (line == null)
            {
                familySymbol.LinearOnlyError();
                return(null);
            }

            if (line.GetEndPoint(0).Z > line.GetEndPoint(1).Z)
            {
                familySymbol.InvalidTwoLevelLocationError();
                return(null);
            }

            Level level = document.LevelBelow(line.GetEndPoint(0), settings);

            if (level == null)
            {
                return(null);
            }

            BuiltInCategory builtInCategory = (BuiltInCategory)familySymbol.Category.Id.IntegerValue;
            StructuralType  structuralType  = builtInCategory.StructuralType();

            FamilyInstance familyInstance = document.Create.NewFamilyInstance(line, familySymbol, level, structuralType);

            if (familyInstance == null)
            {
                return(null);
            }

            if (host != null)
            {
                familyInstance.HostIgnoredWarning();
            }

            return(familyInstance);
        }