[−][src]Struct lyon_tessellation::StrokeTessellator
A Context object that can tessellate stroke operations for complex paths.
Overview
The stroke tessellation algorithm simply generates a strip of triangles along the path. This method is fast and simple to implement, however it means that if the path overlap with itself (for example in the case of a self-intersecting path), some triangles will overlap in the intersecting region, which may not be the desired behavior. This needs to be kept in mind when rendering transparent SVG strokes since the spec mandates that each point along a semi-transparent path is shaded once no matter how many times the path overlaps with itself at this location.
StrokeTessellator
exposes a similar interface to its
fill equivalent.
This stroke tessellator takes an iterator of path events as inputs as well as
a StrokeOption
, and produces its outputs using
a StrokeGeometryBuilder
.
See the geometry_builder
module documentation
for more details about how to output custom vertex layouts.
See https://github.com/nical/lyon/wiki/Stroke-tessellation for some notes about how the path stroke tessellator is implemented.
Examples
// Create a simple path. let mut path_builder = Path::builder(); path_builder.move_to(point(0.0, 0.0)); path_builder.line_to(point(1.0, 2.0)); path_builder.line_to(point(2.0, 0.0)); path_builder.line_to(point(1.0, 1.0)); path_builder.close(); let path = path_builder.build(); // Create the destination vertex and index buffers. let mut buffers: VertexBuffers<Point, u16> = VertexBuffers::new(); { // Create the destination vertex and index buffers. let mut vertex_builder = simple_builder(&mut buffers); // Create the tessellator. let mut tessellator = StrokeTessellator::new(); // Compute the tessellation. tessellator.tessellate( &path, &StrokeOptions::default(), &mut vertex_builder ); } println!("The generated vertices are: {:?}.", &buffers.vertices[..]); println!("The generated indices are: {:?}.", &buffers.indices[..]);
Methods
impl StrokeTessellator
[src]
pub fn new() -> Self
[src]
pub fn tessellate(
&mut self,
input: impl IntoIterator<Item = PathEvent>,
options: &StrokeOptions,
builder: &mut dyn StrokeGeometryBuilder
) -> TessellationResult
[src]
&mut self,
input: impl IntoIterator<Item = PathEvent>,
options: &StrokeOptions,
builder: &mut dyn StrokeGeometryBuilder
) -> TessellationResult
Compute the tessellation from a path iterator.
pub fn tessellate_with_ids(
&mut self,
path: impl IntoIterator<Item = IdEvent>,
positions: &impl PositionStore,
custom_attributes: Option<&dyn AttributeStore>,
options: &StrokeOptions,
builder: &mut dyn StrokeGeometryBuilder
) -> TessellationResult
[src]
&mut self,
path: impl IntoIterator<Item = IdEvent>,
positions: &impl PositionStore,
custom_attributes: Option<&dyn AttributeStore>,
options: &StrokeOptions,
builder: &mut dyn StrokeGeometryBuilder
) -> TessellationResult
Compute the tessellation from a path iterator.
pub fn tessellate_path<'l>(
&'l mut self,
path: impl Into<PathSlice<'l>>,
options: &'l StrokeOptions,
builder: &'l mut dyn StrokeGeometryBuilder
) -> TessellationResult
[src]
&'l mut self,
path: impl Into<PathSlice<'l>>,
options: &'l StrokeOptions,
builder: &'l mut dyn StrokeGeometryBuilder
) -> TessellationResult
Compute the tessellation from a path slice.
The tessellator will internally only track vertex sources and interpolated attributes if the path has interpolated attributes.
Trait Implementations
impl Default for StrokeTessellator
[src]
fn default() -> StrokeTessellator
[src]
Auto Trait Implementations
impl RefUnwindSafe for StrokeTessellator
impl Send for StrokeTessellator
impl Sync for StrokeTessellator
impl Unpin for StrokeTessellator
impl UnwindSafe for StrokeTessellator
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,
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, 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.
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>,