export default function(part) { let { store, sa, Point, points, Path, paths, options, complete, paperless, macro, utils, measurements } = part.shorthand(); // Clean up paths from paperless dimensions for (let id in paths) delete paths[id]; points[1] = new Point( points[0].x, measurements.seatDepth - options.waistbandWidth + 10 ); points[2] = new Point( points[0].x, points[1].y + measurements.inseam + store.get("lengthBonus") ); points[3] = new Point( points[0].x, points[1].y + measurements.inseam / 2 + 50 ); points[4] = new Point(points[0].x, points[1].y - measurements.seatDepth / 4); points[5] = new Point( points[0].x - measurements.seatCircumference / 8 + 10, points[1].y ); points[501] = points[5].shift(135, 30); points[502] = points[501].shift(45, 30); points[503] = points[501].shift(-135, 30); points[6] = new Point(points[5].x, points[4].y); points[7] = new Point(points[5].x, points[0].y); points[8] = new Point( points[6].x + measurements.seatCircumference / 4 + 20, points[6].y ); points[801] = new Point( points[8].x, points[8].y - measurements.seatDepth / 4 ); points[802] = new Point( points[8].x, points[8].y + measurements.seatDepth / 4 ); points[9] = new Point( points[5].x - measurements.seatCircumference / 16 - 5 + store.get("backReduction"), points[5].y ); points[10] = new Point(points[7].x + 10, points[7].y); points[1001] = points[10].shiftTowards(points[6], 10); points[1002] = new Point(points[0].x, points[1001].y); points[11] = new Point( points[10].x + measurements.hipsCircumference / 4 + 25, points[10].y ); points[12] = new Point(points[2].x + store.get("legWidth") / 2, points[2].y); points[1201] = new Point(points[12].x, points[12].y - 50); points[13] = points[12].flipX(); points[1301] = points[1201].flipX(); points[14] = new Point( points[3].x + store.get("legWidth") / 2 + 15, points[3].y ); points[1401] = points[12].shiftOutwards( points[14], points[1].dy(points[3]) / 2 ); points[1402] = points[1401].flipX(); points[15] = points[14].flipX(); points[40] = new Path() .move(points[1001]) .curve_(points[1002], points[11]) .shiftAlong(50); points[41] = new Point( points[40].x + points[1001].dx(points[6]), points[40].y + points[1001].dy(points[6]) ); let tmp = new Path().move(points[6])._curve(points[502], points[501]); points[42] = tmp.shiftAlong(tmp.length() / 2); points[43] = points[42].shift(-35, 10); points["43beam"] = points[42].shift(-35, 40); // We use this to find curve intersection later points[44] = points[43].shift(0, 20); points[45] = points[40].shiftOutwards(points[41], 20); points[-1001] = new Path() .move(points[1001]) .curve_(points[1002], points[11]) .shiftAlong(10); points[-100101] = points[-1001].shift(points[1001].angle(points[6]), 10); points[-1002] = points[1002].shift(90, -10); points[-11] = new Path() .move(points[11]) ._curve(points[801], points[8]) .shiftAlong(10); points[-1101] = new Path() .move(points[11]) ._curve(points[1002], points[1001]) .shiftAlong(10); points[-1102] = new Point( points[-1101].x + points[11].dx(points[-11]), points[-1101].y + points[11].dy(points[-11]) ); points[-801] = points[801].shift(0, -10); points[-8] = points[8].shift(0, -10); points[-802] = points[802].shift(0, -10); points[-1401] = points[1401].shift(points[1401].angle(points[14]) + 90, -10); points[-14] = points[14].shift(points[1401].angle(points[14]) + 90, -10); points[-1201] = points[1201].shift(0, -10); points[-12] = points[12].shift(0, -10); points[-13] = points[13].shift(0, 10); points[-1301] = points[1301].shift(0, 10); points[-15] = points[-14].flipX(); points[-1402] = points[-1401].flipX(); points[-901] = new Path() .move(points[9]) ._curve(points[503], points[501]) .shiftAlong(10); points[-902] = new Path() .move(points[9]) ._curve(points[1402], points[15]) .shiftAlong(10); points[-9] = new Point( points[-902].x + points[9].dx(points[-901]), points[-902].y + points[9].dy(points[-901]) ); points[-501] = points[501].shift(points[503].angle(points[502]) - 90, 10); points[-502] = points[502].shift(points[503].angle(points[502]) - 90, 10); points[-503] = points[503].shift(points[503].angle(points[502]) - 90, 10); points[-6] = points[6].shift(points[6].angle(points[1001]) - 90, 10); points[-40] = points[40].shiftTowards(points[41], 10); // Smooth fly curve a bit at -6 points["-6cp"] = points[-100101].shiftOutwards( points[-6], points[-6].dist(points[-502]) / 2 ); // Make sure fly ends on curve points.flyPretipX = utils.lineIntersectsCurve( points[42], points["43beam"], points[-501], points[-502], points["-6cp"], points[-6] ); points[43] = points.flyPretipX.clone(); // Slant pocket points[60] = new Path() .move(points[-1102]) ._curve(points[-1002], points[-100101]) .shiftAlong(50); let curve = new Path().move(points[-1102])._curve(points[-801], points[-8]); let len = curve.length(); if (len >= 190) points[61] = curve.shiftAlong(190); else points[61] = new Path() .move(points[-8]) .curve(points[-802], points[-1401], points[-14]) .shiftAlong(190 - len); // Paths // This is the original Aldrich path, which includes seam allowance paths.aldrich = new Path() .move(points[9]) ._curve(points[503], points[501]) .curve_(points[502], points[6]) .line(points[1001]) .curve_(points[1002], points[11]) ._curve(points[801], points[8]) .curve(points[802], points[1401], points[14]) ._curve(points[1201], points[12]) .line(points[13]) .curve_(points[1301], points[15]) .curve_(points[1402], points[9]) .close(); // This is the path we use, no seam allowance paths.hemBase = new Path().move(points[-12]).line(points[-13]); paths.saBase = new Path() .move(points[-13]) .curve_(points[-1301], points[-15]) .curve_(points[-1402], points[-9]) ._curve(points[-503], points[-501]) .curve(points[-502], points["-6cp"], points[-6]) .line(points[-100101]) .curve_(points[-1002], points[-1102]) ._curve(points[-801], points[-8]) .curve(points[-802], points[-1401], points[-14]) ._curve(points[-1201], points[-12]); paths.seam = paths.hemBase .clone() .join(paths.saBase) .close() .attr("class", "fabric"); paths.aldrich.render = false; paths.hemBase.render = false; paths.saBase.render = false; // Complete pattern? if (complete) { if (sa) { paths.sa = paths.hemBase .offset(-3 * sa) .join(paths.saBase.offset(-1 * sa)) .close() .attr("class", "fabric sa"); } paths.fly = new Path() .move(points[43]) .curve(points[44], points[45], points[41]) .line(points[-40]) .attr("class", "fabric dashed"); paths.pocket = new Path() .move(points[60]) .line(points[61]) .attr("class", "fabric dashed"); paths.lining = new Path() .move(points[-14]) .line(points[-15]) .attr("class", "lining dashed"); macro("title", { at: points.title, title: "front", nr: 2 }); macro("sprinkle", { snippet: "notch", on: [60, 61, 43] }); } // Paperless? if (paperless) { macro("hd", { from: points[-9], to: points[-100101], y: points[-1102].y - sa - 15 }); macro("hd", { from: points[-100101], to: points[-1102], y: points[-1102].y - sa - 15 }); macro("hd", { from: points[-9], to: points[-1102], y: points[-1102].y - sa - 15 }); macro("hd", { from: points[-9], to: points[-8], y: points[-1102].y - sa - 30 }); macro("vd", { from: points[-9], to: points[-100101], x: points[-9].x - sa - 15 }); macro("vd", { from: points[-9], to: points[-1102], x: points[-9].x - sa - 30 }); macro("vd", { from: points[-13], to: points[-9], x: points[-9].x - sa - 30 }); macro("vd", { from: points[-12], to: points[-1102], x: points[-8].x + sa + 15 }); macro("hd", { from: points[-13], to: points[-12], y: points[-12].y + 3 * sa + 15 }); } return part; }