Sprint 14~22 — egui 리본 UI + OcctKernel B-rep + 가로보/신축이음 + 선형 좌표 + USD 익스포트 + WASM + CI/CD + 테스트 4층

Sprint 14: egui TopBottomPanel 리본 + CollapsingHeader SidePanel (상부구조·추가부재·선형·프로젝트)
Sprint 15: IncrementalDb 전 Feature 타입 확장 (girder→7종), dirty-tracking 20 unit tests
Sprint 16: Gitea + GitHub Actions CI/CD (check/test/clippy/fmt + 멀티플랫폼 릴리스)
Sprint 17: AlignmentTransform + AlignmentScene — 선형 국소 프레임 → 세계 좌표 변환
Sprint 18: OcctKernel 교각(16각형 기둥+코핑) + 교대(흉벽+푸팅+날개벽) B-rep
Sprint 19: CrossBeamIR + ExpansionJointIR — IR/DSL/kernel/scene 전 계층, sweep_profile_flat_x
Sprint 20: 테스트 4층 — Layer1 insta 스냅샷(7종), Layer2 기하 불변량(19), Layer3 두-커널(7), Layer4 proptest(7) — 61 tests pass
Sprint 21: cimery-usd PureRustKernel 실제 기하 변환 + BridgeExporter 증분 캐시
Sprint 22: viewer wasm feature + wasm-bindgen/web-sys + GitHub Actions Cloudflare Pages 배포

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-15 08:18:06 +09:00
parent 81349c97d2
commit 1f9ca3a00f
37 changed files with 3569 additions and 259 deletions

View File

@@ -321,6 +321,62 @@ pub struct AbutmentIR {
pub material: cimery_core::MaterialGrade,
}
// ─── Cross Beam IR ────────────────────────────────────────────────────────────
/// Fully-resolved Cross Beam (가로보) specification. Sprint 19.
///
/// Cross beams provide lateral bracing between girders at regular intervals.
/// All dimensions in mm; station in m.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrossBeamIR {
pub id: FeatureId,
/// Station along alignment [m] — position of this cross beam set.
pub station: f64,
pub section: cimery_core::CrossBeamSection,
/// Web height (distance between flange centrelines) [mm].
pub web_height: f64,
/// Web plate thickness [mm].
pub web_thickness: f64,
/// Flange width [mm].
pub flange_width: f64,
/// Flange thickness [mm].
pub flange_thickness:f64,
/// Number of girder bays to span (= girder_count - 1).
pub bay_count: u32,
/// Girder c/c spacing [mm] — defines beam length per bay.
pub girder_spacing: f64,
pub material: cimery_core::MaterialGrade,
}
impl CrossBeamIR {
/// Total length of one cross beam [mm].
pub fn total_length_mm(&self) -> f64 {
self.bay_count as f64 * self.girder_spacing
}
}
// ─── Expansion Joint IR ───────────────────────────────────────────────────────
/// Fully-resolved Expansion Joint (신축이음) specification. Sprint 19.
///
/// Placed at the ends of a span or at pier locations to allow relative movement.
/// All dimensions in mm; station in m.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExpansionJointIR {
pub id: FeatureId,
/// Station along alignment [m].
pub station: f64,
pub joint_type: cimery_core::ExpansionJointType,
/// Opening gap width [mm] — clear distance at nominal position.
pub gap_width: f64,
/// Total transverse width [mm] — same as deck width.
pub total_width: f64,
/// Total assembly depth [mm].
pub depth: f64,
/// Design movement range [mm] — max expansion/contraction.
pub movement_range:f64,
}
// ─── Tests ────────────────────────────────────────────────────────────────────
#[cfg(test)]