Skip to main content

egml_core/model/common/
recompute_bounding_shape.rs

1use crate::model::common::ComputeEnvelope;
2use crate::model::feature::AsAbstractFeatureMut;
3
4pub trait RecomputeBoundingShape {
5    fn recompute_bounding_shape(&mut self);
6}
7
8impl<T> RecomputeBoundingShape for T
9where
10    T: ComputeEnvelope + AsAbstractFeatureMut,
11{
12    fn recompute_bounding_shape(&mut self) {
13        let Some(recomputed_envelope) = self.compute_envelope() else {
14            return;
15        };
16
17        if let Some(bounding_shape) = self.bounded_by_mut() {
18            if let Some(envelope) = bounding_shape.envelope_mut() {
19                envelope.set_lower_corner(*recomputed_envelope.lower_corner());
20                envelope.set_upper_corner(*recomputed_envelope.upper_corner());
21            }
22        } else {
23            AsAbstractFeatureMut::set_bounding_shape_from_envelope(self, self.compute_envelope());
24        }
25    }
26}