}//unitSettings //This method creates a concentrated load in a determined position of a beam private void createConcentratedLoad(IRobotSimpleCase simpleCase, double position, double value, Bar bar) { IRobotLoadRecord2 irl = (IRobotLoadRecord2)simpleCase.Records.Create(IRobotLoadRecordType.I_LRT_BAR_FORCE_CONCENTRATED); irl.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_REL, 1.0); irl.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, position); irl.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FZ, value); irl.Objects.AddOne(bar.id); }
public static bool SetOwnWeight() { robotApp.Interactive = 0; IRobotSimpleCase OwnWeight = caseServer.CreateSimple(caseServer.FreeNumber, "OwnWeight", IRobotCaseNature.I_CN_PERMANENT, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); IRobotLoadRecord2 OwnWeightRecord = OwnWeight.Records.Create(IRobotLoadRecordType.I_LRT_DEAD) as IRobotLoadRecord2; OwnWeightRecord.SetValue((short)IRobotDeadRecordValues.I_DRV_ENTIRE_STRUCTURE, 1); OwnWeightRecord.SetValue((short)IRobotDeadRecordValues.I_DRV_COEFF, 1); OwnWeightRecord.SetValue((short)IRobotDeadRecordValues.I_DRV_Z, -1); robotApp.Interactive = 1; return(true); }
// helper method that creates a new load record in given load case //根据工况设置荷载 private void create_concentrated_load(IRobotSimpleCase isc, double pos, double val) { // create a new force concentrated load record //添加一个集中荷载记录,类型为集中荷载 IRobotLoadRecord2 ilr = (IRobotLoadRecord2)isc.Records.Create(IRobotLoadRecordType.I_LRT_BAR_FORCE_CONCENTRATED); // define the values of load record //给荷载记录赋值 ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_REL, 1.0); ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, pos); ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FZ, val); // apply load record to both beams of the structure ilr.Objects.AddOne(beam1); //将ilr荷载作用到编号为beam1的单元上 ilr.Objects.AddOne(beam2); //将ilr荷载作用到编号为beam2的单元上 }
//This method generates all structure loads in the system public void generateStructureLoads(double concentratedLoad, double c, double e) { //check if the loads have already been created. In case they were created delete all cases if (loadsGenerated) { RobotSelection iAllCases = iRobotApp.Project.Structure.Selections.CreateFull(IRobotObjectType.I_OT_CASE); iRobotApp.Project.Structure.Cases.DeleteMany(iAllCases); } //Get reference to load cases server IRobotCaseServer iCases = (IRobotCaseServer)iRobotApp.Project.Structure.Cases; //Get first available (free) user number for load int caseNumber = iCases.FreeNumber; //Create DeadLoad case IRobotSimpleCase deadLoadCase = (IRobotSimpleCase)iCases.CreateSimple(caseNumber, "Peso Proprio", IRobotCaseNature.I_CN_PERMANENT, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); IRobotLoadRecord2 deadLoadRecord = (IRobotLoadRecord2)deadLoadCase.Records.Create(IRobotLoadRecordType.I_LRT_DEAD); deadLoadRecord.SetValue((short)IRobotDeadRecordValues.I_DRV_ENTIRE_STRUCTURE, (double)1); //Create First lifiting load case IRobotSimpleCase lifitingCase1 = (IRobotSimpleCase)iCases.CreateSimple(caseNumber + 1, "Talha 1", IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); //Calculate the relative position of the load double relativePosition1 = ((c - e) / 2) / c; createConcentratedLoad(lifitingCase1, relativePosition1, concentratedLoad, bars[5]); //Create second lifting load case IRobotSimpleCase liftingCase2 = (IRobotSimpleCase)iCases.CreateSimple(caseNumber + 2, "Talha 2", IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); createConcentratedLoad(liftingCase2, 0.5, concentratedLoad, bars[5]); //Create load combinations IRobotCaseCombination uls1 = (IRobotCaseCombination)iCases.CreateCombination(caseNumber + 3, "ULS-1", IRobotCombinationType.I_CBT_ULS, IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_COMB); uls1.CaseFactors.New(caseNumber, (double)1.0); uls1.CaseFactors.New(caseNumber + 1, (double)1.0); IRobotCaseCombination uls2 = (IRobotCaseCombination)iCases.CreateCombination(caseNumber + 4, "ULS-2", IRobotCombinationType.I_CBT_ULS, IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_COMB); uls2.CaseFactors.New(caseNumber, (double)1.0); uls2.CaseFactors.New(caseNumber + 2, 1.0); IRobotCaseCombination sls1 = (IRobotCaseCombination)iCases.CreateCombination(caseNumber + 5, "SLS-1", IRobotCombinationType.I_CBT_SLS, IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_COMB); sls1.CaseFactors.New(caseNumber, 1.0); sls1.CaseFactors.New(caseNumber + 1, 1.0); IRobotCaseCombination sls2 = (IRobotCaseCombination)iCases.CreateCombination(caseNumber + 6, "SLS-2", IRobotCombinationType.I_CBT_SLS, IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_COMB); sls2.CaseFactors.New(caseNumber, 1.0); sls2.CaseFactors.New(caseNumber + 2, 1.0); loadsGenerated = true; }//createConcentratedLoad
public static bool SetCoverLoad(Structure Structure) { robotApp.Interactive = 0; IRobotSimpleCase CoverLoad = caseServer.CreateSimple(caseServer.FreeNumber, "CoverLoad", IRobotCaseNature.I_CN_PERMANENT, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); IRobotLoadRecord2 CoverLoadRecord = CoverLoad.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); CoverLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, -1000 * 10); CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[0].Id); CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[1].Id); #region A9ba 7aga 3amltha fi 7yaty // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, Structure.Purlins[i].PurlinStart.X / Math.Cos(Structure.Frames[0].Angle)); //for (int i = 0; i < Structure.Purlins.Count; i++) //{ // IRobotLoadRecord2 CoverLoadRecord = CoverLoad.Records.Create(IRobotLoadRecordType.I_LRT_BAR_FORCE_CONCENTRATED) as IRobotLoadRecord2; // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_REL, 0); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FX, 0); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FY, 0); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FZ, -1000 * 10); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_CY, 0); // if (Structure.Purlins[0].PurlinStart.X <= Structure.Frames[0].Beams[0].Beamline.Length) // { // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_LOC, 1); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, Structure.Purlins[i].PurlinStart.X / Math.Cos(Structure.Frames[0].Angle)); // CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[0].BeamId); // } // else if (Structure.Purlins[0].PurlinStart.X == Structure.Frames[0].Beams[0].Beamline.Length) // { // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_LOC, 0); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X,Structure.Purlins[i].PurlinStart.X / Math.Cos(Structure.Frames[0].Angle)); // CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[0].BeamId); // } // else // { // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_LOC, 1); // CoverLoadRecord.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, Structure.Purlins[i].PurlinStart.X / Math.Cos(Structure.Frames[0].Angle)); // CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[1].BeamId); // } //} //for (int i = 0; i < Structure.Frames[0].Beams.Count; i++) //{ // CoverLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[i].BeamId); //} #endregion robotApp.Interactive = 1; return(true); }
//施加集中荷载 public static void create_concentrated_load(IRobotSimpleCase isc, int elementNO, double pos, double val) { // create a new force concentrated load record //添加一个集中荷载记录,类型为集中荷载I_LRT_BAR_UNIFORM //IRobotLoadRecord2 ilr = (IRobotLoadRecord2)isc.Records.Create(IRobotLoadRecordType.I_LRT_BAR_FORCE_CONCENTRATED); IRobotLoadRecord2 ilr = (IRobotLoadRecord2)isc.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM); // define the values of load record //给荷载记录赋值 //ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_REL, 1.0); //ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_X, pos); //ilr.SetValue((short)IRobotBarForceConcentrateRecordValues.I_BFCRV_FZ, val); ilr.SetValue(System.Convert.ToInt16(IRobotUniformRecordValues.I_URV_PZ), val); // apply load record to both beams of the structure ilr.Objects.AddOne(elementNO);//将ilr荷载作用到编号为beam1的单元上 //ilr.Objects.AddOne(elementNO);//将ilr荷载作用到编号为beam2的单元上 }
public static bool SetLiveLoad(Structure Structure) { robotApp.Interactive = 0; IRobotSimpleCase liveLoad = caseServer.CreateSimple(caseServer.FreeNumber, "Live", IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); IRobotLoadRecord2 liveLoadRecord = liveLoad.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); liveLoadRecord.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, -1000 * 10); liveLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[0].Id); liveLoadRecord.Objects.AddOne(Structure.Frames[0].Beams[1].Id); robotApp.Interactive = 1; return(true); }
public static bool SetWindloadLeft(Structure Structure) { //there is a known issue with setting the windload to left or right due to the local axis of frame drawing //if you draw from bottom to top it will be fine // if you draw from top to bottom , voila , error ////=============== //For beams robotApp.Interactive = 0; IRobotSimpleCase windLoadLeft = caseServer.CreateSimple(caseServer.FreeNumber, "Wind_left", IRobotCaseNature.I_CN_WIND, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); //================= For Compression IRobotLoadRecord2 windLoadLeftRecordLeft = windLoadLeft.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); windLoadLeftRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, -1000 * 10); //================= For Suction IRobotLoadRecord2 windLoadLeftRecordRight = windLoadLeft.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); windLoadLeftRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, 1000 * 10); //================= //left windLoadLeftRecordLeft.Objects.AddOne(Structure.Frames[0].Columns[0].Id); windLoadLeftRecordLeft.Objects.AddOne(Structure.Frames[0].Beams[0].Id); windLoadLeftRecordLeft.Objects.AddOne(Structure.Frames[0].Columns[1].Id); //=============== Suction //right windLoadLeftRecordRight.Objects.AddOne(Structure.Frames[0].Beams[1].Id); robotApp.Interactive = 1; return(true); }
public static bool SetWindLoadRight(Structure Structure) { robotApp.Interactive = 0; IRobotSimpleCase windLoadRight = caseServer.CreateSimple(caseServer.FreeNumber, "Wind_Right", IRobotCaseNature.I_CN_WIND, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); //================= For Compression IRobotLoadRecord2 windLoadRightRecordLeft = windLoadRight.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); windLoadRightRecordLeft.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, -1000 * 10); //================= For Suction IRobotLoadRecord2 windLoadRightRecordRight = windLoadRight.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM) as IRobotLoadRecord2; windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_RELATIVE, 1); windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_LOCAL_SYSTEM, 1); windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PROJECTED, 1); windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PX, 0); windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PY, 0); windLoadRightRecordRight.SetValue((short)IRobotUniformRecordValues.I_URV_PZ, 1000 * 10); //================= //left windLoadRightRecordLeft.Objects.AddOne(Structure.Frames[0].Beams[1].Id); //=============== Compression //=============== Suction //right windLoadRightRecordRight.Objects.AddOne(Structure.Frames[0].Beams[0].Id); windLoadRightRecordRight.Objects.AddOne(Structure.Frames[0].Columns[0].Id); windLoadRightRecordRight.Objects.AddOne(Structure.Frames[0].Columns[1].Id); robotApp.Interactive = 1; return(true); }
// generate loads private void generateLoads(object sender, EventArgs e) { if (!geometryCreated)//如果没有创建几何 { // geometry must be created first //创建几何 createGeometry(sender, e); } // switch Interactive flag off to avoid any questions that need user interaction in Robot //关闭robot的交互 iapp.Interactive = 0; if (loadsGenerated)//如果几何已经创建好 { // remove all existing load cases //将现有工况全部清除 RobotSelection iallCases = iapp.Project.Structure.Selections.CreateFull(IRobotObjectType.I_OT_CASE); iapp.Project.Structure.Cases.DeleteMany(iallCases); } // get reference to load cases server //获取本项目的工况集合 IRobotCaseServer icases = (IRobotCaseServer)iapp.Project.Structure.Cases; // get first available (free) user number for load case //获取可用工况编号 int c1 = icases.FreeNumber; if (checkDeadLoad.Checked)//如果选中了自重荷载 { // create dead load case //创建自重工况 IRobotSimpleCase isc1 = (IRobotSimpleCase)icases.CreateSimple(c1, "Dead load", IRobotCaseNature.I_CN_PERMANENT, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); // define dead load record for the entire structure //定义自重荷载,添加到自重工况里面取 IRobotLoadRecord2 ilr1 = (IRobotLoadRecord2)isc1.Records.Create(IRobotLoadRecordType.I_LRT_DEAD); ilr1.SetValue((short)IRobotDeadRecordValues.I_DRV_ENTIRE_STRUCTURE, (double)1); ++c1; } // create live load case //创建活荷载工况 IRobotSimpleCase isc = (IRobotSimpleCase)icases.CreateSimple(c1, "Live load", IRobotCaseNature.I_CN_ACCIDENTAL, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); // convert force value from kN to N and change the direction //荷载格式转换 double val = -1000 * System.Convert.ToDouble(editIntensity1.Text); // add force concentrated load records in 5 points on the beams //给活荷载工况添加荷载 create_concentrated_load(isc, 0.0, 0.5 * val); create_concentrated_load(isc, 0.25, val); create_concentrated_load(isc, 0.5, val); create_concentrated_load(isc, 0.75, val); create_concentrated_load(isc, 1.0, 0.5 * val); // create live load case //创建另外一个荷载工况 isc = (IRobotSimpleCase)icases.CreateSimple(c1 + 1, "Exploitation load", IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); // convert force value from kN to N and change the direction //把荷载值从KN转换成N val = -1000 * System.Convert.ToDouble(editIntensity2.Text); // add force concentrated load records in 5 points on the beams //将荷载作用到梁上面 create_concentrated_load(isc, 0.0, 0.5 * val); create_concentrated_load(isc, 0.25, val); create_concentrated_load(isc, 0.5, val); create_concentrated_load(isc, 0.75, val); create_concentrated_load(isc, 1.0, 0.5 * val); // create wind load applied to columns //添加荷载工况,风荷载 isc = (IRobotSimpleCase)icases.CreateSimple(c1 + 2, "Wind load", IRobotCaseNature.I_CN_WIND, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR); IRobotLoadRecord2 ilr = (IRobotLoadRecord2)isc.Records.Create(IRobotLoadRecordType.I_LRT_BAR_UNIFORM); ilr.SetValue((short)IRobotBarUniformRecordValues.I_BURV_PZ, 1000 * System.Convert.ToDouble(editIntensity3.Text)); ilr.SetValue((short)IRobotBarUniformRecordValues.I_BURV_LOCAL, 1.0); ilr.Objects.AddOne(beam1 - 1); ilr.Objects.AddOne(beam2 + 1); // create combinations //添加荷载组合 IRobotCaseCombination icc = (IRobotCaseCombination)icases.CreateCombination(c1 + 3, "Comb ULS", IRobotCombinationType.I_CBT_ULS, IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_COMB); icc.CaseFactors.New(c1, System.Convert.ToDouble(editUls1.Text)); icc.CaseFactors.New(c1 + 1, System.Convert.ToDouble(editUls2.Text)); icc.CaseFactors.New(c1 + 2, System.Convert.ToDouble(editUls3.Text)); icc = (IRobotCaseCombination)icases.CreateCombination(c1 + 4, "Comb SLS", IRobotCombinationType.I_CBT_SLS, IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_COMB); icc.CaseFactors.New(c1, System.Convert.ToDouble(editSls1.Text)); icc.CaseFactors.New(c1 + 1, System.Convert.ToDouble(editSls2.Text)); icc.CaseFactors.New(c1 + 2, System.Convert.ToDouble(editSls3.Text)); loadsGenerated = true; // switch Interactive flag on to allow user to work with Robot GUI //允许ROBOT界面交互 iapp.Interactive = 1; // get the focus back //获取焦点 this.Activate(); }