Sprint 3 — Must Feature 5종 추가 (상부→하부 순서)
상부 구조물: - DeckSlabIR + DeckSlabBuilder + 기하학 (직사각형 슬래브 스위프) 연결부: - BearingIR + BearingBuilder (카탈로그 기반, KDS 기본값 포함) 하부 구조물: - PierIR + PierBuilder + 기하학 (다주 지원, 코핑 포함) - AbutmentIR + AbutmentBuilder + 기하학 (흉벽 + 기초 + 날개벽) core에 BearingType·PierType·ColumnShape·AbutmentType 열거형 추가 kernel: sweep.rs 공유 모듈 (sweep_profile_flat·box·prism·merge) psc_i.rs → sweep.rs 의존으로 리팩터 GeomKernel trait에 4개 메서드 추가 (상부→하부 문서화 주석) cargo test 57개 전부 통과 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -138,6 +138,112 @@ pub struct SteelPlateIParams {
|
||||
pub web_thickness: f64,
|
||||
}
|
||||
|
||||
// ─── Deck Slab IR ─────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Deck Slab (바닥판) specification.
|
||||
/// Structural dimensions in mm, alignment in m.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DeckSlabIR {
|
||||
pub id: FeatureId,
|
||||
pub station_start: f64, // m
|
||||
pub station_end: f64, // m
|
||||
/// Width left of alignment centreline [mm].
|
||||
pub width_left: f64,
|
||||
/// Width right of alignment centreline [mm].
|
||||
pub width_right: f64,
|
||||
/// Slab thickness [mm].
|
||||
pub thickness: f64,
|
||||
/// Haunch depth over girder top flange [mm].
|
||||
pub haunch_depth: f64,
|
||||
/// Cross-slope [%]. Positive = right side lower.
|
||||
pub cross_slope: f64,
|
||||
pub material: cimery_core::MaterialGrade,
|
||||
}
|
||||
|
||||
impl DeckSlabIR {
|
||||
pub fn span_m(&self) -> f64 { self.station_end - self.station_start }
|
||||
pub fn span_mm(&self) -> f64 { self.span_m() * 1_000.0 }
|
||||
pub fn total_width(&self) -> f64 { self.width_left + self.width_right }
|
||||
}
|
||||
|
||||
// ─── Bearing IR ───────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Bearing (받침) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct BearingIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m — position along alignment
|
||||
pub bearing_type: cimery_core::BearingType,
|
||||
/// Dimension along span direction [mm].
|
||||
pub plan_length: f64,
|
||||
/// Dimension transverse to span [mm].
|
||||
pub plan_width: f64,
|
||||
pub total_height: f64, // mm
|
||||
pub capacity_vertical: f64, // kN
|
||||
}
|
||||
|
||||
// ─── Cap Beam IR ──────────────────────────────────────────────────────────────
|
||||
|
||||
/// Pier cap beam (교각 코핑).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct CapBeamIR {
|
||||
pub length: f64, // mm — total along transverse
|
||||
pub width: f64, // mm — along span
|
||||
pub depth: f64, // mm — vertical
|
||||
pub cantilever_left: f64, // mm — overhang beyond outermost column
|
||||
pub cantilever_right: f64,
|
||||
}
|
||||
|
||||
// ─── Pier IR ──────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Pier (교각) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct PierIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m
|
||||
pub skew_angle: f64, // degrees — deviation from normal
|
||||
pub pier_type: cimery_core::PierType,
|
||||
pub column_shape: cimery_core::ColumnShape,
|
||||
pub column_count: u32,
|
||||
pub column_spacing: f64, // mm — centre-to-centre
|
||||
/// Diameter (circular) or width (rectangular) [mm].
|
||||
pub column_diameter: f64,
|
||||
/// Depth for rectangular section [mm]; ignored for circular.
|
||||
pub column_depth: f64,
|
||||
pub column_height: f64, // mm — footing top to cap beam soffit
|
||||
pub cap_beam: CapBeamIR,
|
||||
pub material: cimery_core::MaterialGrade,
|
||||
}
|
||||
|
||||
// ─── Wing Wall IR ─────────────────────────────────────────────────────────────
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct WingWallIR {
|
||||
pub length: f64, // mm — along wing wall axis
|
||||
pub height: f64, // mm — at connection with breast wall
|
||||
pub thickness: f64, // mm
|
||||
}
|
||||
|
||||
// ─── Abutment IR ──────────────────────────────────────────────────────────────
|
||||
|
||||
/// Fully-resolved Abutment (교대) specification.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct AbutmentIR {
|
||||
pub id: FeatureId,
|
||||
pub station: f64, // m
|
||||
pub skew_angle: f64, // degrees
|
||||
pub abutment_type: cimery_core::AbutmentType,
|
||||
pub breast_wall_height: f64, // mm
|
||||
pub breast_wall_thickness: f64, // mm
|
||||
pub breast_wall_width: f64, // mm — transverse
|
||||
pub footing_length: f64, // mm — along span
|
||||
pub footing_width: f64, // mm — transverse
|
||||
pub footing_thickness: f64, // mm
|
||||
pub wing_wall_left: WingWallIR,
|
||||
pub wing_wall_right: WingWallIR,
|
||||
pub material: cimery_core::MaterialGrade,
|
||||
}
|
||||
|
||||
// ─── Tests ────────────────────────────────────────────────────────────────────
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user