// Package path provides objects to define lines on a sewing pattern. package path import ( "image/color" "git.wtrh.nl/wouter/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 }