Skip to content

ladyFaye1998/staad-pro-3d-generator

Repository files navigation

STAAD.Pro 3D Generator Pipeline

Python  Gradio  Plotly  Demo  License

Typing SVG

 


 

✦ About

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.

 

 

Capability Detail
Geometry Full portal-frame model Columns, rafters, purlins, girts, braces, endwall cols, crane beams, portal bracing, mezzanine floors, floor joists, canopy, framed openings, jack beams, cage ladder
Tapered PEB tapered I-sections Auto-generated STAAD TAPERED property for columns, rafters & haunches
FEA PyNite FEA verification Iterative section optimization with UR < 1.0 and deflection checks
Loads 10 primary load cases Dead, Live, Wind ±Z ±X, Seismic ±X, Crane (on crane beams), Mezz Dead/Live
Combos LRFD per ASCE 7 / IS 875 17+ factored combinations including SLS + mezzanine + longitudinal wind
UR UR targeting 0.9–1.0 SELECT RATIO 0.95 for optimal material utilization
AI LLM-assisted parsing Hugging Face Inference API extracts mezzanine from free text
Optimizer Load-aware sections AISC W-shape catalog + simplified portal analysis
DFF Deflection checks Parsed L/xxx limits applied per member group (vertical, lateral, purlin)
BOQ BOQ with costing Tonnage + regional cost estimate (₹/kg or $/kg)
3D Interactive wireframe Color-coded Plotly 3D model (rotate, zoom, pan)
QRF Robust input handling Fuzzy regex parsing of mm/m, bracket notation, c/c, wind speed

 

 


 

✦ Demo

Try it now — Live 3D Demo  — no installation required. Select any building, rotate the 3D wireframe, explore BOQ and .std output.

Live Demo Screenshot

 


 

✦ Quick Start

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

 


 

✦ Architecture

%%{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
Loading

 


 

✦ Results

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.

 


 

✦ Project Structure

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

 


 

✦ CLI Reference

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

 


 

✦ Requirements

Component Dependencies
Core pipeline Python 3.10+ (standard library only)
FEA verification PyNiteFEA
Web app gradio, plotly
Development pytest, coverage

 


 

✦ License

MIT

 

About

QRF JSON to production-ready STAAD.Pro .std files for PEB structures — 3D wireframe viewer, Unity Ratio, Serviceability, BOQ estimation. Kaggle competition entry.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors