Calculation of steel design in RSA2025 with Dynamo

Hello!
I’m trying to set the I_DCPVT_GROUPS_DESIGN command to work correctly, but I don’t know where the error is in the code, what I’m doing wrong, and how I should proceed further to get results from I_DCPVT_GROUPS_DESIGN.
This is my script:

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

from System import Environment
user = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
clr.AddReference(user + r"\Dynamo\Dynamo Revit\3.3\packages\Structural Analysis for Dynamo\bin\interop.RobotOM.dll")
from RobotOM import RobotApplicationClass, IRDimCalcParamVerifType, IRDimCalcParamLimitStateType
clr.AddReference("System.Reflection")
from System.Reflection import BindingFlags
from RobotOM import * 
from System import Object

class ComObject:
    def __init__(self, obj):
        self.obj = obj
        self.typ = obj.GetType()

    def __getattribute__(self, name):       
        def newm(*args):
            args = args or (None,)
            return self.typ.InvokeMember(
                name, 
                BindingFlags.InvokeMethod | BindingFlags.GetProperty, 
                None,
                self.obj,
                *args,
            )
        return newm

objects = IN[0]

app = RobotApplicationClass()
project = app.Project
project.ViewMngr.Refresh()
rdm_server = IRDimServer(app.Kernel.GetExtension("RDimServer"))
rdm_server.Mode = 1
rdm_calc_engine = IRDimCalcEngine(rdm_server.CalculEngine)
calc_param = IRDimCalcParam(rdm_calc_engine.GetCalcParam())
calc_conf = rdm_calc_engine.GetCalcConf()
stream = IRDimStream(rdm_server.Connection.GetStream())
stream.Clear()
stream.WriteLong(1)
calc_param.SetObjsList(IRDimCalcParamVerifType.I_DCPVT_GROUPS_DESIGN,stream)
calc_param.SetLimitState(IRDimCalcParamLimitStateType.I_DCPLST_ULTIMATE,1)
stream.Clear()
stream.WriteText("all")
calc_param.SetLoadsList(stream)
rdm_calc_engine.SetCalcParam(calc_param)
rdm_calc_engine.Solve(None)
all_results = IRDimAllRes(rdm_calc_engine.Results())
grp_results = IRDimGrpResCurrProf(all_results.Get(1, I_DGRCP_GOVERNING))
detailed_results = IRDimDetailedRes(grp_results.Get(1))
case = detailed_results.GovernCaseName
ratio = detailed_results.Ratio
print(ratio)
print(case)
OUT = case, ratio

I get error message in code: object does not implement in line detailed_results

Hi,

Try this, you’ll have to check the result, as I don’t know anything about RSA.

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

from System import Environment
user = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
sys.path.append(r"C:\Program Files\Autodesk\Robot Structural Analysis Professional 2025\Exe")
clr.AddReference("interop.RobotOM")
from RobotOM import RobotApplicationClass, IRDimCalcParamVerifType, IRDimCalcParamLimitStateType
clr.AddReference("System.Reflection")
from System.Reflection import BindingFlags
from RobotOM import * 
from System import Object


objects = IN[0]

app = RobotApplicationClass()
project = app.Project
project.ViewMngr.Refresh()
rdm_server = IRDimServer(app.Kernel.GetExtension("RDimServer"))
rdm_server.Mode = 1
rdm_calc_engine = IRDimCalcEngine(rdm_server.CalculEngine)
calc_param = IRDimCalcParam(rdm_calc_engine.GetCalcParam())
calc_conf = rdm_calc_engine.GetCalcConf()
stream = IRDimStream(rdm_server.Connection.GetStream())
stream.Clear()
stream.WriteLong(1)
calc_param.SetObjsList(IRDimCalcParamVerifType.I_DCPVT_GROUPS_DESIGN,stream)
calc_param.SetLimitState(IRDimCalcParamLimitStateType.I_DCPLST_ULTIMATE,1)
stream.Clear()
stream.WriteText("all")
calc_param.SetLoadsList(stream)
rdm_calc_engine.SetCalcParam(calc_param)
rdm_calc_engine.Solve(None)
all_results = IRDimAllRes(rdm_calc_engine.Results())
grp_results = IRDimGrpRes(all_results.Get(1))
if grp_results.Check(0, IRDimGrpResCurrProf.I_DGRCP_GOVERNING):
    detailed_results = IRDimDetailedRes(grp_results.Get(0, IRDimGrpResCurrProf.I_DGRCP_GOVERNING))
    case = detailed_results.GovernCaseName
    ratio = detailed_results.Ratio
    print(ratio)
    print(case)
    OUT = case, ratio
1 Like

It works, thank You very much for help!

1 Like

Additional resource

1 Like