/***************************************************/ /**** 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); }
/***************************************************/ 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); }
/***************************************************/ 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); }
/***************************************************/ 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); }
/***************************************************/ 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); }
/***************************************************/ 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); }
/***************************************************/ 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); }