사용자 스크린샷에서 타이틀이 '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>
CLAUDE.md에서 Revit API 섹션 제거 → Output/guides/revit-api-guide.md로 분리.
CLAUDE.md 권위 문서 테이블에 포인터 한 줄만 유지.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
12개 주제 병렬 조사 기반 결정 통합:
UI(Leptos+wgpu), IFC(ifc-lite-core), CI/CD(Gitea+GH 미러),
USD(Codeless schema), Alignment 단계 도입, WASM plugin 3단계,
Feature 카탈로그, FEM(MIDAS), LOD 300, 리본 12탭,
선택/필터, 설정 3계층 모델.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
cimery Feature DSL의 20개 기본 결정 정리.
Rust 내장 DSL + IR + salsa 증분 + 별도 evaluator,
CSV 라운드트립 UX, AI·diff 친화 저장 구조.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
도구 명칭을 cimery(Civil + BIM + -ery)로 확정. 웹(PWA)·데스크톱(Tauri) 듀얼
타깃의 Rust 기반 스택을 잠정 확정하고 근거와 후속 결정 항목을 ADR로 기록.
- 기하 커널: OpenCascade.js(웹) / opencascade-rs(데스크톱) 이원화, GeomKernel trait 추상화
- 렌더: wgpu → WebGPU
- 순수 Rust 공유 모듈: LPG 증분 엔진, FBM Feature, 선형·LRS
- 기존 C# 엔진은 알고리즘·지식만 승계
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
긴 한국어 제목 구분성 향상을 위해 각 항목에 좌측 색상 띠와 점선 구분선 추가.
빌드 시 quartz-custom/custom.scss가 Quartz 기본 custom.scss를 덮어씀.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
첫 배포 시 프로젝트가 없어서 실패했던 문제 수정.
배포 전에 project create를 시도하고, 이미 존재하면 continue-on-error로 통과.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
wiki/ 변경 시 Quartz 4로 빌드하여 parawiki.pages.dev에 자동 배포.
Gitea Actions Runner가 Quartz 클론 → 의존성 설치 → content 교체 → 빌드 → wrangler deploy.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- wiki/ 초기 페이지 추가 (index, log, 주요 개념 9종)
- Output/, wiki/ 하위 CLAUDE.md 규칙 파일 추가
- .gitignore 추가 (.obsidian, .claude, raw, Backup 등 제외)
- CLAUDE.md 프로젝트 규칙 갱신
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ParaWiki는 AI가 읽고 활용할 파라메트릭 모델링 지식 저장소로, 최종 산출물은
토목용 파라메트릭 모델링 도구. 이번 커밋은 프로젝트의 핵심 맥락과 AI 작업 지침을 확정.
- MVP: 거더교, 설계자·시공사 대상, 철근 설계는 v2 이후
- 잠정 설계 원칙 3가지(비패밀리/증분 인터랙티브/선형·GIS)
- 저장소 작성 규칙: 한국어+영어 병기, AI 우선 구조
Refs #1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>