Discussion Groups

Robot Structural Analysis

Reply
Valued Contributor
pipu123
Posts: 61
Registered: ‎09-27-2010
Accepted Solution

C# API help

557 Views, 7 Replies
07-27-2012 04:51 AM

I started programming C# RSA , I have difficulties to translate code from vb to c#. Please help me .

please write sample code

how to change:

1) tools / job preferences / materials / basic set / steel

   how to change type of steel for example: put S355

 

RobotMaterialData Material;

 

2) how to

  create a new section

  standard

Database: Simple Catpro        Family:  HEA         Section: HEA120         Section type Aluminum

 

3)  on the http://www.robobat.com/n/ros/

 

There is a code In vb , I couldn’t translate all to c#, please correct me

It is original code:

Reading the basic geometry 

 

 

 

Declare the main variable representing the Robot application and connect it to the currently running instance of Robot.  

Dim robapp As IRobotApplication

Set robapp = New RobotApplication

  Get the collection of all bars from the structure.  

Set bar_col = robapp.Project.Structure.Bars.GetAll()

  Iterate for consecutive bars from the collection.  

For i = 1 To bar_col.Count

    Get the object representing the following (i-th) bar in the collection.    

Set bar = bar_col.Get(i)

    Read required attributes of the i-th bar.    

bar_num = bar.Number

start_node_num = bar.StartNode

end_node_num = bar.EndNode

    Declare variables defining individual nodes.    

Dim start_node As IRobotNode, end_node As IRobotNode

    Get the node with start_node_num number from the server.    

Set start_node = robapp.Project.Structure.Nodes.Get(start_node_num)

    Read the values of coordinates x, y, z for the node with start_node_num number.    

start_node_x = start_node.X

start_node_y = start_node.Y

start_node_z = start_node.Z

    Get the node with end_node_num from the server and read its coordinates.    

Set end_node = robapp.Project.Structure.Nodes.Get(end_node_num)

end_node_x = end_node.X

end_node_y = end_node.Y

end_node_z = end_node.Z

    Free all declared variable references.    

Set bar = Nothing

Set start_node = Nothing

Set end_node = Nothing

  Repeat the operation of reading data for the next bar from the collection.  

Next

  Free all the references declared in the example.  

Set bar_col = Nothing

Set robapp = Nothing

 

!!!!!!!!!!!!!!!!!!!!!!!!

Mine code:

IRobotApplication robApp;

  robApp = new RobotApplicationClass();

 

   IRobotCollection bar_col = robApp.Project.Structure.Bars.GetAll();

           for (int i = 0; i <= Convert.ToInt32(bar_col.Count); i++)

           {

           //   IRobotBar bar = bar_col.Get(i);

            

// this below is something wrong 

                IRobotBar bar = robApp.Project.Structure.Bars.Get(i);

           }

 

Error      1             Cannot implicitly convert type 'RobotOM.IRobotDataObject' to 'RobotOM.IRobotBar'. An explicit conversion exists (are you missing a cast?) G:\nauka c# cad\Robot02\Robot02\Form1.cs  

 
 

4) Remove selected load cases

Declare the main variable representing Robot aplication and its connection to the currently running program instance.  

Dim robapp As IRobotApplication

Set robapp = New RobotApplication

Dim casesrv As IRobotCaseServer

Set casesrv = robapp.Project.Structure.Cases

  Get the collection including all load cases.  

Dim casecol As IRobotCaseCollection

Set casecol = robapp.Project.Structure.Cases.GetAll()

  Iterate for consecutive cases from the collection.  

For i = 1 To casecol.Count

    Get i-th case    

Dim c As IRobotCase

Set c = casecol.Get(i)

    Remove the case from the server if the analysis type is different from the linear static analysis.    

If c.AnalizeType <> I_CAT_STATIC_LINEAR Then casesrv.Delete c.Number

    Free variable representing a case    

Set c = Nothing

  Repeat the iteration for the following case.  

Next

 

Mine code:

 

IRobotApplication robApp;

  robApp = new RobotApplicationClass();

 

           IRobotCaseServer casesrv;

           casesrv = robApp.Project.Structure.Cases;

           IRobotCaseCollection casecol;

           casecol = robApp.Project.Structure.Cases.GetAll();

 

           for (int i = 0; i <= Convert.ToInt32(casecol.Count); i++)

           {

               IRobotCase c;

             

               c = Convert.ToInt32(casecol.Get(i));

               if (c.AnalizeType != IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR)

 

// this below is something wrong 

casesrv.Delete(c);

           }

5)

            IRobotStructure str; 

            str = robApp.Project.Structure;

 

            // Generate new load case.

            IRobotSimpleCase caseExp;

            caseExp = robApp.Project.Structure.Cases.CreateSimple(str.Cases.FreeNumber, "caseExp",

                IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR);

            //      Define load record types.

            caseExp.Records.New(IRobotLoadRecordType.I_LRT_NODE_FORCE);

 

  IRobotLoadRecord LoadRecord; // rec

  LoadRecord = (RobotLoadRecord)caseExp.Records.Get(1);

 

// this below is something wrong 

LoadRecord.SetValue(IRobotBarUniformRecordValues.I_BURV_LOCAL, true);

 

6)  

IRobotViewDisplayParams ParamsDisplay01;

ParamsDisplay01 = ?  (how to declare  )

 

    ParamsDisplay01.Set(IRobotViewDisplayAttributes.I_VDA_STRUCTURE_NODE_NUMBERS, true);

Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-27-2012 06:41 AM in reply to: pipu123

 

!!!!!!!!!!!!!!!!!!!!!!!!

Mine code:

IRobotApplication robApp;

  robApp = new RobotApplicationClass();

 

   IRobotCollection bar_col = robApp.Project.Structure.Bars.GetAll();

           for (int i = 0; i <= Convert.ToInt32(bar_col.Count); i++)

           {

           //   IRobotBar bar = bar_col.Get(i);

            

// this below is something wrong 

                IRobotBar bar = robApp.Project.Structure.Bars.Get(i);

           }

 

 

Should be:

 

            IRobotApplication robApp = new RobotApplication();
            IRobotCollection bar_col = robApp.Project.Structure.Bars.GetAll();
            for (int i = 0; i < bar_col.Count; i++)
            {
                   IRobotBar bar = bar_col.Get(i+1);

                // or
               // IRobotBar bar = (IRobotBar)robApp.Project.Structure.Bars.Get(i+1);

            }

 

 



Rafal Gaweda
Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-27-2012 06:51 AM in reply to: pipu123

Mine code:

 

IRobotApplication robApp;

  robApp = new RobotApplicationClass();

 

           IRobotCaseServer casesrv;

           casesrv = robApp.Project.Structure.Cases;

           IRobotCaseCollection casecol;

           casecol = robApp.Project.Structure.Cases.GetAll();

 

           for (int i = 0; i <= Convert.ToInt32(casecol.Count); i++)

           {

               IRobotCase c;

             

               c = Convert.ToInt32(casecol.Get(i));

               if (c.AnalizeType != IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR)

 

// this below is something wrong 

casesrv.Delete(c);

           }

 


Should be

 

           IRobotCaseServer casesrv = robApp.Project.Structure.Cases;
           IRobotCaseCollection casecol= casesrv.GetAll();
 
           for (int i = 0; i < Convert.ToInt32(casecol.Count); i++)
           {
               IRobotCase c = casecol.Get(i+1);
               if (c.AnalizeType != IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR)
               {
 
                casesrv.Delete(c.Number);
               }

 



Rafal Gaweda
Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-27-2012 07:17 AM in reply to: pipu123

5)

            IRobotStructure str; 

            str = robApp.Project.Structure;

 

            // Generate new load case.

            IRobotSimpleCase caseExp;

            caseExp = robApp.Project.Structure.Cases.CreateSimple(str.Cases.FreeNumber, "caseExp",

                IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR);

            //      Define load record types.

            caseExp.Records.New(IRobotLoadRecordType.I_LRT_NODE_FORCE);

 

  IRobotLoadRecord LoadRecord; // rec

  LoadRecord = (RobotLoadRecord)caseExp.Records.Get(1);

 

// this below is something wrong 

LoadRecord.SetValue(IRobotBarUniformRecordValues.I_BURV_LOCAL, true);

 

 

I assume you want to add nodal force:

 

            IRobotStructure str = robApp.Project.Structure;
 
            // Generate new load case.
            IRobotSimpleCase caseExp;
            caseExp = robApp.Project.Structure.Cases.CreateSimple(str.Cases.FreeNumber, "caseExp",
                IRobotCaseNature.I_CN_EXPLOATATION, IRobotCaseAnalizeType.I_CAT_STATIC_LINEAR);
            //      Define load record types.
            caseExp.Records.New(IRobotLoadRecordType.I_LRT_NODE_FORCE);
 
  IRobotLoadRecord LoadRecord = caseExp.Records.Get(caseExp.Records.Count);
 
            
LoadRecord.SetValue((short)RobotOM.IRobotNodeForceRecordValues.I_NFRV_FZ,-10);
            LoadRecord.Objects.FromText ("1") ;

 

 



Rafal Gaweda
Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-27-2012 07:26 AM in reply to: pipu123

IRobotViewDisplayParams ParamsDisplay01;

ParamsDisplay01 = ?  (how to declare  )

 

    ParamsDisplay01.Set(IRobotViewDisplayAttributes.I_VDA_STRUCTURE_NODE_NUMBERS, true);



Should be

 

            IRobotView robotview = robApp.Project.ViewMngr.GetView(1);
            robotview.ParamsDisplay.Set(IRobotViewDisplayAttributes.I_VDA_STRUCTURE_NODE_NUMBERS, true);

 



Rafal Gaweda
Please use plain text.
Valued Contributor
pipu123
Posts: 61
Registered: ‎09-27-2010

Re: C# API help

07-27-2012 02:22 PM in reply to: Rafal.Gaweda

Thank You

Your solution for these points is proper.

If You don't mind please writethe 1) and 2)  

 

1) tools / job preferences / materials / basic set / steel

   how to change type of steel for example: put S355

 

RobotMaterialData Material;

 

2) how to   create a new section

  New profile

    standard   Database: Simple Catpro

Family:  HEA Section: HEA120    Section type Aluminum

 

I tried myself but it is not what I would like to achieve:

 

            IRobotProjectPreferences ProjectPrefs;
            ProjectPrefs = robApp.Project.Preferences;
            ProjectPrefs.SetActiveCode(IRobotCodeType.I_CT_RC_THEORETICAL_REINF, "BAEL91");

            IRobotMaterialDatabase material;
            material = ProjectPrefs.Materials;
           // material.Name = IRobotMaterialDatabase

            RobotMaterialData Material;
            Material = (RobotMaterialData)label.Data;
            Material.Type = IRobotMaterialType.I_MT_CONCRETE;

 

 

 

Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-30-2012 01:44 AM in reply to: pipu123

 

1) tools / job preferences / materials / basic set / steel

   how to change type of steel for example: put S355

 

I hope you meant this:

 

            robApp.Project.Preferences.Materials.Load("Eurocode");
            RobotBar Bar = (RobotBar)robApp.Project.Structure.Bars.Get(bar_number);
            Bar.SetLabel(IRobotLabelType.I_LT_MATERIAL, "S355");

 



Rafal Gaweda
Please use plain text.
Product Support
Rafal.Gaweda
Posts: 5,293
Registered: ‎04-26-2010

Re: C# API help

07-30-2012 02:02 AM in reply to: pipu123

2) how to   create a new section

  New profile

    standard   Database: Simple Catpro

Family:  HEA Section: HEA120   

 

robApp.Project.Preferences.SetCurrentDatabase(IRobotDatabaseType.I_DT_SECTIONS, "SIMPL");
IRobotLabel Section = robApp.Project.Structure.Labels.Create(IRobotLabelType.I_LT_BAR_SECTION,"HEA 120");
IRobotBarSectionData SData = Section.Data;
SData.LoadFromDBase("HEA 120");
robApp.Project.Structure.Labels.Store(Section);

RobotBar Bar = (RobotBar)robApp.Project.Structure.Bars.Get(bar_number);

Bar.SetLabel(IRobotLabelType.I_LT_BAR_SECTION, "HEA 120");

 



Rafal Gaweda
Please use plain text.