diff --git a/packages/yuri/README.md b/packages/yuri/README.md index 6568ab22afa..5b275b98023 100644 --- a/packages/yuri/README.md +++ b/packages/yuri/README.md @@ -3,7 +3,7 @@ Yuri is a fancy zipless cardigan based on the Huey & Hugo hoodies #freesewing #f Try it here : https://yuri-pattern.netlify.app/ -preview of Yuri +preview of Yuri hoodie [![NPM](https://img.shields.io/npm/v/yuri.svg)](https://www.npmjs.com/package/yuri) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) @@ -13,7 +13,7 @@ Try it here : https://yuri-pattern.netlify.app/ npm install --save yuri ``` - + ## What you need - Sweater fabric - 2 buttons (2,5cm or 1inch diameter) @@ -21,24 +21,24 @@ npm install --save yuri ## Instructions / how to ### Step 1 : Sew the shoulders -Match the good sides together and sew the one front piece with the back between the neck and the shoulder. +Match the good sides together and sew the one front piece with the back between the neck and the shoulder. Repeat with the other front part and the other shoulder of the back. ### Step 2 : Attach the sleeves -- The side of the sleeve with the pointy edge at top is the back of the sleeve piece. It is also marked by a double notch on the pattern.
 -- Match good sides of the sleeve seam to good sides of the front, matching the single notch on front to single notch on the sleeve piece. Stitch the seam. Do this for both sleeve pieces.
 +- The side of the sleeve with the pointy edge at top is the back of the sleeve piece. It is also marked by a double notch on the pattern. +- Match good sides of the sleeve seam to good sides of the front, matching the single notch on front to single notch on the sleeve piece. Stitch the seam. Do this for both sleeve pieces. - To finish the seam, you can use one of these methods: - Use a serger to sew and finish the seam in one step. This is fast and convenient, but produces a less-refined look. - If you do not have a serger, or would like a more refined look, sew a seam with a straight stitch on your conventional machine. Press the seam allowances apart on the wrong side. Then, edgestitch along both sides of the seam from the right side. Finally, trim the excess seam allowance. This produces a refined look, but takes longer. - - Another serger-free option is to sew the seam with a straight stitch. Then stitch together the seam allowances with an additional + - Another serger-free option is to sew the seam with a straight stitch. Then stitch together the seam allowances with an additional line of zig-zag alongside the straight stitch. Finally, trim the excess seam allowance. This simulates what a serger would do. ### Step 3 : Hem the cuffs -As this pattern does not use ribbing by default, make a hem on the end of the sleeves to end it nicely. +As this pattern does not use ribbing, make a hem on the end of the sleeves to end it nicely. ### Step 4: Close the Sides - Match the good sides together along sides and sleeves. -- Stitch the sleeves together in one seam, starting at the underarm and going all the way through to the end of the sleeve. +- Stitch the sleeves together in one seam, starting at the underarm and going all the way through to the end of the sleeve. - Stitch the sides with the gusset in two seams, starting both from the underarm. Repeat on the other sides ### Step 5 : Hem the borders @@ -65,7 +65,7 @@ Follow this set of steps twice, once for the outer hood and again for the inside * Working around to the front, pin the hood to the neckline. * Match the good side of the neck binding to the outer neckline (this will be the inside of the hood). Pin the binding to the hood. * Serge or zig-zag all layers together with 1cm seam allowance. Check around the neckline to make sure all layers were caught by the stitching. -* From the outside, topstitch along and approx 1cm away from the neck edge to catch and secure the binding with a straight stitch. +* From the outside, topstitch along and approx 1cm away from the neck edge to catch and secure the binding with a straight stitch. * Trim excess binding from the inside. @@ -80,6 +80,6 @@ Enjoy your Yuri! [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/) -Code by [biou](https://github.com/biou) & Pattern design by [hellgy](https://github.com/hellgy) - - +Code by [biou](https://github.com/biou) & Pattern design by [hellgy](https://github.com/hellgy) + + diff --git a/packages/yuri/config/index.js b/packages/yuri/config/index.js index 9bdade3f5b8..487a10ca2ae 100644 --- a/packages/yuri/config/index.js +++ b/packages/yuri/config/index.js @@ -16,13 +16,10 @@ export default { 'collarEase', 'shoulderEase', 'hipsEase', - 'ribbingStretch', ], style: [ 'lengthBonus', 'sleeveLengthBonus', - 'ribbing', - 'ribbingHeight', 's3Collar', 's3Armhole', ], @@ -91,7 +88,7 @@ export default { sleeve: 'sleeveBase', }, hide: ['base', 'sleevecap', 'backBase', 'frontBase', 'sleeveBase'], - parts: ['cuff', 'gusset', 'hoodSide', 'hoodCenter'], + parts: ['gusset', 'hoodSide', 'hoodCenter'], options: { // Constants brianFitSleeve: true, @@ -106,7 +103,7 @@ export default { bicepsEase: { pct: 8, min: 0, max: 20 }, chestEase: { pct: 8, min: -4, max: 20 }, collarEase: { pct: 20, min: 10, max: 30 }, - cuffEase: { pct: 20, min: 10, max: 60 }, + cuffEase: { pct: 30, min: 20, max: 60 }, frontArmholeDeeper: { pct: 0.5, min: 0, max: 1.5 }, lengthBonus: { pct: 10, min: 5, max: 15 }, shoulderEase: { pct: 0.5, min: -2, max: 6 }, @@ -136,10 +133,6 @@ export default { sleeveWidthGuarantee: { pct: 90, min: 25, max: 100 }, // Options specific to Yuri - ribbing: { bool: false }, - - ribbingHeight: { pct: 10, min: 5, max: 15 }, hipsEase: { pct: 0, min: 0, max: 10 }, - ribbingStretch: { pct: 15, min: 0, max: 30 }, }, } diff --git a/packages/yuri/src/back.js b/packages/yuri/src/back.js index 211b960632b..1dc6f991b92 100644 --- a/packages/yuri/src/back.js +++ b/packages/yuri/src/back.js @@ -20,13 +20,6 @@ export default function (part) { if (['backArmhole', 'backCollar'].indexOf(i) === -1) delete paths[i] } - // Shorten body to take ribbing into account - if (options.ribbing) { - const rh = options.ribbingHeight * (measurements.hpsToWaistBack + measurements.waistToHips) - for (const p of ['hem', 'cbHem']) points[p] = points[p].shift(90, rh) - store.set('ribbingHeight', rh) - } - // Shape side seam points.hips.x = (measurements.hips * (1 + options.hipsEase)) / 4 points.hem.x = points.hips.x @@ -81,7 +74,7 @@ export default function (part) { }) macro('scalebox', { at: new Point(points.armholePitch.x / 2, points.cbWaist.y) }) if (sa) { - paths.sa = paths.hemBase.offset(options.ribbing ? sa : 3 * sa).join(paths.saBase.offset(sa)) + paths.sa = paths.hemBase.offset(3 * sa).join(paths.saBase.offset(sa)) paths.sa .move(paths.sa.end()) .line(points.cbNeck) diff --git a/packages/yuri/src/cuff.js b/packages/yuri/src/cuff.js deleted file mode 100644 index 56d46cbfe7f..00000000000 --- a/packages/yuri/src/cuff.js +++ /dev/null @@ -1,19 +0,0 @@ -import { draftRibbing } from './shared' - -export default (part) => { - const { complete, points, measurements, options, macro } = part.shorthand() - if (!options.ribbing) return part - - draftRibbing(part, measurements.wrist * (1 + options.cuffEase) * (1 - options.ribbingStretch)) - - // Complete pattern? - if (complete) { - macro('title', { - at: points.title, - nr: 7, - title: 'cuff' - }) - } - - return part -} diff --git a/packages/yuri/src/front.js b/packages/yuri/src/front.js index 17241de3a0b..b28fe4c2a2f 100644 --- a/packages/yuri/src/front.js +++ b/packages/yuri/src/front.js @@ -22,11 +22,6 @@ export default function (part) { if (['frontArmhole', 'frontCollar'].indexOf(i) === -1) delete paths[i] } - // Shorten body to take ribbing into account - if (options.ribbing) { - for (const p of ['hem', 'cfHem']) points[p] = points[p].shift(90, store.get('ribbingHeight')) - } - // Shape side seam points.hips.x = (measurements.hips * (1 + options.hipsEase)) / 4 points.hem.x = points.hips.x @@ -83,7 +78,7 @@ export default function (part) { snippets.button = new Snippet('button', points.cutonfoldVia1.shift(-70, 30)).attr('data-scale', '3.3') if (sa) { - paths.sa = paths.hemBase.offset(options.ribbing ? sa : 3 * sa).join(paths.saBase.offset(sa)).join(paths.buttonBase.offset(3 * sa)) + paths.sa = paths.hemBase.offset(3 * sa).join(paths.saBase.offset(sa)).join(paths.buttonBase.offset(3 * sa)) paths.sa = paths.sa.line(paths.sa.start()).close().attr('class', 'fabric sa') } } diff --git a/packages/yuri/src/index.js b/packages/yuri/src/index.js index c1fbaccc976..1061db05667 100644 --- a/packages/yuri/src/index.js +++ b/packages/yuri/src/index.js @@ -6,7 +6,6 @@ import config from '../config' import draftBack from './back' import draftFront from './front' import draftSleeve from './sleeve' -import draftCuff from './cuff' import draftGusset from './gusset' import draftHoodSide from './hoodside' import draftHoodCenter from './hoodcenter' @@ -35,7 +34,6 @@ Pattern.prototype.draftSleeveBase = function (part) { Pattern.prototype.draftBack = draftBack Pattern.prototype.draftFront = draftFront Pattern.prototype.draftSleeve = draftSleeve -Pattern.prototype.draftCuff = draftCuff Pattern.prototype.draftGusset = draftGusset Pattern.prototype.draftHoodSide = draftHoodSide Pattern.prototype.draftHoodCenter = draftHoodCenter diff --git a/packages/yuri/src/shared.js b/packages/yuri/src/shared.js index efd4df64e4d..b17e8a57fa4 100644 --- a/packages/yuri/src/shared.js +++ b/packages/yuri/src/shared.js @@ -118,86 +118,3 @@ export const sharedDimensions = function (part, s) { } } -export const draftRibbing = function (part, length) { - let { - store, - measurements, - options, - points, - paths, - Path, - Point, - sa, - complete, - paperless, - macro, - units, - } = part.shorthand() - // Don't run this every time, except when sampling - if (typeof store.get('ribbingHeight') === 'undefined' || part.context.settings.sample) { - store.set( - 'ribbingHeight', - (measurements.hpsToWaistBack + measurements.waistToHips) * options.ribbingHeight - ) - } - let height = store.get('ribbingHeight') - let gap = 25 - let lead = 50 - if (length < 125) lead = length / 3 - - points.topLeft = new Point(0, 0) - points.topRight = new Point(height * 2, 0) - points.leftGapStart = new Point(0, lead) - points.rightGapEnd = new Point(points.topRight.x, lead) - points.leftGapEnd = new Point(0, lead + gap) - points.rightGapStart = new Point(points.topRight.x, lead + gap) - points.bottomLeft = new Point(0, gap + 2 * lead) - points.bottomRight = new Point(points.topRight.x, gap + 2 * lead) - - paths.seam = new Path() - .move(points.rightGapEnd) - .line(points.topRight) - .line(points.topLeft) - .line(points.leftGapStart) - .move(points.leftGapEnd) - .line(points.bottomLeft) - .line(points.bottomRight) - .line(points.rightGapStart) - .attr('class', 'various') - - paths.hint = new Path() - .move(points.leftGapStart) - .line(points.leftGapEnd) - .move(points.rightGapStart) - .line(points.rightGapEnd) - .attr('class', 'various dashed') - - if (complete) { - points.title = new Point(points.bottomRight.x / 2, points.bottomRight.y / 2) - if (sa) { - paths.sa = new Path() - .move(points.topLeft) - .line(points.bottomLeft) - .line(points.bottomRight) - .line(points.topRight) - .line(points.topLeft) - .close() - .offset(sa) - .attr('class', 'various sa') - } - macro('vd', { - from: points.bottomRight, - to: points.topRight, - x: points.topRight.x - 25, - text: units(length), - }) - } - - if (paperless) { - macro('hd', { - from: points.topLeft, - to: points.topRight, - y: points.topRight.y - sa - 15, - }) - } -} diff --git a/packages/yuri/src/sleeve.js b/packages/yuri/src/sleeve.js index f37cad97c1d..7ef611a1666 100644 --- a/packages/yuri/src/sleeve.js +++ b/packages/yuri/src/sleeve.js @@ -17,12 +17,6 @@ export default function (part) { 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) @@ -46,22 +40,18 @@ export default function (part) { 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 = 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 + const hemSa = 3 * sa macro('hd', { from: points.wristLeft, to: points.wristRight,