Skip to content

Stroke alignment on «Solidify Stroke» #4494

Description

@0HyperCube

The «Solidify Stroke» assumes that all strokes are StrokeAlign::Center [sic] causing it to give the incorrect results for StrokeAlign::Inside and StrokeAlign::Outside.

The alignment can be set in the properties of the stroke node:
the properties panel showing the inside stroke alignment option

A proper implementation of the algorithm must deal with intersecting bézier paths in the same way as the SVG and vello renderer. An interesting case can be seen here where we have a closed path made of just two intersecting cubic béziers:
A figure of 8 path made by crossing two cubic bézier

If the path is not fully closed, then the centre alignment must be used to match the renderer. Also note that a path can contain multiple contours. These can likely be dealt with individually?

To deal with intersections of paths in an efficient the linesweeper crate can be used since it is already included as a dependency.

The kurbo::stroke function only supports centre alignment. I'm not sure if it is within scope to add other alignments to it.

As reported by @Menxs on discord.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions