Hi,
I'm using the code below to run steel design verification for a group of beams. There is an error when I obtain the ratios. I've added a breakpoint and I'm getting a null value into rDimDetailedRes.
Does anyone what might be the problem?
Thanks.
Stathis
private void button11_Click_1(object sender, EventArgs e)
{
//general groups
IRDimServer rDimServer;
RDimStream rDimStream;
rDimServer = (IRDimServer)Robot.Kernel.GetExtension("RDimServer");
rDimServer.Mode = RobotOM.IRDimServerMode.I_DSM_STEEL;
RDimGroups rDimGroups;
rDimGroups = rDimServer.GroupsService;
RDimGroup rDimGroup;
int groupNo = 1;
rDimGroup = rDimGroups.New(0, groupNo);
//select material
string material = textBox1.Text;
rDimGroup.Material = material;
//select Group Name
string Group = textBox2.Text;
rDimGroup.Name = Group;
rDimStream = rDimServer.Connection.GetStream();
rDimStream.Clear();
//Select Bars
button15.Enabled = true;
rDimStream.WriteText(textBox4.Text);
rDimGroup.SetMembList(rDimStream);
RDimGrpProfs rDimGrpProfs;
rDimGrpProfs = rDimServer.Connection.GetGrpProfs();
rDimGrpProfs.Clear();
rDimGroup.SetProfs(rDimGrpProfs);
rDimGroups.Save(rDimGroup);
IRDimCalcEngine rDimCalcEngine;
rDimCalcEngine = rDimServer.CalculEngine;
IRDimCalcParam rDimCalcParam;
IRDimCalcConf rDimCalcConf;
rDimCalcParam = rDimCalcEngine.GetCalcParam();
rDimCalcConf = rDimCalcEngine.GetCalcConf();
rDimStream = rDimServer.Connection.GetStream();
rDimStream.Clear();
rDimCalcConf.SetParamValue(IRDimCalcConfValueType.I_DCCPV_EFFRATIO,0.9);
rDimCalcParam.SetObjsList(IRDimCalcParamVerifType.I_DCPVT_GROUPS_DESIGN, rDimStream);
rDimCalcParam.SetLimitState(IRDimCalcParamLimitStateType.I_DCPLST_SERVICEABILITY, 1);
rDimCalcParam.SetLimitState(IRDimCalcParamLimitStateType.I_DCPLST_ULTIMATE, 1);
rDimStream.Clear();
// Load Cases Selection
string loads = textBox3.Text;
rDimStream.WriteText(loads);
rDimCalcParam.SetLoadsList(rDimStream);
IRDimOptimParam rDimOptParam;
rDimOptParam = rDimCalcParam.GetOptimParam();
rDimOptParam.Optimization = 1;
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_WEIGHT, 1);
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_MAX_SECTION_HEIGHT, 1);
rDimOptParam.SetLimit(IRDimOptimParamLimitType.I_DOPLT_MAX_SECTION_HEIGHT, 0.5);
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_MIN_SECTION_HEIGHT, 1);
rDimOptParam.SetLimit(IRDimOptimParamLimitType.I_DOPLT_MIN_SECTION_HEIGHT, 0.1);
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_MIN_FLANGE_THICKNESS, 1);
rDimOptParam.SetLimit(IRDimOptimParamLimitType.I_DOPLT_MIN_FLANGE_THICKNESS, 0.01);
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_MIN_WEB_THICKNESS, 1);
rDimOptParam.SetLimit(IRDimOptimParamLimitType.I_DOPLT_MIN_WEB_THICKNESS, 0.05);
rDimOptParam.SetOption(IRDimOptimParamOptionType.I_DOPOT_ENTIRE_SET_SECTIONS, 1);
rDimCalcParam.SetOptimParam(rDimOptParam);
rDimCalcEngine.SetCalcConf(rDimCalcConf);
//Calculate
RobotCalcEngine calcEngine = Robot.Project.CalcEngine;
calcEngine.Calculate();
rDimCalcEngine.SetCalcParam(rDimCalcParam);
rDimCalcEngine.Solve(null);
IRDimAllRes rDimAllRes;
IRDimAllResObjectType rDimAllResObjType;
rDimAllRes = rDimCalcEngine.Results();
rDimAllResObjType = rDimAllRes.ObjectsType;
int objCount = rDimAllRes.ObjectsCount;
//IRDimDetailedRes rDimDetailedRes;
//IRDimGrpRes rDimGrpRes;
int usrNo;
for (int i = 0; i < objCount; i++)
{
usrNo = rDimAllRes.ObjectUsrNo(i);
IRDimDetailedRes rDimDetailedRes;
rDimDetailedRes = (IRDimDetailedRes)rDimAllRes.Get(usrNo);
double ratio = rDimDetailedRes.Ratio;
System.Console.WriteLine(ratio);
}
}
Solved! Go to Solution.
Solved by marcinrakus. Go to Solution.
Solved by Rafal.Gaweda. Go to Solution.
Hi,
Thanks. It works fine now.
Do you also know how to avoid the window in the attached jpg through API?
Best,
Stathis
Hi,
Sending a message to the window it doesn't seem that easy to me.
Is there another way to skip Robot windows via API? I'm preparing a custom optimisation algorithm and I need to run a significant amount of runs/verifications in a recursive process.
Thanks.
Stathis.
Hi,
If You don't need any interactions with RSA You can switch off Interaction flag for the time of analysis:
Dim r As New RobotApplication
r.Interactive = 0
'some code
r.Interactive = 1
It should disable showing any of messages.
Many thanks.
I've been struggling with SendMessage but this works perfectly fine.
Cheers