From e32c09df2d4d70cc89945eca6ed02a290c59508f Mon Sep 17 00:00:00 2001 From: minsung Date: Thu, 16 Apr 2026 08:37:11 +0900 Subject: [PATCH] =?UTF-8?q?=ED=92=88=EC=A7=88=20=EA=B0=95=ED=99=94=20?= =?UTF-8?q?=E2=80=94=20ADR-004=20+=20IFC=20snapshot=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20+=20helper=20=EC=9C=A0=EB=8B=9B=20+=20clippy=20?= =?UTF-8?q?=EA=B2=BD=EA=B3=A0=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## ADR-004 (Output/reports/ADR-004-sprint-25-39-decisions.md) Sprint 25~39 기간의 **15개 아키텍처 결정** 정리: - D1~D9: 거더교 MVP 확장 (단면 분기·다경간·Skew 관례·방호벽·격벽·Camber·헌치·UI) - D10~D13: IFC4X3 Add2 익스포터 4 결정 (크레이트 분리·형상 전략 3단계·GUID·Camber 근사) - D14: proc-macro 스캐폴딩 (전면 #[param] 는 Feature 10+ 안정 후) - D15: 변단면 거더 알고리즘 (소핏 lift + Y 선형보간) - 미결 6항목 (Pset 확장·LinearPlacement·ElementAssembly·IfcPile·#[param] 전면·변단면 IFC) - 테스트 커버리지 101개 현황표 ## IFC 스냅샷 테스트 (crates/ifc/tests/snapshot_tests.rs) insta 기반 회귀 방지, 8개 baseline: - mask_guids(): 22자 IFC GUID 를 'GUID' 로 정규화 (결정적 비교 가능) - 시나리오: 기본 단경간 PSC-I / 2경간 π형 / skew 15° / camber 50mm / Rectangle 단면 / parapets off - mask_guids 자체 유닛 테스트 2개 ## Mesh helper 유닛 테스트 (crates/viewer/src/bridge_scene.rs helper_tests) 순수 함수 9개 검증: - apply_camber_mesh: zero 항등·midspan 도달값·경간 밖 미영향 - rotate_y_around_z: 0 회전 항등·90° 피봇 회전·정점 개수 보존 - apply_variable_depth: zero 항등·소핏 lift · 지점 0 lift ## clippy lib 경고 15+ → 0 - map_identity (kernel/expansion_joint.rs) - unnecessary_lazy_evaluations ×4 (dsl/abutment·pier·csv_template — auto-fix) - too_many_arguments (usd save_scene — allow with justification) - clamp-like 패턴 ×7 (viewer bridge_scene/incremental_scene 의 .max(1).min(N) → .clamp(1, N)) - redundant_closure ×2 (project_file 의 `|e| Error::other(e)` → `Error::other`) - redundant_guard ×1 (viewer KeyboardInput match guard → 패턴 내 직접 매치) cargo clippy --workspace --lib: 0 경고. Co-Authored-By: Claude Sonnet 4.6 --- .../reports/ADR-004-sprint-25-39-decisions.md | 239 +++++ PROGRESS.md | 5 + cimery/crates/dsl/src/abutment.rs | 4 +- cimery/crates/dsl/src/csv_template.rs | 2 +- cimery/crates/dsl/src/pier.rs | 2 +- cimery/crates/ifc/tests/snapshot_tests.rs | 118 +++ ...napshot_tests__camber_50mm_subdivides.snap | 818 ++++++++++++++++++ .../snapshot_tests__parapets_off.snap | 242 ++++++ ...ts__rectangle_section_no_profile_poly.snap | 254 ++++++ ...shot_tests__single_span_psc_i_default.snap | 494 +++++++++++ .../snapshot_tests__skewed_15_deg.snap | 278 ++++++ ...snapshot_tests__two_span_multi_column.snap | 530 ++++++++++++ cimery/crates/kernel/src/expansion_joint.rs | 2 +- cimery/crates/usd/src/lib.rs | 1 + cimery/crates/viewer/src/bridge_scene.rs | 148 +++- cimery/crates/viewer/src/incremental_scene.rs | 2 +- cimery/crates/viewer/src/lib.rs | 7 +- cimery/crates/viewer/src/project_file.rs | 4 +- 18 files changed, 3131 insertions(+), 19 deletions(-) create mode 100644 Output/reports/ADR-004-sprint-25-39-decisions.md create mode 100644 cimery/crates/ifc/tests/snapshot_tests.rs create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__camber_50mm_subdivides.snap create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__parapets_off.snap create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__rectangle_section_no_profile_poly.snap create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__single_span_psc_i_default.snap create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__skewed_15_deg.snap create mode 100644 cimery/crates/ifc/tests/snapshots/snapshot_tests__two_span_multi_column.snap diff --git a/Output/reports/ADR-004-sprint-25-39-decisions.md b/Output/reports/ADR-004-sprint-25-39-decisions.md new file mode 100644 index 0000000..bc505dc --- /dev/null +++ b/Output/reports/ADR-004-sprint-25-39-decisions.md @@ -0,0 +1,239 @@ +--- +id: ADR-004 +title: cimery Sprint 25~39 아키텍처 결정 — 거더교 MVP 확장·IFC4X3 Add2·proc-macro 스캐폴딩 +status: accepted +date: 2026-04-15 +related-wiki: + - "[[교각 형식 분류]]" + - "[[교각 파라미터 카탈로그]]" + - "[[선형 GIS 기반 좌표계]]" + - "[[특징 형상 기반 모델링 FBM]]" +related-adr: + - "[[ADR-001-tech-stack]]" + - "[[ADR-002-feature-dsl]]" + - "[[ADR-003-architecture-followups]]" +principles: [비패밀리, 증분, 선형-GIS] +--- + +# ADR-004 — Sprint 25~39 아키텍처 결정 + +Sprint 1~24 기반 위에서 거더교 MVP 확장과 IFC4X3 Add2 익스포터 Phase 1~3b 구축 중 내린 **15개 결정**을 정리. 이후 세대 에이전트가 설계 의도를 빠르게 소환하도록 한다. + +## 결정 요약표 + +| # | 주제 | 결정 | Sprint | +|---|---|---|---| +| D1 | 단면 타입 분기 | SceneParams `section_type` 로 런타임 분기. `build_selectable_scene` 하드코딩 금지 | 25 | +| D2 | `span_m` 의미 | **경간 당** 길이(총 길이 아님). 다경간 총 길이 = span_m × span_count | 26 | +| D3 | 피어 MVP 스펙 | wiki 112개 변수 중 **Phase 1 = 30% 입력만**. 기본 사각기둥·CSB 2m | 26 | +| D4 | 거더·데크 Skew | **미적용** (precast 거더 관례). 교대·교각·받침·신축이음만 회전 | 27 | +| D5 | 방호벽 표현 | 뷰어: 독립 RC 박스 / IFC: `IfcRailing .GUARDRAIL.` | 28 | +| D6 | 격벽 표현 | 뷰어 전용 (IFC 미구현, Phase 4 ElementAssembly 로드맵) | 29 | +| D7 | Camber 알고리즘 | 포물선 `4·mid·u·(span-u)/span²`, 경간별 독립 적용 | 30 | +| D8 | 헌치 Y 기준 | 데크 soffit Y = `bearing_h + girder_h + haunch_depth` | 31 | +| D9 | UI 카테고리 | 6 섹션 CollapsingHeader 분리 (상부/바닥판/기하/하부/추가/표시) | 32 | +| D10 | IFC 크레이트 분리 | `cimery-ifc` 독립 크레이트. viewer/app 에서 선택적 의존 | 33 | +| D11 | IFC 형상 전략 | Phase 1 Rectangle → Phase 2 PSC-I Arbitrary → Phase 3 Alignment | 33-36 | +| D12 | IFC GUID | UUIDv4 → base64-22 (buildingSMART charset `0-9A-Za-z_$`) | 33 | +| D13 | IFC Camber 근사 | `camber > 0` 시 거더를 N=10 세그먼트 `IfcExtrudedAreaSolid` 로 분할 | 37 | +| D14 | proc-macro 스캐폴딩 | `cimery-macros` 최소 선행 — `#[derive(ParamSummary)]` 만, 전면 `#[param]` 은 Phase 2 | 38 | +| D15 | 변단면 거더 알고리즘 | 포물선 soffit lift + Y 선형보간 `y_new = y + lift·(1 - y/h)` | 39 | + +--- + +## D1. 단면 타입 런타임 분기 + +**맥락**: `build_selectable_scene` 가 `SectionType::PscI` 를 하드코딩. 사용자가 SteelBox 를 선택해도 PscI 로 렌더되는 버그. + +**결정**: `SceneParams.section_type` 로 런타임 분기. `build_bridge_scene` 과 동일한 match 패턴 적용. + +**근거**: +- 하드코딩은 FBM(비패밀리 원칙) 위반. +- `build_bridge_scene` 에 이미 올바른 패턴 존재 → 한 쪽만 틀린 비대칭 버그. + +**영향**: SteelBox·PscU·SteelPlateI 추가 시 `match p.section_type` 에 한 줄만 추가. 카탈로그 확장 비용 최소화. + +--- + +## D2. `span_m` 의미 재정의 + +**맥락**: 단경간 가정 하에 `span_m = 전체 교량 길이` 로 사용. 다경간 추가 시 의미 충돌. + +**결정**: `span_m` = **경간 당** 길이. `span_count` 신규 도입. `total_mm = span_m × span_count × 1000`. + +**근거**: +- 실무 교량 설계는 "경간 × N" 으로 사고 (예: "40m × 3 연속교"). +- ProjectFile 호환성: v1 저장 파일(`span_count` 없음)은 `default = 1` 로 기존 단경간 동작 유지. + +**대안 기각**: +- `total_length_m + span_count` (계산 필요, 사고 무겁) +- `span_lengths: Vec` (MVP 과도, Phase 2+) + +--- + +## D3. 피어 MVP 스펙 — wiki Phase 1 + +**맥락**: ParaWiki `[[교각 파라미터 카탈로그]]` 의 **112개 변수** vs 현재 `PierIR` ~8개 변수 격차. + +**결정**: Phase 1 MVP = 사용자 입력 **30% ≈ 30개 변수 중 핵심 5개만**: +- `pier_type` (T/π), `column_count` (1/2), `column_diameter/depth` (CSB 매트릭스 기본값 2000mm), `column_height`, `cap_beam` 치수. + +나머지 82개 자동계산·상세 변수는 Phase 2~4 로드맵 (wiki 안내 순서). + +**근거**: +- MVP 원칙: 기능 축소 OK, 아키텍처 타협 금지. +- 112개 전면 구현은 IR·DSL·UI·IFC 4 레이어 동시 확장 필요 → Sprint 1개에 불가. +- wiki 의 "Phase 1" 권장 순서가 엔지니어링 검증된 우선순위. + +--- + +## D4. 거더·데크 Skew 미적용 + +**맥락**: 경사교(skew bridge) 표현 방식 선택. + +**결정**: `skew_deg` 파라미터는 **교대·교각·받침·신축이음에만** Y축 회전 적용. **거더·데크는 직선 유지**. + +**근거**: +- Precast 거더 스큐 교량의 **일반 관례** — 거더는 직교 제작, 교대 seat 만 사각으로 절단. +- 사각 데크 슬래브는 현장 타설 평행사변형으로 맞춤 (본 MVP 스코프 밖). +- 거더 회전 시 mesh 경계 교대와 맞물리는 정합성 문제 발생. + +**영향**: `rotate_y_around_z()` 헬퍼로 지점부 요소만 후처리 회전. 기하 복잡도 최소화. + +--- + +## D5~D6. 방호벽·격벽 표현 경로 + +**D5 방호벽 (Parapet)**: +- 뷰어: 독립 RC 박스(500mm × 1200mm × 전체 길이) 양쪽 엣지 +- IFC: `IfcRailing .GUARDRAIL.` + +**D6 격벽 (Diaphragm)**: +- 뷰어 전용. IFC 미구현. +- 향후 `IfcElementAssembly` 로 Pier 그룹 + Diaphragm 포함 예정 (Phase 4). + +**근거**: +- IFC 표준에서 방호벽 → `IfcRailing` 이 가장 근접. +- 격벽은 IFC4X3 에 전용 엔티티 없음 — `IfcBeam` 또는 `IfcElementAssembly` 내부 원소로 표현. +- MVP 에선 격벽을 IFC 스킵하고 뷰어만 지원 → 범위 축소. + +--- + +## D7. Camber 알고리즘 + +**결정**: 포물선 수식 `y_off(u) = 4 · mid · u · (span - u) / span²`, 경간별 독립 적용. + +**근거**: +- 실무 거더 precamber 근사식과 정합 (중앙에서 최대, 양단 0). +- 경간별 독립 → 다경간 연속교에서도 각 경간이 올바른 솟음. +- 정점 단위 Y 오프셋만 추가 → mesh 생성 파이프라인 변경 최소. + +**구현 위치**: `apply_camber_mesh(mesh, z0, z1, mid_mm)` — 순수 함수, 단위 테스트 가능. + +--- + +## D8. 헌치 Y 기준 + +**결정**: 데크 soffit Y = `bearing_h + girder_h + haunch_depth` (헌치 0 이면 거더 상면 = 데크 소핏). + +**근거**: +- 현실 bridge 단면: 거더 top flange → 헌치 블록 → 데크 soffit 순서. +- 단일 변수 `haunch_depth` 로 데크 높이·신축이음·방호벽 기준선 전부 이동 (6군데 일괄 수식 변경). + +--- + +## D9. UI 카테고리 6 섹션 + +**맥락**: Sprint 14 ~ 31 누적 슬라이더·체크박스 11개가 한 덩어리 섹션에 쌓임. + +**결정**: 6개 `CollapsingHeader` 로 분리: +1. 상부구조 (경간·거더 5개) +2. 바닥판 (슬래브 두께·헌치) +3. 선형·기하 (경사각·솟음·변단면) +4. 하부구조 (교각 형식) +5. 추가 부재 (가로보·신축이음·격벽) +6. 표시 (선형·투영) + +**근거**: Revit UX 패턴과 정합 (카테고리별 속성 분류). 슬라이더 10+ 개 평면 배치는 스캐닝 비용 높음. + +**매크로 hygiene 부산물**: `ps!` 매크로가 외부 `ui` 를 캡처하는 문제를 `ps!($ui, ...)` 명시 매개변수화로 해결. + +--- + +## D10~D13. IFC 익스포터 4 결정 + +**D10 크레이트 분리**: `cimery-ifc` 독립. viewer/app 에서 선택적 의존 (deps: `cimery-ifc = { workspace = true }`). 크로스 컴파일·WASM 호환성 격리. + +**D11 형상 전략 3단계**: +- **Phase 1** (Sprint 33): `IfcRectangleProfileDef` 일률 — 엔티티 계층·워크플로 검증용 +- **Phase 2** (Sprint 34): `IfcArbitraryClosedProfileDef` + `IfcPolyline` 로 PSC-I 14점 실제 단면 +- **Phase 3b** (Sprint 36): `IfcAlignment` 독립 엔티티 — LinearPlacement 는 Phase 3c+ + +**D12 GUID**: UUIDv4 → buildingSMART base64-22 (`0-9A-Za-z_$` charset). +- 대안 기각: IFC1 규격 Base85 — 길이 20자지만 charset 가독성 낮음. + +**D13 Camber 근사**: `camber > 0` 시 거더를 `CAMBER_SEGMENTS = 10` 개 `IfcExtrudedAreaSolid` 로 분할. +- 대안 기각 1: `IfcSurfaceCurveSweptAreaSolid` — directrix curve 정의 복잡, 뷰어 지원도 낮음. +- 대안 기각 2: 단일 extrude + 속성에 camber 값만 기록 — 기하가 평평함, 시각 검증 불가. +- 선택: 다중 세그먼트 포물선 근사. 10 세그먼트 해상도면 ~1mm 오차, BIM 뷰어에서 곡선처럼 보임. + +--- + +## D14. proc-macro 스캐폴딩 + +**맥락**: ADR-002 D `#[param(unit, range, default)]` 전면 구현 제안 대비 현재 Feature 카탈로그 규모. + +**결정**: Sprint 38 에서 `cimery-macros` 크레이트와 `#[derive(ParamSummary)]` **최소 선행만**. 전면 `#[param]` attribute 는 카탈로그 10+ feature 안정 후. + +**근거**: +- 현재 Feature = 거더·데크·받침·피어·교대·가로보·신축이음 7종. 수동 builder 로 관리 가능. +- Proc-macro 전면 구현은 큰 투자 — 실제 사용처(중복 보일러플레이트)가 누적돼야 ROI. +- 크레이트 인프라(syn/quote) 만 먼저 세팅 → 향후 `#[param]` 추가 시 진입 비용 최소. + +--- + +## D15. 변단면 거더 알고리즘 + +**결정**: 포물선 soffit lift + Y 선형보간. +- `lift(u) = 4 · max · u · (span - u) / span²` +- `y_new = y + lift(u) · (1 - y/h)` + +**근거**: +- 연속교 중앙부 단면 축소의 물리적 모델: **상면 유지(도로면 평탄) + 소핏 상승** = web 축소. +- 선형 보간 계수 `(1 - y/h)` 로 정점 클래스 구분 없이(top/web/bottom 구분 불필요) 균일 처리. +- 단일 함수 `apply_variable_depth(mesh, z0, z1, max, girder_h)` — camber 와 독립 조합 가능. + +**영향**: 상수 단면 mesh 생성 후 post-process 만 추가. 커널(psc_i.rs·steel_box.rs) 수정 불필요. + +--- + +## 미결·재검토 항목 + +- **C1 Pset_BearingCommon / Pset_SlabCommon**: Sprint 35 에서 Pset_BeamCommon 만 구현. 후속 스프린트에서 확장. +- **C2 IfcLinearPlacement**: Sprint 36 에서 IfcAlignment 만 추가, 요소 배치는 아직 `IfcLocalPlacement`. Phase 3c. +- **C3 IfcElementAssembly**: Pier 의 column + cap beam + footing 을 그룹화. Phase 4. +- **C4 IfcPile**: IFC4X3 신규 엔티티. 현재 피어 기초는 IfcFooting 으로 통합 표현. Phase 4. +- **C5 `#[param]` 전면 구현**: D14 언급, 카탈로그 확장 시점에 재검토. +- **C6 변단면 거더 IFC 반영**: Sprint 37 Camber 와 동일하게 세그먼트 분할 기법 적용 가능. + +--- + +## 테스트 커버리지 + +Sprint 25~39 기간 추가된 테스트: +- `cimery-ifc`: 20 lib + 8 snapshot = 28 +- `cimery-viewer` mesh helpers: 9 (camber/rotate/variable_depth) +- `cimery-macros` derive: 3 +- 기존 kernel 4층 테스트: 61 유지 + +총 **61 + 40 = 101 테스트 통과** 현황. + +--- + +## 관련 +- [[ADR-001-tech-stack]] +- [[ADR-002-feature-dsl]] +- [[ADR-003-architecture-followups]] +- `cimery/crates/ifc/` 구현 +- `cimery/crates/macros/` 구현 +- PROGRESS.md Sprint 25~39 타임라인 diff --git a/PROGRESS.md b/PROGRESS.md index bb027fc..af513b5 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -12,6 +12,11 @@ ## 타임라인 ### 2026-04-15 (계속) +- adr — ADR-004 작성. Sprint 25~39 15개 아키텍처 결정 정리 (단면 분기·다경간·피어 MVP·Skew·방호벽·격벽·Camber·헌치·UI·IFC 형상 전략·GUID·proc-macro 스캐폴딩·변단면 알고리즘). 미결 항목 6개(Pset 확장·LinearPlacement·ElementAssembly·IfcPile·`#[param]` 전면·변단면 IFC). 테스트 101개 현황 정리. +- code — 테스트·경고 정리 (엔지니어링 로직 외 품질 작업). + - `cimery-ifc` insta 스냅샷 테스트 8개 신설 (`tests/snapshot_tests.rs`): GUID 마스킹 `mask_guids()` 로 결정적 비교. 시나리오 6종(기본·다경간·skew·camber·Rectangle·parapets off) + 마스킹 유닛 2개. + - `cimery-viewer` mesh helper 단위 테스트 9개 신설 (`bridge_scene::helper_tests`): `apply_camber_mesh` 3 / `rotate_y_around_z` 3 / `apply_variable_depth` 3. 각 순수 함수의 경계 조건·항등 변환 검증. + - clippy lib 경고 15+ → 0: `map_identity`, `unnecessary_lazy_evaluations`, `too_many_arguments`(allow), `clamp-like` 패턴 7곳, `redundant_closure`, `redundant_guard` 일괄 정리. - code — Sprint 36~39: IFC Alignment + Camber + proc-macro 스캐폴딩 + 변단면 거더. - Sprint 36 (IFC Phase 3b): IfcAlignment + 직선 horizontal/constantgradient vertical segment + IfcRelNests 계층. `write_straight_alignment()` helper. Site 가 Bridge·Alignment 동시 aggregate. - Sprint 37 (IFC Camber): `BridgeExportParams.camber_mid_mm` 추가. camber > 0 일 때 거더를 `CAMBER_SEGMENTS`(=10)개 세그먼트로 분할, 각 세그먼트 Y 오프셋에 포물선 값 적용. Pset 는 첫 세그먼트에만 부착(전체 거더 대표). viewer scene_params_to_ifc 에 매핑. diff --git a/cimery/crates/dsl/src/abutment.rs b/cimery/crates/dsl/src/abutment.rs index 4b86d9f..1426b08 100644 --- a/cimery/crates/dsl/src/abutment.rs +++ b/cimery/crates/dsl/src/abutment.rs @@ -61,9 +61,9 @@ impl AbutmentBuilder { .ok_or_else(|| FeatureError::missing("abutment.breast_wall_width"))?.value(); let bw_t = self.breast_wall_thickness.unwrap_or(800.0.mm()).value(); let foot_l = self.footing_length.unwrap_or(4000.0.mm()).value(); - let foot_w = self.footing_width.unwrap_or_else(|| Mm(bw_w + 1000.0)).value(); + let foot_w = self.footing_width.unwrap_or(Mm(bw_w + 1000.0)).value(); let foot_t = self.footing_thickness.unwrap_or(1000.0.mm()).value(); - let wing_l = self.wing_length.unwrap_or_else(|| Mm(bw_h * 0.8)).value(); + let wing_l = self.wing_length.unwrap_or(Mm(bw_h * 0.8)).value(); let wing_h = bw_h * 0.5; // simplified: half the breast wall height let wing_t = bw_t; diff --git a/cimery/crates/dsl/src/csv_template.rs b/cimery/crates/dsl/src/csv_template.rs index de3f49b..1cd5e6a 100644 --- a/cimery/crates/dsl/src/csv_template.rs +++ b/cimery/crates/dsl/src/csv_template.rs @@ -118,7 +118,7 @@ pub fn girder_from_csv(csv: &str) -> Result, FeatureError> { if span <= 0.0 { return Err(FeatureError::validation( - &format!("csv.row[{}].station_end", row_idx), + format!("csv.row[{}].station_end", row_idx), format!("must be > station_start, got span={:.1}m", span), )); } diff --git a/cimery/crates/dsl/src/pier.rs b/cimery/crates/dsl/src/pier.rs index 78f28d6..d77f077 100644 --- a/cimery/crates/dsl/src/pier.rs +++ b/cimery/crates/dsl/src/pier.rs @@ -97,7 +97,7 @@ impl PierBuilder { column_count: col_count, column_spacing: self.column_spacing.unwrap_or(0.0.mm()).value(), column_diameter: col_dia, - column_depth: self.column_depth.unwrap_or_else(|| Mm(col_dia)).value(), + column_depth: self.column_depth.unwrap_or(Mm(col_dia)).value(), column_height: col_h, cap_beam: CapBeamIR { length: cap_l, diff --git a/cimery/crates/ifc/tests/snapshot_tests.rs b/cimery/crates/ifc/tests/snapshot_tests.rs new file mode 100644 index 0000000..ec51388 --- /dev/null +++ b/cimery/crates/ifc/tests/snapshot_tests.rs @@ -0,0 +1,118 @@ +//! IFC 출력 스냅샷 테스트 (insta) — 회귀 방지용. +//! +//! IfcGUID 는 UUIDv4 무작위라 매 실행마다 달라지므로 `mask_guids()` 로 +//! `GUID-XXX` 형태로 정규화한 뒤 스냅샷 비교. +//! +//! 실행: +//! ```bash +//! cargo test -p cimery-ifc --test snapshot_tests +//! # 새 baseline 채택: INSTA_UPDATE=always cargo test ... +//! ``` + +use cimery_ifc::{BridgeExportParams, IfcSectionKind, export_bridge}; + +/// GUID 정규화 — `'...'` 22자 IFC GUID 를 `'GUID'` 로 치환. +/// (IFC GUID charset: 0-9A-Za-z_$) +fn mask_guids(ifc: &str) -> String { + // 22자 = [0-9A-Za-z_$]{22} 로 정확 매치. + let mut out = String::with_capacity(ifc.len()); + let chars: Vec = ifc.chars().collect(); + let mut i = 0; + while i < chars.len() { + if chars[i] == '\'' && i + 23 < chars.len() && chars[i + 23] == '\'' { + // i+1 ~ i+22 검사. + let all_guid_chars = (1..=22).all(|k| is_guid_char(chars[i + k])); + if all_guid_chars { + out.push_str("'GUID'"); + i += 24; + continue; + } + } + out.push(chars[i]); + i += 1; + } + out +} + +fn is_guid_char(c: char) -> bool { + c.is_ascii_alphanumeric() || c == '_' || c == '$' +} + +#[test] +fn single_span_psc_i_default() { + let p = BridgeExportParams::default(); + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +#[test] +fn two_span_multi_column() { + let p = BridgeExportParams { + span_count: 2, + girder_count: 3, + ..Default::default() + }; + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +#[test] +fn skewed_15_deg() { + let p = BridgeExportParams { + skew_deg: 15.0, + girder_count: 2, + ..Default::default() + }; + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +#[test] +fn camber_50mm_subdivides() { + let p = BridgeExportParams { + camber_mid_mm: 50.0, + girder_count: 2, + ..Default::default() + }; + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +#[test] +fn rectangle_section_no_profile_poly() { + let p = BridgeExportParams { + section_kind: IfcSectionKind::Rectangle, + girder_count: 2, + ..Default::default() + }; + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +#[test] +fn parapets_off() { + let p = BridgeExportParams { + show_parapets: false, + girder_count: 2, + ..Default::default() + }; + let ifc = export_bridge(&p); + insta::assert_snapshot!(mask_guids(&ifc)); +} + +// ─── mask_guids 유닛 테스트 ─────────────────────────────────────────────── + +#[test] +fn mask_guids_replaces_22_char_token() { + let before = "IFCPROJECT('2JBHBMFGp5w3sCd6sd_Oz$',$,...)"; + let after = mask_guids(before); + assert!(after.contains("'GUID'")); + assert!(!after.contains("2JBHBMFGp5w3sCd6sd_Oz$")); +} + +#[test] +fn mask_guids_leaves_short_strings_alone() { + let before = "lit('Bridge Alignment')"; + let after = mask_guids(before); + assert_eq!(before, after); +} diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__camber_50mm_subdivides.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__camber_50mm_subdivides.snap new file mode 100644 index 0000000..41adb50 --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__camber_50mm_subdivides.snap @@ -0,0 +1,818 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,40000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,40000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-1250.000000, 969.5, 2000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#37 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#38 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#39 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#40 = IFCCARTESIANPOINT((100.000000,700.000000)); +#41 = IFCCARTESIANPOINT((150.000000,750.000000)); +#42 = IFCCARTESIANPOINT((300.000000,750.000000)); +#43 = IFCCARTESIANPOINT((300.000000,900.000000)); +#44 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#45 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#46 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#47 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#48 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#49 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#50 = IFCPOLYLINE((#36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #36)); +#51 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#50); +#52 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#53 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#54 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#55 = IFCAXIS2PLACEMENT3D(#52,#53,#54); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCEXTRUDEDAREASOLID(#51,#55,#56,4000.000000); +#58 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#57)); +#59 = IFCPRODUCTDEFINITIONSHAPE($,$,(#58)); +#60 = IFCBEAM('GUID',$,'Girder S1-G1-seg1',$,$,#35,#59,$,.BEAM.); +#61 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#62 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#63 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#64 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#65 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#61, #62, #63, #64)); +#66 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#60),#65); +#67 = IFCCARTESIANPOINT((-1250.000000, 985.5, 6000.000000)); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#70 = IFCAXIS2PLACEMENT3D(#67,#68,#69); +#71 = IFCLOCALPLACEMENT(#13,#70); +#72 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#73 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#74 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#75 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#76 = IFCCARTESIANPOINT((100.000000,700.000000)); +#77 = IFCCARTESIANPOINT((150.000000,750.000000)); +#78 = IFCCARTESIANPOINT((300.000000,750.000000)); +#79 = IFCCARTESIANPOINT((300.000000,900.000000)); +#80 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#81 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#82 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#83 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#84 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#85 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#86 = IFCPOLYLINE((#72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #72)); +#87 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#86); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,4000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCBEAM('GUID',$,'Girder S1-G1-seg2',$,$,#71,#95,$,.BEAM.); +#97 = IFCCARTESIANPOINT((-1250.000000, 997.5, 10000.000000)); +#98 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#99 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#100 = IFCAXIS2PLACEMENT3D(#97,#98,#99); +#101 = IFCLOCALPLACEMENT(#13,#100); +#102 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#103 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#104 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#105 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#106 = IFCCARTESIANPOINT((100.000000,700.000000)); +#107 = IFCCARTESIANPOINT((150.000000,750.000000)); +#108 = IFCCARTESIANPOINT((300.000000,750.000000)); +#109 = IFCCARTESIANPOINT((300.000000,900.000000)); +#110 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#111 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#112 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#113 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#114 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#115 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#116 = IFCPOLYLINE((#102, #103, #104, #105, #106, #107, #108, #109, #110, #111, #112, #113, #114, #115, #102)); +#117 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#116); +#118 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#119 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#120 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#121 = IFCAXIS2PLACEMENT3D(#118,#119,#120); +#122 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#123 = IFCEXTRUDEDAREASOLID(#117,#121,#122,4000.000000); +#124 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#123)); +#125 = IFCPRODUCTDEFINITIONSHAPE($,$,(#124)); +#126 = IFCBEAM('GUID',$,'Girder S1-G1-seg3',$,$,#101,#125,$,.BEAM.); +#127 = IFCCARTESIANPOINT((-1250.000000, 1005.5, 14000.000000)); +#128 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#129 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#130 = IFCAXIS2PLACEMENT3D(#127,#128,#129); +#131 = IFCLOCALPLACEMENT(#13,#130); +#132 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#133 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#134 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#135 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#136 = IFCCARTESIANPOINT((100.000000,700.000000)); +#137 = IFCCARTESIANPOINT((150.000000,750.000000)); +#138 = IFCCARTESIANPOINT((300.000000,750.000000)); +#139 = IFCCARTESIANPOINT((300.000000,900.000000)); +#140 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#141 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#142 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#143 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#144 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#145 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#146 = IFCPOLYLINE((#132, #133, #134, #135, #136, #137, #138, #139, #140, #141, #142, #143, #144, #145, #132)); +#147 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#146); +#148 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#149 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#150 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#151 = IFCAXIS2PLACEMENT3D(#148,#149,#150); +#152 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#153 = IFCEXTRUDEDAREASOLID(#147,#151,#152,4000.000000); +#154 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#153)); +#155 = IFCPRODUCTDEFINITIONSHAPE($,$,(#154)); +#156 = IFCBEAM('GUID',$,'Girder S1-G1-seg4',$,$,#131,#155,$,.BEAM.); +#157 = IFCCARTESIANPOINT((-1250.000000, 1009.5, 18000.000000)); +#158 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#159 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#160 = IFCAXIS2PLACEMENT3D(#157,#158,#159); +#161 = IFCLOCALPLACEMENT(#13,#160); +#162 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#163 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#164 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#165 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#166 = IFCCARTESIANPOINT((100.000000,700.000000)); +#167 = IFCCARTESIANPOINT((150.000000,750.000000)); +#168 = IFCCARTESIANPOINT((300.000000,750.000000)); +#169 = IFCCARTESIANPOINT((300.000000,900.000000)); +#170 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#171 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#172 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#173 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#174 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#175 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#176 = IFCPOLYLINE((#162, #163, #164, #165, #166, #167, #168, #169, #170, #171, #172, #173, #174, #175, #162)); +#177 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#176); +#178 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#179 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#180 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#181 = IFCAXIS2PLACEMENT3D(#178,#179,#180); +#182 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#183 = IFCEXTRUDEDAREASOLID(#177,#181,#182,4000.000000); +#184 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#183)); +#185 = IFCPRODUCTDEFINITIONSHAPE($,$,(#184)); +#186 = IFCBEAM('GUID',$,'Girder S1-G1-seg5',$,$,#161,#185,$,.BEAM.); +#187 = IFCCARTESIANPOINT((-1250.000000, 1009.5, 22000.000000)); +#188 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#189 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#190 = IFCAXIS2PLACEMENT3D(#187,#188,#189); +#191 = IFCLOCALPLACEMENT(#13,#190); +#192 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#193 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#194 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#195 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#196 = IFCCARTESIANPOINT((100.000000,700.000000)); +#197 = IFCCARTESIANPOINT((150.000000,750.000000)); +#198 = IFCCARTESIANPOINT((300.000000,750.000000)); +#199 = IFCCARTESIANPOINT((300.000000,900.000000)); +#200 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#201 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#202 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#203 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#204 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#205 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#206 = IFCPOLYLINE((#192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203, #204, #205, #192)); +#207 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#206); +#208 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#209 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#210 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#211 = IFCAXIS2PLACEMENT3D(#208,#209,#210); +#212 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#213 = IFCEXTRUDEDAREASOLID(#207,#211,#212,4000.000000); +#214 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#213)); +#215 = IFCPRODUCTDEFINITIONSHAPE($,$,(#214)); +#216 = IFCBEAM('GUID',$,'Girder S1-G1-seg6',$,$,#191,#215,$,.BEAM.); +#217 = IFCCARTESIANPOINT((-1250.000000, 1005.5, 26000.000000)); +#218 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#219 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#220 = IFCAXIS2PLACEMENT3D(#217,#218,#219); +#221 = IFCLOCALPLACEMENT(#13,#220); +#222 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#223 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#224 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#225 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#226 = IFCCARTESIANPOINT((100.000000,700.000000)); +#227 = IFCCARTESIANPOINT((150.000000,750.000000)); +#228 = IFCCARTESIANPOINT((300.000000,750.000000)); +#229 = IFCCARTESIANPOINT((300.000000,900.000000)); +#230 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#231 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#232 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#233 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#234 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#235 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#236 = IFCPOLYLINE((#222, #223, #224, #225, #226, #227, #228, #229, #230, #231, #232, #233, #234, #235, #222)); +#237 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#236); +#238 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#239 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#240 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#241 = IFCAXIS2PLACEMENT3D(#238,#239,#240); +#242 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#243 = IFCEXTRUDEDAREASOLID(#237,#241,#242,4000.000000); +#244 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#243)); +#245 = IFCPRODUCTDEFINITIONSHAPE($,$,(#244)); +#246 = IFCBEAM('GUID',$,'Girder S1-G1-seg7',$,$,#221,#245,$,.BEAM.); +#247 = IFCCARTESIANPOINT((-1250.000000, 997.5, 30000.000000)); +#248 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#249 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#250 = IFCAXIS2PLACEMENT3D(#247,#248,#249); +#251 = IFCLOCALPLACEMENT(#13,#250); +#252 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#253 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#254 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#255 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#256 = IFCCARTESIANPOINT((100.000000,700.000000)); +#257 = IFCCARTESIANPOINT((150.000000,750.000000)); +#258 = IFCCARTESIANPOINT((300.000000,750.000000)); +#259 = IFCCARTESIANPOINT((300.000000,900.000000)); +#260 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#261 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#262 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#263 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#264 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#265 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#266 = IFCPOLYLINE((#252, #253, #254, #255, #256, #257, #258, #259, #260, #261, #262, #263, #264, #265, #252)); +#267 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#266); +#268 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#269 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#270 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#271 = IFCAXIS2PLACEMENT3D(#268,#269,#270); +#272 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#273 = IFCEXTRUDEDAREASOLID(#267,#271,#272,4000.000000); +#274 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#273)); +#275 = IFCPRODUCTDEFINITIONSHAPE($,$,(#274)); +#276 = IFCBEAM('GUID',$,'Girder S1-G1-seg8',$,$,#251,#275,$,.BEAM.); +#277 = IFCCARTESIANPOINT((-1250.000000, 985.5, 34000.000000)); +#278 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#279 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#280 = IFCAXIS2PLACEMENT3D(#277,#278,#279); +#281 = IFCLOCALPLACEMENT(#13,#280); +#282 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#283 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#284 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#285 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#286 = IFCCARTESIANPOINT((100.000000,700.000000)); +#287 = IFCCARTESIANPOINT((150.000000,750.000000)); +#288 = IFCCARTESIANPOINT((300.000000,750.000000)); +#289 = IFCCARTESIANPOINT((300.000000,900.000000)); +#290 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#291 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#292 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#293 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#294 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#295 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#296 = IFCPOLYLINE((#282, #283, #284, #285, #286, #287, #288, #289, #290, #291, #292, #293, #294, #295, #282)); +#297 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#296); +#298 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#299 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#300 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#301 = IFCAXIS2PLACEMENT3D(#298,#299,#300); +#302 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#303 = IFCEXTRUDEDAREASOLID(#297,#301,#302,4000.000000); +#304 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#303)); +#305 = IFCPRODUCTDEFINITIONSHAPE($,$,(#304)); +#306 = IFCBEAM('GUID',$,'Girder S1-G1-seg9',$,$,#281,#305,$,.BEAM.); +#307 = IFCCARTESIANPOINT((-1250.000000, 969.5, 38000.000000)); +#308 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#309 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#310 = IFCAXIS2PLACEMENT3D(#307,#308,#309); +#311 = IFCLOCALPLACEMENT(#13,#310); +#312 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#313 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#314 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#315 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#316 = IFCCARTESIANPOINT((100.000000,700.000000)); +#317 = IFCCARTESIANPOINT((150.000000,750.000000)); +#318 = IFCCARTESIANPOINT((300.000000,750.000000)); +#319 = IFCCARTESIANPOINT((300.000000,900.000000)); +#320 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#321 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#322 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#323 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#324 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#325 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#326 = IFCPOLYLINE((#312, #313, #314, #315, #316, #317, #318, #319, #320, #321, #322, #323, #324, #325, #312)); +#327 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#326); +#328 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#329 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#330 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#331 = IFCAXIS2PLACEMENT3D(#328,#329,#330); +#332 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#333 = IFCEXTRUDEDAREASOLID(#327,#331,#332,4000.000000); +#334 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#333)); +#335 = IFCPRODUCTDEFINITIONSHAPE($,$,(#334)); +#336 = IFCBEAM('GUID',$,'Girder S1-G1-seg10',$,$,#311,#335,$,.BEAM.); +#337 = IFCCARTESIANPOINT((1250.000000, 969.5, 2000.000000)); +#338 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#339 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#340 = IFCAXIS2PLACEMENT3D(#337,#338,#339); +#341 = IFCLOCALPLACEMENT(#13,#340); +#342 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#343 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#344 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#345 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#346 = IFCCARTESIANPOINT((100.000000,700.000000)); +#347 = IFCCARTESIANPOINT((150.000000,750.000000)); +#348 = IFCCARTESIANPOINT((300.000000,750.000000)); +#349 = IFCCARTESIANPOINT((300.000000,900.000000)); +#350 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#351 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#352 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#353 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#354 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#355 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#356 = IFCPOLYLINE((#342, #343, #344, #345, #346, #347, #348, #349, #350, #351, #352, #353, #354, #355, #342)); +#357 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#356); +#358 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#359 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#360 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#361 = IFCAXIS2PLACEMENT3D(#358,#359,#360); +#362 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#363 = IFCEXTRUDEDAREASOLID(#357,#361,#362,4000.000000); +#364 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#363)); +#365 = IFCPRODUCTDEFINITIONSHAPE($,$,(#364)); +#366 = IFCBEAM('GUID',$,'Girder S1-G2-seg1',$,$,#341,#365,$,.BEAM.); +#367 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#368 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#369 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#370 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#371 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#367, #368, #369, #370)); +#372 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#366),#371); +#373 = IFCCARTESIANPOINT((1250.000000, 985.5, 6000.000000)); +#374 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#375 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#376 = IFCAXIS2PLACEMENT3D(#373,#374,#375); +#377 = IFCLOCALPLACEMENT(#13,#376); +#378 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#379 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#380 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#381 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#382 = IFCCARTESIANPOINT((100.000000,700.000000)); +#383 = IFCCARTESIANPOINT((150.000000,750.000000)); +#384 = IFCCARTESIANPOINT((300.000000,750.000000)); +#385 = IFCCARTESIANPOINT((300.000000,900.000000)); +#386 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#387 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#388 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#389 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#390 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#391 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#392 = IFCPOLYLINE((#378, #379, #380, #381, #382, #383, #384, #385, #386, #387, #388, #389, #390, #391, #378)); +#393 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#392); +#394 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#395 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#396 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#397 = IFCAXIS2PLACEMENT3D(#394,#395,#396); +#398 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#399 = IFCEXTRUDEDAREASOLID(#393,#397,#398,4000.000000); +#400 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#399)); +#401 = IFCPRODUCTDEFINITIONSHAPE($,$,(#400)); +#402 = IFCBEAM('GUID',$,'Girder S1-G2-seg2',$,$,#377,#401,$,.BEAM.); +#403 = IFCCARTESIANPOINT((1250.000000, 997.5, 10000.000000)); +#404 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#405 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#406 = IFCAXIS2PLACEMENT3D(#403,#404,#405); +#407 = IFCLOCALPLACEMENT(#13,#406); +#408 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#409 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#410 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#411 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#412 = IFCCARTESIANPOINT((100.000000,700.000000)); +#413 = IFCCARTESIANPOINT((150.000000,750.000000)); +#414 = IFCCARTESIANPOINT((300.000000,750.000000)); +#415 = IFCCARTESIANPOINT((300.000000,900.000000)); +#416 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#417 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#418 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#419 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#420 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#421 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#422 = IFCPOLYLINE((#408, #409, #410, #411, #412, #413, #414, #415, #416, #417, #418, #419, #420, #421, #408)); +#423 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#422); +#424 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#425 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#426 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#427 = IFCAXIS2PLACEMENT3D(#424,#425,#426); +#428 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#429 = IFCEXTRUDEDAREASOLID(#423,#427,#428,4000.000000); +#430 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#429)); +#431 = IFCPRODUCTDEFINITIONSHAPE($,$,(#430)); +#432 = IFCBEAM('GUID',$,'Girder S1-G2-seg3',$,$,#407,#431,$,.BEAM.); +#433 = IFCCARTESIANPOINT((1250.000000, 1005.5, 14000.000000)); +#434 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#435 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#436 = IFCAXIS2PLACEMENT3D(#433,#434,#435); +#437 = IFCLOCALPLACEMENT(#13,#436); +#438 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#439 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#440 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#441 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#442 = IFCCARTESIANPOINT((100.000000,700.000000)); +#443 = IFCCARTESIANPOINT((150.000000,750.000000)); +#444 = IFCCARTESIANPOINT((300.000000,750.000000)); +#445 = IFCCARTESIANPOINT((300.000000,900.000000)); +#446 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#447 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#448 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#449 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#450 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#451 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#452 = IFCPOLYLINE((#438, #439, #440, #441, #442, #443, #444, #445, #446, #447, #448, #449, #450, #451, #438)); +#453 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#452); +#454 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#455 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#456 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#457 = IFCAXIS2PLACEMENT3D(#454,#455,#456); +#458 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#459 = IFCEXTRUDEDAREASOLID(#453,#457,#458,4000.000000); +#460 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#459)); +#461 = IFCPRODUCTDEFINITIONSHAPE($,$,(#460)); +#462 = IFCBEAM('GUID',$,'Girder S1-G2-seg4',$,$,#437,#461,$,.BEAM.); +#463 = IFCCARTESIANPOINT((1250.000000, 1009.5, 18000.000000)); +#464 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#465 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#466 = IFCAXIS2PLACEMENT3D(#463,#464,#465); +#467 = IFCLOCALPLACEMENT(#13,#466); +#468 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#469 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#470 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#471 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#472 = IFCCARTESIANPOINT((100.000000,700.000000)); +#473 = IFCCARTESIANPOINT((150.000000,750.000000)); +#474 = IFCCARTESIANPOINT((300.000000,750.000000)); +#475 = IFCCARTESIANPOINT((300.000000,900.000000)); +#476 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#477 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#478 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#479 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#480 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#481 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#482 = IFCPOLYLINE((#468, #469, #470, #471, #472, #473, #474, #475, #476, #477, #478, #479, #480, #481, #468)); +#483 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#482); +#484 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#485 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#486 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#487 = IFCAXIS2PLACEMENT3D(#484,#485,#486); +#488 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#489 = IFCEXTRUDEDAREASOLID(#483,#487,#488,4000.000000); +#490 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#489)); +#491 = IFCPRODUCTDEFINITIONSHAPE($,$,(#490)); +#492 = IFCBEAM('GUID',$,'Girder S1-G2-seg5',$,$,#467,#491,$,.BEAM.); +#493 = IFCCARTESIANPOINT((1250.000000, 1009.5, 22000.000000)); +#494 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#495 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#496 = IFCAXIS2PLACEMENT3D(#493,#494,#495); +#497 = IFCLOCALPLACEMENT(#13,#496); +#498 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#499 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#500 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#501 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#502 = IFCCARTESIANPOINT((100.000000,700.000000)); +#503 = IFCCARTESIANPOINT((150.000000,750.000000)); +#504 = IFCCARTESIANPOINT((300.000000,750.000000)); +#505 = IFCCARTESIANPOINT((300.000000,900.000000)); +#506 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#507 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#508 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#509 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#510 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#511 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#512 = IFCPOLYLINE((#498, #499, #500, #501, #502, #503, #504, #505, #506, #507, #508, #509, #510, #511, #498)); +#513 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#512); +#514 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#515 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#516 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#517 = IFCAXIS2PLACEMENT3D(#514,#515,#516); +#518 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#519 = IFCEXTRUDEDAREASOLID(#513,#517,#518,4000.000000); +#520 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#519)); +#521 = IFCPRODUCTDEFINITIONSHAPE($,$,(#520)); +#522 = IFCBEAM('GUID',$,'Girder S1-G2-seg6',$,$,#497,#521,$,.BEAM.); +#523 = IFCCARTESIANPOINT((1250.000000, 1005.5, 26000.000000)); +#524 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#525 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#526 = IFCAXIS2PLACEMENT3D(#523,#524,#525); +#527 = IFCLOCALPLACEMENT(#13,#526); +#528 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#529 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#530 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#531 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#532 = IFCCARTESIANPOINT((100.000000,700.000000)); +#533 = IFCCARTESIANPOINT((150.000000,750.000000)); +#534 = IFCCARTESIANPOINT((300.000000,750.000000)); +#535 = IFCCARTESIANPOINT((300.000000,900.000000)); +#536 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#537 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#538 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#539 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#540 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#541 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#542 = IFCPOLYLINE((#528, #529, #530, #531, #532, #533, #534, #535, #536, #537, #538, #539, #540, #541, #528)); +#543 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#542); +#544 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#545 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#546 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#547 = IFCAXIS2PLACEMENT3D(#544,#545,#546); +#548 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#549 = IFCEXTRUDEDAREASOLID(#543,#547,#548,4000.000000); +#550 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#549)); +#551 = IFCPRODUCTDEFINITIONSHAPE($,$,(#550)); +#552 = IFCBEAM('GUID',$,'Girder S1-G2-seg7',$,$,#527,#551,$,.BEAM.); +#553 = IFCCARTESIANPOINT((1250.000000, 997.5, 30000.000000)); +#554 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#555 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#556 = IFCAXIS2PLACEMENT3D(#553,#554,#555); +#557 = IFCLOCALPLACEMENT(#13,#556); +#558 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#559 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#560 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#561 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#562 = IFCCARTESIANPOINT((100.000000,700.000000)); +#563 = IFCCARTESIANPOINT((150.000000,750.000000)); +#564 = IFCCARTESIANPOINT((300.000000,750.000000)); +#565 = IFCCARTESIANPOINT((300.000000,900.000000)); +#566 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#567 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#568 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#569 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#570 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#571 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#572 = IFCPOLYLINE((#558, #559, #560, #561, #562, #563, #564, #565, #566, #567, #568, #569, #570, #571, #558)); +#573 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#572); +#574 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#575 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#576 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#577 = IFCAXIS2PLACEMENT3D(#574,#575,#576); +#578 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#579 = IFCEXTRUDEDAREASOLID(#573,#577,#578,4000.000000); +#580 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#579)); +#581 = IFCPRODUCTDEFINITIONSHAPE($,$,(#580)); +#582 = IFCBEAM('GUID',$,'Girder S1-G2-seg8',$,$,#557,#581,$,.BEAM.); +#583 = IFCCARTESIANPOINT((1250.000000, 985.5, 34000.000000)); +#584 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#585 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#586 = IFCAXIS2PLACEMENT3D(#583,#584,#585); +#587 = IFCLOCALPLACEMENT(#13,#586); +#588 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#589 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#590 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#591 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#592 = IFCCARTESIANPOINT((100.000000,700.000000)); +#593 = IFCCARTESIANPOINT((150.000000,750.000000)); +#594 = IFCCARTESIANPOINT((300.000000,750.000000)); +#595 = IFCCARTESIANPOINT((300.000000,900.000000)); +#596 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#597 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#598 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#599 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#600 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#601 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#602 = IFCPOLYLINE((#588, #589, #590, #591, #592, #593, #594, #595, #596, #597, #598, #599, #600, #601, #588)); +#603 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#602); +#604 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#605 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#606 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#607 = IFCAXIS2PLACEMENT3D(#604,#605,#606); +#608 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#609 = IFCEXTRUDEDAREASOLID(#603,#607,#608,4000.000000); +#610 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#609)); +#611 = IFCPRODUCTDEFINITIONSHAPE($,$,(#610)); +#612 = IFCBEAM('GUID',$,'Girder S1-G2-seg9',$,$,#587,#611,$,.BEAM.); +#613 = IFCCARTESIANPOINT((1250.000000, 969.5, 38000.000000)); +#614 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#615 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#616 = IFCAXIS2PLACEMENT3D(#613,#614,#615); +#617 = IFCLOCALPLACEMENT(#13,#616); +#618 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#619 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#620 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#621 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#622 = IFCCARTESIANPOINT((100.000000,700.000000)); +#623 = IFCCARTESIANPOINT((150.000000,750.000000)); +#624 = IFCCARTESIANPOINT((300.000000,750.000000)); +#625 = IFCCARTESIANPOINT((300.000000,900.000000)); +#626 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#627 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#628 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#629 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#630 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#631 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#632 = IFCPOLYLINE((#618, #619, #620, #621, #622, #623, #624, #625, #626, #627, #628, #629, #630, #631, #618)); +#633 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#632); +#634 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#635 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#636 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#637 = IFCAXIS2PLACEMENT3D(#634,#635,#636); +#638 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#639 = IFCEXTRUDEDAREASOLID(#633,#637,#638,4000.000000); +#640 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#639)); +#641 = IFCPRODUCTDEFINITIONSHAPE($,$,(#640)); +#642 = IFCBEAM('GUID',$,'Girder S1-G2-seg10',$,$,#617,#641,$,.BEAM.); +#643 = IFCCARTESIANPOINT((0.000000, 1970.000000, 20000.000000)); +#644 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#645 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#646 = IFCAXIS2PLACEMENT3D(#643,#644,#645); +#647 = IFCLOCALPLACEMENT(#13,#646); +#648 = IFCCARTESIANPOINT((0.000000,0.000000)); +#649 = IFCDIRECTION((1.000000,0.000000)); +#650 = IFCAXIS2PLACEMENT2D(#648,#649); +#651 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#650,4500.000000,220.000000); +#652 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#653 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#654 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#655 = IFCAXIS2PLACEMENT3D(#652,#653,#654); +#656 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#657 = IFCEXTRUDEDAREASOLID(#651,#655,#656,40000.000000); +#658 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#657)); +#659 = IFCPRODUCTDEFINITIONSHAPE($,$,(#658)); +#660 = IFCSLAB('GUID',$,'Deck Slab',$,$,#647,#659,$,.FLOOR.); +#661 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#662 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#663 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#664 = IFCAXIS2PLACEMENT3D(#661,#662,#663); +#665 = IFCLOCALPLACEMENT(#13,#664); +#666 = IFCCARTESIANPOINT((0.000000,0.000000)); +#667 = IFCDIRECTION((1.000000,0.000000)); +#668 = IFCAXIS2PLACEMENT2D(#666,#667); +#669 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#668,5500.000000,1860.000000); +#670 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#671 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#672 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#673 = IFCAXIS2PLACEMENT3D(#670,#671,#672); +#674 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#675 = IFCEXTRUDEDAREASOLID(#669,#673,#674,800.000000); +#676 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#675)); +#677 = IFCPRODUCTDEFINITIONSHAPE($,$,(#676)); +#678 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#665,#677,$,.PAD_FOOTING.); +#679 = IFCCARTESIANPOINT((0.000000, -930.000000, 40400.000000)); +#680 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#681 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#682 = IFCAXIS2PLACEMENT3D(#679,#680,#681); +#683 = IFCLOCALPLACEMENT(#13,#682); +#684 = IFCCARTESIANPOINT((0.000000,0.000000)); +#685 = IFCDIRECTION((1.000000,0.000000)); +#686 = IFCAXIS2PLACEMENT2D(#684,#685); +#687 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#686,5500.000000,1860.000000); +#688 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#689 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#690 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#691 = IFCAXIS2PLACEMENT3D(#688,#689,#690); +#692 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#693 = IFCEXTRUDEDAREASOLID(#687,#691,#692,800.000000); +#694 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#693)); +#695 = IFCPRODUCTDEFINITIONSHAPE($,$,(#694)); +#696 = IFCFOOTING('GUID',$,'Abutment End',$,$,#683,#695,$,.PAD_FOOTING.); +#697 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 0.000000)); +#698 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#699 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#700 = IFCAXIS2PLACEMENT3D(#697,#698,#699); +#701 = IFCLOCALPLACEMENT(#13,#700); +#702 = IFCCARTESIANPOINT((0.000000,0.000000)); +#703 = IFCDIRECTION((1.000000,0.000000)); +#704 = IFCAXIS2PLACEMENT2D(#702,#703); +#705 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#704,450.000000,60.000000); +#706 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#707 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#708 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#709 = IFCAXIS2PLACEMENT3D(#706,#707,#708); +#710 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#711 = IFCEXTRUDEDAREASOLID(#705,#709,#710,350.000000); +#712 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#711)); +#713 = IFCPRODUCTDEFINITIONSHAPE($,$,(#712)); +#714 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#701,#713,$,.ELASTOMERIC.); +#715 = IFCCARTESIANPOINT((1250.000000, 0.000000, 0.000000)); +#716 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#717 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#718 = IFCAXIS2PLACEMENT3D(#715,#716,#717); +#719 = IFCLOCALPLACEMENT(#13,#718); +#720 = IFCCARTESIANPOINT((0.000000,0.000000)); +#721 = IFCDIRECTION((1.000000,0.000000)); +#722 = IFCAXIS2PLACEMENT2D(#720,#721); +#723 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#722,450.000000,60.000000); +#724 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#725 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#726 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#727 = IFCAXIS2PLACEMENT3D(#724,#725,#726); +#728 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#729 = IFCEXTRUDEDAREASOLID(#723,#727,#728,350.000000); +#730 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#729)); +#731 = IFCPRODUCTDEFINITIONSHAPE($,$,(#730)); +#732 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#719,#731,$,.ELASTOMERIC.); +#733 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 40000.000000)); +#734 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#735 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#736 = IFCAXIS2PLACEMENT3D(#733,#734,#735); +#737 = IFCLOCALPLACEMENT(#13,#736); +#738 = IFCCARTESIANPOINT((0.000000,0.000000)); +#739 = IFCDIRECTION((1.000000,0.000000)); +#740 = IFCAXIS2PLACEMENT2D(#738,#739); +#741 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#740,450.000000,60.000000); +#742 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#743 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#744 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#745 = IFCAXIS2PLACEMENT3D(#742,#743,#744); +#746 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#747 = IFCEXTRUDEDAREASOLID(#741,#745,#746,350.000000); +#748 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#747)); +#749 = IFCPRODUCTDEFINITIONSHAPE($,$,(#748)); +#750 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#737,#749,$,.ELASTOMERIC.); +#751 = IFCCARTESIANPOINT((1250.000000, 0.000000, 40000.000000)); +#752 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#753 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#754 = IFCAXIS2PLACEMENT3D(#751,#752,#753); +#755 = IFCLOCALPLACEMENT(#13,#754); +#756 = IFCCARTESIANPOINT((0.000000,0.000000)); +#757 = IFCDIRECTION((1.000000,0.000000)); +#758 = IFCAXIS2PLACEMENT2D(#756,#757); +#759 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#758,450.000000,60.000000); +#760 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#761 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#762 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#763 = IFCAXIS2PLACEMENT3D(#760,#761,#762); +#764 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#765 = IFCEXTRUDEDAREASOLID(#759,#763,#764,350.000000); +#766 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#765)); +#767 = IFCPRODUCTDEFINITIONSHAPE($,$,(#766)); +#768 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#755,#767,$,.ELASTOMERIC.); +#769 = IFCCARTESIANPOINT((2000.000000, 2680.000000, 20000.000000)); +#770 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#771 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#772 = IFCAXIS2PLACEMENT3D(#769,#770,#771); +#773 = IFCLOCALPLACEMENT(#13,#772); +#774 = IFCCARTESIANPOINT((0.000000,0.000000)); +#775 = IFCDIRECTION((1.000000,0.000000)); +#776 = IFCAXIS2PLACEMENT2D(#774,#775); +#777 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#776,500.000000,1200.000000); +#778 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#779 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#780 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#781 = IFCAXIS2PLACEMENT3D(#778,#779,#780); +#782 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#783 = IFCEXTRUDEDAREASOLID(#777,#781,#782,40000.000000); +#784 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#783)); +#785 = IFCPRODUCTDEFINITIONSHAPE($,$,(#784)); +#786 = IFCRAILING('GUID',$,'Parapet R',$,$,#773,#785,$,.GUARDRAIL.); +#787 = IFCCARTESIANPOINT((-2000.000000, 2680.000000, 20000.000000)); +#788 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#789 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#790 = IFCAXIS2PLACEMENT3D(#787,#788,#789); +#791 = IFCLOCALPLACEMENT(#13,#790); +#792 = IFCCARTESIANPOINT((0.000000,0.000000)); +#793 = IFCDIRECTION((1.000000,0.000000)); +#794 = IFCAXIS2PLACEMENT2D(#792,#793); +#795 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#794,500.000000,1200.000000); +#796 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#797 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#798 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#799 = IFCAXIS2PLACEMENT3D(#796,#797,#798); +#800 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#801 = IFCEXTRUDEDAREASOLID(#795,#799,#800,40000.000000); +#802 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#801)); +#803 = IFCPRODUCTDEFINITIONSHAPE($,$,(#802)); +#804 = IFCRAILING('GUID',$,'Parapet L',$,$,#791,#803,$,.GUARDRAIL.); +#805 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#60, #96, #126, #156, #186, #216, #246, #276, #306, #336, #366, #402, #432, #462, #492, #522, #552, #582, #612, #642, #660, #678, #696, #714, #732, #750, #768, #786, #804),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__parapets_off.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__parapets_off.snap new file mode 100644 index 0000000..5ab5e50 --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__parapets_off.snap @@ -0,0 +1,242 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,40000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,40000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-1250.000000, 960.000000, 20000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#37 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#38 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#39 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#40 = IFCCARTESIANPOINT((100.000000,700.000000)); +#41 = IFCCARTESIANPOINT((150.000000,750.000000)); +#42 = IFCCARTESIANPOINT((300.000000,750.000000)); +#43 = IFCCARTESIANPOINT((300.000000,900.000000)); +#44 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#45 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#46 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#47 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#48 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#49 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#50 = IFCPOLYLINE((#36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #36)); +#51 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#50); +#52 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#53 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#54 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#55 = IFCAXIS2PLACEMENT3D(#52,#53,#54); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCEXTRUDEDAREASOLID(#51,#55,#56,40000.000000); +#58 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#57)); +#59 = IFCPRODUCTDEFINITIONSHAPE($,$,(#58)); +#60 = IFCBEAM('GUID',$,'Girder S1-G1',$,$,#35,#59,$,.BEAM.); +#61 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#62 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#63 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#64 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#65 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#61, #62, #63, #64)); +#66 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#60),#65); +#67 = IFCCARTESIANPOINT((1250.000000, 960.000000, 20000.000000)); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#70 = IFCAXIS2PLACEMENT3D(#67,#68,#69); +#71 = IFCLOCALPLACEMENT(#13,#70); +#72 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#73 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#74 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#75 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#76 = IFCCARTESIANPOINT((100.000000,700.000000)); +#77 = IFCCARTESIANPOINT((150.000000,750.000000)); +#78 = IFCCARTESIANPOINT((300.000000,750.000000)); +#79 = IFCCARTESIANPOINT((300.000000,900.000000)); +#80 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#81 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#82 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#83 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#84 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#85 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#86 = IFCPOLYLINE((#72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #72)); +#87 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#86); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,40000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCBEAM('GUID',$,'Girder S1-G2',$,$,#71,#95,$,.BEAM.); +#97 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#98 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#99 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#100 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#101 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#97, #98, #99, #100)); +#102 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#96),#101); +#103 = IFCCARTESIANPOINT((0.000000, 1970.000000, 20000.000000)); +#104 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#105 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#106 = IFCAXIS2PLACEMENT3D(#103,#104,#105); +#107 = IFCLOCALPLACEMENT(#13,#106); +#108 = IFCCARTESIANPOINT((0.000000,0.000000)); +#109 = IFCDIRECTION((1.000000,0.000000)); +#110 = IFCAXIS2PLACEMENT2D(#108,#109); +#111 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#110,4500.000000,220.000000); +#112 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#113 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#114 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#115 = IFCAXIS2PLACEMENT3D(#112,#113,#114); +#116 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#117 = IFCEXTRUDEDAREASOLID(#111,#115,#116,40000.000000); +#118 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#117)); +#119 = IFCPRODUCTDEFINITIONSHAPE($,$,(#118)); +#120 = IFCSLAB('GUID',$,'Deck Slab',$,$,#107,#119,$,.FLOOR.); +#121 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#122 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#123 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#124 = IFCAXIS2PLACEMENT3D(#121,#122,#123); +#125 = IFCLOCALPLACEMENT(#13,#124); +#126 = IFCCARTESIANPOINT((0.000000,0.000000)); +#127 = IFCDIRECTION((1.000000,0.000000)); +#128 = IFCAXIS2PLACEMENT2D(#126,#127); +#129 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#128,5500.000000,1860.000000); +#130 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#131 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#132 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#133 = IFCAXIS2PLACEMENT3D(#130,#131,#132); +#134 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#135 = IFCEXTRUDEDAREASOLID(#129,#133,#134,800.000000); +#136 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#135)); +#137 = IFCPRODUCTDEFINITIONSHAPE($,$,(#136)); +#138 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#125,#137,$,.PAD_FOOTING.); +#139 = IFCCARTESIANPOINT((0.000000, -930.000000, 40400.000000)); +#140 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#141 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#142 = IFCAXIS2PLACEMENT3D(#139,#140,#141); +#143 = IFCLOCALPLACEMENT(#13,#142); +#144 = IFCCARTESIANPOINT((0.000000,0.000000)); +#145 = IFCDIRECTION((1.000000,0.000000)); +#146 = IFCAXIS2PLACEMENT2D(#144,#145); +#147 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#146,5500.000000,1860.000000); +#148 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#149 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#150 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#151 = IFCAXIS2PLACEMENT3D(#148,#149,#150); +#152 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#153 = IFCEXTRUDEDAREASOLID(#147,#151,#152,800.000000); +#154 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#153)); +#155 = IFCPRODUCTDEFINITIONSHAPE($,$,(#154)); +#156 = IFCFOOTING('GUID',$,'Abutment End',$,$,#143,#155,$,.PAD_FOOTING.); +#157 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 0.000000)); +#158 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#159 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#160 = IFCAXIS2PLACEMENT3D(#157,#158,#159); +#161 = IFCLOCALPLACEMENT(#13,#160); +#162 = IFCCARTESIANPOINT((0.000000,0.000000)); +#163 = IFCDIRECTION((1.000000,0.000000)); +#164 = IFCAXIS2PLACEMENT2D(#162,#163); +#165 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#164,450.000000,60.000000); +#166 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#167 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#168 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#169 = IFCAXIS2PLACEMENT3D(#166,#167,#168); +#170 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#171 = IFCEXTRUDEDAREASOLID(#165,#169,#170,350.000000); +#172 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#171)); +#173 = IFCPRODUCTDEFINITIONSHAPE($,$,(#172)); +#174 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#161,#173,$,.ELASTOMERIC.); +#175 = IFCCARTESIANPOINT((1250.000000, 0.000000, 0.000000)); +#176 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#177 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#178 = IFCAXIS2PLACEMENT3D(#175,#176,#177); +#179 = IFCLOCALPLACEMENT(#13,#178); +#180 = IFCCARTESIANPOINT((0.000000,0.000000)); +#181 = IFCDIRECTION((1.000000,0.000000)); +#182 = IFCAXIS2PLACEMENT2D(#180,#181); +#183 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#182,450.000000,60.000000); +#184 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#185 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#186 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#187 = IFCAXIS2PLACEMENT3D(#184,#185,#186); +#188 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#189 = IFCEXTRUDEDAREASOLID(#183,#187,#188,350.000000); +#190 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#189)); +#191 = IFCPRODUCTDEFINITIONSHAPE($,$,(#190)); +#192 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#179,#191,$,.ELASTOMERIC.); +#193 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 40000.000000)); +#194 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#195 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#196 = IFCAXIS2PLACEMENT3D(#193,#194,#195); +#197 = IFCLOCALPLACEMENT(#13,#196); +#198 = IFCCARTESIANPOINT((0.000000,0.000000)); +#199 = IFCDIRECTION((1.000000,0.000000)); +#200 = IFCAXIS2PLACEMENT2D(#198,#199); +#201 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#200,450.000000,60.000000); +#202 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#203 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#204 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#205 = IFCAXIS2PLACEMENT3D(#202,#203,#204); +#206 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#207 = IFCEXTRUDEDAREASOLID(#201,#205,#206,350.000000); +#208 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#207)); +#209 = IFCPRODUCTDEFINITIONSHAPE($,$,(#208)); +#210 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#197,#209,$,.ELASTOMERIC.); +#211 = IFCCARTESIANPOINT((1250.000000, 0.000000, 40000.000000)); +#212 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#213 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#214 = IFCAXIS2PLACEMENT3D(#211,#212,#213); +#215 = IFCLOCALPLACEMENT(#13,#214); +#216 = IFCCARTESIANPOINT((0.000000,0.000000)); +#217 = IFCDIRECTION((1.000000,0.000000)); +#218 = IFCAXIS2PLACEMENT2D(#216,#217); +#219 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#218,450.000000,60.000000); +#220 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#221 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#222 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#223 = IFCAXIS2PLACEMENT3D(#220,#221,#222); +#224 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#225 = IFCEXTRUDEDAREASOLID(#219,#223,#224,350.000000); +#226 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#225)); +#227 = IFCPRODUCTDEFINITIONSHAPE($,$,(#226)); +#228 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#215,#227,$,.ELASTOMERIC.); +#229 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#60, #96, #120, #138, #156, #174, #192, #210, #228),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__rectangle_section_no_profile_poly.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__rectangle_section_no_profile_poly.snap new file mode 100644 index 0000000..b4aa20a --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__rectangle_section_no_profile_poly.snap @@ -0,0 +1,254 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,40000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,40000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-1250.000000, 960.000000, 20000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((0.000000,0.000000)); +#37 = IFCDIRECTION((1.000000,0.000000)); +#38 = IFCAXIS2PLACEMENT2D(#36,#37); +#39 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#38,700.000000,1800.000000); +#40 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#41 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#42 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#43 = IFCAXIS2PLACEMENT3D(#40,#41,#42); +#44 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#45 = IFCEXTRUDEDAREASOLID(#39,#43,#44,40000.000000); +#46 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#45)); +#47 = IFCPRODUCTDEFINITIONSHAPE($,$,(#46)); +#48 = IFCBEAM('GUID',$,'Girder S1-G1',$,$,#35,#47,$,.BEAM.); +#49 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#50 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#51 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#52 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#53 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#49, #50, #51, #52)); +#54 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#48),#53); +#55 = IFCCARTESIANPOINT((1250.000000, 960.000000, 20000.000000)); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#58 = IFCAXIS2PLACEMENT3D(#55,#56,#57); +#59 = IFCLOCALPLACEMENT(#13,#58); +#60 = IFCCARTESIANPOINT((0.000000,0.000000)); +#61 = IFCDIRECTION((1.000000,0.000000)); +#62 = IFCAXIS2PLACEMENT2D(#60,#61); +#63 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#62,700.000000,1800.000000); +#64 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#65 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#66 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#67 = IFCAXIS2PLACEMENT3D(#64,#65,#66); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCEXTRUDEDAREASOLID(#63,#67,#68,40000.000000); +#70 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#69)); +#71 = IFCPRODUCTDEFINITIONSHAPE($,$,(#70)); +#72 = IFCBEAM('GUID',$,'Girder S1-G2',$,$,#59,#71,$,.BEAM.); +#73 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#74 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#75 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#76 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#77 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#73, #74, #75, #76)); +#78 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#72),#77); +#79 = IFCCARTESIANPOINT((0.000000, 1970.000000, 20000.000000)); +#80 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#81 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#82 = IFCAXIS2PLACEMENT3D(#79,#80,#81); +#83 = IFCLOCALPLACEMENT(#13,#82); +#84 = IFCCARTESIANPOINT((0.000000,0.000000)); +#85 = IFCDIRECTION((1.000000,0.000000)); +#86 = IFCAXIS2PLACEMENT2D(#84,#85); +#87 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#86,4500.000000,220.000000); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,40000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCSLAB('GUID',$,'Deck Slab',$,$,#83,#95,$,.FLOOR.); +#97 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#98 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#99 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#100 = IFCAXIS2PLACEMENT3D(#97,#98,#99); +#101 = IFCLOCALPLACEMENT(#13,#100); +#102 = IFCCARTESIANPOINT((0.000000,0.000000)); +#103 = IFCDIRECTION((1.000000,0.000000)); +#104 = IFCAXIS2PLACEMENT2D(#102,#103); +#105 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#104,5500.000000,1860.000000); +#106 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#107 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#108 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#109 = IFCAXIS2PLACEMENT3D(#106,#107,#108); +#110 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#111 = IFCEXTRUDEDAREASOLID(#105,#109,#110,800.000000); +#112 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#111)); +#113 = IFCPRODUCTDEFINITIONSHAPE($,$,(#112)); +#114 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#101,#113,$,.PAD_FOOTING.); +#115 = IFCCARTESIANPOINT((0.000000, -930.000000, 40400.000000)); +#116 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#117 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#118 = IFCAXIS2PLACEMENT3D(#115,#116,#117); +#119 = IFCLOCALPLACEMENT(#13,#118); +#120 = IFCCARTESIANPOINT((0.000000,0.000000)); +#121 = IFCDIRECTION((1.000000,0.000000)); +#122 = IFCAXIS2PLACEMENT2D(#120,#121); +#123 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#122,5500.000000,1860.000000); +#124 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#125 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#126 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#127 = IFCAXIS2PLACEMENT3D(#124,#125,#126); +#128 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#129 = IFCEXTRUDEDAREASOLID(#123,#127,#128,800.000000); +#130 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#129)); +#131 = IFCPRODUCTDEFINITIONSHAPE($,$,(#130)); +#132 = IFCFOOTING('GUID',$,'Abutment End',$,$,#119,#131,$,.PAD_FOOTING.); +#133 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 0.000000)); +#134 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#135 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#136 = IFCAXIS2PLACEMENT3D(#133,#134,#135); +#137 = IFCLOCALPLACEMENT(#13,#136); +#138 = IFCCARTESIANPOINT((0.000000,0.000000)); +#139 = IFCDIRECTION((1.000000,0.000000)); +#140 = IFCAXIS2PLACEMENT2D(#138,#139); +#141 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#140,450.000000,60.000000); +#142 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#143 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#144 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#145 = IFCAXIS2PLACEMENT3D(#142,#143,#144); +#146 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#147 = IFCEXTRUDEDAREASOLID(#141,#145,#146,350.000000); +#148 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#147)); +#149 = IFCPRODUCTDEFINITIONSHAPE($,$,(#148)); +#150 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#137,#149,$,.ELASTOMERIC.); +#151 = IFCCARTESIANPOINT((1250.000000, 0.000000, 0.000000)); +#152 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#153 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#154 = IFCAXIS2PLACEMENT3D(#151,#152,#153); +#155 = IFCLOCALPLACEMENT(#13,#154); +#156 = IFCCARTESIANPOINT((0.000000,0.000000)); +#157 = IFCDIRECTION((1.000000,0.000000)); +#158 = IFCAXIS2PLACEMENT2D(#156,#157); +#159 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#158,450.000000,60.000000); +#160 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#161 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#162 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#163 = IFCAXIS2PLACEMENT3D(#160,#161,#162); +#164 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#165 = IFCEXTRUDEDAREASOLID(#159,#163,#164,350.000000); +#166 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#165)); +#167 = IFCPRODUCTDEFINITIONSHAPE($,$,(#166)); +#168 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#155,#167,$,.ELASTOMERIC.); +#169 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 40000.000000)); +#170 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#171 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#172 = IFCAXIS2PLACEMENT3D(#169,#170,#171); +#173 = IFCLOCALPLACEMENT(#13,#172); +#174 = IFCCARTESIANPOINT((0.000000,0.000000)); +#175 = IFCDIRECTION((1.000000,0.000000)); +#176 = IFCAXIS2PLACEMENT2D(#174,#175); +#177 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#176,450.000000,60.000000); +#178 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#179 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#180 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#181 = IFCAXIS2PLACEMENT3D(#178,#179,#180); +#182 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#183 = IFCEXTRUDEDAREASOLID(#177,#181,#182,350.000000); +#184 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#183)); +#185 = IFCPRODUCTDEFINITIONSHAPE($,$,(#184)); +#186 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#173,#185,$,.ELASTOMERIC.); +#187 = IFCCARTESIANPOINT((1250.000000, 0.000000, 40000.000000)); +#188 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#189 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#190 = IFCAXIS2PLACEMENT3D(#187,#188,#189); +#191 = IFCLOCALPLACEMENT(#13,#190); +#192 = IFCCARTESIANPOINT((0.000000,0.000000)); +#193 = IFCDIRECTION((1.000000,0.000000)); +#194 = IFCAXIS2PLACEMENT2D(#192,#193); +#195 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#194,450.000000,60.000000); +#196 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#197 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#198 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#199 = IFCAXIS2PLACEMENT3D(#196,#197,#198); +#200 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#201 = IFCEXTRUDEDAREASOLID(#195,#199,#200,350.000000); +#202 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#201)); +#203 = IFCPRODUCTDEFINITIONSHAPE($,$,(#202)); +#204 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#191,#203,$,.ELASTOMERIC.); +#205 = IFCCARTESIANPOINT((2000.000000, 2680.000000, 20000.000000)); +#206 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#207 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#208 = IFCAXIS2PLACEMENT3D(#205,#206,#207); +#209 = IFCLOCALPLACEMENT(#13,#208); +#210 = IFCCARTESIANPOINT((0.000000,0.000000)); +#211 = IFCDIRECTION((1.000000,0.000000)); +#212 = IFCAXIS2PLACEMENT2D(#210,#211); +#213 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#212,500.000000,1200.000000); +#214 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#215 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#216 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#217 = IFCAXIS2PLACEMENT3D(#214,#215,#216); +#218 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#219 = IFCEXTRUDEDAREASOLID(#213,#217,#218,40000.000000); +#220 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#219)); +#221 = IFCPRODUCTDEFINITIONSHAPE($,$,(#220)); +#222 = IFCRAILING('GUID',$,'Parapet R',$,$,#209,#221,$,.GUARDRAIL.); +#223 = IFCCARTESIANPOINT((-2000.000000, 2680.000000, 20000.000000)); +#224 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#225 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#226 = IFCAXIS2PLACEMENT3D(#223,#224,#225); +#227 = IFCLOCALPLACEMENT(#13,#226); +#228 = IFCCARTESIANPOINT((0.000000,0.000000)); +#229 = IFCDIRECTION((1.000000,0.000000)); +#230 = IFCAXIS2PLACEMENT2D(#228,#229); +#231 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#230,500.000000,1200.000000); +#232 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#233 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#234 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#235 = IFCAXIS2PLACEMENT3D(#232,#233,#234); +#236 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#237 = IFCEXTRUDEDAREASOLID(#231,#235,#236,40000.000000); +#238 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#237)); +#239 = IFCPRODUCTDEFINITIONSHAPE($,$,(#238)); +#240 = IFCRAILING('GUID',$,'Parapet L',$,$,#227,#239,$,.GUARDRAIL.); +#241 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#48, #72, #96, #114, #132, #150, #168, #186, #204, #222, #240),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__single_span_psc_i_default.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__single_span_psc_i_default.snap new file mode 100644 index 0000000..b55eae5 --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__single_span_psc_i_default.snap @@ -0,0 +1,494 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,40000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,40000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-5000.000000, 960.000000, 20000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#37 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#38 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#39 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#40 = IFCCARTESIANPOINT((100.000000,700.000000)); +#41 = IFCCARTESIANPOINT((150.000000,750.000000)); +#42 = IFCCARTESIANPOINT((300.000000,750.000000)); +#43 = IFCCARTESIANPOINT((300.000000,900.000000)); +#44 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#45 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#46 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#47 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#48 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#49 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#50 = IFCPOLYLINE((#36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #36)); +#51 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#50); +#52 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#53 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#54 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#55 = IFCAXIS2PLACEMENT3D(#52,#53,#54); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCEXTRUDEDAREASOLID(#51,#55,#56,40000.000000); +#58 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#57)); +#59 = IFCPRODUCTDEFINITIONSHAPE($,$,(#58)); +#60 = IFCBEAM('GUID',$,'Girder S1-G1',$,$,#35,#59,$,.BEAM.); +#61 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#62 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#63 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#64 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#65 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#61, #62, #63, #64)); +#66 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#60),#65); +#67 = IFCCARTESIANPOINT((-2500.000000, 960.000000, 20000.000000)); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#70 = IFCAXIS2PLACEMENT3D(#67,#68,#69); +#71 = IFCLOCALPLACEMENT(#13,#70); +#72 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#73 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#74 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#75 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#76 = IFCCARTESIANPOINT((100.000000,700.000000)); +#77 = IFCCARTESIANPOINT((150.000000,750.000000)); +#78 = IFCCARTESIANPOINT((300.000000,750.000000)); +#79 = IFCCARTESIANPOINT((300.000000,900.000000)); +#80 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#81 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#82 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#83 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#84 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#85 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#86 = IFCPOLYLINE((#72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #72)); +#87 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#86); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,40000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCBEAM('GUID',$,'Girder S1-G2',$,$,#71,#95,$,.BEAM.); +#97 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#98 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#99 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#100 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#101 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#97, #98, #99, #100)); +#102 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#96),#101); +#103 = IFCCARTESIANPOINT((0.000000, 960.000000, 20000.000000)); +#104 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#105 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#106 = IFCAXIS2PLACEMENT3D(#103,#104,#105); +#107 = IFCLOCALPLACEMENT(#13,#106); +#108 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#109 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#110 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#111 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#112 = IFCCARTESIANPOINT((100.000000,700.000000)); +#113 = IFCCARTESIANPOINT((150.000000,750.000000)); +#114 = IFCCARTESIANPOINT((300.000000,750.000000)); +#115 = IFCCARTESIANPOINT((300.000000,900.000000)); +#116 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#117 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#118 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#119 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#120 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#121 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#122 = IFCPOLYLINE((#108, #109, #110, #111, #112, #113, #114, #115, #116, #117, #118, #119, #120, #121, #108)); +#123 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#122); +#124 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#125 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#126 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#127 = IFCAXIS2PLACEMENT3D(#124,#125,#126); +#128 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#129 = IFCEXTRUDEDAREASOLID(#123,#127,#128,40000.000000); +#130 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#129)); +#131 = IFCPRODUCTDEFINITIONSHAPE($,$,(#130)); +#132 = IFCBEAM('GUID',$,'Girder S1-G3',$,$,#107,#131,$,.BEAM.); +#133 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G3'),$); +#134 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#135 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#136 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#137 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#133, #134, #135, #136)); +#138 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#132),#137); +#139 = IFCCARTESIANPOINT((2500.000000, 960.000000, 20000.000000)); +#140 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#141 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#142 = IFCAXIS2PLACEMENT3D(#139,#140,#141); +#143 = IFCLOCALPLACEMENT(#13,#142); +#144 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#145 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#146 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#147 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#148 = IFCCARTESIANPOINT((100.000000,700.000000)); +#149 = IFCCARTESIANPOINT((150.000000,750.000000)); +#150 = IFCCARTESIANPOINT((300.000000,750.000000)); +#151 = IFCCARTESIANPOINT((300.000000,900.000000)); +#152 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#153 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#154 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#155 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#156 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#157 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#158 = IFCPOLYLINE((#144, #145, #146, #147, #148, #149, #150, #151, #152, #153, #154, #155, #156, #157, #144)); +#159 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#158); +#160 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#161 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#162 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#163 = IFCAXIS2PLACEMENT3D(#160,#161,#162); +#164 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#165 = IFCEXTRUDEDAREASOLID(#159,#163,#164,40000.000000); +#166 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#165)); +#167 = IFCPRODUCTDEFINITIONSHAPE($,$,(#166)); +#168 = IFCBEAM('GUID',$,'Girder S1-G4',$,$,#143,#167,$,.BEAM.); +#169 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G4'),$); +#170 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#171 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#172 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#173 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#169, #170, #171, #172)); +#174 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#168),#173); +#175 = IFCCARTESIANPOINT((5000.000000, 960.000000, 20000.000000)); +#176 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#177 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#178 = IFCAXIS2PLACEMENT3D(#175,#176,#177); +#179 = IFCLOCALPLACEMENT(#13,#178); +#180 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#181 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#182 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#183 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#184 = IFCCARTESIANPOINT((100.000000,700.000000)); +#185 = IFCCARTESIANPOINT((150.000000,750.000000)); +#186 = IFCCARTESIANPOINT((300.000000,750.000000)); +#187 = IFCCARTESIANPOINT((300.000000,900.000000)); +#188 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#189 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#190 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#191 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#192 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#193 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#194 = IFCPOLYLINE((#180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #180)); +#195 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#194); +#196 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#197 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#198 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#199 = IFCAXIS2PLACEMENT3D(#196,#197,#198); +#200 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#201 = IFCEXTRUDEDAREASOLID(#195,#199,#200,40000.000000); +#202 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#201)); +#203 = IFCPRODUCTDEFINITIONSHAPE($,$,(#202)); +#204 = IFCBEAM('GUID',$,'Girder S1-G5',$,$,#179,#203,$,.BEAM.); +#205 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G5'),$); +#206 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#207 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#208 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#209 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#205, #206, #207, #208)); +#210 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#204),#209); +#211 = IFCCARTESIANPOINT((0.000000, 1970.000000, 20000.000000)); +#212 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#213 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#214 = IFCAXIS2PLACEMENT3D(#211,#212,#213); +#215 = IFCLOCALPLACEMENT(#13,#214); +#216 = IFCCARTESIANPOINT((0.000000,0.000000)); +#217 = IFCDIRECTION((1.000000,0.000000)); +#218 = IFCAXIS2PLACEMENT2D(#216,#217); +#219 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#218,12000.000000,220.000000); +#220 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#221 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#222 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#223 = IFCAXIS2PLACEMENT3D(#220,#221,#222); +#224 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#225 = IFCEXTRUDEDAREASOLID(#219,#223,#224,40000.000000); +#226 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#225)); +#227 = IFCPRODUCTDEFINITIONSHAPE($,$,(#226)); +#228 = IFCSLAB('GUID',$,'Deck Slab',$,$,#215,#227,$,.FLOOR.); +#229 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#230 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#231 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#232 = IFCAXIS2PLACEMENT3D(#229,#230,#231); +#233 = IFCLOCALPLACEMENT(#13,#232); +#234 = IFCCARTESIANPOINT((0.000000,0.000000)); +#235 = IFCDIRECTION((1.000000,0.000000)); +#236 = IFCAXIS2PLACEMENT2D(#234,#235); +#237 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#236,13000.000000,1860.000000); +#238 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#239 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#240 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#241 = IFCAXIS2PLACEMENT3D(#238,#239,#240); +#242 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#243 = IFCEXTRUDEDAREASOLID(#237,#241,#242,800.000000); +#244 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#243)); +#245 = IFCPRODUCTDEFINITIONSHAPE($,$,(#244)); +#246 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#233,#245,$,.PAD_FOOTING.); +#247 = IFCCARTESIANPOINT((0.000000, -930.000000, 40400.000000)); +#248 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#249 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#250 = IFCAXIS2PLACEMENT3D(#247,#248,#249); +#251 = IFCLOCALPLACEMENT(#13,#250); +#252 = IFCCARTESIANPOINT((0.000000,0.000000)); +#253 = IFCDIRECTION((1.000000,0.000000)); +#254 = IFCAXIS2PLACEMENT2D(#252,#253); +#255 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#254,13000.000000,1860.000000); +#256 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#257 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#258 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#259 = IFCAXIS2PLACEMENT3D(#256,#257,#258); +#260 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#261 = IFCEXTRUDEDAREASOLID(#255,#259,#260,800.000000); +#262 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#261)); +#263 = IFCPRODUCTDEFINITIONSHAPE($,$,(#262)); +#264 = IFCFOOTING('GUID',$,'Abutment End',$,$,#251,#263,$,.PAD_FOOTING.); +#265 = IFCCARTESIANPOINT((-5000.000000, 0.000000, 0.000000)); +#266 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#267 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#268 = IFCAXIS2PLACEMENT3D(#265,#266,#267); +#269 = IFCLOCALPLACEMENT(#13,#268); +#270 = IFCCARTESIANPOINT((0.000000,0.000000)); +#271 = IFCDIRECTION((1.000000,0.000000)); +#272 = IFCAXIS2PLACEMENT2D(#270,#271); +#273 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#272,450.000000,60.000000); +#274 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#275 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#276 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#277 = IFCAXIS2PLACEMENT3D(#274,#275,#276); +#278 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#279 = IFCEXTRUDEDAREASOLID(#273,#277,#278,350.000000); +#280 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#279)); +#281 = IFCPRODUCTDEFINITIONSHAPE($,$,(#280)); +#282 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#269,#281,$,.ELASTOMERIC.); +#283 = IFCCARTESIANPOINT((-2500.000000, 0.000000, 0.000000)); +#284 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#285 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#286 = IFCAXIS2PLACEMENT3D(#283,#284,#285); +#287 = IFCLOCALPLACEMENT(#13,#286); +#288 = IFCCARTESIANPOINT((0.000000,0.000000)); +#289 = IFCDIRECTION((1.000000,0.000000)); +#290 = IFCAXIS2PLACEMENT2D(#288,#289); +#291 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#290,450.000000,60.000000); +#292 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#293 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#294 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#295 = IFCAXIS2PLACEMENT3D(#292,#293,#294); +#296 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#297 = IFCEXTRUDEDAREASOLID(#291,#295,#296,350.000000); +#298 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#297)); +#299 = IFCPRODUCTDEFINITIONSHAPE($,$,(#298)); +#300 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#287,#299,$,.ELASTOMERIC.); +#301 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#302 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#303 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#304 = IFCAXIS2PLACEMENT3D(#301,#302,#303); +#305 = IFCLOCALPLACEMENT(#13,#304); +#306 = IFCCARTESIANPOINT((0.000000,0.000000)); +#307 = IFCDIRECTION((1.000000,0.000000)); +#308 = IFCAXIS2PLACEMENT2D(#306,#307); +#309 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#308,450.000000,60.000000); +#310 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#311 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#312 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#313 = IFCAXIS2PLACEMENT3D(#310,#311,#312); +#314 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#315 = IFCEXTRUDEDAREASOLID(#309,#313,#314,350.000000); +#316 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#315)); +#317 = IFCPRODUCTDEFINITIONSHAPE($,$,(#316)); +#318 = IFCBEARING('GUID',$,'Bearing S0-G3',$,$,#305,#317,$,.ELASTOMERIC.); +#319 = IFCCARTESIANPOINT((2500.000000, 0.000000, 0.000000)); +#320 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#321 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#322 = IFCAXIS2PLACEMENT3D(#319,#320,#321); +#323 = IFCLOCALPLACEMENT(#13,#322); +#324 = IFCCARTESIANPOINT((0.000000,0.000000)); +#325 = IFCDIRECTION((1.000000,0.000000)); +#326 = IFCAXIS2PLACEMENT2D(#324,#325); +#327 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#326,450.000000,60.000000); +#328 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#329 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#330 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#331 = IFCAXIS2PLACEMENT3D(#328,#329,#330); +#332 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#333 = IFCEXTRUDEDAREASOLID(#327,#331,#332,350.000000); +#334 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#333)); +#335 = IFCPRODUCTDEFINITIONSHAPE($,$,(#334)); +#336 = IFCBEARING('GUID',$,'Bearing S0-G4',$,$,#323,#335,$,.ELASTOMERIC.); +#337 = IFCCARTESIANPOINT((5000.000000, 0.000000, 0.000000)); +#338 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#339 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#340 = IFCAXIS2PLACEMENT3D(#337,#338,#339); +#341 = IFCLOCALPLACEMENT(#13,#340); +#342 = IFCCARTESIANPOINT((0.000000,0.000000)); +#343 = IFCDIRECTION((1.000000,0.000000)); +#344 = IFCAXIS2PLACEMENT2D(#342,#343); +#345 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#344,450.000000,60.000000); +#346 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#347 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#348 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#349 = IFCAXIS2PLACEMENT3D(#346,#347,#348); +#350 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#351 = IFCEXTRUDEDAREASOLID(#345,#349,#350,350.000000); +#352 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#351)); +#353 = IFCPRODUCTDEFINITIONSHAPE($,$,(#352)); +#354 = IFCBEARING('GUID',$,'Bearing S0-G5',$,$,#341,#353,$,.ELASTOMERIC.); +#355 = IFCCARTESIANPOINT((-5000.000000, 0.000000, 40000.000000)); +#356 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#357 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#358 = IFCAXIS2PLACEMENT3D(#355,#356,#357); +#359 = IFCLOCALPLACEMENT(#13,#358); +#360 = IFCCARTESIANPOINT((0.000000,0.000000)); +#361 = IFCDIRECTION((1.000000,0.000000)); +#362 = IFCAXIS2PLACEMENT2D(#360,#361); +#363 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#362,450.000000,60.000000); +#364 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#365 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#366 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#367 = IFCAXIS2PLACEMENT3D(#364,#365,#366); +#368 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#369 = IFCEXTRUDEDAREASOLID(#363,#367,#368,350.000000); +#370 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#369)); +#371 = IFCPRODUCTDEFINITIONSHAPE($,$,(#370)); +#372 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#359,#371,$,.ELASTOMERIC.); +#373 = IFCCARTESIANPOINT((-2500.000000, 0.000000, 40000.000000)); +#374 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#375 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#376 = IFCAXIS2PLACEMENT3D(#373,#374,#375); +#377 = IFCLOCALPLACEMENT(#13,#376); +#378 = IFCCARTESIANPOINT((0.000000,0.000000)); +#379 = IFCDIRECTION((1.000000,0.000000)); +#380 = IFCAXIS2PLACEMENT2D(#378,#379); +#381 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#380,450.000000,60.000000); +#382 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#383 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#384 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#385 = IFCAXIS2PLACEMENT3D(#382,#383,#384); +#386 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#387 = IFCEXTRUDEDAREASOLID(#381,#385,#386,350.000000); +#388 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#387)); +#389 = IFCPRODUCTDEFINITIONSHAPE($,$,(#388)); +#390 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#377,#389,$,.ELASTOMERIC.); +#391 = IFCCARTESIANPOINT((0.000000, 0.000000, 40000.000000)); +#392 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#393 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#394 = IFCAXIS2PLACEMENT3D(#391,#392,#393); +#395 = IFCLOCALPLACEMENT(#13,#394); +#396 = IFCCARTESIANPOINT((0.000000,0.000000)); +#397 = IFCDIRECTION((1.000000,0.000000)); +#398 = IFCAXIS2PLACEMENT2D(#396,#397); +#399 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#398,450.000000,60.000000); +#400 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#401 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#402 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#403 = IFCAXIS2PLACEMENT3D(#400,#401,#402); +#404 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#405 = IFCEXTRUDEDAREASOLID(#399,#403,#404,350.000000); +#406 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#405)); +#407 = IFCPRODUCTDEFINITIONSHAPE($,$,(#406)); +#408 = IFCBEARING('GUID',$,'Bearing S1-G3',$,$,#395,#407,$,.ELASTOMERIC.); +#409 = IFCCARTESIANPOINT((2500.000000, 0.000000, 40000.000000)); +#410 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#411 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#412 = IFCAXIS2PLACEMENT3D(#409,#410,#411); +#413 = IFCLOCALPLACEMENT(#13,#412); +#414 = IFCCARTESIANPOINT((0.000000,0.000000)); +#415 = IFCDIRECTION((1.000000,0.000000)); +#416 = IFCAXIS2PLACEMENT2D(#414,#415); +#417 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#416,450.000000,60.000000); +#418 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#419 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#420 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#421 = IFCAXIS2PLACEMENT3D(#418,#419,#420); +#422 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#423 = IFCEXTRUDEDAREASOLID(#417,#421,#422,350.000000); +#424 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#423)); +#425 = IFCPRODUCTDEFINITIONSHAPE($,$,(#424)); +#426 = IFCBEARING('GUID',$,'Bearing S1-G4',$,$,#413,#425,$,.ELASTOMERIC.); +#427 = IFCCARTESIANPOINT((5000.000000, 0.000000, 40000.000000)); +#428 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#429 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#430 = IFCAXIS2PLACEMENT3D(#427,#428,#429); +#431 = IFCLOCALPLACEMENT(#13,#430); +#432 = IFCCARTESIANPOINT((0.000000,0.000000)); +#433 = IFCDIRECTION((1.000000,0.000000)); +#434 = IFCAXIS2PLACEMENT2D(#432,#433); +#435 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#434,450.000000,60.000000); +#436 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#437 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#438 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#439 = IFCAXIS2PLACEMENT3D(#436,#437,#438); +#440 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#441 = IFCEXTRUDEDAREASOLID(#435,#439,#440,350.000000); +#442 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#441)); +#443 = IFCPRODUCTDEFINITIONSHAPE($,$,(#442)); +#444 = IFCBEARING('GUID',$,'Bearing S1-G5',$,$,#431,#443,$,.ELASTOMERIC.); +#445 = IFCCARTESIANPOINT((5750.000000, 2680.000000, 20000.000000)); +#446 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#447 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#448 = IFCAXIS2PLACEMENT3D(#445,#446,#447); +#449 = IFCLOCALPLACEMENT(#13,#448); +#450 = IFCCARTESIANPOINT((0.000000,0.000000)); +#451 = IFCDIRECTION((1.000000,0.000000)); +#452 = IFCAXIS2PLACEMENT2D(#450,#451); +#453 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#452,500.000000,1200.000000); +#454 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#455 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#456 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#457 = IFCAXIS2PLACEMENT3D(#454,#455,#456); +#458 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#459 = IFCEXTRUDEDAREASOLID(#453,#457,#458,40000.000000); +#460 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#459)); +#461 = IFCPRODUCTDEFINITIONSHAPE($,$,(#460)); +#462 = IFCRAILING('GUID',$,'Parapet R',$,$,#449,#461,$,.GUARDRAIL.); +#463 = IFCCARTESIANPOINT((-5750.000000, 2680.000000, 20000.000000)); +#464 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#465 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#466 = IFCAXIS2PLACEMENT3D(#463,#464,#465); +#467 = IFCLOCALPLACEMENT(#13,#466); +#468 = IFCCARTESIANPOINT((0.000000,0.000000)); +#469 = IFCDIRECTION((1.000000,0.000000)); +#470 = IFCAXIS2PLACEMENT2D(#468,#469); +#471 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#470,500.000000,1200.000000); +#472 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#473 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#474 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#475 = IFCAXIS2PLACEMENT3D(#472,#473,#474); +#476 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#477 = IFCEXTRUDEDAREASOLID(#471,#475,#476,40000.000000); +#478 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#477)); +#479 = IFCPRODUCTDEFINITIONSHAPE($,$,(#478)); +#480 = IFCRAILING('GUID',$,'Parapet L',$,$,#467,#479,$,.GUARDRAIL.); +#481 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#60, #96, #132, #168, #204, #228, #246, #264, #282, #300, #318, #336, #354, #372, #390, #408, #426, #444, #462, #480),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__skewed_15_deg.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__skewed_15_deg.snap new file mode 100644 index 0000000..d95a023 --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__skewed_15_deg.snap @@ -0,0 +1,278 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,40000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,40000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-1250.000000, 960.000000, 20000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#37 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#38 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#39 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#40 = IFCCARTESIANPOINT((100.000000,700.000000)); +#41 = IFCCARTESIANPOINT((150.000000,750.000000)); +#42 = IFCCARTESIANPOINT((300.000000,750.000000)); +#43 = IFCCARTESIANPOINT((300.000000,900.000000)); +#44 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#45 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#46 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#47 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#48 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#49 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#50 = IFCPOLYLINE((#36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #36)); +#51 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#50); +#52 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#53 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#54 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#55 = IFCAXIS2PLACEMENT3D(#52,#53,#54); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCEXTRUDEDAREASOLID(#51,#55,#56,40000.000000); +#58 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#57)); +#59 = IFCPRODUCTDEFINITIONSHAPE($,$,(#58)); +#60 = IFCBEAM('GUID',$,'Girder S1-G1',$,$,#35,#59,$,.BEAM.); +#61 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#62 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#63 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#64 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#65 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#61, #62, #63, #64)); +#66 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#60),#65); +#67 = IFCCARTESIANPOINT((1250.000000, 960.000000, 20000.000000)); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#70 = IFCAXIS2PLACEMENT3D(#67,#68,#69); +#71 = IFCLOCALPLACEMENT(#13,#70); +#72 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#73 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#74 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#75 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#76 = IFCCARTESIANPOINT((100.000000,700.000000)); +#77 = IFCCARTESIANPOINT((150.000000,750.000000)); +#78 = IFCCARTESIANPOINT((300.000000,750.000000)); +#79 = IFCCARTESIANPOINT((300.000000,900.000000)); +#80 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#81 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#82 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#83 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#84 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#85 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#86 = IFCPOLYLINE((#72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #72)); +#87 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#86); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,40000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCBEAM('GUID',$,'Girder S1-G2',$,$,#71,#95,$,.BEAM.); +#97 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#98 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#99 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#100 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#101 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#97, #98, #99, #100)); +#102 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#96),#101); +#103 = IFCCARTESIANPOINT((0.000000, 1970.000000, 20000.000000)); +#104 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#105 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#106 = IFCAXIS2PLACEMENT3D(#103,#104,#105); +#107 = IFCLOCALPLACEMENT(#13,#106); +#108 = IFCCARTESIANPOINT((0.000000,0.000000)); +#109 = IFCDIRECTION((1.000000,0.000000)); +#110 = IFCAXIS2PLACEMENT2D(#108,#109); +#111 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#110,4500.000000,220.000000); +#112 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#113 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#114 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#115 = IFCAXIS2PLACEMENT3D(#112,#113,#114); +#116 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#117 = IFCEXTRUDEDAREASOLID(#111,#115,#116,40000.000000); +#118 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#117)); +#119 = IFCPRODUCTDEFINITIONSHAPE($,$,(#118)); +#120 = IFCSLAB('GUID',$,'Deck Slab',$,$,#107,#119,$,.FLOOR.); +#121 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#122 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#123 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#124 = IFCAXIS2PLACEMENT3D(#121,#122,#123); +#125 = IFCLOCALPLACEMENT(#13,#124); +#126 = IFCCARTESIANPOINT((0.000000,0.000000)); +#127 = IFCDIRECTION((1.000000,0.000000)); +#128 = IFCAXIS2PLACEMENT2D(#126,#127); +#129 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#128,5500.000000,1860.000000); +#130 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#131 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#132 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#133 = IFCAXIS2PLACEMENT3D(#130,#131,#132); +#134 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#135 = IFCEXTRUDEDAREASOLID(#129,#133,#134,800.000000); +#136 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#135)); +#137 = IFCPRODUCTDEFINITIONSHAPE($,$,(#136)); +#138 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#125,#137,$,.PAD_FOOTING.); +#139 = IFCCARTESIANPOINT((0.000000, -930.000000, 40400.000000)); +#140 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#141 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#142 = IFCAXIS2PLACEMENT3D(#139,#140,#141); +#143 = IFCLOCALPLACEMENT(#13,#142); +#144 = IFCCARTESIANPOINT((0.000000,0.000000)); +#145 = IFCDIRECTION((1.000000,0.000000)); +#146 = IFCAXIS2PLACEMENT2D(#144,#145); +#147 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#146,5500.000000,1860.000000); +#148 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#149 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#150 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#151 = IFCAXIS2PLACEMENT3D(#148,#149,#150); +#152 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#153 = IFCEXTRUDEDAREASOLID(#147,#151,#152,800.000000); +#154 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#153)); +#155 = IFCPRODUCTDEFINITIONSHAPE($,$,(#154)); +#156 = IFCFOOTING('GUID',$,'Abutment End',$,$,#143,#155,$,.PAD_FOOTING.); +#157 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 0.000000)); +#158 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#159 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#160 = IFCAXIS2PLACEMENT3D(#157,#158,#159); +#161 = IFCLOCALPLACEMENT(#13,#160); +#162 = IFCCARTESIANPOINT((0.000000,0.000000)); +#163 = IFCDIRECTION((1.000000,0.000000)); +#164 = IFCAXIS2PLACEMENT2D(#162,#163); +#165 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#164,450.000000,60.000000); +#166 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#167 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#168 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#169 = IFCAXIS2PLACEMENT3D(#166,#167,#168); +#170 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#171 = IFCEXTRUDEDAREASOLID(#165,#169,#170,350.000000); +#172 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#171)); +#173 = IFCPRODUCTDEFINITIONSHAPE($,$,(#172)); +#174 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#161,#173,$,.ELASTOMERIC.); +#175 = IFCCARTESIANPOINT((1250.000000, 0.000000, 0.000000)); +#176 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#177 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#178 = IFCAXIS2PLACEMENT3D(#175,#176,#177); +#179 = IFCLOCALPLACEMENT(#13,#178); +#180 = IFCCARTESIANPOINT((0.000000,0.000000)); +#181 = IFCDIRECTION((1.000000,0.000000)); +#182 = IFCAXIS2PLACEMENT2D(#180,#181); +#183 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#182,450.000000,60.000000); +#184 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#185 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#186 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#187 = IFCAXIS2PLACEMENT3D(#184,#185,#186); +#188 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#189 = IFCEXTRUDEDAREASOLID(#183,#187,#188,350.000000); +#190 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#189)); +#191 = IFCPRODUCTDEFINITIONSHAPE($,$,(#190)); +#192 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#179,#191,$,.ELASTOMERIC.); +#193 = IFCCARTESIANPOINT((-1250.000000, 0.000000, 40000.000000)); +#194 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#195 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#196 = IFCAXIS2PLACEMENT3D(#193,#194,#195); +#197 = IFCLOCALPLACEMENT(#13,#196); +#198 = IFCCARTESIANPOINT((0.000000,0.000000)); +#199 = IFCDIRECTION((1.000000,0.000000)); +#200 = IFCAXIS2PLACEMENT2D(#198,#199); +#201 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#200,450.000000,60.000000); +#202 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#203 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#204 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#205 = IFCAXIS2PLACEMENT3D(#202,#203,#204); +#206 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#207 = IFCEXTRUDEDAREASOLID(#201,#205,#206,350.000000); +#208 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#207)); +#209 = IFCPRODUCTDEFINITIONSHAPE($,$,(#208)); +#210 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#197,#209,$,.ELASTOMERIC.); +#211 = IFCCARTESIANPOINT((1250.000000, 0.000000, 40000.000000)); +#212 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#213 = IFCDIRECTION((0.965926, 0.000000, -0.258819)); +#214 = IFCAXIS2PLACEMENT3D(#211,#212,#213); +#215 = IFCLOCALPLACEMENT(#13,#214); +#216 = IFCCARTESIANPOINT((0.000000,0.000000)); +#217 = IFCDIRECTION((1.000000,0.000000)); +#218 = IFCAXIS2PLACEMENT2D(#216,#217); +#219 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#218,450.000000,60.000000); +#220 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#221 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#222 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#223 = IFCAXIS2PLACEMENT3D(#220,#221,#222); +#224 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#225 = IFCEXTRUDEDAREASOLID(#219,#223,#224,350.000000); +#226 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#225)); +#227 = IFCPRODUCTDEFINITIONSHAPE($,$,(#226)); +#228 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#215,#227,$,.ELASTOMERIC.); +#229 = IFCCARTESIANPOINT((2000.000000, 2680.000000, 20000.000000)); +#230 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#231 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#232 = IFCAXIS2PLACEMENT3D(#229,#230,#231); +#233 = IFCLOCALPLACEMENT(#13,#232); +#234 = IFCCARTESIANPOINT((0.000000,0.000000)); +#235 = IFCDIRECTION((1.000000,0.000000)); +#236 = IFCAXIS2PLACEMENT2D(#234,#235); +#237 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#236,500.000000,1200.000000); +#238 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#239 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#240 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#241 = IFCAXIS2PLACEMENT3D(#238,#239,#240); +#242 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#243 = IFCEXTRUDEDAREASOLID(#237,#241,#242,40000.000000); +#244 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#243)); +#245 = IFCPRODUCTDEFINITIONSHAPE($,$,(#244)); +#246 = IFCRAILING('GUID',$,'Parapet R',$,$,#233,#245,$,.GUARDRAIL.); +#247 = IFCCARTESIANPOINT((-2000.000000, 2680.000000, 20000.000000)); +#248 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#249 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#250 = IFCAXIS2PLACEMENT3D(#247,#248,#249); +#251 = IFCLOCALPLACEMENT(#13,#250); +#252 = IFCCARTESIANPOINT((0.000000,0.000000)); +#253 = IFCDIRECTION((1.000000,0.000000)); +#254 = IFCAXIS2PLACEMENT2D(#252,#253); +#255 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#254,500.000000,1200.000000); +#256 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#257 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#258 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#259 = IFCAXIS2PLACEMENT3D(#256,#257,#258); +#260 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#261 = IFCEXTRUDEDAREASOLID(#255,#259,#260,40000.000000); +#262 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#261)); +#263 = IFCPRODUCTDEFINITIONSHAPE($,$,(#262)); +#264 = IFCRAILING('GUID',$,'Parapet L',$,$,#251,#263,$,.GUARDRAIL.); +#265 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#60, #96, #120, #138, #156, #174, #192, #210, #228, #246, #264),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/ifc/tests/snapshots/snapshot_tests__two_span_multi_column.snap b/cimery/crates/ifc/tests/snapshots/snapshot_tests__two_span_multi_column.snap new file mode 100644 index 0000000..9693cee --- /dev/null +++ b/cimery/crates/ifc/tests/snapshots/snapshot_tests__two_span_multi_column.snap @@ -0,0 +1,530 @@ +--- +source: crates/ifc/tests/snapshot_tests.rs +expression: mask_guids(&ifc) +--- +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [BridgeViewDefinition]'), '2;1'); +FILE_NAME('cimery-bridge.ifc', '2026-04-15T00:00:00', (''), (''), 'cimery 0.1.0', 'cimery', ''); +FILE_SCHEMA(('IFC4X3_ADD2')); +ENDSEC; +DATA; +#1 = IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); +#2 = IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#3 = IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); +#4 = IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#5 = IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#6 = IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); +#7 = IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.); +#8 = IFCUNITASSIGNMENT((#1, #2, #3, #4, #5, #6, #7)); +#9 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#10 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#11 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#12 = IFCAXIS2PLACEMENT3D(#9,#10,#11); +#13 = IFCLOCALPLACEMENT($,#12); +#14 = IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.0E-5,#12,$); +#15 = IFCPROJECT('GUID',$,'cimery-bridge',$,$,$,$,(#14),#8); +#16 = IFCSITE('GUID',$,'Site',$,$,#13,$,$,.ELEMENT.,$,$,$,$,$); +#17 = IFCBRIDGE('GUID',$,'cimery-bridge',$,$,#13,$,$,.ELEMENT.,.GIRDER.); +#18 = IFCRELAGGREGATES('GUID',$,$,$,#15,(#16)); +#19 = IFCCARTESIANPOINT((0.000000,0.000000)); +#20 = IFCALIGNMENTHORIZONTALSEGMENT($,$,#19,0.000000,$,80000.000000,0.000000,$,.LINE.); +#21 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#20); +#22 = IFCALIGNMENTHORIZONTAL('GUID',$,'Horizontal',$,$,#13,$); +#23 = IFCRELNESTS('GUID',$,$,$,#22,(#21)); +#24 = IFCALIGNMENTVERTICALSEGMENT($,$,0.000000,80000.000000,0.000000,0.000000,0.000000,$,.CONSTANTGRADIENT.); +#25 = IFCALIGNMENTSEGMENT('GUID',$,$,$,$,#13,$,#24); +#26 = IFCALIGNMENTVERTICAL('GUID',$,'Vertical',$,$,#13,$); +#27 = IFCRELNESTS('GUID',$,$,$,#26,(#25)); +#28 = IFCALIGNMENT('GUID',$,'Bridge Alignment',$,$,#13,$,.USERDEFINED.,$); +#29 = IFCRELNESTS('GUID',$,$,$,#28,(#22,#26)); +#30 = IFCRELAGGREGATES('GUID',$,$,$,#16,(#17,#28)); +#31 = IFCCARTESIANPOINT((-2500.000000, 960.000000, 20000.000000)); +#32 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#33 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#34 = IFCAXIS2PLACEMENT3D(#31,#32,#33); +#35 = IFCLOCALPLACEMENT(#13,#34); +#36 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#37 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#38 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#39 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#40 = IFCCARTESIANPOINT((100.000000,700.000000)); +#41 = IFCCARTESIANPOINT((150.000000,750.000000)); +#42 = IFCCARTESIANPOINT((300.000000,750.000000)); +#43 = IFCCARTESIANPOINT((300.000000,900.000000)); +#44 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#45 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#46 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#47 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#48 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#49 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#50 = IFCPOLYLINE((#36, #37, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49, #36)); +#51 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#50); +#52 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#53 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#54 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#55 = IFCAXIS2PLACEMENT3D(#52,#53,#54); +#56 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#57 = IFCEXTRUDEDAREASOLID(#51,#55,#56,40000.000000); +#58 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#57)); +#59 = IFCPRODUCTDEFINITIONSHAPE($,$,(#58)); +#60 = IFCBEAM('GUID',$,'Girder S1-G1',$,$,#35,#59,$,.BEAM.); +#61 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G1'),$); +#62 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#63 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#64 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#65 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#61, #62, #63, #64)); +#66 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#60),#65); +#67 = IFCCARTESIANPOINT((0.000000, 960.000000, 20000.000000)); +#68 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#69 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#70 = IFCAXIS2PLACEMENT3D(#67,#68,#69); +#71 = IFCLOCALPLACEMENT(#13,#70); +#72 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#73 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#74 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#75 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#76 = IFCCARTESIANPOINT((100.000000,700.000000)); +#77 = IFCCARTESIANPOINT((150.000000,750.000000)); +#78 = IFCCARTESIANPOINT((300.000000,750.000000)); +#79 = IFCCARTESIANPOINT((300.000000,900.000000)); +#80 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#81 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#82 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#83 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#84 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#85 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#86 = IFCPOLYLINE((#72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #72)); +#87 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#86); +#88 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#89 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#90 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#91 = IFCAXIS2PLACEMENT3D(#88,#89,#90); +#92 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#93 = IFCEXTRUDEDAREASOLID(#87,#91,#92,40000.000000); +#94 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#93)); +#95 = IFCPRODUCTDEFINITIONSHAPE($,$,(#94)); +#96 = IFCBEAM('GUID',$,'Girder S1-G2',$,$,#71,#95,$,.BEAM.); +#97 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G2'),$); +#98 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#99 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#100 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#101 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#97, #98, #99, #100)); +#102 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#96),#101); +#103 = IFCCARTESIANPOINT((2500.000000, 960.000000, 20000.000000)); +#104 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#105 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#106 = IFCAXIS2PLACEMENT3D(#103,#104,#105); +#107 = IFCLOCALPLACEMENT(#13,#106); +#108 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#109 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#110 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#111 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#112 = IFCCARTESIANPOINT((100.000000,700.000000)); +#113 = IFCCARTESIANPOINT((150.000000,750.000000)); +#114 = IFCCARTESIANPOINT((300.000000,750.000000)); +#115 = IFCCARTESIANPOINT((300.000000,900.000000)); +#116 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#117 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#118 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#119 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#120 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#121 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#122 = IFCPOLYLINE((#108, #109, #110, #111, #112, #113, #114, #115, #116, #117, #118, #119, #120, #121, #108)); +#123 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#122); +#124 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#125 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#126 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#127 = IFCAXIS2PLACEMENT3D(#124,#125,#126); +#128 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#129 = IFCEXTRUDEDAREASOLID(#123,#127,#128,40000.000000); +#130 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#129)); +#131 = IFCPRODUCTDEFINITIONSHAPE($,$,(#130)); +#132 = IFCBEAM('GUID',$,'Girder S1-G3',$,$,#107,#131,$,.BEAM.); +#133 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S1-G3'),$); +#134 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#135 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#136 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#137 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#133, #134, #135, #136)); +#138 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#132),#137); +#139 = IFCCARTESIANPOINT((-2500.000000, 960.000000, 60000.000000)); +#140 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#141 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#142 = IFCAXIS2PLACEMENT3D(#139,#140,#141); +#143 = IFCLOCALPLACEMENT(#13,#142); +#144 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#145 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#146 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#147 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#148 = IFCCARTESIANPOINT((100.000000,700.000000)); +#149 = IFCCARTESIANPOINT((150.000000,750.000000)); +#150 = IFCCARTESIANPOINT((300.000000,750.000000)); +#151 = IFCCARTESIANPOINT((300.000000,900.000000)); +#152 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#153 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#154 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#155 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#156 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#157 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#158 = IFCPOLYLINE((#144, #145, #146, #147, #148, #149, #150, #151, #152, #153, #154, #155, #156, #157, #144)); +#159 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#158); +#160 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#161 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#162 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#163 = IFCAXIS2PLACEMENT3D(#160,#161,#162); +#164 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#165 = IFCEXTRUDEDAREASOLID(#159,#163,#164,40000.000000); +#166 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#165)); +#167 = IFCPRODUCTDEFINITIONSHAPE($,$,(#166)); +#168 = IFCBEAM('GUID',$,'Girder S2-G1',$,$,#143,#167,$,.BEAM.); +#169 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S2-G1'),$); +#170 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#171 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#172 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#173 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#169, #170, #171, #172)); +#174 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#168),#173); +#175 = IFCCARTESIANPOINT((0.000000, 960.000000, 60000.000000)); +#176 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#177 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#178 = IFCAXIS2PLACEMENT3D(#175,#176,#177); +#179 = IFCLOCALPLACEMENT(#13,#178); +#180 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#181 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#182 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#183 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#184 = IFCCARTESIANPOINT((100.000000,700.000000)); +#185 = IFCCARTESIANPOINT((150.000000,750.000000)); +#186 = IFCCARTESIANPOINT((300.000000,750.000000)); +#187 = IFCCARTESIANPOINT((300.000000,900.000000)); +#188 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#189 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#190 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#191 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#192 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#193 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#194 = IFCPOLYLINE((#180, #181, #182, #183, #184, #185, #186, #187, #188, #189, #190, #191, #192, #193, #180)); +#195 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#194); +#196 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#197 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#198 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#199 = IFCAXIS2PLACEMENT3D(#196,#197,#198); +#200 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#201 = IFCEXTRUDEDAREASOLID(#195,#199,#200,40000.000000); +#202 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#201)); +#203 = IFCPRODUCTDEFINITIONSHAPE($,$,(#202)); +#204 = IFCBEAM('GUID',$,'Girder S2-G2',$,$,#179,#203,$,.BEAM.); +#205 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S2-G2'),$); +#206 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#207 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#208 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#209 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#205, #206, #207, #208)); +#210 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#204),#209); +#211 = IFCCARTESIANPOINT((2500.000000, 960.000000, 60000.000000)); +#212 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#213 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#214 = IFCAXIS2PLACEMENT3D(#211,#212,#213); +#215 = IFCLOCALPLACEMENT(#13,#214); +#216 = IFCCARTESIANPOINT((-350.000000,-900.000000)); +#217 = IFCCARTESIANPOINT((350.000000,-900.000000)); +#218 = IFCCARTESIANPOINT((350.000000,-720.000000)); +#219 = IFCCARTESIANPOINT((100.000000,-720.000000)); +#220 = IFCCARTESIANPOINT((100.000000,700.000000)); +#221 = IFCCARTESIANPOINT((150.000000,750.000000)); +#222 = IFCCARTESIANPOINT((300.000000,750.000000)); +#223 = IFCCARTESIANPOINT((300.000000,900.000000)); +#224 = IFCCARTESIANPOINT((-300.000000,900.000000)); +#225 = IFCCARTESIANPOINT((-300.000000,750.000000)); +#226 = IFCCARTESIANPOINT((-150.000000,750.000000)); +#227 = IFCCARTESIANPOINT((-100.000000,700.000000)); +#228 = IFCCARTESIANPOINT((-100.000000,-720.000000)); +#229 = IFCCARTESIANPOINT((-350.000000,-720.000000)); +#230 = IFCPOLYLINE((#216, #217, #218, #219, #220, #221, #222, #223, #224, #225, #226, #227, #228, #229, #216)); +#231 = IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PSC-I',#230); +#232 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#233 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#234 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#235 = IFCAXIS2PLACEMENT3D(#232,#233,#234); +#236 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#237 = IFCEXTRUDEDAREASOLID(#231,#235,#236,40000.000000); +#238 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#237)); +#239 = IFCPRODUCTDEFINITIONSHAPE($,$,(#238)); +#240 = IFCBEAM('GUID',$,'Girder S2-G3',$,$,#215,#239,$,.BEAM.); +#241 = IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Girder S2-G3'),$); +#242 = IFCPROPERTYSINGLEVALUE('Span',$,IFCLENGTHMEASURE(40000.000000),$); +#243 = IFCPROPERTYSINGLEVALUE('LoadBearing',$,IFCBOOLEAN(.T.),$); +#244 = IFCPROPERTYSINGLEVALUE('IsExternal',$,IFCBOOLEAN(.F.),$); +#245 = IFCPROPERTYSET('GUID',$,'Pset_BeamCommon',$,(#241, #242, #243, #244)); +#246 = IFCRELDEFINESBYPROPERTIES('GUID',$,$,$,(#240),#245); +#247 = IFCCARTESIANPOINT((0.000000, 1970.000000, 40000.000000)); +#248 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#249 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#250 = IFCAXIS2PLACEMENT3D(#247,#248,#249); +#251 = IFCLOCALPLACEMENT(#13,#250); +#252 = IFCCARTESIANPOINT((0.000000,0.000000)); +#253 = IFCDIRECTION((1.000000,0.000000)); +#254 = IFCAXIS2PLACEMENT2D(#252,#253); +#255 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#254,7000.000000,220.000000); +#256 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#257 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#258 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#259 = IFCAXIS2PLACEMENT3D(#256,#257,#258); +#260 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#261 = IFCEXTRUDEDAREASOLID(#255,#259,#260,80000.000000); +#262 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#261)); +#263 = IFCPRODUCTDEFINITIONSHAPE($,$,(#262)); +#264 = IFCSLAB('GUID',$,'Deck Slab',$,$,#251,#263,$,.FLOOR.); +#265 = IFCCARTESIANPOINT((0.000000, -3400.000000, 40000.000000)); +#266 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#267 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#268 = IFCAXIS2PLACEMENT3D(#265,#266,#267); +#269 = IFCLOCALPLACEMENT(#13,#268); +#270 = IFCCARTESIANPOINT((0.000000,0.000000)); +#271 = IFCDIRECTION((1.000000,0.000000)); +#272 = IFCAXIS2PLACEMENT2D(#270,#271); +#273 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#272,2000.000000,2000.000000); +#274 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#275 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#276 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#277 = IFCAXIS2PLACEMENT3D(#274,#275,#276); +#278 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#279 = IFCEXTRUDEDAREASOLID(#273,#277,#278,6800.000000); +#280 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#279)); +#281 = IFCPRODUCTDEFINITIONSHAPE($,$,(#280)); +#282 = IFCCOLUMN('GUID',$,'Pier P1',$,$,#269,#281,$,.COLUMN.); +#283 = IFCCARTESIANPOINT((0.000000, -930.000000, -400.000000)); +#284 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#285 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#286 = IFCAXIS2PLACEMENT3D(#283,#284,#285); +#287 = IFCLOCALPLACEMENT(#13,#286); +#288 = IFCCARTESIANPOINT((0.000000,0.000000)); +#289 = IFCDIRECTION((1.000000,0.000000)); +#290 = IFCAXIS2PLACEMENT2D(#288,#289); +#291 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#290,8000.000000,1860.000000); +#292 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#293 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#294 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#295 = IFCAXIS2PLACEMENT3D(#292,#293,#294); +#296 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#297 = IFCEXTRUDEDAREASOLID(#291,#295,#296,800.000000); +#298 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#297)); +#299 = IFCPRODUCTDEFINITIONSHAPE($,$,(#298)); +#300 = IFCFOOTING('GUID',$,'Abutment Start',$,$,#287,#299,$,.PAD_FOOTING.); +#301 = IFCCARTESIANPOINT((0.000000, -930.000000, 80400.000000)); +#302 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#303 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#304 = IFCAXIS2PLACEMENT3D(#301,#302,#303); +#305 = IFCLOCALPLACEMENT(#13,#304); +#306 = IFCCARTESIANPOINT((0.000000,0.000000)); +#307 = IFCDIRECTION((1.000000,0.000000)); +#308 = IFCAXIS2PLACEMENT2D(#306,#307); +#309 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#308,8000.000000,1860.000000); +#310 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#311 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#312 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#313 = IFCAXIS2PLACEMENT3D(#310,#311,#312); +#314 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#315 = IFCEXTRUDEDAREASOLID(#309,#313,#314,800.000000); +#316 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#315)); +#317 = IFCPRODUCTDEFINITIONSHAPE($,$,(#316)); +#318 = IFCFOOTING('GUID',$,'Abutment End',$,$,#305,#317,$,.PAD_FOOTING.); +#319 = IFCCARTESIANPOINT((-2500.000000, 0.000000, 0.000000)); +#320 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#321 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#322 = IFCAXIS2PLACEMENT3D(#319,#320,#321); +#323 = IFCLOCALPLACEMENT(#13,#322); +#324 = IFCCARTESIANPOINT((0.000000,0.000000)); +#325 = IFCDIRECTION((1.000000,0.000000)); +#326 = IFCAXIS2PLACEMENT2D(#324,#325); +#327 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#326,450.000000,60.000000); +#328 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#329 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#330 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#331 = IFCAXIS2PLACEMENT3D(#328,#329,#330); +#332 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#333 = IFCEXTRUDEDAREASOLID(#327,#331,#332,350.000000); +#334 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#333)); +#335 = IFCPRODUCTDEFINITIONSHAPE($,$,(#334)); +#336 = IFCBEARING('GUID',$,'Bearing S0-G1',$,$,#323,#335,$,.ELASTOMERIC.); +#337 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#338 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#339 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#340 = IFCAXIS2PLACEMENT3D(#337,#338,#339); +#341 = IFCLOCALPLACEMENT(#13,#340); +#342 = IFCCARTESIANPOINT((0.000000,0.000000)); +#343 = IFCDIRECTION((1.000000,0.000000)); +#344 = IFCAXIS2PLACEMENT2D(#342,#343); +#345 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#344,450.000000,60.000000); +#346 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#347 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#348 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#349 = IFCAXIS2PLACEMENT3D(#346,#347,#348); +#350 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#351 = IFCEXTRUDEDAREASOLID(#345,#349,#350,350.000000); +#352 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#351)); +#353 = IFCPRODUCTDEFINITIONSHAPE($,$,(#352)); +#354 = IFCBEARING('GUID',$,'Bearing S0-G2',$,$,#341,#353,$,.ELASTOMERIC.); +#355 = IFCCARTESIANPOINT((2500.000000, 0.000000, 0.000000)); +#356 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#357 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#358 = IFCAXIS2PLACEMENT3D(#355,#356,#357); +#359 = IFCLOCALPLACEMENT(#13,#358); +#360 = IFCCARTESIANPOINT((0.000000,0.000000)); +#361 = IFCDIRECTION((1.000000,0.000000)); +#362 = IFCAXIS2PLACEMENT2D(#360,#361); +#363 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#362,450.000000,60.000000); +#364 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#365 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#366 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#367 = IFCAXIS2PLACEMENT3D(#364,#365,#366); +#368 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#369 = IFCEXTRUDEDAREASOLID(#363,#367,#368,350.000000); +#370 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#369)); +#371 = IFCPRODUCTDEFINITIONSHAPE($,$,(#370)); +#372 = IFCBEARING('GUID',$,'Bearing S0-G3',$,$,#359,#371,$,.ELASTOMERIC.); +#373 = IFCCARTESIANPOINT((-2500.000000, 0.000000, 40000.000000)); +#374 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#375 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#376 = IFCAXIS2PLACEMENT3D(#373,#374,#375); +#377 = IFCLOCALPLACEMENT(#13,#376); +#378 = IFCCARTESIANPOINT((0.000000,0.000000)); +#379 = IFCDIRECTION((1.000000,0.000000)); +#380 = IFCAXIS2PLACEMENT2D(#378,#379); +#381 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#380,450.000000,60.000000); +#382 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#383 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#384 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#385 = IFCAXIS2PLACEMENT3D(#382,#383,#384); +#386 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#387 = IFCEXTRUDEDAREASOLID(#381,#385,#386,350.000000); +#388 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#387)); +#389 = IFCPRODUCTDEFINITIONSHAPE($,$,(#388)); +#390 = IFCBEARING('GUID',$,'Bearing S1-G1',$,$,#377,#389,$,.ELASTOMERIC.); +#391 = IFCCARTESIANPOINT((0.000000, 0.000000, 40000.000000)); +#392 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#393 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#394 = IFCAXIS2PLACEMENT3D(#391,#392,#393); +#395 = IFCLOCALPLACEMENT(#13,#394); +#396 = IFCCARTESIANPOINT((0.000000,0.000000)); +#397 = IFCDIRECTION((1.000000,0.000000)); +#398 = IFCAXIS2PLACEMENT2D(#396,#397); +#399 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#398,450.000000,60.000000); +#400 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#401 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#402 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#403 = IFCAXIS2PLACEMENT3D(#400,#401,#402); +#404 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#405 = IFCEXTRUDEDAREASOLID(#399,#403,#404,350.000000); +#406 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#405)); +#407 = IFCPRODUCTDEFINITIONSHAPE($,$,(#406)); +#408 = IFCBEARING('GUID',$,'Bearing S1-G2',$,$,#395,#407,$,.ELASTOMERIC.); +#409 = IFCCARTESIANPOINT((2500.000000, 0.000000, 40000.000000)); +#410 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#411 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#412 = IFCAXIS2PLACEMENT3D(#409,#410,#411); +#413 = IFCLOCALPLACEMENT(#13,#412); +#414 = IFCCARTESIANPOINT((0.000000,0.000000)); +#415 = IFCDIRECTION((1.000000,0.000000)); +#416 = IFCAXIS2PLACEMENT2D(#414,#415); +#417 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#416,450.000000,60.000000); +#418 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#419 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#420 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#421 = IFCAXIS2PLACEMENT3D(#418,#419,#420); +#422 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#423 = IFCEXTRUDEDAREASOLID(#417,#421,#422,350.000000); +#424 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#423)); +#425 = IFCPRODUCTDEFINITIONSHAPE($,$,(#424)); +#426 = IFCBEARING('GUID',$,'Bearing S1-G3',$,$,#413,#425,$,.ELASTOMERIC.); +#427 = IFCCARTESIANPOINT((-2500.000000, 0.000000, 80000.000000)); +#428 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#429 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#430 = IFCAXIS2PLACEMENT3D(#427,#428,#429); +#431 = IFCLOCALPLACEMENT(#13,#430); +#432 = IFCCARTESIANPOINT((0.000000,0.000000)); +#433 = IFCDIRECTION((1.000000,0.000000)); +#434 = IFCAXIS2PLACEMENT2D(#432,#433); +#435 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#434,450.000000,60.000000); +#436 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#437 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#438 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#439 = IFCAXIS2PLACEMENT3D(#436,#437,#438); +#440 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#441 = IFCEXTRUDEDAREASOLID(#435,#439,#440,350.000000); +#442 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#441)); +#443 = IFCPRODUCTDEFINITIONSHAPE($,$,(#442)); +#444 = IFCBEARING('GUID',$,'Bearing S2-G1',$,$,#431,#443,$,.ELASTOMERIC.); +#445 = IFCCARTESIANPOINT((0.000000, 0.000000, 80000.000000)); +#446 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#447 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#448 = IFCAXIS2PLACEMENT3D(#445,#446,#447); +#449 = IFCLOCALPLACEMENT(#13,#448); +#450 = IFCCARTESIANPOINT((0.000000,0.000000)); +#451 = IFCDIRECTION((1.000000,0.000000)); +#452 = IFCAXIS2PLACEMENT2D(#450,#451); +#453 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#452,450.000000,60.000000); +#454 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#455 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#456 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#457 = IFCAXIS2PLACEMENT3D(#454,#455,#456); +#458 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#459 = IFCEXTRUDEDAREASOLID(#453,#457,#458,350.000000); +#460 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#459)); +#461 = IFCPRODUCTDEFINITIONSHAPE($,$,(#460)); +#462 = IFCBEARING('GUID',$,'Bearing S2-G2',$,$,#449,#461,$,.ELASTOMERIC.); +#463 = IFCCARTESIANPOINT((2500.000000, 0.000000, 80000.000000)); +#464 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#465 = IFCDIRECTION((1.000000, 0.000000, -0.000000)); +#466 = IFCAXIS2PLACEMENT3D(#463,#464,#465); +#467 = IFCLOCALPLACEMENT(#13,#466); +#468 = IFCCARTESIANPOINT((0.000000,0.000000)); +#469 = IFCDIRECTION((1.000000,0.000000)); +#470 = IFCAXIS2PLACEMENT2D(#468,#469); +#471 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#470,450.000000,60.000000); +#472 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#473 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#474 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#475 = IFCAXIS2PLACEMENT3D(#472,#473,#474); +#476 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#477 = IFCEXTRUDEDAREASOLID(#471,#475,#476,350.000000); +#478 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#477)); +#479 = IFCPRODUCTDEFINITIONSHAPE($,$,(#478)); +#480 = IFCBEARING('GUID',$,'Bearing S2-G3',$,$,#467,#479,$,.ELASTOMERIC.); +#481 = IFCCARTESIANPOINT((3250.000000, 2680.000000, 40000.000000)); +#482 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#483 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#484 = IFCAXIS2PLACEMENT3D(#481,#482,#483); +#485 = IFCLOCALPLACEMENT(#13,#484); +#486 = IFCCARTESIANPOINT((0.000000,0.000000)); +#487 = IFCDIRECTION((1.000000,0.000000)); +#488 = IFCAXIS2PLACEMENT2D(#486,#487); +#489 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#488,500.000000,1200.000000); +#490 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#491 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#492 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#493 = IFCAXIS2PLACEMENT3D(#490,#491,#492); +#494 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#495 = IFCEXTRUDEDAREASOLID(#489,#493,#494,80000.000000); +#496 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#495)); +#497 = IFCPRODUCTDEFINITIONSHAPE($,$,(#496)); +#498 = IFCRAILING('GUID',$,'Parapet R',$,$,#485,#497,$,.GUARDRAIL.); +#499 = IFCCARTESIANPOINT((-3250.000000, 2680.000000, 40000.000000)); +#500 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#501 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#502 = IFCAXIS2PLACEMENT3D(#499,#500,#501); +#503 = IFCLOCALPLACEMENT(#13,#502); +#504 = IFCCARTESIANPOINT((0.000000,0.000000)); +#505 = IFCDIRECTION((1.000000,0.000000)); +#506 = IFCAXIS2PLACEMENT2D(#504,#505); +#507 = IFCRECTANGLEPROFILEDEF(.AREA.,$,#506,500.000000,1200.000000); +#508 = IFCCARTESIANPOINT((0.000000, 0.000000, 0.000000)); +#509 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#510 = IFCDIRECTION((1.000000, 0.000000, 0.000000)); +#511 = IFCAXIS2PLACEMENT3D(#508,#509,#510); +#512 = IFCDIRECTION((0.000000, 0.000000, 1.000000)); +#513 = IFCEXTRUDEDAREASOLID(#507,#511,#512,80000.000000); +#514 = IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#513)); +#515 = IFCPRODUCTDEFINITIONSHAPE($,$,(#514)); +#516 = IFCRAILING('GUID',$,'Parapet L',$,$,#503,#515,$,.GUARDRAIL.); +#517 = IFCRELCONTAINEDINSPATIALSTRUCTURE('GUID',$,'Contents','Bridge elements',(#60, #96, #132, #168, #204, #240, #264, #282, #300, #318, #336, #354, #372, #390, #408, #426, #444, #462, #480, #498, #516),#17); +ENDSEC; +END-ISO-10303-21; diff --git a/cimery/crates/kernel/src/expansion_joint.rs b/cimery/crates/kernel/src/expansion_joint.rs index a180fb5..e71d25b 100644 --- a/cimery/crates/kernel/src/expansion_joint.rs +++ b/cimery/crates/kernel/src/expansion_joint.rs @@ -87,7 +87,7 @@ fn plate_mesh(half_w: f32, depth: f32, z0: f32, z1: f32) -> Mesh { let normals = vec![[0.0_f32, 1.0, 0.0]; verts.len()]; // simplified flat Mesh { - vertices: verts.into_iter().map(|v| v).collect(), + vertices: verts, indices, normals, colors, diff --git a/cimery/crates/usd/src/lib.rs b/cimery/crates/usd/src/lib.rs index 4a40654..47ce053 100644 --- a/cimery/crates/usd/src/lib.rs +++ b/cimery/crates/usd/src/lib.rs @@ -232,6 +232,7 @@ impl BridgeExporter { } /// Export scene to a file path (convenience wrapper). + #[allow(clippy::too_many_arguments)] // bridge scene 의 부재 카테고리 수만큼 필요 pub fn save_scene( &mut self, kernel: &K, diff --git a/cimery/crates/viewer/src/bridge_scene.rs b/cimery/crates/viewer/src/bridge_scene.rs index da4f9c5..961ea2f 100644 --- a/cimery/crates/viewer/src/bridge_scene.rs +++ b/cimery/crates/viewer/src/bridge_scene.rs @@ -228,10 +228,10 @@ fn merge(meshes: Vec) -> Mesh { pub fn build_bridge_scene(kernel: &K, p: &SceneParams) -> Result { let span_m = p.span_m; let span_mm = (p.span_m * 1_000.0) as f32; - let span_count = p.span_count.max(1).min(5); + let span_count = p.span_count.clamp(1, 5); let total_m = span_m * span_count as f64; let total_mm = span_mm * span_count as f32; - let n_girders = p.girder_count.max(1).min(10); + let n_girders = p.girder_count.clamp(1, 10); let spacing = p.girder_spacing; let girder_h = p.girder_height; const BEARING_H: f32 = 60.0; // mm @@ -536,10 +536,10 @@ pub fn build_bridge_scene(kernel: &K, p: &SceneParams) -> Result< /// Sprint 26: 다경간 지원 — ground·alignment 가 전체 교량 길이 기준. pub fn build_background_scene(p: &SceneParams) -> Mesh { let span_mm = (p.span_m * 1_000.0) as f32; - let span_count = p.span_count.max(1).min(5); + let span_count = p.span_count.clamp(1, 5); let total_mm = span_mm * span_count as f32; let girder_h = p.girder_height; - let n_girders = p.girder_count.max(1).min(10); + let n_girders = p.girder_count.clamp(1, 10); let spacing = p.girder_spacing; const BEARING_H: f32 = 60.0; let breast_wall_h = (girder_h + BEARING_H) as f64; @@ -580,7 +580,7 @@ pub fn build_selectable_scene( ) -> Result, KernelError> { let span_m = p.span_m; let span_mm = (p.span_m * 1_000.0) as f32; - let n_girders = p.girder_count.max(1).min(10); + let n_girders = p.girder_count.clamp(1, 10); let spacing = p.girder_spacing; let girder_h = p.girder_height; const BEARING_H: f32 = 60.0; @@ -616,7 +616,7 @@ pub fn build_selectable_scene( } }; - let span_count = p.span_count.max(1).min(5); + let span_count = p.span_count.clamp(1, 5); let total_m = span_m * span_count as f64; let total_mm = span_mm * span_count as f32; @@ -877,3 +877,139 @@ pub fn scene_extents(p: &SceneParams) -> ([f32; 3], [f32; 3]) { let bot_y = -(p.girder_height + 3_000.0 + 1_000.0); ([-half_w, bot_y, -2_000.0], [half_w, top_y, total_mm + 2_000.0]) } + +// ─── Mesh helper unit tests (Sprint 39 품질 강화) ───────────────────────────── + +#[cfg(test)] +mod helper_tests { + use super::*; + + fn unit_cube(z_offset: f32) -> Mesh { + // 1×1×1 박스, Y 는 [0, 1], Z 는 [z_offset, z_offset+1]. + Mesh { + vertices: vec![ + [0.0, 0.0, z_offset ], + [1.0, 0.0, z_offset ], + [1.0, 1.0, z_offset ], + [0.0, 1.0, z_offset ], + [0.0, 0.0, z_offset + 1.0 ], + [1.0, 0.0, z_offset + 1.0 ], + [1.0, 1.0, z_offset + 1.0 ], + [0.0, 1.0, z_offset + 1.0 ], + ], + indices: vec![], + normals: vec![[0.0, 1.0, 0.0]; 8], + colors: vec![[0.5; 3]; 8], + } + } + + // ── apply_camber_mesh ───────────────────────────────────────────────────── + + #[test] + fn camber_zero_does_nothing() { + let mut m = unit_cube(0.0); + let orig = m.vertices.clone(); + apply_camber_mesh(&mut m, 0.0, 1.0, 0.0); + assert_eq!(m.vertices, orig); + } + + #[test] + fn camber_at_midspan_reaches_mid_mm() { + // span=10, mid_mm=100 → u=5 에서 lift = 4·100·5·5/100 = 100. + let mut m = Mesh { + vertices: vec![[0.0, 0.0, 5.0]], + indices: vec![], + normals: vec![[0.0, 1.0, 0.0]], + colors: vec![[0.0; 3]], + }; + apply_camber_mesh(&mut m, 0.0, 10.0, 100.0); + assert!((m.vertices[0][1] - 100.0).abs() < 1e-4); + } + + #[test] + fn camber_outside_span_unaffected() { + let mut m = Mesh { + vertices: vec![[0.0, 0.0, -1.0], [0.0, 0.0, 20.0]], + indices: vec![], + normals: vec![[0.0, 1.0, 0.0]; 2], + colors: vec![[0.0; 3]; 2], + }; + apply_camber_mesh(&mut m, 0.0, 10.0, 100.0); + assert_eq!(m.vertices[0][1], 0.0); + assert_eq!(m.vertices[1][1], 0.0); + } + + // ── rotate_y_around_z ───────────────────────────────────────────────────── + + #[test] + fn rotate_zero_angle_is_identity() { + let m = unit_cube(5.0); + let orig_v = m.vertices.clone(); + let rotated = rotate_y_around_z(m, 0.0, 5.0); + assert_eq!(rotated.vertices, orig_v); + } + + #[test] + fn rotate_90_around_pivot_swaps_x_z() { + // π/2 회전: pivot 기준, (x=1, z=pivot) → (x=0, z=pivot-1). + let m = Mesh { + vertices: vec![[1.0, 0.0, 5.0]], + indices: vec![], + normals: vec![[1.0, 0.0, 0.0]], + colors: vec![[0.0; 3]], + }; + let rotated = rotate_y_around_z(m, std::f32::consts::FRAC_PI_2, 5.0); + assert!(rotated.vertices[0][0].abs() < 1e-5, "x should go to 0, got {}", rotated.vertices[0][0]); + assert!((rotated.vertices[0][2] - 4.0).abs() < 1e-5, "z should go to 4, got {}", rotated.vertices[0][2]); + // normals 도 회전: (1,0,0) → (0,0,-1). + assert!((rotated.normals[0][2] + 1.0).abs() < 1e-5); + } + + #[test] + fn rotate_preserves_vertex_count() { + let m = unit_cube(0.0); + let n = m.vertices.len(); + let rotated = rotate_y_around_z(m, 0.5, 0.0); + assert_eq!(rotated.vertices.len(), n); + } + + // ── apply_variable_depth ────────────────────────────────────────────────── + + #[test] + fn variable_depth_zero_does_nothing() { + let mut m = unit_cube(0.0); + let orig = m.vertices.clone(); + apply_variable_depth(&mut m, 0.0, 1.0, 0.0, 1.0); + assert_eq!(m.vertices, orig); + } + + #[test] + fn variable_depth_lifts_soffit_more_than_top() { + // girder_h=1, max=0.2, span=10, midspan u=5 → lift = 4·0.2·5·5/100 = 0.2. + // y=0 vertex (소핏): +0.2 · (1 - 0/1) = +0.2 → Y=0.2. + // y=1 vertex (상면): +0.2 · (1 - 1/1) = 0 → Y=1 (변화 없음). + let mut m = Mesh { + vertices: vec![[0.0, 0.0, 5.0], [0.0, 1.0, 5.0]], + indices: vec![], + normals: vec![[0.0, 1.0, 0.0]; 2], + colors: vec![[0.0; 3]; 2], + }; + apply_variable_depth(&mut m, 0.0, 10.0, 0.2, 1.0); + assert!((m.vertices[0][1] - 0.2).abs() < 1e-5, "soffit lift mismatch: {}", m.vertices[0][1]); + assert!((m.vertices[1][1] - 1.0).abs() < 1e-5, "top should stay: {}", m.vertices[1][1]); + } + + #[test] + fn variable_depth_at_support_is_zero() { + // 지점(u=0 또는 u=span): lift=0, 변화 없음. + let mut m = Mesh { + vertices: vec![[0.0, 0.0, 0.0], [0.0, 0.0, 10.0]], + indices: vec![], + normals: vec![[0.0, 1.0, 0.0]; 2], + colors: vec![[0.0; 3]; 2], + }; + apply_variable_depth(&mut m, 0.0, 10.0, 500.0, 1.0); + assert_eq!(m.vertices[0][1], 0.0); + assert_eq!(m.vertices[1][1], 0.0); + } +} diff --git a/cimery/crates/viewer/src/incremental_scene.rs b/cimery/crates/viewer/src/incremental_scene.rs index 8ef0a64..5160d49 100644 --- a/cimery/crates/viewer/src/incremental_scene.rs +++ b/cimery/crates/viewer/src/incremental_scene.rs @@ -35,7 +35,7 @@ impl IncrementalBridge { /// Build the full bridge scene, using IncrementalDb for girder caching. pub fn build_scene(&mut self, params: &SceneParams) -> Result { - let n = params.girder_count.max(1).min(MAX_GIRDERS); + let n = params.girder_count.clamp(1, MAX_GIRDERS); let spacing = params.girder_spacing; let span_m = params.span_m; let h = params.girder_height as f64; diff --git a/cimery/crates/viewer/src/lib.rs b/cimery/crates/viewer/src/lib.rs index b0cf21e..3ca98e6 100644 --- a/cimery/crates/viewer/src/lib.rs +++ b/cimery/crates/viewer/src/lib.rs @@ -24,7 +24,6 @@ use cimery_kernel::OcctKernel; #[cfg(not(feature = "occt"))] use cimery_kernel::PureRustKernel; use camera::{Camera, Projection, StandardView}; -use glam; use bridge_scene::{ GirderSectionType, SceneParams, build_bridge_scene, build_selectable_scene, build_background_scene, scene_extents, @@ -547,7 +546,7 @@ impl RenderState { let mut best: Option<(f32, usize)> = None; for (i, feat) in self.features.iter().enumerate() { if let Some(t) = ray_aabb(near, ray_dir, feat.aabb_min, feat.aabb_max) { - if best.map_or(true, |(bt, _)| t < bt) { best = Some((t, i)); } + if best.is_none_or(|(bt, _)| t < bt) { best = Some((t, i)); } } } // Update selection + apply highlight @@ -973,9 +972,7 @@ impl ApplicationHandler for CimeryApp { } // ── Keyboard shortcuts ──────────────────────────────────────────── - WindowEvent::KeyboardInput { event: KeyEvent { physical_key, state: key_state, .. }, .. } - if key_state == ElementState::Pressed => - { + WindowEvent::KeyboardInput { event: KeyEvent { physical_key, state: ElementState::Pressed, .. }, .. } => { match physical_key { PhysicalKey::Code(KeyCode::Escape) => event_loop.exit(), // E → ZoomExtents (fit all) diff --git a/cimery/crates/viewer/src/project_file.rs b/cimery/crates/viewer/src/project_file.rs index 0cf3d7c..9cd873d 100644 --- a/cimery/crates/viewer/src/project_file.rs +++ b/cimery/crates/viewer/src/project_file.rs @@ -118,14 +118,14 @@ impl ProjectFile { pub fn save(&self, path: &std::path::Path) -> std::io::Result<()> { let json = serde_json::to_string_pretty(self) - .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + .map_err(std::io::Error::other)?; std::fs::write(path, json) } pub fn load(path: &std::path::Path) -> std::io::Result { let json = std::fs::read_to_string(path)?; serde_json::from_str(&json) - .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) + .map_err(std::io::Error::other) } }