ecitygml_core/model/building/
storey.rs1use crate::impl_abstract_building_subdivision_traits;
2use crate::model::building::{
3 AbstractBuildingSubdivision, AsAbstractBuildingSubdivision, AsAbstractBuildingSubdivisionMut,
4};
5use crate::model::core::{AsAbstractFeatureMut, AsAbstractSpace, CityObjectKind, CityObjectRef};
6use crate::operations::{Visitable, Visitor};
7use egml::model::geometry::Envelope;
8use nalgebra::Isometry3;
9
10#[derive(Debug, Clone, PartialEq)]
11pub struct Storey {
12 pub abstract_building_subdivision: AbstractBuildingSubdivision,
13}
14
15impl Storey {
16 pub fn new(abstract_building_subdivision: AbstractBuildingSubdivision) -> Self {
17 Self {
18 abstract_building_subdivision,
19 }
20 }
21
22 pub fn iter_city_object<'a>(&'a self) -> impl Iterator<Item = CityObjectRef<'a>> + 'a {
23 std::iter::once(CityObjectRef::Storey(self))
24 }
25
26 pub fn refresh_bounded_by(&mut self) {
27 let own_envelope = self.compute_envelope();
32 let envelopes: Vec<Envelope> = own_envelope
33 .as_ref()
34 .into_iter()
35 .cloned()
37 .collect();
38
39 self.set_bounded_by(Envelope::from_envelopes(&envelopes));
40 }
41
42 pub fn apply_transform_recursive(&mut self, _m: &Isometry3<f64>) {
43 }
49}
50
51impl AsAbstractBuildingSubdivision for Storey {
52 fn abstract_building_subdivision(&self) -> &AbstractBuildingSubdivision {
53 &self.abstract_building_subdivision
54 }
55}
56
57impl AsAbstractBuildingSubdivisionMut for Storey {
58 fn abstract_building_subdivision_mut(&mut self) -> &mut AbstractBuildingSubdivision {
59 &mut self.abstract_building_subdivision
60 }
61}
62
63impl_abstract_building_subdivision_traits!(Storey);
64
65impl From<Storey> for CityObjectKind {
66 fn from(item: Storey) -> Self {
67 CityObjectKind::Storey(item)
68 }
69}
70
71impl Visitable for Storey {
72 fn accept<V: Visitor>(&self, visitor: &mut V) {
73 visitor.visit_storey(self);
74 }
75}