품질 강화 — ADR-004 + IFC snapshot 테스트 + helper 유닛 + clippy 경고 정리

## 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 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-16 08:37:11 +09:00
parent 0e4701de79
commit e32c09df2d
18 changed files with 3131 additions and 19 deletions

View File

@@ -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<f64>` (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 타임라인

View File

@@ -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 에 매핑.

View File

@@ -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;

View File

@@ -118,7 +118,7 @@ pub fn girder_from_csv(csv: &str) -> Result<Vec<GirderIR>, 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),
));
}

View File

@@ -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,

View File

@@ -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<char> = 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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,

View File

@@ -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<K: GeomKernel>(
&mut self,
kernel: &K,

View File

@@ -228,10 +228,10 @@ fn merge(meshes: Vec<Mesh>) -> Mesh {
pub fn build_bridge_scene<K: GeomKernel>(kernel: &K, p: &SceneParams) -> Result<Mesh, KernelError> {
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<K: GeomKernel>(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<K: GeomKernel>(
) -> Result<Vec<FeatureMesh>, 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<K: GeomKernel>(
}
};
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);
}
}

View File

@@ -35,7 +35,7 @@ impl<K: GeomKernel + Clone + 'static> IncrementalBridge<K> {
/// Build the full bridge scene, using IncrementalDb for girder caching.
pub fn build_scene(&mut self, params: &SceneParams) -> Result<Mesh, KernelError> {
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;

View File

@@ -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)

View File

@@ -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<Self> {
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)
}
}