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