1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//! Swept solids: a cross section dragged along a path.
//!
//! # The family
//!
//! `IfcSweptAreaSolid` sweeps an `IfcProfileDef`; `IfcSweptDiskSolid` sweeps a
//! circular disk along a curve. `IfcSectionedSpine` is neither -- it
//! interpolates between explicit cross sections along a spine and is a direct
//! `IfcGeometricRepresentationItem`, not an `IfcSolidModel`.
//!
//! # Why the profile is not resolved here
//!
//! `SweptArea` is an `IfcProfileDef` reference and profiles are a separate
//! resource schema owned by another module. Returning the `EntityId` keeps this
//! module a transcription of the file; the profile layer decides what a profile
//! means.
//!
//! # Units
//!
//! Every length and angle here is in the **file's** units, not metres or
//! radians. Converting is [`crate::units`]'s job and must happen exactly once,
//! at lowering time. Doing it in an accessor would double-apply the scale for
//! any caller that also converts.
pub use ;
pub use ;
/// `IfcSweptAreaSolid` attribute slots, inherited by every subtype.
///
/// EXPRESS (IFC4 ADD2 TC1): `IfcSweptAreaSolid` declares `SweptArea` then
/// `Position`; its supertype `IfcSolidModel` declares no explicit attributes,
/// so these are absolute slots 0 and 1 for the whole family.
pub
/// `IfcExtrudedAreaSolid` own slots, after the two inherited ones.
///
/// EXPRESS: `ExtrudedDirection : IfcDirection`, `Depth :
/// IfcPositiveLengthMeasure`; then `EndSweptArea` on the tapered subtype.
pub
/// `IfcRevolvedAreaSolid` own slots.
///
/// EXPRESS: `Axis : IfcAxis1Placement`, `Angle : IfcPlaneAngleMeasure`; then
/// `EndSweptArea` on the tapered subtype.
pub
/// Directrix-driven swept area slots.
///
/// EXPRESS: `IfcSurfaceCurveSweptAreaSolid` and
/// `IfcFixedReferenceSweptAreaSolid` both declare `Directrix`, `StartParam`,
/// `EndParam` in that order after the inherited pair, then differ in slot 5.
pub
/// `IfcSweptDiskSolid` slots.
///
/// EXPRESS: it subtypes `IfcSolidModel` directly, so `Directrix` is slot 0 --
/// there is no inherited `SweptArea` here despite the family resemblance.
pub
/// `IfcSectionedSpine` slots.
///
/// EXPRESS: subtypes `IfcGeometricRepresentationItem`, which declares no
/// explicit attributes, so all three slots are its own.
pub