pub struct Rect<T: CoordNum = f64> { /* private fields */ }
Expand description
An axis-aligned bounded 2D rectangle whose area is
defined by minimum and maximum Coord
s.
The constructors and setters ensure the maximum
Coord
is greater than or equal to the minimum.
Thus, a Rect
s width, height, and area is guaranteed to
be greater than or equal to zero.
Note. While Rect
implements MapCoords
and
RotatePoint
algorithmic traits, the usage is expected
to maintain the axis alignment. In particular, only
rotation by integer multiples of 90 degrees, will
preserve the original shape. In other cases, the min,
and max points are rotated or transformed, and a new
rectangle is created (with coordinate swaps to ensure
min < max).
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 0., y: 4.},
coord! { x: 3., y: 10.},
);
assert_eq!(3., rect.width());
assert_eq!(6., rect.height());
assert_eq!(
coord! { x: 1.5, y: 7. },
rect.center()
);
Implementations§
source§impl<T: CoordNum> Rect<T>
impl<T: CoordNum> Rect<T>
sourcepub fn new<C>(c1: C, c2: C) -> Self
pub fn new<C>(c1: C, c2: C) -> Self
Creates a new rectangle from two corner coordinates.
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 10., y: 20. },
coord! { x: 30., y: 10. }
);
assert_eq!(rect.min(), coord! { x: 10., y: 10. });
assert_eq!(rect.max(), coord! { x: 30., y: 20. });
pub fn try_new<C>(c1: C, c2: C) -> Result<Rect<T>, InvalidRectCoordinatesError>
Rect::new
instead, since Rect::try_new
will never Errorsourcepub fn min(self) -> Coord<T>
pub fn min(self) -> Coord<T>
Returns the minimum Coord
of the Rect
.
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 5., y: 5. },
coord! { x: 15., y: 15. },
);
assert_eq!(rect.min(), coord! { x: 5., y: 5. });
sourcepub fn set_min<C>(&mut self, min: C)
pub fn set_min<C>(&mut self, min: C)
Set the Rect
’s minimum coordinate.
§Panics
Panics if min
’s x/y is greater than the maximum coordinate’s x/y.
sourcepub fn max(self) -> Coord<T>
pub fn max(self) -> Coord<T>
Returns the maximum Coord
of the Rect
.
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 5., y: 5. },
coord! { x: 15., y: 15. },
);
assert_eq!(rect.max(), coord! { x: 15., y: 15. });
sourcepub fn set_max<C>(&mut self, max: C)
pub fn set_max<C>(&mut self, max: C)
Set the Rect
’s maximum coordinate.
§Panics
Panics if max
’s x/y is less than the minimum coordinate’s x/y.
sourcepub fn width(self) -> T
pub fn width(self) -> T
Returns the width of the Rect
.
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 5., y: 5. },
coord! { x: 15., y: 15. },
);
assert_eq!(rect.width(), 10.);
sourcepub fn height(self) -> T
pub fn height(self) -> T
Returns the height of the Rect
.
§Examples
use geo_types::{coord, Rect};
let rect = Rect::new(
coord! { x: 5., y: 5. },
coord! { x: 15., y: 15. },
);
assert_eq!(rect.height(), 10.);
sourcepub fn to_polygon(self) -> Polygon<T>
pub fn to_polygon(self) -> Polygon<T>
Create a Polygon
from the Rect
.
§Examples
use geo_types::{coord, Rect, polygon};
let rect = Rect::new(
coord! { x: 0., y: 0. },
coord! { x: 1., y: 2. },
);
assert_eq!(
rect.to_polygon(),
polygon![
(x: 0., y: 0.),
(x: 0., y: 2.),
(x: 1., y: 2.),
(x: 1., y: 0.),
(x: 0., y: 0.),
],
);
pub fn to_lines(&self) -> [Line<T>; 4]
sourcepub fn split_x(self) -> [Rect<T>; 2]
pub fn split_x(self) -> [Rect<T>; 2]
Split a rectangle into two rectangles along the X-axis with equal widths.
§Examples
let rect = geo_types::Rect::new(
geo_types::coord! { x: 0., y: 0. },
geo_types::coord! { x: 4., y: 4. },
);
let [rect1, rect2] = rect.split_x();
assert_eq!(
geo_types::Rect::new(
geo_types::coord! { x: 0., y: 0. },
geo_types::coord! { x: 2., y: 4. },
),
rect1,
);
assert_eq!(
geo_types::Rect::new(
geo_types::coord! { x: 2., y: 0. },
geo_types::coord! { x: 4., y: 4. },
),
rect2,
);
sourcepub fn split_y(self) -> [Rect<T>; 2]
pub fn split_y(self) -> [Rect<T>; 2]
Split a rectangle into two rectangles along the Y-axis with equal heights.
§Examples
let rect = geo_types::Rect::new(
geo_types::coord! { x: 0., y: 0. },
geo_types::coord! { x: 4., y: 4. },
);
let [rect1, rect2] = rect.split_y();
assert_eq!(
geo_types::Rect::new(
geo_types::coord! { x: 0., y: 0. },
geo_types::coord! { x: 4., y: 2. },
),
rect1,
);
assert_eq!(
geo_types::Rect::new(
geo_types::coord! { x: 0., y: 2. },
geo_types::coord! { x: 4., y: 4. },
),
rect2,
);
Trait Implementations§
source§impl<'de, T> Deserialize<'de> for Rect<T>where
T: Deserialize<'de> + CoordNum,
impl<'de, T> Deserialize<'de> for Rect<T>where
T: Deserialize<'de> + CoordNum,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<T: CoordNum> TryFrom<Geometry<T>> for Rect<T>
impl<T: CoordNum> TryFrom<Geometry<T>> for Rect<T>
Convert a Geometry enum into its inner type.
Fails if the enum case does not match the type you are trying to convert it to.
impl<T: Copy + CoordNum> Copy for Rect<T>
impl<T: Eq + CoordNum> Eq for Rect<T>
impl<T: CoordNum> StructuralPartialEq for Rect<T>
Auto Trait Implementations§
impl<T> Freeze for Rect<T>where
T: Freeze,
impl<T> RefUnwindSafe for Rect<T>where
T: RefUnwindSafe,
impl<T> Send for Rect<T>where
T: Send,
impl<T> Sync for Rect<T>where
T: Sync,
impl<T> Unpin for Rect<T>where
T: Unpin,
impl<T> UnwindSafe for Rect<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)