export default function (part) { let { Point, Path, points, paths, store, options, complete, sa, paperless, macro } = part.shorthand() // Clear paths from Brian, but keep sleevecap for (let p of Object.keys(paths)) { if (p !== 'sleevecap') delete paths[p] } // Shorten sleeve to take ribbing into account if (options.ribbing) { for (let p of ['wristLeft', 'wristRight']) points[p] = points[p].shift(90, store.get('ribbingHeight')) } // Paths paths.saBase = new Path() .move(points.wristRight) .line(points.bicepsRight) .join(paths.sleevecap) .line(points.wristLeft) .attr('class', 'various stroke-xxl') paths.hemBase = new Path() .move(points.wristLeft) .line(points.wristRight) .attr('class', 'various stroke-xxl') paths.saBase.render = false paths.hemBase.render = false paths.seam = paths.saBase.join(paths.hemBase).close().attr('class', 'fabric') // Complete? if (complete) { macro('grainline', { from: new Point(0, points.wristLeft.y), to: new Point(0, points.backPitch.y), }) if (sa) { if (options.ribbing) paths.sa = paths.seam.offset(sa) else { paths.sa = paths.saBase .clone() .offset(sa) .join(paths.hemBase.offset(3 * sa)) .close() } paths.sa.attr('class', 'fabric sa') } } // Paperless? if (paperless) { let hemSa = sa if (!options.ribbing) hemSa = 3 * sa macro('hd', { from: points.wristLeft, to: points.wristRight, y: points.wristLeft.y + hemSa + 15, }) macro('hd', { from: points.bicepsLeft, to: points.bicepsRight, y: points.sleeveTip.y - sa - 15, }) macro('vd', { from: points.wristLeft, to: points.bicepsLeft, x: points.bicepsLeft.x - sa - 15, }) macro('vd', { from: points.wristLeft, to: points.sleeveTip, x: points.bicepsLeft.x - sa - 30, }) } return part }