1
0
Fork 0

Merge branch 'main' of https://github.com/biou/yuri into main

This commit is contained in:
hellgy 2021-07-26 21:14:47 +02:00 committed by joostdecock
parent 3a36937527
commit 0f3b6214da
8 changed files with 22 additions and 155 deletions

View file

@ -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/
<img src="yuri.svg" alt="preview of Yuri" width="200"/>
<img src="yuri.svg" alt="preview of Yuri hoodie" width="200"/>
[![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)

View file

@ -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 },
},
}

View file

@ -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)

View file

@ -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
}

View file

@ -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')
}
}

View file

@ -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

View file

@ -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,
})
}
}

View file

@ -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,