egml-core 0.0.2-alpha.5

Core primitives and operations for processing GML data.
Documentation
use crate::model::common::ComputeEnvelope;
use crate::model::feature::AsAbstractFeatureMut;

pub trait RecomputeBoundingShape {
    fn recompute_bounding_shape(&mut self);
}

impl<T> RecomputeBoundingShape for T
where
    T: ComputeEnvelope + AsAbstractFeatureMut,
{
    fn recompute_bounding_shape(&mut self) {
        let Some(recomputed_envelope) = self.compute_envelope() else {
            return;
        };

        if let Some(bounding_shape) = self.bounded_by_mut() {
            if let Some(envelope) = bounding_shape.envelope_mut() {
                envelope.set_lower_corner(*recomputed_envelope.lower_corner());
                envelope.set_upper_corner(*recomputed_envelope.upper_corner());
            }
        } else {
            AsAbstractFeatureMut::set_bounding_shape_from_envelope(self, self.compute_envelope());
        }
    }
}