//Changes the cross-section into RFEM cross section private static string getRName(CroSec kCrossSection) { string kName = kCrossSection.name; if (kName.Length >= 4) { if (kName.Substring(0, 3) == "IPE") { return(kName.Substring(0, 3) + " " + kName.Substring(3)); } else if (kName.Substring(0, 4) == "RHSC") { return("RHS" + " " + kName.Substring(4).Split('.')[0] + " (Ruukki)"); } else if (kName.Substring(0, 4) == "SHSC") { string[] size = kName.Substring(4).Split('x'); return("SHS" + " " + size[0] + "x" + size[0] + "x" + size[1].Split('.')[0] + " (Ruukki)"); } } if (kName == "") { if (kCrossSection.GetType() == typeof(Karamba.CrossSections.CroSec_Trapezoid)) { return("SB " + (kCrossSection.dims[4] * 1000).ToString() + "/" + (kCrossSection.dims[2] * 1000).ToString() + "/" + (kCrossSection.dims[0] * 1000).ToString()); } else if (kCrossSection.GetType() == typeof(Karamba.CrossSections.CroSec_I)) { return("IU " + (kCrossSection.dims[0] * 1000).ToString() + "/" + (kCrossSection.dims[4] * 1000).ToString() + "/" + (kCrossSection.dims[5] * 1000).ToString() + "/" + (kCrossSection.dims[1] * 1000).ToString() + "/" + (kCrossSection.dims[2] * 1000).ToString() + "/" + (kCrossSection.dims[3] * 1000).ToString() + "/" + (kCrossSection.dims[6] * 1000).ToString() + "/" + (kCrossSection.dims[6] * 1000).ToString()); } // Box not working yet. /* * else if (kCrossSection.GetType() == typeof(Karamba.CrossSections.CroSec_Box)) * { * return "TR " + (kCrossSection.dims[4] * 1000).ToString() + "/" + (kCrossSection.dims[5] * 1000).ToString() + "/" + * (kCrossSection.dims[1] * 1000).ToString() + "/" + (kCrossSection.dims[0] * 1000).ToString() + "/" + * (kCrossSection.dims[2] * 1000).ToString() + "/" + (kCrossSection.dims[3] * 1000).ToString(); * } */ } return("RECHTECK 100/200"); // Only IPE cross sections are implemented yet. }
//Gets material from the RFEM material library private static int getRMaterial(Karamba.Models.Model kModel, CroSec kCrossSection) { if (kCrossSection.elemIds.Count == 1 && kCrossSection.elemIds[0] == "") { foreach (Karamba.Materials.FemMaterial material in kModel.materials) { if (material.elemIds.Count != 0) { return((int)material.ind + 1); } } } else { foreach (Karamba.Materials.FemMaterial material in kModel.materials) { if (material.elemIds.Count != 0 && material.elemIds.Contains(kCrossSection.elemIds[0])) { return((int)material.ind + 1); } } } return(1); }
private static void CheckSecBraceIdMatching(IEnumerable <StbSecBrace_S> braces, CroSec k3dCroSec, string steelShapeName) { if (braces == null) { return; } foreach (StbSecBrace_S brace in braces) { var memberFigureName = string.Empty; object[] figures = brace.StbSecSteelFigureBrace_S.Items; switch (figures[0]) { case StbSecSteelBrace_S_Same same: memberFigureName = same.shape; break; case StbSecSteelBrace_S_NotSame _: memberFigureName = new[] { figures[0] as StbSecSteelBrace_S_NotSame, figures[1] as StbSecSteelBrace_S_NotSame } .First(figure => figure.pos == StbSecSteelBrace_S_NotSamePos.BOTTOM).shape; break; case StbSecSteelBrace_S_ThreeTypes _: memberFigureName = new[] { figures[0] as StbSecSteelBrace_S_ThreeTypes, figures[1] as StbSecSteelBrace_S_ThreeTypes, figures[2] as StbSecSteelBrace_S_ThreeTypes } .First(figure => figure.pos == StbSecSteelBrace_S_ThreeTypesPos.CENTER).shape; break; } if (memberFigureName == steelShapeName) { k3dCroSec.AddElemId("Id" + brace.id); } } }
private static void CheckSecBeamIdMatching(IEnumerable <StbSecBeam_S> beams, CroSec k3dCroSec, string steelShapeName) { if (beams == null) { return; } foreach (StbSecBeam_S beam in beams) { var memberFigureName = string.Empty; object[] figures = beam.StbSecSteelFigureBeam_S.Items; switch (figures[0]) { case StbSecSteelBeam_S_Straight straight: memberFigureName = straight.shape; break; case StbSecSteelBeam_S_Taper _: memberFigureName = new[] { figures[0] as StbSecSteelBeam_S_Taper, figures[1] as StbSecSteelBeam_S_Taper } .First(figure => figure.pos == StbSecSteelBeam_S_TaperPos.START).shape; break; case StbSecSteelBeam_S_Joint _: var joints = figures.Length == 2 ? new[] { figures[0] as StbSecSteelBeam_S_Joint, figures[1] as StbSecSteelBeam_S_Joint } : new[] { figures[0] as StbSecSteelBeam_S_Joint, figures[1] as StbSecSteelBeam_S_Joint, figures[2] as StbSecSteelBeam_S_Joint }; memberFigureName = joints.First(figure => figure.pos == StbSecSteelBeam_S_JointPos.CENTER).shape; break; case StbSecSteelBeam_S_Haunch _: var haunch = figures.Length == 2 ? new[] { figures[0] as StbSecSteelBeam_S_Haunch, figures[1] as StbSecSteelBeam_S_Haunch } : new[] { figures[0] as StbSecSteelBeam_S_Haunch, figures[1] as StbSecSteelBeam_S_Haunch, figures[2] as StbSecSteelBeam_S_Haunch }; memberFigureName = haunch.First(figure => figure.pos == StbSecSteelBeam_S_HaunchPos.CENTER).shape; break; case StbSecSteelBeam_S_FiveTypes _: StbSecSteelBeam_S_FiveTypes[] fiveTypes; switch (figures.Length) { case 3: fiveTypes = new[] { figures[0] as StbSecSteelBeam_S_FiveTypes, figures[1] as StbSecSteelBeam_S_FiveTypes, figures[2] as StbSecSteelBeam_S_FiveTypes }; break; case 4: fiveTypes = new[] { figures[0] as StbSecSteelBeam_S_FiveTypes, figures[1] as StbSecSteelBeam_S_FiveTypes, figures[2] as StbSecSteelBeam_S_FiveTypes, figures[3] as StbSecSteelBeam_S_FiveTypes }; break; case 5: fiveTypes = new[] { figures[0] as StbSecSteelBeam_S_FiveTypes, figures[1] as StbSecSteelBeam_S_FiveTypes, figures[2] as StbSecSteelBeam_S_FiveTypes, figures[3] as StbSecSteelBeam_S_FiveTypes, figures[4] as StbSecSteelBeam_S_FiveTypes }; break; default: throw new ArgumentException("StbSecSteelBeam_S_FiveTypes parse error"); } memberFigureName = fiveTypes.First(figure => figure.pos == StbSecSteelBeam_S_FiveTypesPos.CENTER).shape; break; } if (memberFigureName == steelShapeName) { k3dCroSec.AddElemId("Id" + beam.id); } } }
private static void SetK3dCroSecElemId(StbSections sections, CroSec k3dCroSec, string steelShapeName) { CheckSecColumnIdMatching(sections.StbSecColumn_S, k3dCroSec, steelShapeName); CheckSecBeamIdMatching(sections.StbSecBeam_S, k3dCroSec, steelShapeName); CheckSecBraceIdMatching(sections.StbSecBrace_S, k3dCroSec, steelShapeName); }