28 releases
0.4.4 | Sep 30, 2024 |
---|---|
0.4.1 | Mar 20, 2024 |
0.3.0 | Dec 27, 2023 |
0.2.2 | May 20, 2023 |
0.1.4 | Nov 6, 2022 |
#233 in Math
Used in 2 crates
(via buffer-graphics-lib)
135KB
3.5K
SLoC
Shapes for Graphics
Contains code to make and alter various shapes.
Primarily designed to be used with Buffer Graphics and Pixels graphics lib
Usage
Add this line to Cargo.toml
graphics-shapes = "0.4.4"
# or with both features (serde is enabled by default)
graphics-shapes = {version = "0.4.4", features = ["mint"] }
Examples
let rect = Rect::new((10,10),(20,20));
assert!(rect.contains(coord!(15,15)));
let triangle = Triangle::new((34,5),(12,30),(9,10));
let rotated = triangle.rotate(45);
let start = coord!(20,130);
let dist = start.distance((30,130));
Shapes
Line
Rect
Triangle
Circle
Ellipse
Polygon
Shared methods
contains
(Coord
|Shape
) - Returns true if param is entirely insideintersects
(Shape
) - Returns true if param is partially inside/touchingoutline_pixels
- Returns a list of points that can be used to draw a stroke versionfilled_pixels
- Returns a list of points that can be used to draw a filled versionrotate
,scale
,transform
- Copy and change the shape
Per shape methods
All the shapes have methods to create similar sized shapes of different types, e.g. Circle::to_outer_rect()
, Rect::to_triangles()
Working with multiple shapes
Each Shape
is a separate struct so to store them without putting them in a Box
you can use ShapeBox
which implements Shape
and so is fully compatible with other Shape
s and their methods.
Assertions
This library uses debug assertions for some methods.
Features
Default features: "serde"
Serde
serde
adds serde::{Serialize, Deserialize}
to Coord
, Line
, Rect
, Circle
, Triangle
, Ellipse
, Polygon
Mint
mint
adds a From
impl for Point2<isize>
to Coord
Known issues
Ellipse
s don't plot correctly when rotated
Dependencies
~0.7–1.2MB
~27K SLoC