Sprint 25: build_selectable_scene 의 SectionType::PscI 하드코딩 제거.
- p.section_type 에 따라 PscI / SteelBox 분기 (build_bridge_scene 과 동일 로직).
- 사용자가 단면 형식 전환 시 정상 반영.
Sprint 26: 다경간 + 교각 배치 (ParaWiki 교각 wiki Phase 1 MVP).
- SceneParams: span_count (1~5) + pier_type (SingleColumn/MultiColumn) 추가.
- span_m 의미 변경: 전체 교량 길이 → 경간당 길이. total = span_m × span_count.
- pier_ir_for_params() helper: 기본 사각 기둥·2m CSB·2.5m TB·5m column_height.
- build_bridge_scene / build_selectable_scene:
· 거더: 경간마다 독립 세트 (span_count × girder_count 개)
· 데크 슬래브: 전 구간 연속 1개
· 받침: 모든 지점 (교대 2 + 교각 span_count-1)
· 교각: 내부 지점 span_count-1 개 (새 기능)
· 교대: 양 끝 (z=-800, z=total_mm)
· 가로보: 경간마다 반복
· 신축이음: 모든 지점 (선택적)
- build_background_scene + scene_extents: total_mm 기준으로 ground·alignment 길이 확장.
- project_file: version=2, span_count·pier_type 필드 추가 (v1 호환 default 값).
- UI ribbon: "경간 수" 슬라이더 + "교각 형식" T/π 선택.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
사용자 스크린샷에서 타이틀이 'Sprint 4 — Full Bridge / OcctKernel' (구버전
문자열) 으로 표시됨 → 바이너리가 최근 수정(Ortho 카메라·받침 fix 등) 이후
재빌드되지 않은 채 실행 중임을 확인.
앞으로는 타이틀에 'cimery viewer [OcctKernel] — build 2026-04-15 HH:MM:SS'
형식으로 빌드 시각이 박혀서 실행 중 바이너리가 최신인지 즉시 판별 가능.
변경:
- crates/viewer/build.rs 추가:
· Windows: PowerShell Get-Date, Unix: date 명령어 사용.
· 실패 시 epoch 초로 폴백.
· rerun-if-changed=src 로 소스 변경 시 자동 갱신.
- lib.rs: BUILD_TS = env!("BUILD_TIMESTAMP") 상수 도입, 타이틀 포맷 변경.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
사용자 피드백: 거더 높이 변경 시 차이가 미미해 보이는 것은 원근 투영의
시각 효과일 수 있음. 평행(Orthographic) 투영으로 보면 거리 무관 실측
크기가 그대로 보여 모델이 실제로 변하는지 객관적으로 확인 가능.
변경:
- camera.rs: Projection enum (Perspective / Orthographic) 추가.
- Camera.projection 필드 + view_proj() 분기.
- Ortho 반높이 = radius * tan(fov_y/2) → 전환 시 시각 스케일 일치.
- toggle_projection() 메서드.
- lib.rs:
- 카메라 초기값 projection: Perspective.
- 키 O → 투영 토글.
- egui 표시 섹션에 투영 버튼 추가 (◇ Perspective / ■ Ortho).
사용: 거더 높이 슬라이더 조정 → Apply → O 키로 Ortho 전환 → 모델 치수
실측 확인.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[원인]
scene_extents 가 반환하는 BB 는 지반·교대 푸팅까지 포함 →
top_y = girder_h + slab + 200
bot_y = -(girder_h + 4000)
center Y = (top_y + bot_y)/2 = (slab - 3800)/2 ≈ -1790mm (지반 아래 1.8m)
더 큰 문제: top/bot 이 girder_h 에 따라 같은 비율로 변해서 center Y 는 고정.
→ girder_h 가 바뀌어도 카메라 타겟은 거더 중심을 추적하지 않음.
→ 거더가 실제론 커졌어도 카메라가 항상 지반 아래를 보기 때문에, 슬래브만
화면 위쪽으로 멀어지고 거더는 그대로 있는 것처럼 인식됨.
[수정]
- rebuild_mesh(): zoom_extents 에 전달할 Y 범위를 [0, girder_h+slab] 로 제한
→ target Y = (girder_h + slab)/2, 거더·데크 중심으로 카메라가 추적.
- 초기 카메라: cy 를 scene_extents 중심 대신 (girder_h+slab)/2 로 설정.
결과: 거더 높이를 올리면 카메라 target 도 비례해 위로 이동 → 거더가 화면
중앙에서 자라는 것이 보이고, 슬래브는 그 위쪽에 붙어 함께 올라감.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[버그 1] Apply 후 카메라 자동 피트 누락
- rebuild_mesh() 에서 scene_extents 만 업데이트하고 camera target/radius 는
갱신하지 않아, 거더 높이를 올려도 카메라가 구 씬 중심을 가리켜 변화가 안 보임.
- 수정: rebuild_mesh() 끝에 camera.zoom_extents(mn, mx) + update_camera() 추가.
[버그 2] bearing.rs plan_length / plan_width 방향 오류
- plan_length(350mm, 경간 방향)를 profile X(횡방향)에, plan_width(450mm, 횡방향)를
sweep Z(경간방향)에 사용 → 받침이 90° 회전된 치수로 생성됨.
- Z 센터링 오프셋도 plan_width/2=225mm 로 계산 → 올바른 plan_length/2=175mm 보다
50mm 더 교대 밖으로 튀어나옴 (스크린샷의 부유 블록).
- 수정:
· bearing.rs: trans_dim=plan_width(profile X), span_dim=plan_length(sweep Z)
· bridge_scene.rs: build_bridge_scene + build_selectable_scene 의 Z 오프셋을
z - 225 → z - plan_length/2 = z - 175 로 변경.
cargo check --workspace 0 errors/warnings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sprint 9 (bridge_scene):
- 지면(Ground plane): 교량 하부 어두운 올리브 색 평면
- 선형(Alignment): 주황색 얇은 봉 (Z축 방향 경간 전체)
- 색상 추가: COL_GROUND, COL_ALIGNMENT
Sprint 10 (selection):
- FeatureDraw: 피처별 GPU 버퍼 + AABB + 선택 상태
- build_selectable_scene(): 거더/슬래브/받침/교대 개별 메시
- ray_aabb(): 레이-AABB 교차 판정 (좌클릭 피킹)
- egui 패널: 선택된 피처 이름 오렌지색 표시
- 선택 하이라이트는 Sprint 11에서 색상 override로 구현
cargo check 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
kds_standard() 대신 SceneParams.girder_height를 PscISectionParams.total_height에 연결.
슬래브 위치와 거더 단면 높이가 이제 함께 변경됨.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sprint 6 (Alignment JSON 로더):
- AlignmentIR: from_file(), position_at(station), total_length_m()
- AlignmentStation, AlignmentSpecs in ir crate
- alignments/BR-001-test.json: 40m 직선 테스트 선형
Sprint 7 (CSV 라운드트립):
- csv_template.rs: girder_params() 레지스트리
- girder_to_csv_template(): 헤더+기본값 CSV 출력
- girder_from_csv(): CSV → Vec<GirderIR> 파싱
- 테스트 3개 (template, multi-row, invalid span)
Sprint 8 (IncrementalDb 스캐폴드):
- incremental_scene.rs: IncrementalBridge<K>
- 안정적 girder ID (슬롯 기반), DB 캐시 → X-translate
- Sprint 9에서 전체 Feature IncrementalDb 통합 예정
cargo test 60개 전부 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Windows Malgun Gothic 폰트 로드 (한글 지원)
- param_slider! 매크로: drag_released() / lost_focus() 시 자동 rebuild_mesh()
- "▶ 적용 (Apply)" 버튼은 manual fallback으로 유지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- egui_wgpu::Renderer:🆕 depth format None (UI는 depth 불필요)
- bridge_scene.rs: SPAN_M 등 snake_case로 전환
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SceneParams: 경간/거더수/간격/높이/슬래브두께 — 실시간 변경 가능
- egui SidePanel(좌측): 슬라이더 편집 → ▶ 적용 → 씬 재생성
- rebuild_mesh(): 파라미터 변경 시 GPU 버텍스·인덱스 버퍼 재생성
- wgpu 22 + egui-wgpu 0.29: forget_lifetime() 로 render pass 전달
- 3D 인코더와 egui 인코더 분리 (wgpu 22 lifetime 호환)
- build_bridge_scene(&SceneParams): 경간·거더수·간격 파라메트릭
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bearing.rs: X 중심, Y 하방향 (-h to 0) 기하학 수정
bridge_scene.rs: 받침 X 오프셋 제거 (girder 정렬)
Mesh: colors 필드 추가 + recolor() 메서드
sweep.rs / occt.rs: 기본 콘크리트 색 자동 채움
bridge_scene: 부재별 색상 (거더/슬래브/받침/교대)
shader.wgsl: base_color 입력 → 조명 계산에 적용
선택(Selection) 기능은 계획대로 별도 Sprint에 구현.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
viewer/bridge_scene.rs: BridgeScene compositor
- 5× PSC-I Girder (2500mm c/c)
- DeckSlab (12000mm, 220mm thick, top of girders)
- 10× Elastomeric Bearing (5 per abutment end)
- 2× ReverseT Abutment (start & end)
- sweep::merge_meshes로 단일 메시 합성
- scene_extents()로 카메라 자동 배치
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
StubKernel(박스) → PureRustKernel(실제 PSC-I 14-vertex 스위프).
플랜지·웹·헌치 형상 정상 렌더 확인 (스크린샷).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>