[−][src]Struct embedded_graphics_core::primitives::rectangle::Rectangle
Rectangle primitive
Examples
Create some rectangles with different styles
use embedded_graphics::{ pixelcolor::Rgb565, prelude::*, primitives::Rectangle, style::PrimitiveStyleBuilder, }; // Rectangle with red 3 pixel wide stroke and green fill with the top left corner at (30, 20) and // a size of (10, 15) let style = PrimitiveStyleBuilder::new() .stroke_color(Rgb565::RED) .stroke_width(3) .fill_color(Rgb565::GREEN) .build(); Rectangle::new(Point::new(30, 20), Size::new(10, 15)) .into_styled(style) .draw(&mut display)?; // Rectangle with translation applied Rectangle::new(Point::new(30, 20), Size::new(10, 15)) .translate(Point::new(-20, -10)) .into_styled(style) .draw(&mut display)?;
Fields
top_left: Point
Top left point of the rectangle.
size: Size
Size of the rectangle.
Implementations
impl Rectangle
[src]
pub const fn new(top_left: Point, size: Size) -> Self
[src]
Creates a new rectangle from the top left point and the size.
pub fn with_corners(corner_1: Point, corner_2: Point) -> Self
[src]
Creates a new rectangle from two corners.
pub fn with_center(center: Point, size: Size) -> Self
[src]
Creates a new rectangle from the center point and the size.
For rectangles with even width and/or height the top left corner doesn't align with the pixel grid. Because of this the coordinates of the top left corner will be rounded up to the nearest integer coordinate.
pub fn zero() -> Rectangle
[src]
Returns a zero sized rectangle.
pub fn center(&self) -> Point
[src]
Returns the center of this rectangle.
For rectangles with even width and/or height the returned value is rounded down to the nearest integer coordinate.
pub fn bottom_right(&self) -> Option<Point>
[src]
Returns the bottom right corner of this rectangle.
Because the smallest rectangle that can be represented by its corners
has a size of 1 x 1 pixels, this function returns None
if the width or
height of the rectangle is zero.
pub fn contains(&self, point: Point) -> bool
[src]
Return whether the rectangle contains a given point.
pub fn intersection(&self, other: &Rectangle) -> Rectangle
[src]
Returns a new Rectangle
containing the intersection of self
and other
.
If no intersection is present, this method will return a zero sized rectangle.
Examples
Intersection
This example draws two rectangles to a mock display using the .
character, along with
their intersection shown with #
characters.
use embedded_graphics::{ mock_display::MockDisplay, pixelcolor::BinaryColor, prelude::*, primitives::Rectangle, style::PrimitiveStyle, }; let mut display = MockDisplay::new(); let rect1 = Rectangle::new(Point::zero(), Size::new(7, 8)); let rect2 = Rectangle::new(Point::new(2, 3), Size::new(10, 7)); let intersection = rect1.intersection(&rect2); rect1 .into_styled(PrimitiveStyle::with_stroke(BinaryColor::Off, 1)) .draw(&mut display)?; rect2 .into_styled(PrimitiveStyle::with_stroke(BinaryColor::Off, 1)) .draw(&mut display)?; intersection .into_styled(PrimitiveStyle::with_stroke(BinaryColor::On, 1)) .draw(&mut display)?; assert_eq!( display, MockDisplay::from_pattern(&[ "....... ", ". . ", ". . ", ". #####.....", ". # # .", ". # # .", ". # # .", "..##### .", " . .", " ..........", ]) );
No intersection
This example creates two rectangles with no intersection between them. In this case,
intersection
returns a zero-sized rectangle.
use embedded_graphics::{prelude::*, primitives::Rectangle, style::PrimitiveStyle}; let rect1 = Rectangle::new(Point::zero(), Size::new(7, 8)); let rect2 = Rectangle::new(Point::new(10, 15), Size::new(10, 7)); let intersection = rect1.intersection(&rect2); assert!(intersection.is_zero_sized());
pub fn resized(&self, size: Size, anchor_point: AnchorPoint) -> Self
[src]
Returns a resized copy of this rectangle.
The rectangle is resized relative to the given anchor point.
Examples
use embedded_graphics::{ prelude::*, primitives::rectangle::Rectangle, geometry::AnchorPoint, }; let rect = Rectangle::new(Point::new(20, 20), Size::new(10, 20)); let resized = rect.resized(Size::new(20, 10), AnchorPoint::Center); assert_eq!( resized, Rectangle::new(Point::new(15, 25), Size::new(20, 10)) );
pub fn offset(&self, offset: i32) -> Self
[src]
Offset the rectangle by a given value.
Negative values will shrink the rectangle.
pub fn anchor_point(&self, anchor_point: AnchorPoint) -> Point
[src]
Returns an anchor point.
Examples
use embedded_graphics::{ prelude::*, primitives::rectangle::Rectangle, geometry::AnchorPoint, }; let mut rect = Rectangle::new(Point::new(20, 20), Size::new(11, 21)); assert_eq!(rect.anchor_point(AnchorPoint::TopLeft), Point::new(20, 20)); assert_eq!( rect.anchor_point(AnchorPoint::BottomCenter), Point::new(25, 40) );
pub fn rows(&self) -> Range<i32>
[src]
Returns the range of Y coordinates in this rectangle.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle}; let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4)); assert_eq!(rect.rows(), 20..24);
By combining this method with columns
it is possible to iterate over all pixels inside
the rectangle. This can be more flexible than using the points
iterator, for example,
if a different iteration order is required or some operations should be called once per row.
use embedded_graphics::{prelude::*, primitives::Rectangle}; let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4)); // Iterate over the y coordinates of the rows in reverse order. for y in rect.rows().rev() { for x in rect.columns() { // use x, y coordinates } }
pub fn columns(&self) -> Range<i32>
[src]
Returns the range of X coordinates in this rectangle.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle}; let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4)); assert_eq!(rect.columns(), 10..13);
By combining this method with rows
it is possible to iterator over all pixels inside
the rectangle. This can be more flexible than using the points
iterator, for example,
if a different iteration order is required or some operations should be called once per row.
use embedded_graphics::{prelude::*, primitives::Rectangle}; let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4)); // Iterate over all points starting from the top right corner and advancing downwards. for x in rect.columns().rev() { for y in rect.rows() { // use x, y coordinates } }
pub fn is_zero_sized(&self) -> bool
[src]
Returns true
is the rectangle is zero sized.
A rectangle is zero sized if the width or height are zero.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle}; let rect = Rectangle::new(Point::new(10, 20), Size::new(10, 20)); assert_eq!(rect.is_zero_sized(), false); let rect = Rectangle::new(Point::new(10, 20), Size::zero()); assert_eq!(rect.is_zero_sized(), true);
Trait Implementations
impl Clone for Rectangle
[src]
pub fn clone(&self) -> Rectangle
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Copy for Rectangle
[src]
impl Debug for Rectangle
[src]
impl Default for Rectangle
[src]
impl Dimensions for Rectangle
[src]
pub fn bounding_box(&self) -> Rectangle
[src]
impl Eq for Rectangle
[src]
impl Hash for Rectangle
[src]
pub fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl Ord for Rectangle
[src]
pub fn cmp(&self, other: &Rectangle) -> Ordering
[src]
#[must_use]pub fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]
impl PartialEq<Rectangle> for Rectangle
[src]
impl PartialOrd<Rectangle> for Rectangle
[src]
pub fn partial_cmp(&self, other: &Rectangle) -> Option<Ordering>
[src]
pub fn lt(&self, other: &Rectangle) -> bool
[src]
pub fn le(&self, other: &Rectangle) -> bool
[src]
pub fn gt(&self, other: &Rectangle) -> bool
[src]
pub fn ge(&self, other: &Rectangle) -> bool
[src]
impl PointsIter for Rectangle
[src]
type Iter = Points
Iterator over all points inside the primitive.
pub fn points(&self) -> Self::Iter
[src]
impl StructuralEq for Rectangle
[src]
impl StructuralPartialEq for Rectangle
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> Scalar for T where
T: PartialEq<T> + Copy + Any + Debug,
[src]
T: PartialEq<T> + Copy + Any + Debug,
pub fn inlined_clone(&self) -> T
[src]
pub fn is<T>() -> bool where
T: Scalar,
[src]
T: Scalar,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
SS: SubsetOf<SP>,
pub fn to_subset(&self) -> Option<SS>
pub fn is_in_subset(&self) -> bool
pub fn to_subset_unchecked(&self) -> SS
pub fn from_subset(element: &SS) -> SP
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,