Trait geo::algorithm::scale::Scale

source ·
pub trait Scale<T: CoordNum> {
    // Required methods
    fn scale(&self, scale_factor: T) -> Self;
    fn scale_mut(&mut self, scale_factor: T);
    fn scale_xy(&self, x_factor: T, y_factor: T) -> Self;
    fn scale_xy_mut(&mut self, x_factor: T, y_factor: T);
    fn scale_around_point(
        &self,
        x_factor: T,
        y_factor: T,
        origin: impl Into<Coord<T>>
    ) -> Self;
    fn scale_around_point_mut(
        &mut self,
        x_factor: T,
        y_factor: T,
        origin: impl Into<Coord<T>>
    );
}
Expand description

An affine transformation which scales a geometry up or down by a factor.

§Performance

If you will be performing multiple transformations, like Scale, Skew, Translate, or Rotate, it is more efficient to compose the transformations and apply them as a single operation using the AffineOps trait.

Required Methods§

source

fn scale(&self, scale_factor: T) -> Self

Scale a geometry from it’s bounding box center.

§Examples
use geo::Scale;
use geo::{LineString, line_string};

let ls: LineString = line_string![(x: 0., y: 0.), (x: 10., y: 10.)];

let scaled = ls.scale(2.);

assert_eq!(scaled, line_string![
    (x: -5., y: -5.),
    (x: 15., y: 15.)
]);
source

fn scale_mut(&mut self, scale_factor: T)

Mutable version of scale

source

fn scale_xy(&self, x_factor: T, y_factor: T) -> Self

Scale a geometry from it’s bounding box center, using different values for x_factor and y_factor to distort the geometry’s aspect ratio.

§Examples
use geo::Scale;
use geo::{LineString, line_string};

let ls: LineString = line_string![(x: 0., y: 0.), (x: 10., y: 10.)];

let scaled = ls.scale_xy(2., 4.);

assert_eq!(scaled, line_string![
    (x: -5., y: -15.),
    (x: 15., y: 25.)
]);
source

fn scale_xy_mut(&mut self, x_factor: T, y_factor: T)

Mutable version of scale_xy.

source

fn scale_around_point( &self, x_factor: T, y_factor: T, origin: impl Into<Coord<T>> ) -> Self

Scale a geometry around a point of origin.

The point of origin is usually given as the 2D bounding box centre of the geometry, in which case you can just use scale or scale_xy, but this method allows you to specify any point.

§Examples
use geo::Scale;
use geo::{LineString, line_string, Coord};

let ls: LineString = line_string![(x: 0., y: 0.), (x: 10., y: 10.)];

let scaled = ls.scale_around_point(2., 4., Coord { x: 100., y: 100. });

assert_eq!(scaled, line_string![
    (x: -100., y: -300.),
    (x: -80., y: -260.)
]);
source

fn scale_around_point_mut( &mut self, x_factor: T, y_factor: T, origin: impl Into<Coord<T>> )

Mutable version of scale_around_point.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<T, IR, G> Scale<T> for G
where T: CoordFloat, IR: Into<Option<Rect<T>>>, G: Clone + AffineOps<T> + BoundingRect<T, Output = IR>,