|
- // Package path provides objects to define lines on a sewing pattern.
- package path
-
- import (
- "image/color"
-
- "git.wtrh.nl/patterns/gopatterns/pkg/pattern/point"
- "github.com/tdewolff/canvas"
- )
-
- // Path defines a set of straight lines through points.
- type Path struct {
- points []point.Point
- thickness float64
- color color.RGBA
- }
-
- // NewPath returns a new [Path].
- func NewPath(points ...point.Point) Path {
- black := canvas.Black
- return Path{points: points, color: black, thickness: 0.2}
- }
-
- // NewPathWithStyle returns a new [Path] with the specified thickness and color.
- func NewPathWithStyle(thickness float64, color color.RGBA, points ...point.Point) Path {
- return Path{points: points, color: color, thickness: thickness}
- }
-
- // Draw the path to the provided [canvas.Canvas].
- func (p Path) Draw(c *canvas.Canvas) error {
- polyline := canvas.Polyline{}
- for _, next := range p.points {
- polyline.Add(next.Vector().Values())
- }
-
- c.RenderPath(polyline.ToPath(),
- canvas.Style{
- Fill: canvas.Paint{},
- Stroke: canvas.Paint{Color: p.color},
- StrokeWidth: p.thickness,
- StrokeCapper: canvas.RoundCap,
- StrokeJoiner: canvas.BevelJoin,
- DashOffset: 0,
- Dashes: nil,
- FillRule: 0,
- }, canvas.Identity)
-
- return nil
- }
|