Commit Graph

9 Commits

Author SHA1 Message Date
minsung
0e4701de79 Sprint 36~39 — IFC Alignment/Camber + proc-macro 스캐폴딩 + 변단면 거더
## Sprint 36: IfcAlignment (IFC Phase 3b)
- write_straight_alignment(): 직선 horizontal(.LINE.) + 평지
  vertical(.CONSTANTGRADIENT.) 세그먼트 + IfcRelNests 계층.
- IfcAlignmentSegment × IfcAlignmentHorizontalSegment × IfcAlignmentVerticalSegment.
- Site aggregate 에 Bridge 와 Alignment 동시 포함.

## Sprint 37: IFC 거더 Camber 반영
- BridgeExportParams.camber_mid_mm 추가.
- camber > 0 일 때: 거더 1 개를 CAMBER_SEGMENTS(10) 세그먼트로 분할, 각 세그먼트
  Y 에 포물선 값 적용 → 곡선 거더 근사. Pset 는 첫 세그먼트에 한 번만 부착.
- viewer scene_params_to_ifc() 에서 camber_mid_mm 매핑.

## Sprint 38: cimery-macros 크레이트 (proc-macro 스캐폴딩)
- 신규 크레이트, proc-macro = true, deps: syn/quote/proc-macro2.
- #[derive(ParamSummary)] 구현:
  · 구조체 named field 의 PARAM_COUNT (usize) + PARAM_NAMES (&[&str]) 생성.
  · 선언 순서 보존, 빈 구조체 지원, tuple/enum 은 컴파일 에러.
- 테스트 3개 (tests/derive_test.rs).
- ADR-002 D 로드맵: #[param(unit, range, default)] 전면 attribute 는 후속.

## Sprint 39: 변단면 거더 (Variable Depth)
- SceneParams.variable_depth_mm (0~800mm) 추가.
- apply_variable_depth(mesh, z0, z1, max, girder_h):
  · lift(u) = 4·max·u·(span-u)/span²  (중앙에서 최대)
  · y_new = y + lift(u)·(1 - y/h)
  · 상면 y=h 는 고정, 소핏 y=0 을 최대 lift 만큼 올림. 연속교 중앙부
    web 축소 관례와 정합. camber 와 독립 조합 가능.
- build_bridge_scene / build_selectable_scene 거더 생성 루프에 각각 적용
  (거더 local 좌표계에서 먼저 → translate → camber 순).
- UI "변단면 (mm)" 슬라이더 (선형·기하 섹션).
- ProjectFile variable_depth_mm 필드 (default 0).

모든 테스트 통과: kernel 18 + ifc 20 + macros 3.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 19:48:07 +09:00
minsung
693c95dc6f Sprint 35 — 뷰어 IFC 익스포트 연결 + Pset_BeamCommon
## 뷰어 통합
- `cimery-viewer` → `cimery-ifc` 의존성 추가.
- `project_file::scene_params_to_ifc()` 변환 함수:
  SceneParams 의 모든 파라미터(경간 수·교각 형식·skew·헌치·단면 종류·신축이음)
  를 BridgeExportParams 로 전부 매핑.
- egui 프로젝트 섹션에 "📤 IFC4X3 익스포트" 버튼.
  현재 파라미터 상태로 즉시 `projects/bridge.ifc` 생성.
- `project_file::default_ifc_path()` 헬퍼.

## Pset_BeamCommon (IFC Phase 3a)
- `write_pset_beam_common()`: 4개 속성
  · Reference (IFCIDENTIFIER) — 거더 라벨
  · Span (IFCLENGTHMEASURE) — mm
  · LoadBearing (IFCBOOLEAN) — .T.
  · IsExternal (IFCBOOLEAN) — .F.
- IFCRELDEFINESBYPROPERTIES 로 각 IFCBEAM 에 연결.
- `IfcSectionKind` public re-export (viewer 에서 직접 참조).

## 테스트
- pset_beam_common_attached_to_girders 추가. 17개 전체 통과.
- cargo check --workspace --features occt: 0 errors.

Phase 3 남은 로드맵:
- IfcAlignment + IfcLinearPlacement
- Camber 반영 (현재 직선 girder 만)
- Pset_BearingCommon, Pset_SlabCommon
- IfcElementAssembly 로 Pier(column+capbeam) 그룹화

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 19:31:36 +09:00
minsung
94ce89093f 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>
2026-04-15 15:19:00 +09:00
minsung
0013182835 Sprint 29/30 — 지점부 격벽 + 거더 솟음
Sprint 29: Diaphragm (지점부 격벽).
- SceneParams.show_diaphragms 토글 (default true).
- 모든 지점(교대+교각) 에서 인접 거더 사이 RC 벽 배치:
  · 두께(span 방향): 300mm
  · 높이: girder_h (거더 soffit ~ top)
  · 폭: spacing - 250mm (web clearance 양쪽 125mm)
  · 지점 Z 기준 중앙 배치, skew 회전 동시 적용
- build_bridge_scene + build_selectable_scene 양쪽 구현.
- COL_DIAPHRAGM 색상 추가 (concrete 계열).
- UI: "격벽 (Diaphragm)" 체크박스.

Sprint 30: Camber (거더 솟음).
- SceneParams.camber_mid_mm (0~200mm, step 5mm) 추가.
- apply_camber_mesh(mesh, z0, z1, mid_mm) 헬퍼:
  u = z - z0 ∈ [0, span], y_off = 4·mid·u·(span-u)/span² (포물선).
  지점(u=0 또는 u=span) 에서는 0, 중앙 u=span/2 에서 최대 mid.
- 거더·데크에 경간마다 독립 적용. 다경간 교량도 경간별 정확한 solog.
- UI: "솟음 (mm)" 슬라이더.

ProjectFile: show_diaphragms + camber_mid_mm 필드 (default 값으로 v2 호환).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 14:01:58 +09:00
minsung
471fac53b3 Sprint 27/28 — Skew + 방호벽 + 관련 메타 갱신
Sprint 27: 경사각(Skew) 지원.
- SceneParams.skew_deg (-30°~30°) 추가.
- rotate_y_around_z(mesh, rad, pivot_z) 헬퍼: Y축 중심, 임의 Z pivot 회전.
  정점·법선 동시 회전.
- 적용 대상: 교대·교각·받침·신축이음 (각 지점 pivot_z 기준).
- 거더·데크는 직선 유지 (precast 거더 스큐 교량의 일반 관례).
- UI: "경사각(°)" 슬라이더.

Sprint 28: 방호벽(Parapet) MVP.
- 데크 양 엣지(half_w, -half_w) 에 1200mm×500mm RC 박스 전 구간 연속 배치.
- Y 기준: 데크 상면 (girder_h + slab_thickness).
- 색: COL_ABUTMENT 재사용 (콘크리트 브라운).
- build_bridge_scene / build_selectable_scene 양쪽 추가.
  선택 가능 씬에서는 "방호벽 (좌/우)" 라벨.

ProjectFile v2: skew_deg 필드 (default 0.0).
PROGRESS.md: Sprint 25~28 정리.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 12:42:21 +09:00
minsung
b37a50c90c Sprint 25/26 — 단면 분기 수정 + 다경간 + 피어 배치
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>
2026-04-15 12:37:14 +09:00
minsung
824c18610b Sprint 23/24 — Tauri v2 앱 래핑 + salsa 0.16 증분 쿼리 백엔드
All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 34s
Sprint 23: cimery-app을 Tauri v2 앱으로 전환.
- tauri.conf.json, capabilities/default.json, frontend/index.html 추가
- src/commands.rs: 7개 IPC 커맨드 (launch_viewer, 프로젝트 관리, USD/CSV 익스포트)
- 뷰어 사이드카: std::process::Command 방식 (PATH + exe-dir 탐색)
- release.yml: 3단계 멀티플랫폼 릴리스 워크플로로 교체

Sprint 24: cimery-incremental에 salsa 0.16 백엔드 추가.
- salsa_db.rs: BridgeQueryGroup + SalsaIncrementalDb<K>
- --features salsa-backend 로 활성화 (기본값: 수동 tracking, WASM 안전)
- IR 전 구조체 + Mesh + KernelError에 PartialEq/Eq 추가
- 테스트 20개 전부 통과 (수동 12 + salsa 8)
- cargo check --workspace 0 errors/warnings

기타: viewer/dsl 컴파일 경고 제거, wiki 실행 가이드 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 09:09:47 +09:00
minsung
1f9ca3a00f 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>
2026-04-15 08:18:06 +09:00
minsung
81349c97d2 Sprint 11/12/13 — 선택하이라이트 + 저장/로드 + Tauri앱 스켈레톤
Sprint 11 (Selection highlight + 단면 UI):
- FeatureDraw: CPU 정점 저장, update_highlight() — 선택 시 yellow-orange
- 렌더 루프: background mesh(지면+선형) + 피처별 독립 draw call 분리
- SceneParams: GirderSectionType (PscI / SteelBox), show_alignment
- egui: 단면형식 ComboBox, 선형표시 checkbox
- SteelBox 단면 지원 (span 비례 자동 치수)
- build_background_scene(): 지면+선형만 반환

Sprint 12 (Project save/load):
- project_file.rs: ProjectFile struct, to_params/from_params, save/load JSON
- egui: 💾 저장 / 📂 불러오기 버튼
- projects/ 폴더 자동 생성

Sprint 13 (Tauri app skeleton):
- crates/app/: Cargo.toml + main.rs (Tauri v2 통합 scaffold)
- 기동 시 PureRustKernel 동작 검증
- Tauri setup checklist 주석으로 문서화
- workspace에 cimery-app 추가

cargo check --workspace 통과

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:59:11 +09:00