## 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>
66 lines
1.9 KiB
TOML
66 lines
1.9 KiB
TOML
[workspace]
|
|
members = [
|
|
"crates/core",
|
|
"crates/ir",
|
|
"crates/dsl",
|
|
"crates/kernel",
|
|
"crates/incremental",
|
|
"crates/evaluator",
|
|
"crates/viewer",
|
|
"crates/usd",
|
|
"crates/ifc",
|
|
"crates/macros",
|
|
"crates/app",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
authors = ["kimminsung"]
|
|
license = "MIT OR Apache-2.0"
|
|
|
|
# ─── Shared dependencies ──────────────────────────────────────────────────────
|
|
[workspace.dependencies]
|
|
# Internal
|
|
cimery-core = { path = "crates/core" }
|
|
cimery-ir = { path = "crates/ir" }
|
|
cimery-dsl = { path = "crates/dsl" }
|
|
cimery-kernel = { path = "crates/kernel" }
|
|
cimery-incremental = { path = "crates/incremental" }
|
|
cimery-evaluator = { path = "crates/evaluator" }
|
|
cimery-usd = { path = "crates/usd" }
|
|
cimery-ifc = { path = "crates/ifc" }
|
|
cimery-macros = { path = "crates/macros" }
|
|
cimery-app = { path = "crates/app" }
|
|
|
|
# proc-macro support (Sprint 38)
|
|
syn = { version = "2", features = ["full", "extra-traits"] }
|
|
quote = "1"
|
|
proc-macro2 = "1"
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# Error handling
|
|
thiserror = "1"
|
|
|
|
# ID generation
|
|
uuid = { version = "1", features = ["v4", "serde"] }
|
|
|
|
# Logging
|
|
log = "0.4"
|
|
env_logger = "0.11"
|
|
|
|
# Testing (Sprint 20)
|
|
insta = { version = "1", features = ["json"] }
|
|
proptest = "1"
|
|
|
|
# ─── Profile tuning ───────────────────────────────────────────────────────────
|
|
[profile.dev]
|
|
opt-level = 1 # faster incremental builds; better perf for geometry ops
|
|
|
|
[profile.dev.build-override]
|
|
opt-level = 3 # fast proc-macro + bindgen compilation
|