예제 #1
0
        /***************************************************/
        /****              Private Methods              ****/
        /***************************************************/

        private static CircleProfile CircleProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            diameter;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionConcreteRound)
            {
                diameter = (section as StructuralSectionConcreteRound).Diameter.ToSI(UnitType.UT_Section_Dimension);
            }
            else if (section is StructuralSectionConcreteRound)
            {
                diameter = (section as StructuralSectionConcreteRound).Diameter.ToSI(UnitType.UT_Section_Dimension);
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                diameter = familySymbol.LookupParameterDouble(diameterNames, dimensionGroups);
            }

            if (!double.IsNaN(diameter))
            {
                return(BHS.Create.CircleProfile(diameter));
            }
            else
            {
                double radius = familySymbol.LookupParameterDouble(radiusNames, dimensionGroups);
                if (!double.IsNaN(radius))
                {
                    return(BHS.Create.CircleProfile(radius * 2));
                }
            }

            return(null);
        }
예제 #2
0
        /***************************************************/

        private static ChannelProfile ChannelProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            height, flangeWidth, webThickness, flangeThickness, rootRadius, toeRadius;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionCParallelFlange)
            {
                StructuralSectionCParallelFlange sectionType = section as StructuralSectionCParallelFlange;
                height          = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                flangeWidth     = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                webThickness    = sectionType.WebThickness.ToSI(UnitType.UT_Section_Dimension);
                flangeThickness = sectionType.FlangeThickness.ToSI(UnitType.UT_Section_Dimension);
                rootRadius      = sectionType.WebFillet.ToSI(UnitType.UT_Section_Dimension);
                toeRadius       = sectionType.FlangeFillet.ToSI(UnitType.UT_Section_Dimension);
            }
            else if (section is StructuralSectionCProfile)
            {
                //TODO: Implement cold-formed profiles?
                StructuralSectionCProfile sectionType = section as StructuralSectionCProfile;
                height          = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                flangeWidth     = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                webThickness    = sectionType.WallNominalThickness.ToSI(UnitType.UT_Section_Dimension);
                flangeThickness = sectionType.WallNominalThickness.ToSI(UnitType.UT_Section_Dimension);
                rootRadius      = sectionType.InnerFillet.ToSI(UnitType.UT_Section_Dimension);
                toeRadius       = 0;
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                height          = familySymbol.LookupParameterDouble(heightNames, dimensionGroups);
                flangeWidth     = familySymbol.LookupParameterDouble(widthNames, dimensionGroups);
                webThickness    = familySymbol.LookupParameterDouble(webThicknessNames, dimensionGroups);
                flangeThickness = familySymbol.LookupParameterDouble(flangeThicknessNames, dimensionGroups);
                rootRadius      = familySymbol.LookupParameterDouble(rootRadiusNames, dimensionGroups);
                toeRadius       = familySymbol.LookupParameterDouble(toeRadiusNames, dimensionGroups);
            }

            if (double.IsNaN(rootRadius))
            {
                rootRadius = 0;
            }

            if (double.IsNaN(toeRadius))
            {
                toeRadius = 0;
            }

            if (!double.IsNaN(height) && !double.IsNaN(flangeWidth) && !double.IsNaN(webThickness) && !double.IsNaN(flangeThickness))
            {
                return(BHS.Create.ChannelProfile(height, flangeWidth, webThickness, flangeThickness, rootRadius, toeRadius));
            }

            return(null);
        }
예제 #3
0
        /***************************************************/

        private static FabricatedISectionProfile FabricatedISectionProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            height, topFlangeWidth, botFlangeWidth, webThickness, topFlangeThickness, botFlangeThickness, weldSize;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionIWelded)
            {
                StructuralSectionIWelded sectionType = section as StructuralSectionIWelded;
                height             = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                topFlangeWidth     = sectionType.TopFlangeWidth.ToSI(UnitType.UT_Section_Dimension);
                botFlangeWidth     = sectionType.BottomFlangeWidth.ToSI(UnitType.UT_Section_Dimension);
                webThickness       = sectionType.WebThickness.ToSI(UnitType.UT_Section_Dimension);
                topFlangeThickness = sectionType.TopFlangeThickness.ToSI(UnitType.UT_Section_Dimension);
                botFlangeThickness = sectionType.BottomFlangeThickness.ToSI(UnitType.UT_Section_Dimension);
                weldSize           = 0;
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                height             = familySymbol.LookupParameterDouble(heightNames, dimensionGroups);
                topFlangeWidth     = familySymbol.LookupParameterDouble(topFlangeWidthNames, dimensionGroups);
                botFlangeWidth     = familySymbol.LookupParameterDouble(botFlangeWidthNames, dimensionGroups);
                webThickness       = familySymbol.LookupParameterDouble(webThicknessNames, dimensionGroups);
                topFlangeThickness = familySymbol.LookupParameterDouble(topFlangeThicknessNames, dimensionGroups);
                botFlangeThickness = familySymbol.LookupParameterDouble(botFlangeThicknessNames, dimensionGroups);
                weldSize           = familySymbol.LookupParameterDouble(weldSizeNames1, dimensionGroups);
            }

            if (double.IsNaN(weldSize))
            {
                weldSize = familySymbol.LookupParameterDouble(weldSizeNames2, dimensionGroups);
                if (!double.IsNaN(weldSize) && !double.IsNaN(webThickness))
                {
                    weldSize = (weldSize - webThickness / 2) / (Math.Sqrt(2));
                }
                else
                {
                    weldSize = 0;
                }
            }

            if (!double.IsNaN(height) && !double.IsNaN(topFlangeWidth) && !double.IsNaN(botFlangeWidth) && !double.IsNaN(webThickness) && !double.IsNaN(topFlangeThickness) && !double.IsNaN(botFlangeThickness))
            {
                return(BHS.Create.FabricatedISectionProfile(height, topFlangeWidth, botFlangeWidth, webThickness, topFlangeThickness, botFlangeThickness, weldSize));
            }

            return(null);
        }
예제 #4
0
        /***************************************************/

        private static RectangleProfile RectangleProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            height, width, cornerRadius;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionConcreteRectangle)
            {
                StructuralSectionConcreteRectangle sectionType = section as StructuralSectionConcreteRectangle;
                height       = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width        = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                cornerRadius = 0;
            }
            else if (section is StructuralSectionRectangularBar)
            {
                StructuralSectionRectangularBar sectionType = section as StructuralSectionRectangularBar;
                height       = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width        = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                cornerRadius = 0;
            }
            else if (section is StructuralSectionRectangleParameterized)
            {
                StructuralSectionRectangleParameterized sectionType = section as StructuralSectionRectangleParameterized;
                height       = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width        = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                cornerRadius = 0;
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                height       = familySymbol.LookupParameterDouble(heightNames, dimensionGroups);
                width        = familySymbol.LookupParameterDouble(widthNames, dimensionGroups);
                cornerRadius = familySymbol.LookupParameterDouble(cornerRadiusNames, dimensionGroups);
            }

            if (double.IsNaN(cornerRadius))
            {
                cornerRadius = 0;
            }

            if (!double.IsNaN(height) && !double.IsNaN(width))
            {
                return(BHS.Create.RectangleProfile(height, width, cornerRadius));
            }

            return(null);
        }
예제 #5
0
        /***************************************************/

        private static BoxProfile BoxProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            height, width, thickness, outerRadius, innerRadius;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionRectangleHSS)
            {
                StructuralSectionRectangleHSS sectionType = section as StructuralSectionRectangleHSS;
                height      = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width       = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                thickness   = sectionType.WallNominalThickness.ToSI(UnitType.UT_Section_Dimension);
                outerRadius = sectionType.OuterFillet.ToSI(UnitType.UT_Section_Dimension);
                innerRadius = sectionType.InnerFillet.ToSI(UnitType.UT_Section_Dimension);
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                height      = familySymbol.LookupParameterDouble(heightNames, dimensionGroups);
                width       = familySymbol.LookupParameterDouble(widthNames, dimensionGroups);
                thickness   = familySymbol.LookupParameterDouble(wallThicknessNames, dimensionGroups);
                outerRadius = familySymbol.LookupParameterDouble(outerRadiusNames, dimensionGroups);
                innerRadius = familySymbol.LookupParameterDouble(innerRadiusNames, dimensionGroups);
            }

            if (double.IsNaN(outerRadius))
            {
                outerRadius = 0;
            }

            if (double.IsNaN(innerRadius))
            {
                innerRadius = 0;
            }

            if (!double.IsNaN(height) && !double.IsNaN(width) && !double.IsNaN(thickness))
            {
                return(BHS.Create.BoxProfile(height, width, thickness, outerRadius, innerRadius));
            }

            return(null);
        }
예제 #6
0
        /***************************************************/

        private static TubeProfile TubeProfileFromRevit(this FamilySymbol familySymbol)
        {
            double            thickness, diameter;
            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionPipeStandard)
            {
                StructuralSectionPipeStandard sectionType = section as StructuralSectionPipeStandard;
                thickness = sectionType.WallNominalThickness.ToSI(UnitType.UT_Section_Dimension);
                diameter  = sectionType.Diameter.ToSI(UnitType.UT_Section_Dimension);
            }
            else if (section is StructuralSectionRoundHSS)
            {
                StructuralSectionRoundHSS sectionType = section as StructuralSectionRoundHSS;
                thickness = sectionType.WallNominalThickness.ToSI(UnitType.UT_Section_Dimension);
                diameter  = sectionType.Diameter.ToSI(UnitType.UT_Section_Dimension);
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                thickness = familySymbol.LookupParameterDouble(wallThicknessNames, dimensionGroups);
                diameter  = familySymbol.LookupParameterDouble(diameterNames, dimensionGroups);
            }

            if (!double.IsNaN(diameter) && !double.IsNaN(thickness))
            {
                return(BHS.Create.TubeProfile(diameter, thickness));
            }

            double radius = familySymbol.LookupParameterDouble(radiusNames, dimensionGroups);

            if (!double.IsNaN(radius) && !double.IsNaN(thickness))
            {
                return(BHS.Create.TubeProfile(radius * 2, thickness));
            }

            return(null);
        }
예제 #7
0
        /***************************************************/

        private static TSectionProfile TSectionProfileFromRevit(this FamilySymbol familySymbol)
        {
            double height, width, webThickness, flangeThickness, rootRadius, toeRadius;

            StructuralSection section = familySymbol.GetStructuralSection();

            if (section is StructuralSectionISplitParallelFlange)
            {
                StructuralSectionISplitParallelFlange sectionType = section as StructuralSectionISplitParallelFlange;
                height          = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width           = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                webThickness    = sectionType.WebThickness.ToSI(UnitType.UT_Section_Dimension);
                flangeThickness = sectionType.FlangeThickness.ToSI(UnitType.UT_Section_Dimension);
                rootRadius      = sectionType.WebFillet.ToSI(UnitType.UT_Section_Dimension);
                toeRadius       = sectionType.FlangeFillet.ToSI(UnitType.UT_Section_Dimension);
            }
            else if (section is StructuralSectionStructuralTees)
            {
                StructuralSectionStructuralTees sectionType = section as StructuralSectionStructuralTees;
                height          = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width           = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                webThickness    = sectionType.WebThickness.ToSI(UnitType.UT_Section_Dimension);
                flangeThickness = sectionType.FlangeThickness.ToSI(UnitType.UT_Section_Dimension);
                rootRadius      = sectionType.WebFillet.ToSI(UnitType.UT_Section_Dimension);
                toeRadius       = sectionType.FlangeFillet.ToSI(UnitType.UT_Section_Dimension);
            }
            else if (section is StructuralSectionConcreteT)
            {
                StructuralSectionConcreteT sectionType = section as StructuralSectionConcreteT;
                height          = sectionType.Height.ToSI(UnitType.UT_Section_Dimension);
                width           = (sectionType.Width + 2 * sectionType.CantileverLength).ToSI(UnitType.UT_Section_Dimension);
                webThickness    = sectionType.Width.ToSI(UnitType.UT_Section_Dimension);
                flangeThickness = sectionType.CantileverHeight.ToSI(UnitType.UT_Section_Dimension);
                rootRadius      = 0;
                toeRadius       = 0;
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordWarning($"Dimensions of section profile {familySymbol.Name} (Revit ElementId {familySymbol.Id.IntegerValue}) were extracted using name matching and may be incorrect in some cases.");
                height          = familySymbol.LookupParameterDouble(heightNames, dimensionGroups);
                width           = familySymbol.LookupParameterDouble(widthNames, dimensionGroups);
                webThickness    = familySymbol.LookupParameterDouble(webThicknessNames, dimensionGroups);
                flangeThickness = familySymbol.LookupParameterDouble(flangeThicknessNames, dimensionGroups);
                rootRadius      = familySymbol.LookupParameterDouble(rootRadiusNames, dimensionGroups);
                toeRadius       = familySymbol.LookupParameterDouble(toeRadiusNames, dimensionGroups);
            }

            if (double.IsNaN(rootRadius))
            {
                rootRadius = 0;
            }

            if (double.IsNaN(toeRadius))
            {
                toeRadius = 0;
            }

            if (!double.IsNaN(height) && !double.IsNaN(width) && !double.IsNaN(webThickness) && !double.IsNaN(flangeThickness))
            {
                return(BHS.Create.TSectionProfile(height, width, webThickness, flangeThickness, rootRadius, toeRadius));
            }

            return(null);
        }