<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[StruXllence Community - All Forums]]></title>
		<link>https://forum.struxllence.com/</link>
		<description><![CDATA[StruXllence Community - https://forum.struxllence.com]]></description>
		<pubDate>Sun, 08 Nov 2026 00:45:02 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[StaadPro.Interop NuGet: install, connect and choose the right preview]]></title>
			<link>https://forum.struxllence.com/showthread.php?tid=2</link>
			<pubDate>Mon, 02 Nov 2026 09:54:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.struxllence.com/member.php?action=profile&uid=2">cofounder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.struxllence.com/showthread.php?tid=2</guid>
			<description><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installing StaadPro.Interop from NuGet: requirements, first connection and version checks</span></span><br />
<br />
This thread covers consuming StaadPro.Interop in an application. It complements the repository overview, which focuses on architecture, source builds and contributions.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Package:</span> <a href="https://www.nuget.org/packages/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">StaadPro.Interop on NuGet</a><br />
<span style="font-weight: bold;" class="mycode_b">Verified public version, checked 2 November 2026:</span> <a href="https://www.nuget.org/packages/StaadPro.Interop/1.0.0-preview.20261102.1" target="_blank" rel="noopener" class="mycode_url">1.0.0-preview.20261102.1</a><br />
<span style="font-weight: bold;" class="mycode_b">Current repository:</span> <a href="https://github.com/StruXllence/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">StruXllence/StaadPro.Interop</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. What is installed?</span><br />
<br />
StaadPro.Interop is a strongly typed managed wrapper for STAAD.Pro's OpenSTAAD interface. The verified public archive contains the net481 assembly, XML documentation and accompanying guides. Its metadata declares Newtonsoft.Json 13.0.3 as a dependency. NuGet normally restores the dependency automatically.<br />
<br />
The package does not install STAAD.Pro, supply a Bentley license or replace the native structural-analysis engine. Installing the DLL successfully does not establish that an OpenSTAAD session is available or that a particular native operation is supported by the installed STAAD build.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Requirements before running the sample</span><br />
<ul class="mycode_list"><li>Windows and a project targeting .NET Framework 4.8.1 (net481), with the appropriate targeting tools.<br />
</li>
<li>A separately installed and licensed STAAD.Pro application exposing the required OpenSTAAD APIs.<br />
</li>
<li>An open, controlled model for the initial connection check.<br />
</li>
<li>An STA entry point or an existing STA application thread, with coordinated/serialized access to the connected session.<br />
</li>
</ul>
<br />
The main package's target framework is net481. A recent .NET SDK does not make a net8.0 application compatible with that asset. The separately named Core.Testing preview has a different purpose; do not substitute it silently or reference both packages as if they were independent assemblies.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Install an exact public version</span><br />
<br />
For a suitable existing project:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>dotnet add YourApp.csproj package StaadPro.Interop --version 1.0.0-preview.20261102.1 --source https://api.nuget.org/v3/index.json
dotnet restore YourApp.csproj
dotnet build YourApp.csproj -c Release</code></div></div><br />
The relevant project settings are:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;PropertyGroup&gt;
  &lt;TargetFramework&gt;net481&lt;/TargetFramework&gt;
&lt;/PropertyGroup&gt;
&lt;ItemGroup&gt;
  &lt;PackageReference Include="StaadPro.Interop"
                    Version="1.0.0-preview.20261102.1" /&gt;
&lt;/ItemGroup&gt;</code></div></div><br />
In Visual Studio, open Manage NuGet Packages, select nuget.org, enable Include prerelease, search for StaadPro.Interop and choose the exact version. In Package Manager Console:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Install-Package StaadPro.Interop -Version 1.0.0-preview.20261102.1 -Source https://api.nuget.org/v3/index.json</code></div></div><br />
Pinning a preview version makes a build reproducible. Check the release notes before upgrading, then rebuild and restart the consuming application so it actually loads the new DLL.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. First connection: read the model path</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>using System;
using StaadPro.Interop.Services;

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        using (var wrapper = OpenStaadWrapperProvider.GetRunning())
        {
            if (wrapper == null)
            {
                Console.WriteLine("No usable running OpenSTAAD session was found.");
                return;
            }

            Console.WriteLine(wrapper.Root.GetStaadFileFullPath());
        }
    }
}</code></div></div><br />
Start with read-only queries, confirm the connected model and make units explicit. Use the selected version's IntelliSense and guides for Geometry, Load, Property, Output and the other adapters. Keep StaadPro.Interop.xml beside the DLL if copying assemblies outside the normal NuGet restore process.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. How to distinguish a public release from a prepared archive</span><br />
<br />
The public feed can be checked directly:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;feed = Invoke-RestMethod 'https://api.nuget.org/v3-flatcontainer/staadpro.interop/index.json'
&#36;feed.versions</code></div></div><br />
At the time of this post, the latest listed public version is 1.0.0-preview.20261102.1. This exact version is listed in the feed and its archive was downloaded for the checks behind this post. For future releases, do not treat a local archive, README or package-cache entry as proof that a version is downloadable from nuget.org.<br />
<br />
For troubleshooting a feed issue, restore into a fresh package-cache directory with an explicit NuGet.Config containing the intended source. Avoid changing package IDs merely because a version has not been published.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Common problems and what to check</span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Package not found:</span> verify the exact package ID, prerelease version and configured source. Enable prerelease packages in Visual Studio.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Framework incompatibility:</span> inspect TargetFramework; the package's net481 target and the installed SDK are different requirements.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No running session:</span> open licensed STAAD.Pro and a usable model, and verify that the application can access that session in the correct Windows context.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Unexpected native return value:</span> record the exact STAAD build, method and arguments. Native contracts can differ across versions; do not convert every nonempty result into success.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong numbers:</span> check model identity, active/load-case selection, result availability, coordinate systems, signs and units before drawing an engineering conclusion.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Old behavior after upgrade:</span> rebuild, restart and inspect the loaded DLL/package version rather than relying only on the package-manager UI.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">7. Preview scope, licensing and responsible use</span><br />
<br />
This is a preview. Managed tests and documented examples do not certify all live COM behavior or engineering acceptance. Native model changes can have partial effects; save a separate controlled copy before trying mutation workflows, and do not assume that disposing a wrapper saves or closes STAAD.Pro.<br />
<br />
The downloaded 1.0.0-preview.20261102.1 archive declares Apache License 2.0 and StruXllence copyright in its NuGet metadata, and retains a notice for MIT-origin code. Earlier public versions, including 1.0.0-preview.20261028.4, shipped under their original terms. Follow the notices shipped with your exact package or source revision rather than assuming that current main-branch metadata describes every older release.<br />
<br />
StaadPro.Interop is independent of Bentley Systems and is not an officially endorsed Bentley SDK. Bentley software and licensing remain separate.<br />
<br />
For a package defect, <a href="https://github.com/StruXllence/StaadPro.Interop/issues" target="_blank" rel="noopener" class="mycode_url">open a reproducible GitHub issue</a> with versions and a minimal nonconfidential example. For workflow questions, continue the discussion here and describe the engineering checks you need.]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installing StaadPro.Interop from NuGet: requirements, first connection and version checks</span></span><br />
<br />
This thread covers consuming StaadPro.Interop in an application. It complements the repository overview, which focuses on architecture, source builds and contributions.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Package:</span> <a href="https://www.nuget.org/packages/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">StaadPro.Interop on NuGet</a><br />
<span style="font-weight: bold;" class="mycode_b">Verified public version, checked 2 November 2026:</span> <a href="https://www.nuget.org/packages/StaadPro.Interop/1.0.0-preview.20261102.1" target="_blank" rel="noopener" class="mycode_url">1.0.0-preview.20261102.1</a><br />
<span style="font-weight: bold;" class="mycode_b">Current repository:</span> <a href="https://github.com/StruXllence/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">StruXllence/StaadPro.Interop</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. What is installed?</span><br />
<br />
StaadPro.Interop is a strongly typed managed wrapper for STAAD.Pro's OpenSTAAD interface. The verified public archive contains the net481 assembly, XML documentation and accompanying guides. Its metadata declares Newtonsoft.Json 13.0.3 as a dependency. NuGet normally restores the dependency automatically.<br />
<br />
The package does not install STAAD.Pro, supply a Bentley license or replace the native structural-analysis engine. Installing the DLL successfully does not establish that an OpenSTAAD session is available or that a particular native operation is supported by the installed STAAD build.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Requirements before running the sample</span><br />
<ul class="mycode_list"><li>Windows and a project targeting .NET Framework 4.8.1 (net481), with the appropriate targeting tools.<br />
</li>
<li>A separately installed and licensed STAAD.Pro application exposing the required OpenSTAAD APIs.<br />
</li>
<li>An open, controlled model for the initial connection check.<br />
</li>
<li>An STA entry point or an existing STA application thread, with coordinated/serialized access to the connected session.<br />
</li>
</ul>
<br />
The main package's target framework is net481. A recent .NET SDK does not make a net8.0 application compatible with that asset. The separately named Core.Testing preview has a different purpose; do not substitute it silently or reference both packages as if they were independent assemblies.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Install an exact public version</span><br />
<br />
For a suitable existing project:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>dotnet add YourApp.csproj package StaadPro.Interop --version 1.0.0-preview.20261102.1 --source https://api.nuget.org/v3/index.json
dotnet restore YourApp.csproj
dotnet build YourApp.csproj -c Release</code></div></div><br />
The relevant project settings are:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;PropertyGroup&gt;
  &lt;TargetFramework&gt;net481&lt;/TargetFramework&gt;
&lt;/PropertyGroup&gt;
&lt;ItemGroup&gt;
  &lt;PackageReference Include="StaadPro.Interop"
                    Version="1.0.0-preview.20261102.1" /&gt;
&lt;/ItemGroup&gt;</code></div></div><br />
In Visual Studio, open Manage NuGet Packages, select nuget.org, enable Include prerelease, search for StaadPro.Interop and choose the exact version. In Package Manager Console:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Install-Package StaadPro.Interop -Version 1.0.0-preview.20261102.1 -Source https://api.nuget.org/v3/index.json</code></div></div><br />
Pinning a preview version makes a build reproducible. Check the release notes before upgrading, then rebuild and restart the consuming application so it actually loads the new DLL.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. First connection: read the model path</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>using System;
using StaadPro.Interop.Services;

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        using (var wrapper = OpenStaadWrapperProvider.GetRunning())
        {
            if (wrapper == null)
            {
                Console.WriteLine("No usable running OpenSTAAD session was found.");
                return;
            }

            Console.WriteLine(wrapper.Root.GetStaadFileFullPath());
        }
    }
}</code></div></div><br />
Start with read-only queries, confirm the connected model and make units explicit. Use the selected version's IntelliSense and guides for Geometry, Load, Property, Output and the other adapters. Keep StaadPro.Interop.xml beside the DLL if copying assemblies outside the normal NuGet restore process.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. How to distinguish a public release from a prepared archive</span><br />
<br />
The public feed can be checked directly:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;feed = Invoke-RestMethod 'https://api.nuget.org/v3-flatcontainer/staadpro.interop/index.json'
&#36;feed.versions</code></div></div><br />
At the time of this post, the latest listed public version is 1.0.0-preview.20261102.1. This exact version is listed in the feed and its archive was downloaded for the checks behind this post. For future releases, do not treat a local archive, README or package-cache entry as proof that a version is downloadable from nuget.org.<br />
<br />
For troubleshooting a feed issue, restore into a fresh package-cache directory with an explicit NuGet.Config containing the intended source. Avoid changing package IDs merely because a version has not been published.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Common problems and what to check</span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Package not found:</span> verify the exact package ID, prerelease version and configured source. Enable prerelease packages in Visual Studio.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Framework incompatibility:</span> inspect TargetFramework; the package's net481 target and the installed SDK are different requirements.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No running session:</span> open licensed STAAD.Pro and a usable model, and verify that the application can access that session in the correct Windows context.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Unexpected native return value:</span> record the exact STAAD build, method and arguments. Native contracts can differ across versions; do not convert every nonempty result into success.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong numbers:</span> check model identity, active/load-case selection, result availability, coordinate systems, signs and units before drawing an engineering conclusion.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Old behavior after upgrade:</span> rebuild, restart and inspect the loaded DLL/package version rather than relying only on the package-manager UI.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">7. Preview scope, licensing and responsible use</span><br />
<br />
This is a preview. Managed tests and documented examples do not certify all live COM behavior or engineering acceptance. Native model changes can have partial effects; save a separate controlled copy before trying mutation workflows, and do not assume that disposing a wrapper saves or closes STAAD.Pro.<br />
<br />
The downloaded 1.0.0-preview.20261102.1 archive declares Apache License 2.0 and StruXllence copyright in its NuGet metadata, and retains a notice for MIT-origin code. Earlier public versions, including 1.0.0-preview.20261028.4, shipped under their original terms. Follow the notices shipped with your exact package or source revision rather than assuming that current main-branch metadata describes every older release.<br />
<br />
StaadPro.Interop is independent of Bentley Systems and is not an officially endorsed Bentley SDK. Bentley software and licensing remain separate.<br />
<br />
For a package defect, <a href="https://github.com/StruXllence/StaadPro.Interop/issues" target="_blank" rel="noopener" class="mycode_url">open a reproducible GitHub issue</a> with versions and a minimal nonconfidential example. For workflow questions, continue the discussion here and describe the engineering checks you need.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[StaadPro.Interop repository: typed C# automation for STAAD.Pro]]></title>
			<link>https://forum.struxllence.com/showthread.php?tid=1</link>
			<pubDate>Mon, 02 Nov 2026 09:54:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.struxllence.com/member.php?action=profile&uid=2">cofounder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.struxllence.com/showthread.php?tid=1</guid>
			<description><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">StaadPro.Interop: a C# foundation for repeatable STAAD.Pro automation</span></span><br />
<br />
StaadPro.Interop is an independent, open-source .NET wrapper around Bentley STAAD.Pro's OpenSTAAD automation interface. The project is authored by Srinivasa Rao Masanam and is now published under StruXllence. Its purpose is to help engineers build maintainable C# applications around STAAD models using typed interfaces, structural entities, documented contracts and managed results.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Repository:</span> <a href="https://github.com/StruXllence/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">github.com/StruXllence/StaadPro.Interop</a><br />
<span style="font-weight: bold;" class="mycode_b">Documentation:</span> <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/API-Reference.md" target="_blank" rel="noopener" class="mycode_url">API reference</a> | <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/Installation.md" target="_blank" rel="noopener" class="mycode_url">Installation and session lifecycle</a> | <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/Release-Notes.md" target="_blank" rel="noopener" class="mycode_url">Release notes</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Why use a typed wrapper?</span><br />
<br />
OpenSTAAD lets external programs interact with STAAD.Pro. In a larger engineering application, the difficult work extends beyond calling an automation method: identifying the correct running model, distinguishing IDs from array indices, interpreting native return values, preserving units and axes, handling incomplete native output, and coordinating operations on a shared COM session.<br />
<br />
StaadPro.Interop provides a managed layer for those responsibilities. It exposes separate adapters and interfaces for related API areas, together with documented input and output models. This can make automation easier to discover in IntelliSense, review in code and exercise with repeatable tests. It does not replace STAAD.Pro's analysis engine or turn an unverified calculation into an accepted engineering result.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Main areas of the API</span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Connection and Root:</span> acquire an existing STAAD session, inspect model identity and units, and explicitly request model/application operations.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Geometry:</span> work with nodes, beams, plates, connectivity and groups. Read the method contracts before using creation, merge or mesh operations.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Load:</span> inspect primary/reference/combination cases, assignments and metadata, and build selected load-definition workflows.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Property:</span> inspect materials, member sections and specifications, with version-aware contracts and separately acquired catalog capabilities where applicable.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Output:</span> retrieve supported analysis/design observations through named managed results. Check result status before consuming data, and verify axes, signs and units.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Support, Commands and Design:</span> support definitions/assignments, analysis-command configuration and supported design-brief/query workflows.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Table and View:</span> supported report-table operations and graphical orientation requests. Coverage is evolving; use the exact version's documentation rather than assuming every OpenSTAAD operation is implemented.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">3. Runtime requirements</span><br />
<br />
Live interoperability requires Windows, a consumer targeting .NET Framework 4.8.1, and a separately installed/licensed STAAD.Pro version exposing the APIs being used. The .NET SDK used to build a project is not the same thing as its target framework. This main package should not be treated as a general .NET 8 or cross-platform library.<br />
<br />
An open model and an appropriate COM apartment are required for model operations. Keep acquisition and subsequent calls on the application's established STA thread; serialize access to the same STAAD session. Moving calls to Task.Run does not automatically make COM access safe.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. A small read-only starting point</span><br />
<br />
With an appropriate package/project reference in a Windows net481 console application, open a STAAD model and start by reading its identity:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>using System;
using StaadPro.Interop.Services;

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        using (var wrapper = OpenStaadWrapperProvider.GetRunning())
        {
            if (wrapper == null)
            {
                Console.WriteLine("Open a usable STAAD.Pro session first.");
                return;
            }

            Console.WriteLine(wrapper.Root.GetStaadFileFullPath());
        }
    }
}</code></div></div><br />
Confirm the returned model before adding geometry or result queries. Acquiring an instance is not proof that an analysis has completed or that its results are current. Saving, closing, reloading and analyzing models remain explicit operations with potential side effects.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Build from source and contribute</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone https://github.com/StruXllence/StaadPro.Interop.git
cd StaadPro.Interop
dotnet build StaadPro.Interop.sln -c Release
dotnet test tests/StaadPro.Interop.Tests/StaadPro.Interop.Tests.csproj -c Release --no-build</code></div></div><br />
Use a suitable Windows development environment and the repository's current setup instructions. Offline managed tests can run without Bentley binaries; live integration work needs licensed STAAD.Pro. Managed test coverage and packaged XML examples are evidence about the wrapper, not certification of every native STAAD build or engineering convention.<br />
<br />
Useful contributions include minimal reproducible issues, clearer method contracts, controlled examples and regression tests. For a defect, report the package version or source commit, STAAD version, target framework, exact method, units, expected result and observed result. Use a small nonconfidential model where possible. Do not upload client/project files without permission.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Source versus published package</span><br />
<br />
The main branch can contain work that is not yet available on NuGet. As checked on 2 November 2026, 1.0.0-preview.20261102.1 is listed in the public package feed and its archive is downloadable. The main branch can still move ahead of a published release. Pin the exact version or commit when reproducing a workflow. The companion NuGet thread explains installation of the verified public release.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">License and independence</span><br />
<br />
The current repository declares Apache License 2.0 and includes attribution/legacy notices. Earlier published archives retain the terms shipped with those archives; consult the exact revision and package notices. This is an independent project, not a Bentley-endorsed or Bentley-supported product. STAAD.Pro/OpenSTAAD and other referenced names belong to their respective owners, and no Bentley license or proprietary binaries are included.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Discussion:</span> Which repeated engineering task would you like to automate first: geometry checking, load auditing, result extraction or reporting? Describe the workflow and the checks you would need before relying on it.]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">StaadPro.Interop: a C# foundation for repeatable STAAD.Pro automation</span></span><br />
<br />
StaadPro.Interop is an independent, open-source .NET wrapper around Bentley STAAD.Pro's OpenSTAAD automation interface. The project is authored by Srinivasa Rao Masanam and is now published under StruXllence. Its purpose is to help engineers build maintainable C# applications around STAAD models using typed interfaces, structural entities, documented contracts and managed results.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Repository:</span> <a href="https://github.com/StruXllence/StaadPro.Interop" target="_blank" rel="noopener" class="mycode_url">github.com/StruXllence/StaadPro.Interop</a><br />
<span style="font-weight: bold;" class="mycode_b">Documentation:</span> <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/API-Reference.md" target="_blank" rel="noopener" class="mycode_url">API reference</a> | <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/Installation.md" target="_blank" rel="noopener" class="mycode_url">Installation and session lifecycle</a> | <a href="https://github.com/StruXllence/StaadPro.Interop/blob/main/docs/Release-Notes.md" target="_blank" rel="noopener" class="mycode_url">Release notes</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Why use a typed wrapper?</span><br />
<br />
OpenSTAAD lets external programs interact with STAAD.Pro. In a larger engineering application, the difficult work extends beyond calling an automation method: identifying the correct running model, distinguishing IDs from array indices, interpreting native return values, preserving units and axes, handling incomplete native output, and coordinating operations on a shared COM session.<br />
<br />
StaadPro.Interop provides a managed layer for those responsibilities. It exposes separate adapters and interfaces for related API areas, together with documented input and output models. This can make automation easier to discover in IntelliSense, review in code and exercise with repeatable tests. It does not replace STAAD.Pro's analysis engine or turn an unverified calculation into an accepted engineering result.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Main areas of the API</span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Connection and Root:</span> acquire an existing STAAD session, inspect model identity and units, and explicitly request model/application operations.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Geometry:</span> work with nodes, beams, plates, connectivity and groups. Read the method contracts before using creation, merge or mesh operations.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Load:</span> inspect primary/reference/combination cases, assignments and metadata, and build selected load-definition workflows.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Property:</span> inspect materials, member sections and specifications, with version-aware contracts and separately acquired catalog capabilities where applicable.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Output:</span> retrieve supported analysis/design observations through named managed results. Check result status before consuming data, and verify axes, signs and units.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Support, Commands and Design:</span> support definitions/assignments, analysis-command configuration and supported design-brief/query workflows.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Table and View:</span> supported report-table operations and graphical orientation requests. Coverage is evolving; use the exact version's documentation rather than assuming every OpenSTAAD operation is implemented.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">3. Runtime requirements</span><br />
<br />
Live interoperability requires Windows, a consumer targeting .NET Framework 4.8.1, and a separately installed/licensed STAAD.Pro version exposing the APIs being used. The .NET SDK used to build a project is not the same thing as its target framework. This main package should not be treated as a general .NET 8 or cross-platform library.<br />
<br />
An open model and an appropriate COM apartment are required for model operations. Keep acquisition and subsequent calls on the application's established STA thread; serialize access to the same STAAD session. Moving calls to Task.Run does not automatically make COM access safe.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. A small read-only starting point</span><br />
<br />
With an appropriate package/project reference in a Windows net481 console application, open a STAAD model and start by reading its identity:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>using System;
using StaadPro.Interop.Services;

internal static class Program
{
    [STAThread]
    private static void Main()
    {
        using (var wrapper = OpenStaadWrapperProvider.GetRunning())
        {
            if (wrapper == null)
            {
                Console.WriteLine("Open a usable STAAD.Pro session first.");
                return;
            }

            Console.WriteLine(wrapper.Root.GetStaadFileFullPath());
        }
    }
}</code></div></div><br />
Confirm the returned model before adding geometry or result queries. Acquiring an instance is not proof that an analysis has completed or that its results are current. Saving, closing, reloading and analyzing models remain explicit operations with potential side effects.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Build from source and contribute</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone https://github.com/StruXllence/StaadPro.Interop.git
cd StaadPro.Interop
dotnet build StaadPro.Interop.sln -c Release
dotnet test tests/StaadPro.Interop.Tests/StaadPro.Interop.Tests.csproj -c Release --no-build</code></div></div><br />
Use a suitable Windows development environment and the repository's current setup instructions. Offline managed tests can run without Bentley binaries; live integration work needs licensed STAAD.Pro. Managed test coverage and packaged XML examples are evidence about the wrapper, not certification of every native STAAD build or engineering convention.<br />
<br />
Useful contributions include minimal reproducible issues, clearer method contracts, controlled examples and regression tests. For a defect, report the package version or source commit, STAAD version, target framework, exact method, units, expected result and observed result. Use a small nonconfidential model where possible. Do not upload client/project files without permission.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Source versus published package</span><br />
<br />
The main branch can contain work that is not yet available on NuGet. As checked on 2 November 2026, 1.0.0-preview.20261102.1 is listed in the public package feed and its archive is downloadable. The main branch can still move ahead of a published release. Pin the exact version or commit when reproducing a workflow. The companion NuGet thread explains installation of the verified public release.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">License and independence</span><br />
<br />
The current repository declares Apache License 2.0 and includes attribution/legacy notices. Earlier published archives retain the terms shipped with those archives; consult the exact revision and package notices. This is an independent project, not a Bentley-endorsed or Bentley-supported product. STAAD.Pro/OpenSTAAD and other referenced names belong to their respective owners, and no Bentley license or proprietary binaries are included.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Discussion:</span> Which repeated engineering task would you like to automate first: geometry checking, load auditing, result extraction or reporting? Describe the workflow and the checks you would need before relying on it.]]></content:encoded>
		</item>
	</channel>
</rss>