const markers = ` ` const dflts = { text: 'grainline' } // Export hooks and macros export const grainlineHooks = { preRender: [ function (svg) { svg.defs.setIfUnset('grainline', markers) }, ], } export const grainlineMacros = { grainline: function (so = {}, { points, paths, Path, complete, setGrain }) { if (so === false) { delete points.grainlineFrom delete points.grainlineTo delete paths.grainline setGrain(90) // Restoring default return true } so = { ...dflts, ...so, } // setGrain relies on plugin-cutlist if (typeof setGrain === 'function') { setGrain(so.from.angle(so.to)) } if (complete) { points.grainlineFrom = so.from.shiftFractionTowards(so.to, 0.05) points.grainlineTo = so.to.shiftFractionTowards(so.from, 0.05) paths.grainline = new Path() .move(points.grainlineFrom) .line(points.grainlineTo) .attr('class', 'note') .attr('marker-start', 'url(#grainlineFrom)') .attr('marker-end', 'url(#grainlineTo)') .attr('data-text', so.text) .attr('data-text-class', 'center fill-note') } }, }