public static List <CroSec> GetCroSec(StbSections sections, CroSecFamilyName familyName) { // TODO: 材軸の回転は未設定 var k3dCroSec = new List <CroSec>(); #if karamba1 var sn400 = new FemMaterial_Isotrop("Steel", "SN400", 20500_0000, 8076_0000, 8076_0000, 78.5, 23_5000, 1.20E-05, Color.Brown); #elif karamba2 var sn400 = new FemMaterial_Isotrop("Steel", "SN400", 20500_0000, 8076_0000, 8076_0000, 78.5, 23_5000, 23_5000, FemMaterial.FlowHypothesis.mises, 1.20E-05, Color.Brown); #endif k3dCroSec.AddRange(StbSecColumnRcToK3dCroSec(sections.StbSecColumn_RC)); k3dCroSec.AddRange(StbSecBeamRcToK3dCroSec(sections.StbSecBeam_RC)); k3dCroSec.AddRange(StbSecSteelToK3dCroSec(sections, sn400, familyName)); return(k3dCroSec); }
private static void SetRoundBarSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecRoundBar != null) { foreach (StbSecRoundBar roundBar in sections.StbSecSteel.StbSecRoundBar) { // TODO: Karambaは中実円断面ないため、矩形の等価断面。 double eqLength = Math.Sqrt(roundBar.R * roundBar.R * Math.PI) / 10d; var k3dCroSec = new CroSec_Trapezoid(familyName.Circle, roundBar.name, null, null, material, eqLength, eqLength, eqLength); SetK3dCroSecElemId(sections, k3dCroSec, roundBar.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetLipCSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecLipC != null) { foreach (StbSecLipC lipC in sections.StbSecSteel.StbSecLipC) { // TODO: 正確な形状に合わせて等価断面計算する。フィレットは非考慮 int typeFactor = lipC.type == StbSecLipCType.SINGLE ? 1 : 2; var eqLength = Math.Sqrt((2 * lipC.A * lipC.t + lipC.H * lipC.t + 2 * lipC.C * lipC.t - 4 * lipC.t * lipC.t) * typeFactor) / 10d; var k3dCroSec = new CroSec_Trapezoid(familyName.Circle, lipC.name, null, null, material, eqLength, eqLength, eqLength); SetK3dCroSecElemId(sections, k3dCroSec, lipC.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetFlatBarSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecFlatBar != null) { foreach (StbSecFlatBar flatBar in sections.StbSecSteel.StbSecFlatBar) { var k3dCroSec = new CroSec_Trapezoid(familyName.FB, flatBar.name, null, null, material, flatBar.B, flatBar.t, flatBar.t); SetK3dCroSecElemId(sections, k3dCroSec, flatBar.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetPipeSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecPipe != null) { foreach (StbSecPipe pipe in sections.StbSecSteel.StbSecPipe) { var k3dCroSec = new CroSec_Circle(familyName.Circle, pipe.name, null, null, material, pipe.D / 10d, pipe.t / 10d); SetK3dCroSecElemId(sections, k3dCroSec, pipe.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetRollLSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecRollL != null) { foreach (StbSecRollL rollL in sections.StbSecSteel.StbSecRollL) { // TODO: 正確な形状に合わせて等価断面計算する。フィレットは非考慮 int typeFactor = rollL.type == StbSecRollLType.SINGLE ? 1 : 2; var eqLength = Math.Sqrt((rollL.A * rollL.t1 + rollL.B * rollL.t2 - rollL.t1 * rollL.t2) * typeFactor) / 10d; var k3dCroSec = new CroSec_Trapezoid(familyName.Circle, rollL.name, null, null, material, eqLength, eqLength, eqLength); SetK3dCroSecElemId(sections, k3dCroSec, rollL.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetRollTSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecRollT != null) { foreach (StbSecRollT rollT in sections.StbSecSteel.StbSecRollT) { var k3dCroSec = new CroSec_T(familyName.T, rollT.name, null, null, material, rollT.A / 10d, rollT.B / 10d, rollT.t2 / 10d, rollT.t1 / 10d, rollT.r / 10d, rollT.r / 10d); SetK3dCroSecElemId(sections, k3dCroSec, rollT.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetBuildBoxSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecBuildBOX != null) { foreach (StbSecBuildBOX buildBOX in sections.StbSecSteel.StbSecBuildBOX) { var k3dCroSec = new CroSec_Box(familyName.Box, buildBOX.name, null, null, material, buildBOX.A / 10d, buildBOX.B / 10d, buildBOX.B / 10d, buildBOX.t2 / 10d, buildBOX.t2 / 10d, buildBOX.t1 / 10d, 0, -1); SetK3dCroSecElemId(sections, k3dCroSec, buildBOX.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetRollBoxSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecRollBOX != null) { foreach (StbSecRollBOX rollBOX in sections.StbSecSteel.StbSecRollBOX) { var k3dCroSec = new CroSec_Box(familyName.Box, rollBOX.name, null, null, material, rollBOX.A / 10d, rollBOX.B / 10d, rollBOX.B / 10d, rollBOX.t / 10d, rollBOX.t / 10d, rollBOX.t / 10d, rollBOX.r / 10d, rollBOX.r / 10d); SetK3dCroSecElemId(sections, k3dCroSec, rollBOX.name); k3dCroSecList.Add(k3dCroSec); } } }
private static void SetBuildHSection(StbSections sections, FemMaterial material, CroSecFamilyName familyName, ICollection <CroSec> k3dCroSecList) { if (sections.StbSecSteel.StbSecBuildH != null) { foreach (StbSecBuildH buildH in sections.StbSecSteel.StbSecBuildH) { var k3dCroSec = new CroSec_I(familyName.H, buildH.name, null, null, material, buildH.A / 10d, buildH.B / 10d, buildH.B / 10d, buildH.t2 / 10d, buildH.t2 / 10d, buildH.t1 / 10d); SetK3dCroSecElemId(sections, k3dCroSec, buildH.name); k3dCroSecList.Add(k3dCroSec); } } }
private static List <CroSec> StbSecSteelToK3dCroSec(StbSections sections, FemMaterial material, CroSecFamilyName familyName) { var k3dCroSecList = new List <CroSec>(); if (sections.StbSecSteel == null) { return(k3dCroSecList); } SetRollHSection(sections, material, familyName, k3dCroSecList); SetBuildHSection(sections, material, familyName, k3dCroSecList); SetRollBoxSection(sections, material, familyName, k3dCroSecList); SetBuildBoxSection(sections, material, familyName, k3dCroSecList); SetRollTSection(sections, material, familyName, k3dCroSecList); SetPipeSection(sections, material, familyName, k3dCroSecList); SetRollCSection(sections, material, familyName, k3dCroSecList); SetRollLSection(sections, material, familyName, k3dCroSecList); SetLipCSection(sections, material, familyName, k3dCroSecList); SetFlatBarSection(sections, material, familyName, k3dCroSecList); SetRoundBarSection(sections, material, familyName, k3dCroSecList); return(k3dCroSecList); }