chore(paco): Prepare for v3 beta
This commit is contained in:
parent
a781bd6480
commit
bfd6c0a3d3
18 changed files with 482 additions and 283 deletions
|
@ -286,7 +286,7 @@
|
|||
"design": "Joost De Cock",
|
||||
"difficulty": 3,
|
||||
"tags": ["bottoms", "trousers"],
|
||||
"techniques": []
|
||||
"techniques": ["elastic", "curvedSeam", "pocket", "weltPocket", "hem"]
|
||||
},
|
||||
"penelope": {
|
||||
"description": "A FreeSewing pattern for a pencil skirt",
|
||||
|
|
|
@ -11,7 +11,14 @@
|
|||
"frontPocketBag": "Front pocket bag",
|
||||
"waistband": "Waistband"
|
||||
},
|
||||
"s": {},
|
||||
"s": {
|
||||
"cutBackPocketBag.t": "The back pocket bag is not shown",
|
||||
"cutBackPocketBag.d": "The **Back pocket bag** (6) is a rectangular piece of lining {{{ w }}} wide and {{{ l }}} long (this includes seam allowance). It is not shown because the **expand** core setting is currently disabled. Enable it to show this pattern part.",
|
||||
"cutBackPocketWelt.t": "The back pocket welt is not shown",
|
||||
"cutBackPocketWelt.d": "The **Back pocket welt** (7) is a rectangular piece of lining {{{ w }}} wide and {{{ l }}} long (this includes seam allowance). It is not shown because the **expand** core setting is currently disabled. Enable it to show this pattern part.",
|
||||
"cutBackPocketWeltInterfacing.t": "The back pocket welt interfacing is not shown",
|
||||
"cutBackPocketWeltInterfacing.d": "The **Back pocket welt interfacing** (8) is a rectangular piece of fusible interfacing {{{ w }}} wide and {{{ l }}} long (this part does not use any seam allowance). It is not shown because the **expand** core setting is currently disabled. Enable it to show this pattern part."
|
||||
},
|
||||
"o": {
|
||||
"heelEase": {
|
||||
"t": "Heel ease",
|
||||
|
@ -21,6 +28,14 @@
|
|||
"t": "Front pockets",
|
||||
"d": "Whether or not to add front pockets on the side seam"
|
||||
},
|
||||
"frontPocketsNo": {
|
||||
"t": "Do not include front pockets",
|
||||
"d": "Draft a pattern without front pockets"
|
||||
},
|
||||
"frontPocketsYes": {
|
||||
"t": "Include front pockets",
|
||||
"d": "Draft a pattern with front pockets"
|
||||
},
|
||||
"frontPocketFlapSize": {
|
||||
"t": "Front pocket flap size",
|
||||
"d": "This option controls the front pocket flap size, but it is not exposed to the UI"
|
||||
|
@ -29,9 +44,25 @@
|
|||
"t": "Back pockets",
|
||||
"d": "Whether or not to add welt pockets to the back"
|
||||
},
|
||||
"elasticatedHem": {
|
||||
"t": "Elasticated hem",
|
||||
"d": "Whether or not you want an elasticated hem"
|
||||
"backPocketsNo": {
|
||||
"t": "Do not include back pockets",
|
||||
"d": "Draft a pattern without back pockets"
|
||||
},
|
||||
"backPocketsYes": {
|
||||
"t": "Include back pockets",
|
||||
"d": "Draft a pattern with back pockets"
|
||||
},
|
||||
"elasticatedCuff": {
|
||||
"t": "Elasticated cuff",
|
||||
"d": "Whether you want to include an elasticated cuff at the legs, or prefer a classic hemmed finish"
|
||||
},
|
||||
"elasticatedCuffNo": {
|
||||
"t": "No elasticated cuffs",
|
||||
"d": "Draft a pattern without elasticated cuffs"
|
||||
},
|
||||
"elasticatedCuffYes": {
|
||||
"t": "With elasticated cuffs",
|
||||
"d": "Draft a pattern with a elasticated cuffs"
|
||||
},
|
||||
"ankleElastic": {
|
||||
"t": "Ankle/Hem elastic width",
|
||||
|
|
|
@ -69,7 +69,7 @@ function pacoBack({
|
|||
|
||||
// Shorter leg if we have an elasticated hem
|
||||
store.set('ankleElastic', absoluteOptions.ankleElastic)
|
||||
if (options.elasticatedHem) {
|
||||
if (options.elasticatedCuff) {
|
||||
for (const p of ['floor', 'floorIn', 'floorOut'])
|
||||
points[p] = points[p].shift(90, store.get('ankleElastic'))
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ function pacoBack({
|
|||
|
||||
if (sa) {
|
||||
const waistIn = points.styleWaistIn || points.waistIn
|
||||
const hemSa = options.elasticatedHem ? sa : 4 * sa
|
||||
const hemSa = options.elasticatedCuff ? sa : 4 * sa
|
||||
paths.sa = drawInseam()
|
||||
.offset(sa)
|
||||
.line(points.floorIn.shift(180, sa).shift(-90, hemSa))
|
||||
|
@ -191,10 +191,12 @@ function pacoBack({
|
|||
store.cutlist.setCut({ cut: 2, from: 'fabric' })
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
if (options.backPockets) {
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
}
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
|
@ -363,7 +365,7 @@ export const back = {
|
|||
waistHeight: { pct: 5, min: 0, max: 100, menu: 'style' },
|
||||
lengthBonus: { pct: 0, min: -15, max: 10, menu: 'style' },
|
||||
crotchDrop: { pct: 2, min: 0, max: 10, menu: 'style' },
|
||||
elasticatedHem: { bool: true, menu: 'style' },
|
||||
elasticatedCuff: { bool: true, menu: 'style' },
|
||||
// Elastic
|
||||
waistbandWidth: {
|
||||
pct: 3,
|
||||
|
|
|
@ -6,9 +6,12 @@ function pacoBackPocketBag({
|
|||
Path,
|
||||
paths,
|
||||
snippets,
|
||||
store,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
expand,
|
||||
units,
|
||||
macro,
|
||||
part,
|
||||
}) {
|
||||
|
@ -16,12 +19,35 @@ function pacoBackPocketBag({
|
|||
// See https://github.com/freesewing/freesewing/issues/2878
|
||||
for (const path in paths) delete paths[path]
|
||||
for (const snippet in snippets) delete snippets[snippet]
|
||||
macro('scalebox', false)
|
||||
macro('title', false)
|
||||
macro('rmscalebox')
|
||||
macro('rmtitle')
|
||||
|
||||
// Don't bother of we're not drafting back pockets
|
||||
if (!options.backPockets) return part.hide()
|
||||
|
||||
if (expand) store.flag.preset('expandIsOn')
|
||||
else {
|
||||
// Expand is on, do not draw the part but flag this to the user
|
||||
store.flag.note({
|
||||
msg: `paco:cutBackPocketBag`,
|
||||
replace: {
|
||||
w: units(points.pocketBagWaistLeft.dist(points.pocketBagWaistRight) + 2 * sa),
|
||||
l: units(points.pocketBagWaistLeft.dist(points.pocketBagBottomLeft) * 2 + 2 * sa),
|
||||
},
|
||||
suggest: {
|
||||
text: 'flag:show',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', 1],
|
||||
},
|
||||
},
|
||||
})
|
||||
// Also hint about expand
|
||||
store.flag.preset('expandIsOff')
|
||||
|
||||
return part.hide()
|
||||
}
|
||||
|
||||
// Rotate all points around topRight, so the part is aligned vertically
|
||||
const list = [
|
||||
'pocketBagWaistLeft',
|
||||
|
@ -46,68 +72,84 @@ function pacoBackPocketBag({
|
|||
.close()
|
||||
.attr('class', 'lining')
|
||||
|
||||
if (complete) {
|
||||
points.title = points.pocketLeft.shiftFractionTowards(points.pocketBagBottomRight, 0.4)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 6,
|
||||
title: 'backPocketBag',
|
||||
})
|
||||
macro('cutonfold', {
|
||||
to: points.pocketBagBottomRight,
|
||||
from: points.pocketBagBottomLeft,
|
||||
})
|
||||
macro('grainline', {
|
||||
from: points.pocketBagBottomLeft.shift(0, 15),
|
||||
to: points.pocketBagWaistLeft.shift(0, 15),
|
||||
})
|
||||
macro('scalebox', false)
|
||||
if (complete)
|
||||
paths.cut = new Path()
|
||||
.move(points.pocketLeft)
|
||||
.line(points.pocketRight)
|
||||
.attr('class', 'lining lashed')
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
|
||||
if (sa) {
|
||||
paths.sa = new Path()
|
||||
.move(points.pocketBagBottomRight)
|
||||
.line(points.pocketBagWaistRight)
|
||||
.line(points.pocketBagWaistLeft)
|
||||
.line(points.pocketBagBottomLeft)
|
||||
.offset(sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.pocketBagBottomRight)
|
||||
.join(paths.sa)
|
||||
.line(points.pocketBagBottomLeft)
|
||||
.attr('class', 'lining sa')
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = new Path()
|
||||
.move(points.pocketBagBottomRight)
|
||||
.line(points.pocketBagWaistRight)
|
||||
.line(points.pocketBagWaistLeft)
|
||||
.line(points.pocketBagBottomLeft)
|
||||
.offset(sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.pocketBagBottomRight)
|
||||
.join(paths.sa)
|
||||
.line(points.pocketBagBottomLeft)
|
||||
.attr('class', 'lining sa')
|
||||
}
|
||||
|
||||
if (paperless) {
|
||||
macro('hd', {
|
||||
from: points.pocketBagBottomLeft,
|
||||
to: points.pocketBagBottomRight,
|
||||
y: points.pocketBagBottomLeft.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.pocketLeft.y + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.pocketRight,
|
||||
to: points.pocketBagWaistRight,
|
||||
x: points.pocketBagBottomRight.x + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.pocketBagBottomRight,
|
||||
to: points.pocketBagWaistRight,
|
||||
x: points.pocketBagBottomRight.x + 30 + sa,
|
||||
})
|
||||
}
|
||||
/*
|
||||
* Annotations
|
||||
*/
|
||||
// Cutlist
|
||||
store.cutlist.setCut({ cut: 2, from: 'lining', onFold: true })
|
||||
|
||||
// Title
|
||||
points.title = points.pocketBagWaistLeft.shiftFractionTowards(points.pocketBagBottomRight, 0.5)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 6,
|
||||
title: 'backPocketBag',
|
||||
align: 'center',
|
||||
})
|
||||
|
||||
// Cutonfold
|
||||
macro('cutonfold', {
|
||||
to: points.pocketBagBottomRight,
|
||||
from: points.pocketBagBottomLeft,
|
||||
})
|
||||
|
||||
// Grainline
|
||||
macro('grainline', {
|
||||
from: points.pocketBagBottomLeft.shift(0, 15),
|
||||
to: points.pocketBagWaistLeft.shift(0, 15),
|
||||
})
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
id: 'wFull',
|
||||
from: points.pocketBagBottomLeft,
|
||||
to: points.pocketBagBottomRight,
|
||||
y: points.pocketBagBottomLeft.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCut',
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.pocketLeft.y + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hTopToCut',
|
||||
from: points.pocketRight,
|
||||
to: points.pocketBagWaistRight,
|
||||
x: points.pocketBagBottomRight.x + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hFull',
|
||||
from: points.pocketBagBottomRight,
|
||||
to: points.pocketBagWaistRight,
|
||||
x: points.pocketBagBottomRight.x + 30 + sa,
|
||||
})
|
||||
|
||||
return part
|
||||
}
|
||||
|
|
|
@ -10,6 +10,9 @@ function pacoBackPocketWelt({
|
|||
options,
|
||||
complete,
|
||||
paperless,
|
||||
expand,
|
||||
store,
|
||||
units,
|
||||
macro,
|
||||
part,
|
||||
}) {
|
||||
|
@ -17,17 +20,43 @@ function pacoBackPocketWelt({
|
|||
// See https://github.com/freesewing/freesewing/issues/2878
|
||||
for (const path in paths) delete paths[path]
|
||||
for (const snippet in snippets) delete snippets[snippet]
|
||||
macro('scalebox', false)
|
||||
macro('title', false)
|
||||
macro('rmscalebox')
|
||||
macro('rmtitle')
|
||||
|
||||
// Don't bother of we're not drafting back pockets
|
||||
if (!options.backPockets) return part.hide()
|
||||
|
||||
let welt = points.pocketLeft.dist(points.pocketRight) * options.weltFactor
|
||||
const w = points.pocketBagWaistLeft.dist(points.pocketBagWaistRight)
|
||||
const h = points.pocketLeft.dist(points.pocketRight) * options.weltFactor
|
||||
|
||||
// Define these here, as they are used in backpocketinterfacing to calculate w/h
|
||||
points.topLeft = new Point(points.pocketBagWaistLeft.x, points.pocketLeft.y)
|
||||
points.topRight = new Point(points.pocketBagWaistRight.x, points.topLeft.y)
|
||||
points.bottomLeft = points.topLeft.shift(-90, welt * 2)
|
||||
points.bottomRight = points.topRight.shift(-90, welt * 2)
|
||||
points.bottomLeft = points.topLeft.shift(-90, h * 2)
|
||||
points.bottomRight = points.topRight.shift(-90, h * 2)
|
||||
|
||||
if (expand) store.flag.preset('expandIsOn')
|
||||
else {
|
||||
// Expand is on, do not draw the part but flag this to the user
|
||||
store.flag.note({
|
||||
msg: `paco:cutBackPocketWelt`,
|
||||
replace: {
|
||||
h: units(h + 2 * sa),
|
||||
w: units(w + 2 * sa),
|
||||
},
|
||||
suggest: {
|
||||
text: 'flag:show',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', 1],
|
||||
},
|
||||
},
|
||||
})
|
||||
// Also hint about expand
|
||||
store.flag.preset('expandIsOff')
|
||||
|
||||
return part.hide()
|
||||
}
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.topLeft)
|
||||
|
@ -38,44 +67,55 @@ function pacoBackPocketWelt({
|
|||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
if (complete) {
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.4)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 7,
|
||||
title: 'pocketWelt',
|
||||
})
|
||||
macro('grainline', {
|
||||
from: points.topLeft.shift(0, 15),
|
||||
to: points.bottomLeft.shift(0, 15),
|
||||
})
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
/*
|
||||
* Annotations
|
||||
*/
|
||||
// Cutlist
|
||||
store.cutlist.setCut({ cut: 2, from: 'fabric' })
|
||||
|
||||
if (paperless) {
|
||||
macro('hd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomLeft.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.topLeft.y - 15 - sa,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topLeft,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
}
|
||||
}
|
||||
// Title
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.4)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 7,
|
||||
title: 'backPocketWelt',
|
||||
align: 'center',
|
||||
scale: 0.666,
|
||||
})
|
||||
|
||||
// Grainline
|
||||
macro('grainline', {
|
||||
from: points.topLeft.shift(0, 15),
|
||||
to: points.bottomLeft.shift(0, 15),
|
||||
})
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
id: 'wFull',
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomLeft.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wBetweenNotches',
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.topLeft.y - 15 - sa,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hFull',
|
||||
from: points.bottomRight,
|
||||
to: points.topLeft,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
|
||||
return part
|
||||
}
|
||||
|
|
|
@ -8,6 +8,9 @@ function pacoBackPocketWeltInterfacing({
|
|||
options,
|
||||
complete,
|
||||
paperless,
|
||||
expand,
|
||||
store,
|
||||
units,
|
||||
macro,
|
||||
part,
|
||||
}) {
|
||||
|
@ -15,12 +18,35 @@ function pacoBackPocketWeltInterfacing({
|
|||
// See https://github.com/freesewing/freesewing/issues/2878
|
||||
for (const path in paths) delete paths[path]
|
||||
for (const snippet in snippets) delete snippets[snippet]
|
||||
macro('scalebox', false)
|
||||
macro('title', false)
|
||||
macro('rmscalebox')
|
||||
macro('rmtitle')
|
||||
|
||||
// Don't bother of we're not drafting back pockets
|
||||
if (!options.backPockets) return part.hide()
|
||||
|
||||
if (expand) store.flag.preset('expandIsOn')
|
||||
else {
|
||||
// Expand is on, do not draw the part but flag this to the user
|
||||
store.flag.note({
|
||||
msg: `paco:cutBackPocketWeltInterfacing`,
|
||||
replace: {
|
||||
h: units(points.topLeft.dist(points.bottomLeft)),
|
||||
w: units(points.topLeft.dist(points.topRight)),
|
||||
},
|
||||
suggest: {
|
||||
text: 'flag:show',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', 1],
|
||||
},
|
||||
},
|
||||
})
|
||||
// Also hint about expand
|
||||
store.flag.preset('expandIsOff')
|
||||
|
||||
return part.hide()
|
||||
}
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
|
@ -30,36 +56,47 @@ function pacoBackPocketWeltInterfacing({
|
|||
.close()
|
||||
.attr('class', 'interfacing')
|
||||
|
||||
if (complete) {
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.4)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 8,
|
||||
title: 'pocketWeltInterfacing',
|
||||
})
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
/*
|
||||
* Annotations
|
||||
*/
|
||||
// Cutlist
|
||||
store.cutlist.setCut({ cut: 2, from: 'interfacing' })
|
||||
|
||||
if (paperless) {
|
||||
macro('hd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomLeft.y + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.topLeft.y - 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15,
|
||||
})
|
||||
}
|
||||
}
|
||||
// Title
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 8,
|
||||
title: 'pocketWeltInterfacing',
|
||||
align: 'center',
|
||||
scale: 0.666,
|
||||
})
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', {
|
||||
snippet: 'bnotch',
|
||||
on: ['pocketLeft', 'pocketRight', 'pocketBagWaistLeft', 'pocketBagWaistRight'],
|
||||
})
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
id: 'wFull',
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomLeft.y + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wBetweenNotches',
|
||||
from: points.pocketLeft,
|
||||
to: points.pocketRight,
|
||||
y: points.topLeft.y - 15,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hFull',
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15,
|
||||
})
|
||||
|
||||
return part
|
||||
}
|
||||
|
|
|
@ -10,19 +10,45 @@ function pacoCuff({
|
|||
options,
|
||||
complete,
|
||||
paperless,
|
||||
expand,
|
||||
units,
|
||||
macro,
|
||||
part,
|
||||
}) {
|
||||
if (!options.elasticatedHem) return part.hide()
|
||||
if (!options.elasticatedCuff) return part.hide()
|
||||
|
||||
const l = store.get('frontAnkle') + store.get('backAnkle')
|
||||
const w = store.get('ankleElastic') * 1.05
|
||||
|
||||
if (expand) store.flag.preset('expandIsOn')
|
||||
else {
|
||||
// Expand is on, do not draw the part but flag this to the user
|
||||
store.flag.note({
|
||||
msg: `paco:cutCuff`,
|
||||
replace: {
|
||||
w: units(w * 2 + 4 * sa),
|
||||
l: units(l + 2 * sa),
|
||||
},
|
||||
suggest: {
|
||||
text: 'flag:show',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', 1],
|
||||
},
|
||||
},
|
||||
})
|
||||
// Also hint about expand
|
||||
store.flag.preset('expandIsOff')
|
||||
|
||||
return part.hide()
|
||||
}
|
||||
|
||||
let len = store.get('frontAnkle') + store.get('backAnkle')
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.midLeft = new Point(0, store.get('ankleElastic') * 1.05)
|
||||
points.bottomLeft = new Point(0, store.get('ankleElastic') * 2.1)
|
||||
|
||||
points.topRight = points.topLeft.shift(0, len)
|
||||
points.midRight = points.midLeft.shift(0, len)
|
||||
points.bottomRight = points.bottomLeft.shift(0, len)
|
||||
points.topMid = new Point(w, 0)
|
||||
points.topRight = new Point(2 * w, 0)
|
||||
points.bottomLeft = new Point(0, l)
|
||||
points.bottomMid = new Point(w, l)
|
||||
points.bottomRight = new Point(2 * w, l)
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.topLeft)
|
||||
|
@ -33,49 +59,54 @@ function pacoCuff({
|
|||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
if (complete) {
|
||||
paths.fold = new Path().move(points.midLeft).line(points.midRight).attr('class', 'help')
|
||||
if (complete)
|
||||
paths.fold = new Path().move(points.topMid).line(points.bottomMid).attr('class', 'help')
|
||||
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.4)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 4,
|
||||
title: 'cuff',
|
||||
})
|
||||
macro('grainline', {
|
||||
from: points.topLeft.shift(0, 15),
|
||||
to: points.bottomLeft.shift(0, 15),
|
||||
})
|
||||
if (sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.topLeft.shift(180, 2 * sa))
|
||||
.line(points.bottomLeft.shift(180, 2 * sa))
|
||||
.line(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topLeft.shift(180, 2 * sa))
|
||||
.close()
|
||||
.offset(sa)
|
||||
.attr('class', 'fabric sa')
|
||||
|
||||
if (sa) {
|
||||
paths.sa = new Path()
|
||||
.move(points.topLeft)
|
||||
.line(points.bottomLeft.shift(-90, 2 * sa))
|
||||
.line(points.bottomRight.shift(-90, 2 * sa))
|
||||
.line(points.topRight)
|
||||
.line(points.topLeft)
|
||||
.close()
|
||||
.offset(sa)
|
||||
.attr('class', 'fabric sa')
|
||||
paths.saHint = new Path()
|
||||
.move(points.bottomLeft.shift(-90, sa).shift(180, sa))
|
||||
.line(points.bottomRight.shift(-90, sa).shift(0, sa))
|
||||
.attr('class', 'help')
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Annotations
|
||||
*/
|
||||
// Cutlist
|
||||
store.cutlist.setCut({ cut: 2, from: 'fabric' })
|
||||
|
||||
if (paperless) {
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomRight.y + 15 + sa,
|
||||
})
|
||||
}
|
||||
// Title
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 4,
|
||||
title: 'cuff',
|
||||
align: 'center',
|
||||
})
|
||||
|
||||
// Grainline
|
||||
macro('grainline', {
|
||||
from: points.topMid.shift(0, 15),
|
||||
to: points.bottomMid.shift(0, 15),
|
||||
})
|
||||
|
||||
// Dimensions
|
||||
macro('vd', {
|
||||
id: 'hfull',
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wfull',
|
||||
from: points.bottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomRight.y + 15 + sa,
|
||||
})
|
||||
|
||||
return part
|
||||
}
|
||||
|
|
|
@ -79,8 +79,8 @@ function pacoFront({
|
|||
points.kneeIn = points.knee.shift(0, quarterHeel)
|
||||
points.kneeInCp2 = points.kneeIn
|
||||
|
||||
// Shorter leg if we have an elasticated hem
|
||||
if (options.elasticatedHem) {
|
||||
// Shorter leg if we have an elasticated cuff
|
||||
if (options.elasticatedCuff) {
|
||||
for (const p of ['floor', 'floorIn', 'floorOut'])
|
||||
points[p] = points[p].shift(90, options.ankleElastic)
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ function pacoFront({
|
|||
if (sa) {
|
||||
const waistIn = points.styleWaistIn || points.waistIn
|
||||
const waistOut = points.styleWaistOut || points.waistOut
|
||||
const hemSa = options.elasticatedHem ? sa : 4 * sa
|
||||
const hemSa = options.elasticatedCuff ? sa : 4 * sa
|
||||
paths.sa = drawOutseam()
|
||||
.offset(sa)
|
||||
.line(points.floorOut.shift(180, sa).shift(-90, hemSa))
|
||||
|
|
|
@ -5,6 +5,7 @@ function pacoFrontPocketBag({
|
|||
points,
|
||||
Path,
|
||||
paths,
|
||||
store,
|
||||
snippets,
|
||||
options,
|
||||
complete,
|
||||
|
@ -36,71 +37,85 @@ function pacoFrontPocketBag({
|
|||
.close()
|
||||
.attr('class', 'lining')
|
||||
|
||||
if (complete) {
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 5,
|
||||
title: 'pocketBag',
|
||||
})
|
||||
macro('cutonfold', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
grainline: true,
|
||||
})
|
||||
macro('sprinkle', {
|
||||
snippet: 'notch',
|
||||
on: ['flapTopLeft', 'flapBottomLeft'],
|
||||
})
|
||||
|
||||
if (sa) {
|
||||
paths.sa = new Path()
|
||||
.move(points.topRight)
|
||||
.line(points.topLeft)
|
||||
.line(points.flapBottomLeft)
|
||||
._curve(points.bottomCp1, points.bottom)
|
||||
.line(points.bottomRight)
|
||||
.offset(sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.topRight)
|
||||
.join(paths.sa)
|
||||
.line(points.bottomRight)
|
||||
.attr('class', 'lining sa')
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = new Path()
|
||||
.move(points.topRight)
|
||||
.line(points.topLeft)
|
||||
.line(points.flapBottomLeft)
|
||||
._curve(points.bottomCp1, points.bottom)
|
||||
.line(points.bottomRight)
|
||||
.offset(sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.topRight)
|
||||
.join(paths.sa)
|
||||
.line(points.bottomRight)
|
||||
.attr('class', 'lining sa')
|
||||
}
|
||||
|
||||
if (paperless) {
|
||||
macro('hd', {
|
||||
from: points.flapBottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomRight.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.y - 15 - sa,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topLeft,
|
||||
x: points.topRight.x + 30 + sa,
|
||||
})
|
||||
macro('ld', {
|
||||
from: points.flapTopLeft,
|
||||
to: points.topLeft,
|
||||
d: 15 + sa,
|
||||
})
|
||||
macro('ld', {
|
||||
from: points.flapBottomLeft,
|
||||
to: points.flapTopLeft,
|
||||
d: 15 + sa,
|
||||
})
|
||||
}
|
||||
/*
|
||||
* Annotations
|
||||
*/
|
||||
// Cutlist
|
||||
store.cutlist.setCut({ cut: 2, from: 'lining' })
|
||||
|
||||
// Title
|
||||
points.title = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 5,
|
||||
title: 'pocketBag',
|
||||
})
|
||||
|
||||
// Cutonfold
|
||||
macro('cutonfold', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
grainline: true,
|
||||
})
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', {
|
||||
snippet: 'notch',
|
||||
on: ['flapTopLeft', 'flapBottomLeft'],
|
||||
})
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
id: 'wFull',
|
||||
from: points.flapBottomLeft,
|
||||
to: points.bottomRight,
|
||||
y: points.bottomRight.y + 15 + sa,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wAtWaist',
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.y - 15 - sa,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hAtFold',
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hFull',
|
||||
from: points.bottomRight,
|
||||
to: points.topLeft,
|
||||
x: points.topRight.x + 30 + sa,
|
||||
})
|
||||
macro('ld', {
|
||||
id: 'lWaistToOpening',
|
||||
from: points.flapTopLeft,
|
||||
to: points.topLeft,
|
||||
d: 15 + sa,
|
||||
})
|
||||
macro('ld', {
|
||||
id: 'lOpening',
|
||||
from: points.flapBottomLeft,
|
||||
to: points.flapTopLeft,
|
||||
d: 15 + sa,
|
||||
})
|
||||
|
||||
return part
|
||||
}
|
||||
|
|
|
@ -42,14 +42,14 @@ function pacoWaistband({
|
|||
}
|
||||
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.midLeft = new Point(0, store.get('waistbandWidth'))
|
||||
points.bottomLeft = new Point(0, store.get('waistbandWidth') * 2)
|
||||
points.eyeletLeft = new Point(20, store.get('waistbandWidth') / 2)
|
||||
points.eyeletRight = points.eyeletLeft.shift(0, l - 40)
|
||||
points.topMid = new Point(w, 0)
|
||||
points.topRight = new Point(w * 2, 0)
|
||||
points.bottomLeft = new Point(0, l)
|
||||
points.bottomMid = new Point(w, l)
|
||||
points.bottomRight = new Point(w * 2, l)
|
||||
|
||||
points.topRight = points.topLeft.shift(0, l)
|
||||
points.midRight = points.midLeft.shift(0, l)
|
||||
points.bottomRight = points.bottomLeft.shift(0, l)
|
||||
points.eyeletTop = new Point(w * 1.5, w / 2)
|
||||
points.eyeletBottom = points.bottomLeft.translate(w * 1.5, w / -2)
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.topLeft)
|
||||
|
@ -61,15 +61,15 @@ function pacoWaistband({
|
|||
.addClass('fabric')
|
||||
|
||||
if (complete)
|
||||
paths.fold = new Path().move(points.midLeft).line(points.midRight).attr('class', 'help')
|
||||
paths.fold = new Path().move(points.topMid).line(points.bottomMid).attr('class', 'help')
|
||||
|
||||
if (sa)
|
||||
paths.sa = new Path()
|
||||
.move(points.topLeft)
|
||||
.line(points.bottomLeft.shift(-90, 2 * sa))
|
||||
.line(points.bottomRight.shift(-90, 2 * sa))
|
||||
.move(points.topLeft.shift(180, 2 * sa))
|
||||
.line(points.bottomLeft.shift(180, 2 * sa))
|
||||
.line(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topLeft)
|
||||
.line(points.topLeft.shift(180, 2 * sa))
|
||||
.close()
|
||||
.offset(sa)
|
||||
.setClass('fabric sa')
|
||||
|
@ -95,32 +95,32 @@ function pacoWaistband({
|
|||
})
|
||||
|
||||
// Notches
|
||||
macro('sprinkle', { snippet: 'eyelet', on: ['eyeletLeft', 'eyeletRight'] })
|
||||
macro('sprinkle', { snippet: 'notch', on: ['midLeft', 'midRight'] })
|
||||
macro('sprinkle', { snippet: 'eyelet', on: ['eyeletTop', 'eyeletBottom'] })
|
||||
//macro('sprinkle', { snippet: 'notch', on: ['midLeft', 'midRight'] })
|
||||
|
||||
// Dimensions
|
||||
macro('hd', {
|
||||
id: 'wFull',
|
||||
from: points.midLeft,
|
||||
to: points.midRight,
|
||||
y: points.bottomRight.y + 3 * sa + 15,
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.bottomRight.y + sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wEyeletLeft',
|
||||
from: points.midLeft,
|
||||
to: points.eyeletLeft,
|
||||
y: points.topRight.y - sa - 15,
|
||||
id: 'wEyeletTop',
|
||||
from: points.eyeletTop,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.y - sa - 15,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wEyeletRight',
|
||||
from: points.eyeletRight,
|
||||
to: points.midRight,
|
||||
y: points.topRight.y - sa - 15,
|
||||
macro('vd', {
|
||||
id: 'hEyeletTop',
|
||||
from: points.eyeletTop,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomRight,
|
||||
to: points.topRight,
|
||||
x: points.topRight.x + 15 + sa,
|
||||
x: points.topLeft.x - 15 - 3 * sa,
|
||||
})
|
||||
|
||||
return part
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: "Elasticated hem"
|
||||
title: "Elasticated cuff"
|
||||
---
|
||||
|
||||
Whether you want to include an elasticated cuff at the ankle,
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
@ -35,6 +35,7 @@ editCurrentMeasiesHeader: Edit Pattern Measurements
|
|||
editMeasiesByHand: Edit measurements by hand
|
||||
editMeasiesByHandDesc: Manually set or override any measurements. These changes will only apply to the current pattern.
|
||||
editSettings: Edit configuration
|
||||
elastic: Elastic
|
||||
export: Export
|
||||
exportAsData: Export as data
|
||||
exportForEditing: Export for editing
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue