1use crate::relational::RelationalAccess;
2use crate::v2_0::OwnedCityModel;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct ModelSummary {
7 pub cityobject_count: u32,
8 pub geometry_count: u32,
9 pub geometry_template_count: u32,
10 pub vertex_count: u32,
11 pub template_vertex_count: u32,
12 pub uv_vertex_count: u32,
13 pub semantic_count: u32,
14 pub material_count: u32,
15 pub texture_count: u32,
16 pub symbol_count: u32,
17 pub has_metadata: bool,
18 pub has_transform: bool,
19}
20
21#[must_use]
22pub fn summary(model: &OwnedCityModel) -> ModelSummary {
23 let relational = model.relational();
24 let raw = relational.raw();
25 let symbol_count = u32::try_from(relational.snapshot().symbols().len()).unwrap_or(u32::MAX);
26
27 ModelSummary {
28 cityobject_count: u32::try_from(relational.cityobjects().len()).unwrap_or(u32::MAX),
29 geometry_count: u32::try_from(raw.geometries().len()).unwrap_or(u32::MAX),
30 geometry_template_count: u32::try_from(model.geometry_template_count()).unwrap_or(u32::MAX),
31 vertex_count: u32::try_from(raw.vertices().len()).unwrap_or(u32::MAX),
32 template_vertex_count: u32::try_from(raw.template_vertices().len()).unwrap_or(u32::MAX),
33 uv_vertex_count: u32::try_from(raw.uv_coordinates().len()).unwrap_or(u32::MAX),
34 semantic_count: u32::try_from(raw.semantics().len()).unwrap_or(u32::MAX),
35 material_count: u32::try_from(raw.materials().len()).unwrap_or(u32::MAX),
36 texture_count: u32::try_from(raw.textures().len()).unwrap_or(u32::MAX),
37 symbol_count,
38 has_metadata: model.metadata().is_some(),
39 has_transform: model.transform().is_some(),
40 }
41}