1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum AppearanceKind {
11 Entity,
13 Type,
15 Function,
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22#[non_exhaustive]
23pub enum AppearanceSupport {
24 StrictView,
26 SchemaValue,
29 SchemaRule,
31 StructuralOnly,
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq)]
39#[non_exhaustive]
40pub struct AppearanceDeclaration {
41 pub name: &'static str,
43 pub kind: AppearanceKind,
45 pub support: AppearanceSupport,
47}
48
49pub const APPEARANCE_DECLARATIONS: &[AppearanceDeclaration] = &[
52 AppearanceDeclaration {
53 name: "IfcBlobTexture",
54 kind: AppearanceKind::Entity,
55 support: AppearanceSupport::StrictView,
56 },
57 AppearanceDeclaration {
58 name: "IfcColour",
59 kind: AppearanceKind::Type,
60 support: AppearanceSupport::SchemaValue,
61 },
62 AppearanceDeclaration {
63 name: "IfcColourOrFactor",
64 kind: AppearanceKind::Type,
65 support: AppearanceSupport::StrictView,
66 },
67 AppearanceDeclaration {
68 name: "IfcColourRgb",
69 kind: AppearanceKind::Entity,
70 support: AppearanceSupport::StrictView,
71 },
72 AppearanceDeclaration {
73 name: "IfcColourRgbList",
74 kind: AppearanceKind::Entity,
75 support: AppearanceSupport::StructuralOnly,
76 },
77 AppearanceDeclaration {
78 name: "IfcColourSpecification",
79 kind: AppearanceKind::Entity,
80 support: AppearanceSupport::StructuralOnly,
81 },
82 AppearanceDeclaration {
83 name: "IfcCorrectFillAreaStyle",
84 kind: AppearanceKind::Function,
85 support: AppearanceSupport::SchemaRule,
86 },
87 AppearanceDeclaration {
88 name: "IfcCurveFontOrScaledCurveFontSelect",
89 kind: AppearanceKind::Type,
90 support: AppearanceSupport::SchemaValue,
91 },
92 AppearanceDeclaration {
93 name: "IfcCurveStyle",
94 kind: AppearanceKind::Entity,
95 support: AppearanceSupport::StrictView,
96 },
97 AppearanceDeclaration {
98 name: "IfcCurveStyleFont",
99 kind: AppearanceKind::Entity,
100 support: AppearanceSupport::StrictView,
101 },
102 AppearanceDeclaration {
103 name: "IfcCurveStyleFontAndScaling",
104 kind: AppearanceKind::Entity,
105 support: AppearanceSupport::StructuralOnly,
106 },
107 AppearanceDeclaration {
108 name: "IfcCurveStyleFontPattern",
109 kind: AppearanceKind::Entity,
110 support: AppearanceSupport::StrictView,
111 },
112 AppearanceDeclaration {
113 name: "IfcCurveStyleFontSelect",
114 kind: AppearanceKind::Type,
115 support: AppearanceSupport::SchemaValue,
116 },
117 AppearanceDeclaration {
118 name: "IfcDraughtingPreDefinedColour",
119 kind: AppearanceKind::Entity,
120 support: AppearanceSupport::StructuralOnly,
121 },
122 AppearanceDeclaration {
123 name: "IfcDraughtingPreDefinedCurveFont",
124 kind: AppearanceKind::Entity,
125 support: AppearanceSupport::StructuralOnly,
126 },
127 AppearanceDeclaration {
128 name: "IfcExternallyDefinedHatchStyle",
129 kind: AppearanceKind::Entity,
130 support: AppearanceSupport::StructuralOnly,
131 },
132 AppearanceDeclaration {
133 name: "IfcExternallyDefinedSurfaceStyle",
134 kind: AppearanceKind::Entity,
135 support: AppearanceSupport::StructuralOnly,
136 },
137 AppearanceDeclaration {
138 name: "IfcExternallyDefinedTextFont",
139 kind: AppearanceKind::Entity,
140 support: AppearanceSupport::StructuralOnly,
141 },
142 AppearanceDeclaration {
143 name: "IfcFillAreaStyle",
144 kind: AppearanceKind::Entity,
145 support: AppearanceSupport::StrictView,
146 },
147 AppearanceDeclaration {
148 name: "IfcFillAreaStyleHatching",
149 kind: AppearanceKind::Entity,
150 support: AppearanceSupport::StrictView,
151 },
152 AppearanceDeclaration {
153 name: "IfcFillAreaStyleTiles",
154 kind: AppearanceKind::Entity,
155 support: AppearanceSupport::StrictView,
156 },
157 AppearanceDeclaration {
158 name: "IfcFillStyleSelect",
159 kind: AppearanceKind::Type,
160 support: AppearanceSupport::SchemaValue,
161 },
162 AppearanceDeclaration {
163 name: "IfcFontStyle",
164 kind: AppearanceKind::Type,
165 support: AppearanceSupport::SchemaValue,
166 },
167 AppearanceDeclaration {
168 name: "IfcFontVariant",
169 kind: AppearanceKind::Type,
170 support: AppearanceSupport::SchemaValue,
171 },
172 AppearanceDeclaration {
173 name: "IfcFontWeight",
174 kind: AppearanceKind::Type,
175 support: AppearanceSupport::SchemaValue,
176 },
177 AppearanceDeclaration {
178 name: "IfcHatchLineDistanceSelect",
179 kind: AppearanceKind::Type,
180 support: AppearanceSupport::SchemaValue,
181 },
182 AppearanceDeclaration {
183 name: "IfcImageTexture",
184 kind: AppearanceKind::Entity,
185 support: AppearanceSupport::StrictView,
186 },
187 AppearanceDeclaration {
188 name: "IfcIndexedColourMap",
189 kind: AppearanceKind::Entity,
190 support: AppearanceSupport::StructuralOnly,
191 },
192 AppearanceDeclaration {
193 name: "IfcIndexedTextureMap",
194 kind: AppearanceKind::Entity,
195 support: AppearanceSupport::StrictView,
196 },
197 AppearanceDeclaration {
198 name: "IfcIndexedTriangleTextureMap",
199 kind: AppearanceKind::Entity,
200 support: AppearanceSupport::StrictView,
201 },
202 AppearanceDeclaration {
203 name: "IfcNullStyle",
204 kind: AppearanceKind::Type,
205 support: AppearanceSupport::SchemaValue,
206 },
207 AppearanceDeclaration {
208 name: "IfcPixelTexture",
209 kind: AppearanceKind::Entity,
210 support: AppearanceSupport::StrictView,
211 },
212 AppearanceDeclaration {
213 name: "IfcPreDefinedColour",
214 kind: AppearanceKind::Entity,
215 support: AppearanceSupport::StructuralOnly,
216 },
217 AppearanceDeclaration {
218 name: "IfcPreDefinedCurveFont",
219 kind: AppearanceKind::Entity,
220 support: AppearanceSupport::StructuralOnly,
221 },
222 AppearanceDeclaration {
223 name: "IfcPreDefinedItem",
224 kind: AppearanceKind::Entity,
225 support: AppearanceSupport::StructuralOnly,
226 },
227 AppearanceDeclaration {
228 name: "IfcPreDefinedTextFont",
229 kind: AppearanceKind::Entity,
230 support: AppearanceSupport::StructuralOnly,
231 },
232 AppearanceDeclaration {
233 name: "IfcPresentableText",
234 kind: AppearanceKind::Type,
235 support: AppearanceSupport::SchemaValue,
236 },
237 AppearanceDeclaration {
238 name: "IfcPresentationStyle",
239 kind: AppearanceKind::Entity,
240 support: AppearanceSupport::StructuralOnly,
241 },
242 AppearanceDeclaration {
243 name: "IfcPresentationStyleAssignment",
244 kind: AppearanceKind::Entity,
245 support: AppearanceSupport::StrictView,
246 },
247 AppearanceDeclaration {
248 name: "IfcPresentationStyleSelect",
249 kind: AppearanceKind::Type,
250 support: AppearanceSupport::SchemaValue,
251 },
252 AppearanceDeclaration {
253 name: "IfcReflectanceMethodEnum",
254 kind: AppearanceKind::Type,
255 support: AppearanceSupport::SchemaValue,
256 },
257 AppearanceDeclaration {
258 name: "IfcSizeSelect",
259 kind: AppearanceKind::Type,
260 support: AppearanceSupport::SchemaValue,
261 },
262 AppearanceDeclaration {
263 name: "IfcSpecularExponent",
264 kind: AppearanceKind::Type,
265 support: AppearanceSupport::SchemaValue,
266 },
267 AppearanceDeclaration {
268 name: "IfcSpecularHighlightSelect",
269 kind: AppearanceKind::Type,
270 support: AppearanceSupport::SchemaValue,
271 },
272 AppearanceDeclaration {
273 name: "IfcSpecularRoughness",
274 kind: AppearanceKind::Type,
275 support: AppearanceSupport::SchemaValue,
276 },
277 AppearanceDeclaration {
278 name: "IfcStyleAssignmentSelect",
279 kind: AppearanceKind::Type,
280 support: AppearanceSupport::SchemaValue,
281 },
282 AppearanceDeclaration {
283 name: "IfcStyledItem",
284 kind: AppearanceKind::Entity,
285 support: AppearanceSupport::StrictView,
286 },
287 AppearanceDeclaration {
288 name: "IfcSurfaceSide",
289 kind: AppearanceKind::Type,
290 support: AppearanceSupport::SchemaValue,
291 },
292 AppearanceDeclaration {
293 name: "IfcSurfaceStyle",
294 kind: AppearanceKind::Entity,
295 support: AppearanceSupport::StrictView,
296 },
297 AppearanceDeclaration {
298 name: "IfcSurfaceStyleElementSelect",
299 kind: AppearanceKind::Type,
300 support: AppearanceSupport::SchemaValue,
301 },
302 AppearanceDeclaration {
303 name: "IfcSurfaceStyleLighting",
304 kind: AppearanceKind::Entity,
305 support: AppearanceSupport::StrictView,
306 },
307 AppearanceDeclaration {
308 name: "IfcSurfaceStyleRefraction",
309 kind: AppearanceKind::Entity,
310 support: AppearanceSupport::StrictView,
311 },
312 AppearanceDeclaration {
313 name: "IfcSurfaceStyleRendering",
314 kind: AppearanceKind::Entity,
315 support: AppearanceSupport::StrictView,
316 },
317 AppearanceDeclaration {
318 name: "IfcSurfaceStyleShading",
319 kind: AppearanceKind::Entity,
320 support: AppearanceSupport::StrictView,
321 },
322 AppearanceDeclaration {
323 name: "IfcSurfaceStyleWithTextures",
324 kind: AppearanceKind::Entity,
325 support: AppearanceSupport::StrictView,
326 },
327 AppearanceDeclaration {
328 name: "IfcSurfaceTexture",
329 kind: AppearanceKind::Entity,
330 support: AppearanceSupport::StrictView,
331 },
332 AppearanceDeclaration {
333 name: "IfcTextAlignment",
334 kind: AppearanceKind::Type,
335 support: AppearanceSupport::SchemaValue,
336 },
337 AppearanceDeclaration {
338 name: "IfcTextDecoration",
339 kind: AppearanceKind::Type,
340 support: AppearanceSupport::SchemaValue,
341 },
342 AppearanceDeclaration {
343 name: "IfcTextFontName",
344 kind: AppearanceKind::Type,
345 support: AppearanceSupport::SchemaValue,
346 },
347 AppearanceDeclaration {
348 name: "IfcTextFontSelect",
349 kind: AppearanceKind::Type,
350 support: AppearanceSupport::SchemaValue,
351 },
352 AppearanceDeclaration {
353 name: "IfcTextStyle",
354 kind: AppearanceKind::Entity,
355 support: AppearanceSupport::StrictView,
356 },
357 AppearanceDeclaration {
358 name: "IfcTextStyleFontModel",
359 kind: AppearanceKind::Entity,
360 support: AppearanceSupport::StrictView,
361 },
362 AppearanceDeclaration {
363 name: "IfcTextStyleForDefinedFont",
364 kind: AppearanceKind::Entity,
365 support: AppearanceSupport::StructuralOnly,
366 },
367 AppearanceDeclaration {
368 name: "IfcTextStyleTextModel",
369 kind: AppearanceKind::Entity,
370 support: AppearanceSupport::StructuralOnly,
371 },
372 AppearanceDeclaration {
373 name: "IfcTextTransformation",
374 kind: AppearanceKind::Type,
375 support: AppearanceSupport::SchemaValue,
376 },
377 AppearanceDeclaration {
378 name: "IfcTextureCoordinate",
379 kind: AppearanceKind::Entity,
380 support: AppearanceSupport::StrictView,
381 },
382 AppearanceDeclaration {
383 name: "IfcTextureCoordinateGenerator",
384 kind: AppearanceKind::Entity,
385 support: AppearanceSupport::StrictView,
386 },
387 AppearanceDeclaration {
388 name: "IfcTextureMap",
389 kind: AppearanceKind::Entity,
390 support: AppearanceSupport::StructuralOnly,
391 },
392 AppearanceDeclaration {
393 name: "IfcTextureVertex",
394 kind: AppearanceKind::Entity,
395 support: AppearanceSupport::StrictView,
396 },
397 AppearanceDeclaration {
398 name: "IfcTextureVertexList",
399 kind: AppearanceKind::Entity,
400 support: AppearanceSupport::StrictView,
401 },
402];
403
404#[cfg(test)]
405mod tests {
406 use super::*;
407 use std::collections::BTreeSet;
408
409 #[test]
410 fn census_has_all_seventy_unique_ifc4_appearance_declarations() {
411 assert_eq!(APPEARANCE_DECLARATIONS.len(), 70);
412 let unique = APPEARANCE_DECLARATIONS
413 .iter()
414 .map(|declaration| declaration.name)
415 .collect::<BTreeSet<_>>();
416 assert_eq!(unique.len(), APPEARANCE_DECLARATIONS.len());
417 let schema = ifc_schema::ifc4();
418 for declaration in APPEARANCE_DECLARATIONS {
419 match declaration.kind {
420 AppearanceKind::Entity => assert!(schema.entity(declaration.name).is_some()),
421 AppearanceKind::Type => assert!(schema.type_def(declaration.name).is_some()),
422 AppearanceKind::Function => {}
423 }
424 }
425 }
426}