export default function(part) { let { paperless, sa, utils, complete, points, measurements, options, macro, paths, Path } = part.shorthand(); // Vent let slope = 15; let width = measurements.wristCircumference * (1 + options.cuffEase) * options.sleeveVentWidth; points.ventFoldRight = points.usWristLeft.shiftOutwards(points.usWristRight, width); points.ventHelper = points.usWristRight.shiftFractionTowards(points.elbowRight, options.sleeveVentLength); points.ventSlopeEnd = points.ventHelper .shiftTowards(points.usWristRight, width) .rotate(90, points.ventHelper); points.ventSlopeStart = utils.beamsIntersect( points.usWristRight, points.elbowRight, points.ventSlopeEnd, points.ventHelper.rotate(-1 * slope, points.ventSlopeEnd) ); // Hem let hemSa = sa ? 3*sa : 30; points.hemHelperLeft = points.usWristLeft .shiftTowards(points.usWristRight, hemSa) .rotate(90, points.usWristLeft); points.hemHelperRight = points.usWristRight .shiftTowards(points.usWristLeft, hemSa) .rotate(-90, points.usWristRight); points.hemLeftIntersection = utils.beamsIntersect( points.hemHelperLeft, points.hemHelperRight, points.usWristLeft, points.usElbowLeft ); points.hemRightIntersection = utils.beamsIntersect( points.hemHelperLeft, points.hemHelperRight, points.usWristRight, points.elbowRight ); points.hemVentIntersection = utils.beamsIntersect( points.hemHelperLeft, points.hemHelperRight, points.ventFoldRight, points.ventSlopeEnd ); points.hemLeft = points.hemLeftIntersection .rotate(points.usWristLeft.angle(points.hemLeftIntersection) * -2, points.usWristLeft); points.hemRight = points.hemRightIntersection .rotate(points.usWristRight.angle(points.hemRightIntersection) * -2, points.usWristRight); points.ventRight = points.hemVentIntersection .rotate(points.ventFoldRight.angle(points.hemVentIntersection) * -2, points.ventFoldRight); // Clean up - Remove this and uncomment paths below to understand what's going on for (let i of Object.keys(paths)) delete paths[i]; // Paths paths.seam = new Path() .move(points.ventFoldRight) .line(points.ventSlopeEnd) .line(points.ventSlopeStart) .line(points.elbowRight) .curve(points.elbowRightCpTop, points.usRightEdgeCpBottom, points.usRightEdge) .curve_(points.usRightEdgeCpTop, points.usTip) .curve(points.usTipCpBottom, points.usLeftEdgeCpRight, points.usLeftEdgeRight) .line(points.usLeftEdge) ._curve(points.usElbowLeftCpTop, points.usElbowLeft) .line(points.usWristLeft) .line(points.hemLeft) .line(points.ventRight) .line(points.ventFoldRight) .close() .attr("class", "fabric"); paths.ventHint = new Path() .move(points.ventSlopeStart) .line(points.usWristRight) .attr("class", "stroke-sm help"); paths.hem = new Path() .move(points.usWristLeft) .line(points.ventFoldRight) .attr("class", "fabric lashed"); if (complete) { // Notches macro("sprinkle", { snippet: "notch", on: [ "top", "usElbowLeft", "elbowRight", ] }); // Title points.title = points.tsLeftEdge.shiftFractionTowards(points.tsRightEdge, 0.5); macro("title", { at: points.title, nr: 5, title: "underSleeve" }); // Grainline macro("grainline", { from: points.boxBottom, to: points.armCenter }); if (sa) paths.sa = paths.seam.offset(sa).attr("class", "fabric sa"); if (paperless) { macro("ld", { from: points.usWristLeft, to: points.usWristRight, d: 15 }); macro("ld", { from: points.usWristLeft, to: points.ventFoldRight, d: 30 }); macro("ld", { from: points.hemLeft, to: points.ventRight, d: -15 - sa }); macro("ld", { from: points.hemLeft, to: points.usWristLeft, d: 15 + sa }); macro("ld", { from: points.usWristRight, to: points.ventSlopeStart, d: 15 }); macro("ld", { from: points.ventFoldRight, to: points.ventSlopeEnd, d: 15 }); macro("ld", { from: points.usWristRight, to: points.ventFoldRight, d: -15 }); macro("vd", { from: points.usWristLeft, to: points.usElbowLeft, x: points.usLeftEdge.x - sa - 15 }); macro("vd", { from: points.usWristLeft, to: points.usLeftEdge, x: points.usLeftEdge.x - sa - 30 }); macro("vd", { from: points.usLeftEdge, to: points.usTip, x: points.usLeftEdge.x - sa - 30 }); macro("vd", { from: points.usWristLeft, to: points.usTip, x: points.usLeftEdge.x - sa - 45 }); macro("ld", { from: points.usElbowLeft, to: points.elbowRight, }); macro("hd", { from: points.usLeftEdge, to: points.usTip, y: points.usTip.y - sa - 15 }); macro("hd", { from: points.usLeftEdge, to: points.elbowRight, y: points.usTip.y - sa - 30 }); } } return part; }