P2 로드맵 (Gitea #4) 첫 단계. 교량·토목 현재 표준인 IFC4X3 Add2 로 익스포트. ## cimery-ifc 크레이트 구성 - src/guid.rs: IfcGloballyUniqueId 생성. UUIDv4 128비트 → buildingSMART base64 22자 인코딩. - src/writer.rs: STEP Part21 텍스트 writer. IfcWriter(alloc/emit/write/finish), Ref(#N), lit, real, real3, ref_list. HEADER 블록(FILE_DESCRIPTION/FILE_NAME/FILE_SCHEMA='IFC4X3_ADD2') + DATA 블록. - src/bridge_export.rs: 교량 하이레벨 API. BridgeExportParams(span·girder·slab·bearing 치수) + export_bridge() -> String. ## 생성 엔티티 (Phase 1) 계층: IfcProject └ IfcRelAggregates → IfcSite └ IfcRelAggregates → IfcBridge └ IfcRelContainedInSpatialStructure → elements[] 원소: - IFCBEAM × (span_count × girder_count) — 거더 - IFCSLAB × 1 — 데크 슬래브 (전 구간 연속) - IFCCOLUMN × (span_count-1) — 피어 기둥 (내부 지점만) - IFCFOOTING × 2 — 교대 (양 끝) - IFCBEARING × (span_count+1)×girder_count — IFC4X3 신규 엔티티 형상 단순화(Phase 1): - IFCEXTRUDEDAREASOLID + IFCRECTANGLEPROFILEDEF 일률. - Phase 2 에서 IFCARBITRARYCLOSEDPROFILEDEF 로 PSC-I 14점 단면 매핑 예정. 단위: IFCSIUNIT mm (+ radian·squareMetre·cubicMetre·second·kilogram). 배치: IfcLocalPlacement 월드 원점 기준 (선형·skew·camber 는 Phase 2). ## 테스트 10개 통과: - guid: 22자 고정, 동일 UUID 동일 GUID, 문자셋 유효성. - writer: shell 구조, REAL 포맷, ref_list 포맷. - bridge_export: 단경간 핵심 엔티티 포함, 다경간 피어 개수, 거더 수 일치, STEP 구조. ## 통합 - workspace Cargo.toml: crates/ifc 추가. - cimery-app: export_ifc_default IPC 커맨드 (tauri dialog .ifc save). - main.rs invoke_handler 등록. Phase 2 로드맵(후속 스프린트): - IfcAlignment + IfcLinearPlacement (선형 좌표) - 실제 단면 profile (PSC-I · SteelBox) - Pset_BeamCommon·Pset_BearingCommon - IfcPile·IfcExpansionJoint·IfcKerb(방호벽) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
1.7 KiB
TOML
59 lines
1.7 KiB
TOML
[workspace]
|
|
members = [
|
|
"crates/core",
|
|
"crates/ir",
|
|
"crates/dsl",
|
|
"crates/kernel",
|
|
"crates/incremental",
|
|
"crates/evaluator",
|
|
"crates/viewer",
|
|
"crates/usd",
|
|
"crates/ifc",
|
|
"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-app = { path = "crates/app" }
|
|
|
|
# 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
|