STAAD.Pro 3D Generator is a deterministic pipeline that converts SIJCON-style QRF (Quantity Request Form) JSON documents into complete, production-ready STAAD.Pro .std command files for Pre-Engineered Building (PEB) structures — with an interactive 3D demo for visualization.
What takes a structural engineer hours of manual input, this pipeline does in 0.01 seconds: parsing heterogeneous QRF data, generating full 3D geometry, applying loads and combinations, running design checks, estimating steel tonnage, and rendering an interactive 3D wireframe.
Try it now — Live 3D Demo — no installation required. Select any building, rotate the 3D wireframe, explore BOQ and .std output.
Web App (recommended)
pip install -e ".[dev]"
pip install gradio plotly
python app.py
# Open http://127.0.0.1:7860
CLI — Batch Conversion
# Place QRF JSON files in ./data/
python -m staad_generator --verbose
# Single file
python -m staad_generator --one data/S-2447-BANSWARA.json -v
Python API
from staad_generator.spec import spec_from_json_path
from staad_generator.geometry import build_frame
from staad_generator.writer import build_std_text
from staad_generator.boq import estimate_boq, format_boq
spec = spec_from_json_path("data/S-2447-BANSWARA.json")
fm = build_frame(spec)
std_text = build_std_text(spec, fm)
boq = estimate_boq(spec, fm)
print(format_boq(boq)) # 23.66 tonnes
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1A2E48', 'primaryTextColor': '#F0F0F0', 'primaryBorderColor': '#9DC0D8', 'lineColor': '#9DC0D8', 'secondaryColor': '#1A2E48', 'tertiaryColor': '#1A2E48'}}}%%
flowchart LR
A[/"QRF JSON<br/>(SIJCON format)"/] --> B["<b>Parser</b><br/>qrf.py<br/><i>Regex + Fuzzy Match</i>"]
B --> C["<b>BuildingSpec</b><br/>spec.py<br/><i>Dataclass</i>"]
C --> D["<b>Geometry Engine</b><br/>geometry.py<br/><i>3D Frame Model</i>"]
D --> E["<b>Validator</b><br/>validate.py<br/><i>Integrity Checks</i>"]
E --> F["<b>Writer</b><br/>writer.py<br/><i>STAAD .std Output</i>"]
C --> G["<b>BOQ</b><br/>boq.py<br/><i>Steel Tonnage</i>"]
D --> H["<b>3D Viewer</b><br/>app.py<br/><i>Plotly Wireframe</i>"]
style A fill:#2563eb,stroke:#9DC0D8,color:#fff
style B fill:#f59e0b,stroke:#9DC0D8,color:#000
style C fill:#1A2E48,stroke:#9DC0D8,color:#fff
style D fill:#10b981,stroke:#9DC0D8,color:#fff
style E fill:#8b5cf6,stroke:#9DC0D8,color:#fff
style F fill:#dc2626,stroke:#9DC0D8,color:#fff
style G fill:#06b6d4,stroke:#9DC0D8,color:#000
style H fill:#f97316,stroke:#9DC0D8,color:#000
All 6 competition files convert successfully with full structural completeness:
| File | Joints | Members | Steel (t) | Code | .std Lines |
|---|---|---|---|---|---|
| BulkStore | 628 | 1126 | 174.39 | AISC UNIFIED 2010 | 800 |
| Jebel_Ali_Industrial_Area | 262 | 436 | 47.47 | AISC UNIFIED 2010 | 460 |
| knitting-plant | 548 | 781 | 178.49 | AISC UNIFIED 2010 | 628 |
| RMStore | 289 | 519 | 75.30 | AISC UNIFIED 2010 | 504 |
| RSC-ARC-101-R0_AISC | 680 | 1168 | 106.51 | AISC UNIFIED 2010 | 854 |
| S-2447-BANSWARA | 209 | 361 | 32.27 | IS800 LSD | 414 |
36 pytest tests passing. Includes FEA verification, crane beams, portal bracing, haunches, tapered sections, mezzanine geometry, section optimizer, BOQ costing, longitudinal wind, multiple girt rows, reverse seismic, structural connectivity (zero disconnected joints), 2-pass PERFORM ANALYSIS, canopy, framed openings with jack beams, and accessories connectivity tests.
staad-pro-3d-generator/
├── app.py # Gradio web app (3D viewer + BOQ + download)
├── staad_generator/
│ ├── __init__.py # Package exports
│ ├── __main__.py # CLI entry point
│ ├── _version.py # Version string
│ ├── spec.py # BuildingSpec dataclass (incl. mezzanine fields)
│ ├── qrf.py # SIJCON QRF parser (regex + fuzzy + mezzanine)
│ ├── geometry.py # 3D frame geometry engine (incl. mezzanine)
│ ├── writer.py # STAAD .std file emitter (RATIO 0.95 targeting)
│ ├── validate.py # Structural integrity checks
│ ├── boq.py # BOQ estimator with regional costing
│ ├── ai_parser.py # LLM-assisted QRF parsing (HF Inference API)
│ ├── section_optimizer.py # Load-aware AISC W-shape section optimizer
│ ├── fea_verify.py # PyNite FEA verification + iterative optimizer
│ └── logutil.py # Logging configuration
├── tests/ # pytest suite (36 tests)
├── data/ # Competition QRF JSON files
├── output/ # Generated .std files
├── notebook.ipynb # Kaggle notebook (full demo)
├── WRITEUP.md # Competition writeup
├── docs/ # GitHub Pages live demo (static)
├── media_gallery/ # Screenshots & media assets
├── requirements.txt # Gradio/Plotly deps
└── pyproject.toml # Build config
python -m staad_generator [OPTIONS]
Options:
--data DIR Input JSON directory (default: ./data)
--output DIR Output .std directory (default: ./output)
--one FILE.json Convert a single file
-n, --dry-run Parse and validate only
-v, --verbose Show parsed spec summaries
-q, --quiet Minimal output
--force Always overwrite
--skip-fresher Skip if output newer than input
--verify Run PyNite FEA verification (UR + deflection check)
--version Show version
| Component | Dependencies |
|---|---|
| Core pipeline | Python 3.10+ (standard library only) |
| FEA verification | PyNiteFEA |
| Web app | gradio, plotly |
| Development | pytest, coverage |
