pub struct Cubic { /* private fields */ }Expand description
One cubic Bézier segment: two anchor points with two control points between them.
Stored as the same flat eight-float array upstream uses
([a0x, a0y, c0x, c0y, c1x, c1y, a1x, a1y]), which is also the layout a
morph’s element-wise interpolation wants.
Implementations§
Source§impl Cubic
impl Cubic
Sourcepub const fn new(
anchor0: Point,
control0: Point,
control1: Point,
anchor1: Point,
) -> Cubic
pub const fn new( anchor0: Point, control0: Point, control1: Point, anchor1: Point, ) -> Cubic
A cubic from its four points, in path order.
Sourcepub const fn from_raw(points: [f64; 8]) -> Cubic
pub const fn from_raw(points: [f64; 8]) -> Cubic
A cubic from the raw [a0x, a0y, c0x, c0y, c1x, c1y, a1x, a1y] layout.
Sourcepub const fn points(&self) -> &[f64; 8]
pub const fn points(&self) -> &[f64; 8]
The raw [a0x, a0y, c0x, c0y, c1x, c1y, a1x, a1y] layout.
Sourcepub fn straight_line(p0: Point, p1: Point) -> Cubic
pub fn straight_line(p0: Point, p1: Point) -> Cubic
A straight line between the anchors, with the controls placed a third and two thirds of the way along it.
Sourcepub fn circular_arc(center: Point, p0: Point, p1: Point) -> Cubic
pub fn circular_arc(center: Point, p0: Point, p1: Point) -> Cubic
A cubic approximating the circular arc from p0 to p1 around
center, taking the shorter of the two ways round.
p0 and p1 are expected to be equidistant from center; arcs beyond
180° need more than one segment. Near-coincident endpoints degrade to a
straight line.
Sourcepub const fn control0(&self) -> Point
pub const fn control0(&self) -> Point
The control point governing the slope at Cubic::anchor0.
Sourcepub const fn control1(&self) -> Point
pub const fn control1(&self) -> Point
The control point governing the slope at Cubic::anchor1.
Sourcepub fn point_on_curve(&self, t: f64) -> Point
pub fn point_on_curve(&self, t: f64) -> Point
The point at parameter t, where 0 is Cubic::anchor0 and 1 is
Cubic::anchor1.
Sourcepub fn zero_length(&self) -> bool
pub fn zero_length(&self) -> bool
Whether both anchors sit on the same point, within
DISTANCE_EPSILON. Such curves paint nothing and are dropped from a
polygon’s cubic list.
Sourcepub fn split(&self, t: f64) -> (Cubic, Cubic)
pub fn split(&self, t: f64) -> (Cubic, Cubic)
Splits the curve at parameter t into two curves covering the same
path.
Sourcepub fn transformed_with(&self, f: impl Fn(Point) -> Point) -> Cubic
pub fn transformed_with(&self, f: impl Fn(Point) -> Point) -> Cubic
This curve with every anchor and control point mapped through f.
Sourcepub fn approximate_bounds(&self) -> Rect
pub fn approximate_bounds(&self) -> Rect
The bounding box of the four defining points — cheap, and never smaller
than Cubic::exact_bounds.
Sourcepub fn exact_bounds(&self) -> Rect
pub fn exact_bounds(&self) -> Rect
The true bounding box of the curve, solving the derivative for its extrema on each axis.
Trait Implementations§
impl Copy for Cubic
impl StructuralPartialEq for Cubic
Auto Trait Implementations§
impl Freeze for Cubic
impl RefUnwindSafe for Cubic
impl Send for Cubic
impl Sync for Cubic
impl Unpin for Cubic
impl UnsafeUnpin for Cubic
impl UnwindSafe for Cubic
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.