Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
cd4d149
Add
garvit000 Oct 15, 2025
fd3fcbd
Fix initial size of input dock and fix overflowing of items inside in…
garvit000 Oct 15, 2025
25d9a11
FIx: blank space in borderline and Improvised design and alignment
garvit000 Oct 15, 2025
fc770ab
Changed module name to "Highway Bridge Design"
garvit000 Oct 15, 2025
3582cba
Removed old fin plate connection constants
garvit000 Oct 15, 2025
0807baf
Add structure type
garvit000 Oct 15, 2025
6055aa8
Add handler for other structure selection
garvit000 Oct 15, 2025
6ca3ea6
Add footpath values
garvit000 Oct 15, 2025
a99693d
Add validators for inputs
garvit000 Oct 15, 2025
6fe64c1
Set validition limits and input values
garvit000 Oct 15, 2025
ce0c03d
Add project location handler and default values and tooltips for spec…
garvit000 Oct 15, 2025
087fff0
Additional inputs
garvit000 Oct 18, 2025
a4d2045
Added validators
garvit000 Oct 18, 2025
bebdc95
Initialize README with project details
garvit000 Oct 25, 2025
4801eb7
Enhance README with installation and usage sections
garvit000 Oct 25, 2025
ce1ffd3
Remove installation and usage sections from README
garvit000 Oct 25, 2025
c6dfcd7
Update UI
garvit000 Oct 27, 2025
3f19342
Merge branch 'master' of https://github.com/garvit000/osdag_bridge
garvit000 Oct 27, 2025
f9bf230
Enhance README with installation and usage sections
garvit000 Oct 28, 2025
1ee39d7
Change to dropdown selector to svg
garvit000 Oct 28, 2025
7e8c509
Add requirements.txt
garvit000 Oct 28, 2025
7e532ce
Merge branch 'master' of https://github.com/garvit000/osdag_bridge
garvit000 Oct 28, 2025
dfc94fa
__pycache__
garvit000 Nov 2, 2025
60ce541
__pycache__
garvit000 Nov 2, 2025
9b20c43
__pycache__
garvit000 Nov 2, 2025
2c80cdf
Redesign additional inputs and add output dock to the template page
garvit000 Nov 6, 2025
d1dfa10
Use svg image for dropdown
garvit000 Nov 6, 2025
36676b1
Boxes for each group
garvit000 Nov 6, 2025
ea057f3
Update output dock design
garvit000 Nov 6, 2025
874d119
Dropdown SVGs
garvit000 Nov 8, 2025
461df81
Fix: Tiles Position, Border, Dropdowns
garvit000 Nov 8, 2025
2daa1e7
Modify tabs in additional inputs
garvit000 Nov 8, 2025
b1786e9
Add lock.svg
garvit000 Nov 17, 2025
63512c5
update
garvit000 Nov 17, 2025
2c3aee8
Add new details
garvit000 Nov 22, 2025
9e1c5e0
Modify all sub types, add details and modifications to subtypes of ty…
garvit000 Nov 22, 2025
81a220d
-Restructured the files
mhsuhail00 Nov 25, 2025
5f40c8e
Update member properties first sub type
garvit000 Nov 29, 2025
5cd804d
Update template page
garvit000 Nov 29, 2025
80ba5ce
Apply local changes, remove Python cache from tracking
garvit000 Nov 29, 2025
1b6b34d
Merge remote main, remove pycache conflicts
garvit000 Nov 29, 2025
f63cc7c
Stop tracking pycache files
garvit000 Dec 2, 2025
f91de37
Revise usage instructions for running the app
garvit000 Dec 2, 2025
5f5e1b0
Stop tracking pycache files (retry with fixed .gitignore)
garvit000 Dec 2, 2025
9171259
Remove remaining pycache files
garvit000 Dec 2, 2025
0e72875
Fix .gitignore encoding and remove pycache
garvit000 Dec 2, 2025
7705def
Merge branch 'main' of https://github.com/garvit000/osdag_bridge
garvit000 Dec 2, 2025
5880661
Add 'legacy_src/' from commit '7705def9635f69b222f12a261cd246d4f52ffcea'
mhsuhail00 Dec 9, 2025
3eda1ce
Fetched osbridge work with commit history
mhsuhail00 Dec 9, 2025
eb3851b
Restructured the older work
mhsuhail00 Dec 12, 2025
44013eb
-Separated project_detail dialog
mhsuhail00 Dec 12, 2025
3e0476b
-Added logs_dock, animation, dock_control, menubar
mhsuhail00 Dec 12, 2025
0142877
Restyling additional inputs
mhsuhail00 Dec 12, 2025
421af42
Added Database
Aditya-Donde Dec 16, 2025
79bf24d
Implement girder properties loader and UI preview for girder sections
Sreejesh06 Dec 16, 2025
33a69a9
Refactor girder section preview and integrate rolled section preview …
Sreejesh06 Dec 18, 2025
b3fb148
Enhance RolledSectionPreview with CAD-style dimension annotations and…
Sreejesh06 Dec 18, 2025
5d0280c
Refactor girder details tab and enhance rolled section preview with i…
Sreejesh06 Dec 22, 2025
1c1542e
Add support for weld visibility toggle in RolledSectionPreview and ad…
Sreejesh06 Dec 29, 2025
b134be0
Add SVG resources and refactor InputDock for dynamic field generation
Sreejesh06 Dec 30, 2025
9f6c2f7
Enhance OutputDock and RolledSectionPreview for dynamic configuration…
Sreejesh06 Jan 6, 2026
aaa93c5
Enhance arrow geometry in RolledSectionPreview to 1/3 ratio
Sreejesh06 Jan 8, 2026
a4f3e45
refactored girder details and section inputs of member properties
Sreejesh06 Jan 9, 2026
25b4930
Refactor girder properties completed
Sreejesh06 Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*/__pycache__/
*.py[codz]
*$py.class

Expand Down Expand Up @@ -125,7 +125,7 @@ ipython_config.py
.pixi

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
*/__pypackages__/

# Celery stuff
celerybeat-schedule
Expand Down
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Primary GUI dependency
PySide6>=6.5.0
2 changes: 0 additions & 2 deletions src/osdagbridge/__init__.py

This file was deleted.

2 changes: 0 additions & 2 deletions src/osdagbridge/core/__init__.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,157 @@
"""Section property calculations (stub)."""
def area():
return 0.0
"""Access rolled girder properties sourced from the bundled SQLite table.

The beam geometry and sectional properties are stored inside
``core/data/ResourceFiles/Intg_osdag.sqlite`` and originate from
IS 808:1989 (Rev.). This module provides a thin loader that exposes the
data both as rich ``BeamSection`` records and in the minimal format that
the UI preview widgets currently expect.
"""

from __future__ import annotations

import sqlite3
from dataclasses import asdict, dataclass
from pathlib import Path
from typing import Any, Dict, Optional


@dataclass(frozen=True)
class BeamSection:
"""Representation of a rolled steel beam from the reference table."""

id: int
designation: str
mass_per_meter_kg: float
area_cm2: float
depth_mm: float
flange_width_mm: float
web_thickness_mm: float
flange_thickness_mm: float
flange_slope: Optional[float]
root_radius_r1_mm: Optional[float]
root_radius_r2_mm: Optional[float]
moment_of_inertia_zz_cm4: Optional[float]
moment_of_inertia_yy_cm4: Optional[float]
radius_of_gyration_z_cm: Optional[float]
radius_of_gyration_y_cm: Optional[float]
elastic_section_modulus_z_cm3: Optional[float]
elastic_section_modulus_y_cm3: Optional[float]
plastic_section_modulus_z_cm3: Optional[float]
plastic_section_modulus_y_cm3: Optional[float]
torsion_constant_cm4: Optional[float]
warping_constant_cm6: Optional[float]
source: Optional[str]
section_type: Optional[str]

@property
def outline_dict(self) -> Dict[str, float]:
"""Return the minimal dictionary expected by preview widgets."""

return {
"designation": self.designation,
"depth_mm": self.depth_mm,
"top_flange_width_mm": self.flange_width_mm,
"bottom_flange_width_mm": self.flange_width_mm,
"web_thickness_mm": self.web_thickness_mm,
"top_flange_thickness_mm": self.flange_thickness_mm,
"bottom_flange_thickness_mm": self.flange_thickness_mm,
}

def as_dict(self) -> Dict[str, Any]:
"""Expose the full record as a plain dictionary copy."""

return asdict(self)


# Backwards compatibility for callers importing RolledSection directly.
RolledSection = BeamSection

_DB_PATH = Path(__file__).resolve().parents[3] / "data" / "ResourceFiles" / "Intg_osdag.sqlite"
_BEAM_CACHE: Optional[Dict[str, BeamSection]] = None


def _text_or_none(value: Optional[str]) -> Optional[str]:
if value is None:
return None
text = value.strip()
return text or None


def _optional_float(value: Optional[float]) -> Optional[float]:
return None if value is None else float(value)


def _load_beam_sections() -> Dict[str, BeamSection]:
if not _DB_PATH.exists(): # pragma: no cover - defensive guard
raise FileNotFoundError(f"Beam property database not found at {_DB_PATH}")

with sqlite3.connect(_DB_PATH) as connection:
connection.row_factory = sqlite3.Row
rows = connection.execute("SELECT * FROM Beams").fetchall()

beam_map: Dict[str, BeamSection] = {}
for row in rows:
designation = row["Designation"]
beam = BeamSection(
id=int(row["Id"]),
designation=designation,
mass_per_meter_kg=float(row["Mass"]),
area_cm2=float(row["Area"]),
depth_mm=float(row["D"]),
flange_width_mm=float(row["B"]),
web_thickness_mm=float(row["tw"]),
flange_thickness_mm=float(row["T"]),
flange_slope=_optional_float(row["FlangeSlope"]),
root_radius_r1_mm=_optional_float(row["R1"]),
root_radius_r2_mm=_optional_float(row["R2"]),
moment_of_inertia_zz_cm4=_optional_float(row["Iz"]),
moment_of_inertia_yy_cm4=_optional_float(row["Iy"]),
radius_of_gyration_z_cm=_optional_float(row["rz"]),
radius_of_gyration_y_cm=_optional_float(row["ry"]),
elastic_section_modulus_z_cm3=_optional_float(row["Zz"]),
elastic_section_modulus_y_cm3=_optional_float(row["Zy"]),
plastic_section_modulus_z_cm3=_optional_float(row["Zpz"]),
plastic_section_modulus_y_cm3=_optional_float(row["Zpy"]),
torsion_constant_cm4=_optional_float(row["It"]),
warping_constant_cm6=_optional_float(row["Iw"]),
source=_text_or_none(row["Source"]),
section_type=_text_or_none(row["Type"]),
)
beam_map[designation] = beam

return beam_map


def _beams() -> Dict[str, BeamSection]:
global _BEAM_CACHE
if _BEAM_CACHE is None:
_BEAM_CACHE = _load_beam_sections()
return _BEAM_CACHE


def get_beam_profile(designation: str) -> Optional[BeamSection]:
"""Return the full beam profile record from the SQLite table."""

return _beams().get(designation)


def get_rolled_section(designation: str) -> Optional[Dict[str, float]]:
"""Return the rolled section outline expected by existing UI code."""

section = get_beam_profile(designation)
return section.outline_dict if section else None


def list_available_sections() -> Dict[str, BeamSection]:
"""Expose the cached beam table for downstream consumers."""

return dict(_beams())


__all__ = [
"BeamSection",
"RolledSection",
"get_beam_profile",
"get_rolled_section",
"list_available_sections",
]
Loading