Struct embedded_graphics_core::primitives::rectangle::Rectangle [−][src]
Expand description
Rectangle primitive
Examples
Create some rectangles with different styles
use embedded_graphics::{
pixelcolor::Rgb565, prelude::*, primitives::{Rectangle, 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
Creates a new rectangle from the top left point and the size.
Creates a new rectangle from two corners.
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.
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.
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.
Return whether the rectangle contains a given point.
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, 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)?;
display.assert_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, 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());
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))
);
Offset the rectangle by a given value.
Negative values will shrink the rectangle.
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)
);
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
}
}
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
}
}
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
Returns the bounding box.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Auto Trait Implementations
impl RefUnwindSafe for Rectangle
impl UnwindSafe for Rectangle
Blanket Implementations
Mutably borrows from an owned value. Read more
Casts the value.
Casts the value.
Casts the value.
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
Casts the value.
pub fn vzip(self) -> V
Casts the value.