Concepts
Understanding the core data model before diving into the API.
ArmaturaProject
The top-level container. A project manages one or more models, holds the active design code, and handles persistence. Analysis requires a model to be attached to a project.
StructuralModel
The central object within a project. A StructuralModel holds all nodes, members, supports, materials, sections, loads, load cases, and load combinations. After analysis, it also holds results.
StructuralModel
├── Nodes — points in 3D space
├── Members — beam/truss elements connecting two nodes
├── Supports — boundary conditions at nodes
├── Materials — steel grades (steel only, currently)
├── Sections — cross-section geometry (I-beam, rectangular, circular, hollow, angle)
├── PointLoads — concentrated forces/moments applied along members
├── DistributedLoads — loads along member length
├── LoadCases — groups of loads by type (dead, live, wind, ...)
├── LoadCombinations — factored combinations of load cases
└── Results? — AnalysisResultSet (null until analysis is run)
Nodes
A node is a point in 3D space with an integer ID. Coordinates are in metres. The global coordinate system is right-handed with Z pointing upward. Nodes are where members connect and supports are applied.
Members
A member connects two nodes. Each member has a material, a cross-section, and a type (Beam or Truss). Beam elements have 6 DOF per node (3 translations + 3 rotations). Truss elements carry axial force only.
Supports (boundary conditions)
Supports restrict degrees of freedom at a node. Common types:
| Type | Translations | Rotations | Use case |
|---|---|---|---|
| Fixed | All restrained | All restrained | Rigid connections to ground |
| Pinned | All restrained | All free | Simple supports |
| Roller | One axis restrained | All free | Expansion joints |
| Free | All free | All free | No support (default) |
Load cases
A load case groups loads that act simultaneously and share a load type: dead, live, wind, snow, seismic, or ice. Each load case is solved independently by the FEM solver.
Load combinations
A load combination applies partial safety factors to load cases and superposes the results. For example, a Eurocode ULS combination: 1.35 × Dead + 1.5 × Live. Combination results are computed via linear superposition — no re-solving needed. This is valid for linear elastic analysis only.
Analysis results
After running analysis, an AnalysisResultSet contains:
- Node displacements — Dx, Dy, Dz, Rx, Ry, Rz per node per load case/combination
- Reactions — Fx, Fy, Fz, Mx, My, Mz at supported nodes
- Member forces — N, Vy, Vz, Mx, My, Mz at stations along each member (default: 11 stations)
- Utilization — design check ratios with governing clause references (requires an active design code)
Results are stored as flat lists and queried by node ID, member ID, load case, or as envelopes (max/min across all scenarios with traceability to the governing load case).
Invalidation
Any model mutation (adding a node, changing a load, moving a support) automatically clears results. This ensures you never read stale data. Re-run analysis after making changes.