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 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 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 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 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 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 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 string getRMaterialName(ref Material rMaterial, FemMaterial kMaterial) { if (kMaterial.family == "Concrete") { return("Beton " + kMaterial.name); } else if (kMaterial.family == "Steel") { return("NameID|Baustahl S " + kMaterial.name.Substring(1) + "@TypeID|STEEL@NormID|SFS EN 1993-1-1"); } //else if (kMaterial.family == "Steel") { return "Baustahl S" + kMaterial.name.Substring(1); } else { return("Beton C30/37"); } }
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); }
//Add Material public void convertMaterial(FemMaterial material, int materialIndex) { int value = addInstruction("MAT TITL " + material.name + " NO " + materialIndex + " E " + material.E() / 1000.0 + " G " + material.G3() / 1000.0 + " GAM " + material.gamma() + " ALFA " + material.alphaT()); _mat_inst.Add(material.guid, (uint)materialIndex); }