Sprint 31/32 — 헌치 + 속성 패널 카테고리 재정리
Sprint 31: Haunch (데크 헌치). - SceneParams.haunch_depth (0~300mm, step 10mm). - 거더 상부와 데크 soffit 사이 600mm×haunch_d×span 블록을 경간별·거더별 자동 배치. COL_DECK 로 색상 통일. - 데크 위치: girder_h + slab_thickness → girder_h + haunch_depth + slab_thickness. 6군데(build_bridge_scene + build_selectable_scene 의 데크·신축이음·방호벽) 일괄 수정. - camber + skew 동시 적용. - UI: "헌치 (mm)" 슬라이더. Sprint 32: 속성 패널 재정리. - 누적 11개 슬라이더가 한 섹션에 섞여 혼잡 → 5개 CollapsingHeader 분리: · 상부구조 (경간·거더 관련 5항목) · 바닥판 (슬래브·헌치) · 선형·기하 (경사각·솟음) · 하부구조 (교각 형식) · 추가 부재 (가로보·신축이음·격벽 — 기존 유지) · 표시 (선형·투영 — 기존 유지) - ps!($ui, ...) 매크로 hygiene 수정: ui 명시적 매개변수화로 macro_rules 기본 hygiene 의 외부 캡처 문제 회피. - "경간" 라벨 중복(span_m vs span_count) 해소: "경간 길이"/"경간 수". ProjectFile: haunch_depth 필드 추가 (default 0.0). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -607,36 +607,26 @@ impl RenderState {
|
||||
ui.heading("속성 패널");
|
||||
ui.separator();
|
||||
|
||||
// Sprint 32: 속성 패널 카테고리 재정리.
|
||||
// ps!($ui, $label, $value, $range, $step) — $ui 를 명시해서 매크로 hygiene 회피.
|
||||
macro_rules! ps {
|
||||
($ui:expr, $lbl:expr, $v:expr, $r:expr, $s:expr) => {{
|
||||
$ui.label($lbl);
|
||||
if $ui.add(egui::Slider::new($v, $r).step_by($s)).changed() {
|
||||
dirty = true;
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
// ── 상부구조 (Superstructure) ──────────────────────────
|
||||
egui::CollapsingHeader::new("▼ 상부구조 (Superstructure)")
|
||||
.default_open(true)
|
||||
.show(ui, |ui| {
|
||||
macro_rules! ps {
|
||||
($lbl:expr, $v:expr, $r:expr, $s:expr) => {{
|
||||
ui.label($lbl);
|
||||
if ui.add(egui::Slider::new($v, $r).step_by($s)).changed() {
|
||||
dirty = true;
|
||||
}
|
||||
}};
|
||||
}
|
||||
ps!("경간 (m)", &mut p.span_m, 20.0..=80.0, 1.0);
|
||||
ps!("거더 수", &mut p.girder_count, 3..=7, 1.0);
|
||||
ps!("c/c 간격 (mm)", &mut p.girder_spacing, 1_500.0..=4_000.0, 100.0);
|
||||
ps!("거더 높이 (mm)", &mut p.girder_height, 1_000.0..=3_000.0, 100.0);
|
||||
ps!("슬래브 두께 (mm)",&mut p.slab_thickness, 150.0..=400.0, 10.0);
|
||||
// Sprint 26: 다경간 지원
|
||||
ps!("경간 수", &mut p.span_count, 1..=5, 1.0);
|
||||
ui.label("교각 형식");
|
||||
let prev_pt = p.pier_type;
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut p.pier_type, cimery_core::PierType::SingleColumn, "T형(단주)");
|
||||
ui.selectable_value(&mut p.pier_type, cimery_core::PierType::MultiColumn, "π형(다주)");
|
||||
});
|
||||
if p.pier_type != prev_pt { dirty = true; }
|
||||
// Sprint 27: 경사각 (Skew)
|
||||
ps!("경사각 (°)", &mut p.skew_deg, -30.0..=30.0, 1.0);
|
||||
// Sprint 30: 솟음 (Camber) 중앙 솟음량 [mm]
|
||||
ps!("솟음 (mm)", &mut p.camber_mid_mm, 0.0..=200.0, 5.0);
|
||||
ps!(ui, "경간 길이 (m)", &mut p.span_m, 20.0..=80.0, 1.0);
|
||||
ps!(ui, "경간 수", &mut p.span_count, 1..=5, 1.0);
|
||||
ps!(ui, "거더 수", &mut p.girder_count, 3..=7, 1.0);
|
||||
ps!(ui, "c/c 간격 (mm)", &mut p.girder_spacing, 1_500.0..=4_000.0, 100.0);
|
||||
ps!(ui, "거더 높이 (mm)", &mut p.girder_height, 1_000.0..=3_000.0, 100.0);
|
||||
|
||||
ui.label("단면 형식");
|
||||
let prev_sec = p.section_type;
|
||||
@@ -652,6 +642,35 @@ impl RenderState {
|
||||
if p.section_type != prev_sec { dirty = true; }
|
||||
});
|
||||
|
||||
// ── 바닥판 (Deck) ─────────────────────────────────────
|
||||
egui::CollapsingHeader::new("▼ 바닥판 (Deck)")
|
||||
.default_open(true)
|
||||
.show(ui, |ui| {
|
||||
ps!(ui, "슬래브 두께 (mm)",&mut p.slab_thickness, 150.0..=400.0, 10.0);
|
||||
ps!(ui, "헌치 (mm)", &mut p.haunch_depth, 0.0..=300.0, 10.0);
|
||||
});
|
||||
|
||||
// ── 선형·기하 (Geometry) ──────────────────────────────
|
||||
egui::CollapsingHeader::new("▼ 선형·기하 (Geometry)")
|
||||
.default_open(true)
|
||||
.show(ui, |ui| {
|
||||
ps!(ui, "경사각 (°)", &mut p.skew_deg, -30.0..=30.0, 1.0);
|
||||
ps!(ui, "솟음 (mm)", &mut p.camber_mid_mm, 0.0..=200.0, 5.0);
|
||||
});
|
||||
|
||||
// ── 하부구조 (Substructure) ───────────────────────────
|
||||
egui::CollapsingHeader::new("▼ 하부구조 (Substructure)")
|
||||
.default_open(true)
|
||||
.show(ui, |ui| {
|
||||
ui.label("교각 형식");
|
||||
let prev_pt = p.pier_type;
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut p.pier_type, cimery_core::PierType::SingleColumn, "T형(단주)");
|
||||
ui.selectable_value(&mut p.pier_type, cimery_core::PierType::MultiColumn, "π형(다주)");
|
||||
});
|
||||
if p.pier_type != prev_pt { dirty = true; }
|
||||
});
|
||||
|
||||
// ── Should Features (Sprint 19) ────────────────────────
|
||||
egui::CollapsingHeader::new("▼ 추가 부재 (Should Features)")
|
||||
.default_open(true)
|
||||
|
||||
Reference in New Issue
Block a user