OpenSTAAD - Structural Analysis and Design - Wiki - Structural Analysis and Design - Be Communities by Bentley

Structural Analysis and Design

Structural Analysis and Design
This is where you can find and contribute to discussions, ideas, and other information about Bentley Structural Analysis and Design products.


Structural Analysis and Design - Wiki



Have you ever wanted to customize STAAD.Pro and its functions to meet your specific needs? The new OpenSTAAD is a library of exposed functions allowing engineers access to STAAD.Pro’s internal functions and routines. OpenSTAAD’s open architecture provides customers with an Application Program Interface (API) to STAAD.Pro’s analysis and design engines as well as its Graphic User Interface (GUI) for personal customization. With OpenSTAAD, any user can use practically any programming language (including C, C++, VB, VBA, FORTRAN, Java and Delphi) to tap into STAAD’s database and seamlessly link input and output data to third-party applications. You can also automate repetitive tasks or commands in STAAD.Pro by creating your own customized macros with a full built-in VBA editor.


Following an open architecture paradigm, OpenSTAAD was built using ATL COM and COM+ standards as specified by Microsoft, Inc. This allows OpenSTAAD to be used in any environment whether it is in a customized application written in C++ or in a macro application like Excel, AutoCAD or Visio. OpenSTAAD can also be used to link STAAD data to Web-based applications using ActiveX, HTML and ASP. OpenSTAAD enables you to integrate STAAD with legacy applications and datamine and export STAAD’s results in any manner.

OpenSTAAD allows engineers and other users to link in-house or third-party applications with STAAD.Pro. For example, a user might create a spreadsheet in Microsoft Excel to analyze and design a circular base plate using support reactions from STAAD. With OpenSTAAD, a simple macro can be written in Excel to retrieve the appropriate STAAD data and automatically link the results. If the STAAD file changes, so will the Excel sheet! OpenSTAAD is currently being designed to work on the new .NET platform as well as on PocketPCs running Windows CE.

With OpenSTAAD 2.0 and later, users can also write their own VBA-based macros within STAAD and have access to functions controlling the geometry, viewing, and results display. For example, you can create macros to insert your own connection design routine which can run using the output from a STAAD run and automatically add it to the STAAD output.

The OpenSTAAD library of functions is classified under the following general categories:

  • STAAD File Input and Output (I/O)
  • Structure Geometry
  • Member Specifications
  • Properties
  • Loads
  • Viewing
  • Toolbars/Dialog Boxes
  • Output Grids
  • Output Results
    • Nodes
    • Beams
    • Plates
    • Solids

If you have STAAD.Pro 2003 or higher, you already have OpenSTAAD 2.0 or higher and don't need to download the following. If you have STAAD.Pro 2002 build 1003 or higher, you will have an older version of OpenSTAAD that does not have access to the STAAD.Pro graphical commands or does not have a VBA editor. You must have STAAD.Pro 2003 or higher to download OpenSTAAD 2.0 or above.

Instructions and examples of OpenSTAAD using Excel, Word, MathCAD and AutoCAD can be found in the Examples section of the OpenSTAAD Reference Manual

Note:  For optimum performance, OpenSTAAD should be run in STAAD.Pro 2006 or higher. It may be possible to run at least some of OpenSTAAD’s functions in earlier releases of STAAD.Pro or STAAD-III, but the results may be unpredictable, since OpenSTAAD did not exist, and therefore compatibility with OpenSTAAD was not considered during the development of these earlier STAAD versions. Research Engineers cannot provide any technical support for OpenSTAAD running in STAAD versions prior to STAAD.Pro 2006.


  • hello,

    I am trying to get support reaction from staad with the use of openstaad. But I could not got any result from this code. Here is my code.

    Dim lSupportNodesArray() As Long

    Dim iSupportCount As Integer

    Dim Nodes(1000) As Integer

    Dim Force(0 To 5) As Double: Dim Calculated_Load As Integer

    Dim F_Unit As Double: Dim L_Unit As Double: Dim M_Unit As Double

    Dim Fx(10000) As Double: Dim Fy(10000) As Double: Dim Fz(10000) As Double

    Dim Mx(10000) As Double: Dim My(10000) As Double: Dim Mz(10000) As Double

    Dim strFileName As String

    '''''''''''''''''''''''''''''Get staad file'''''''''''''''''''''''''''''''''

    strFileName = Application.GetOpenFilename("Staad Files (*.std), *.std", , strProgTitle)

    Set obj1OpenSTAAD = CreateObject("OpenSTAAD.Output.1")

    obj1OpenSTAAD.SelectSTAADFile strFileName


    iSupportCount = obj1OpenSTAAD.Support.GetSupportCount

    ReDim lSupportNodesArray(0 To (iSupportCount - 1)) As Long

    ''''''''''''''''''''''''''''Get Support Nodes

    obj1OpenSTAAD.Support.GetSupportNodes lSupportNodesArray()

    ''''''''''''''''''''''''''''Assign node to array

    For l = 0 To iSupportCount - 1

       Nodes(l) = lSupportNodesArray(l)

    Next l


    Calculated_Load = Sheets("sheet1").Range("T2")   'Total load case

    F_Unit = Sheets("sheet1").Range("X3")            'Force unit factor

    M_Unit = Sheets("sheet1").Range("X4")            'Moment unit factor


    l = 0: m = 0

    For j = 0 To iSupportCount - 1

       m = 2 + m

       Sheets("sheet3").Range("a" & m) = Nodes(j)

       For k = 1 To Calculated_Load

               l = l + 1

               obj1OpenSTAAD.GetSupportReactions Nodes(j), Sheets("sheet1").Range("z" & 1 + k), Force(0)

               Fx(l) = (Math.Round((Force(0) * F_Unit), 3))

               Fy(l) = (Math.Round((Force(1) * F_Unit), 3))

               Fz(l) = (Math.Round((Force(2) * F_Unit), 3))

               Mx(l) = (Math.Round((Force(3) * M_Unit), 3))

               My(l) = (Math.Round((Force(4) * M_Unit), 3))

               Mz(l) = (Math.Round((Force(5) * M_Unit), 3))

               Sheets("sheet3").Range("C" & 1 + l) = Fx(l)

               Sheets("sheet3").Range("D" & 1 + l) = Fy(l)

               Sheets("sheet3").Range("E" & 1 + l) = Fz(l)

               Sheets("sheet3").Range("F" & 1 + l) = Mx(l)

               Sheets("sheet3").Range("G" & 1 + l) = My(l)

               Sheets("sheet3").Range("H" & 1 + l) = Mz(l)

               Sheets("sheet3").Range("b" & l + 1) = Sheets("sheet1").Range("z" & 1 + k)

       Next k

    m = l

    Next j

  • Jason,

    What will be a good starting point reference for "linking STAAD data to Web-based applications using ActiveX, HTML and ASP"?

    Thank you.

  • Hi,

    I want to write macros in microsoft visual studio editor,do I need OpenstaadUI.dll COM file to add as reference to my project,I found OpenstaadUI.tlb file which when I try to add it is not adding, says not accessible.what shall I do?and I need OPENSTAAD library function documentation to implement macros in C#.NET.where can I get it? please kindly provide me the help.