Sprint 29/30 — 지점부 격벽 + 거더 솟음

Sprint 29: Diaphragm (지점부 격벽).
- SceneParams.show_diaphragms 토글 (default true).
- 모든 지점(교대+교각) 에서 인접 거더 사이 RC 벽 배치:
  · 두께(span 방향): 300mm
  · 높이: girder_h (거더 soffit ~ top)
  · 폭: spacing - 250mm (web clearance 양쪽 125mm)
  · 지점 Z 기준 중앙 배치, skew 회전 동시 적용
- build_bridge_scene + build_selectable_scene 양쪽 구현.
- COL_DIAPHRAGM 색상 추가 (concrete 계열).
- UI: "격벽 (Diaphragm)" 체크박스.

Sprint 30: Camber (거더 솟음).
- SceneParams.camber_mid_mm (0~200mm, step 5mm) 추가.
- apply_camber_mesh(mesh, z0, z1, mid_mm) 헬퍼:
  u = z - z0 ∈ [0, span], y_off = 4·mid·u·(span-u)/span² (포물선).
  지점(u=0 또는 u=span) 에서는 0, 중앙 u=span/2 에서 최대 mid.
- 거더·데크에 경간마다 독립 적용. 다경간 교량도 경간별 정확한 solog.
- UI: "솟음 (mm)" 슬라이더.

ProjectFile: show_diaphragms + camber_mid_mm 필드 (default 값으로 v2 호환).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-15 14:01:58 +09:00
parent a2c6e8ee1f
commit 0013182835
4 changed files with 118 additions and 10 deletions

View File

@@ -38,6 +38,12 @@ pub struct ProjectFile {
/// Sprint 27: 경사각 [deg]
#[serde(default)]
pub skew_deg: f32,
/// Sprint 29: 격벽 표시
#[serde(default = "default_true")]
pub show_diaphragms: bool,
/// Sprint 30: 솟음(Camber) 중앙값 [mm]
#[serde(default)]
pub camber_mid_mm: f32,
}
fn default_true() -> bool { true }
@@ -69,6 +75,8 @@ impl ProjectFile {
_ => "single".into(),
},
skew_deg: p.skew_deg,
show_diaphragms: p.show_diaphragms,
camber_mid_mm: p.camber_mid_mm,
}
}
@@ -93,6 +101,8 @@ impl ProjectFile {
_ => cimery_core::PierType::SingleColumn,
},
skew_deg: self.skew_deg,
show_diaphragms: self.show_diaphragms,
camber_mid_mm: self.camber_mid_mm,
}
}