Merge pull request #3275 from anna-puk/teagan-inward-curve-at-waist
Teagan inward curve at waist
This commit is contained in:
commit
f86149e7dc
3 changed files with 94 additions and 13 deletions
|
@ -25,9 +25,20 @@ function teaganBack({
|
|||
|
||||
// Draw seamline
|
||||
paths.hemBase = new Path().move(points.cfHem).line(points.hem).hide()
|
||||
paths.saBase = new Path()
|
||||
if (options.curveToWaist) {
|
||||
paths.sideSeam = new Path()
|
||||
.move(points.hem)
|
||||
.curve(points.hipsCp2,points.waistCp1, points.waist)
|
||||
.curve_(points.waistCp2,points.armhole)
|
||||
.hide()
|
||||
} else {
|
||||
paths.sideSeam = new Path()
|
||||
.move(points.hem)
|
||||
.curve_(points.waistCp2,points.armhole)
|
||||
.hide()
|
||||
}
|
||||
paths.saBase = new Path()
|
||||
.move(points.armhole)
|
||||
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
|
||||
.curve(points.armholeHollowCp2, points.shoulderCp1, points.shoulder)
|
||||
.line(points.neck)
|
||||
|
@ -36,6 +47,7 @@ function teaganBack({
|
|||
paths.seam = new Path()
|
||||
.move(points.cfHem)
|
||||
.join(paths.hemBase)
|
||||
.join(paths.sideSeam)
|
||||
.join(paths.saBase)
|
||||
.line(points.cfHem)
|
||||
.close()
|
||||
|
@ -68,6 +80,7 @@ function teaganBack({
|
|||
paths.sa = new Path()
|
||||
.move(points.cfHem)
|
||||
.join(paths.hemBase.offset(sa * 3))
|
||||
.join(paths.sideSeam.offset(sa))
|
||||
.join(paths.saBase.offset(sa))
|
||||
.line(points.cbNeck)
|
||||
.attr('class', 'fabric sa')
|
||||
|
|
|
@ -18,12 +18,35 @@ function teaganFront({
|
|||
macro,
|
||||
log,
|
||||
units,
|
||||
getId,
|
||||
part,
|
||||
}) {
|
||||
// Hide Brian paths
|
||||
for (let key of Object.keys(paths)) paths[key].hide()
|
||||
|
||||
// Adapt fit to waist
|
||||
if (options.curveToWaist) {
|
||||
let midWidth, lowerWidth
|
||||
|
||||
midWidth = measurements.waist * (1 + options.curvedWaistEase)/4
|
||||
lowerWidth = measurements.hips * (1 + options.hipsEase)/4
|
||||
points.hem.x = lowerWidth
|
||||
points.hips.x = lowerWidth
|
||||
points.waist.x = midWidth
|
||||
|
||||
// control points should be somewhat evenly spaced around waist
|
||||
let cpAbove, cpBelow
|
||||
cpAbove = points.armhole.dy(points.waist) * 0.6
|
||||
cpBelow = points.hips.dy(points.waist) * 0.25
|
||||
points.waistCp1 = points.waist.shift(90, cpBelow*2/3 - cpAbove/3)
|
||||
points.waistCp2 = points.waist.shift(90, cpAbove*2/3 - cpBelow/3)
|
||||
points.hipsCp2 = points.hips.shift(90,points.waist.dy(points.hips) * 0.3)
|
||||
|
||||
// warn if we're making a barrel-shaped shirt
|
||||
if (midWidth > lowerWidth) {
|
||||
log.warning('width at waist exceeds width at hips; consider disabling the curve to waist option for a more standard shape')
|
||||
}
|
||||
} else {
|
||||
let width
|
||||
if (measurements.waist > measurements.hips)
|
||||
width = (measurements.waist * (1 + options.hipsEase)) / 4
|
||||
|
@ -32,6 +55,9 @@ function teaganFront({
|
|||
points.hips.x = width
|
||||
points.waist.x = width
|
||||
points.waistCp2 = points.waist.shift(90, points.armhole.dy(points.waist) / 3)
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Clone cb (center back) into cf (center front)
|
||||
for (let key of ['Neck', 'Shoulder', 'Armhole', 'Hips', 'Hem']) {
|
||||
|
@ -63,9 +89,20 @@ function teaganFront({
|
|||
|
||||
// Draw seamline
|
||||
paths.hemBase = new Path().move(points.cfHem).line(points.hem).hide()
|
||||
paths.saBase = new Path()
|
||||
if (options.curveToWaist) {
|
||||
paths.sideSeam = new Path()
|
||||
.move(points.hem)
|
||||
.curve(points.hipsCp2,points.waistCp1, points.waist)
|
||||
.curve_(points.waistCp2,points.armhole)
|
||||
.hide()
|
||||
} else {
|
||||
paths.sideSeam = new Path()
|
||||
.move(points.hem)
|
||||
.curve_(points.waistCp2,points.armhole)
|
||||
.hide()
|
||||
}
|
||||
paths.saBase = new Path()
|
||||
.move(points.armhole)
|
||||
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
|
||||
.curve(points.armholeHollowCp2, points.shoulderCp1, points.shoulder)
|
||||
.line(points.neck)
|
||||
|
@ -74,6 +111,7 @@ function teaganFront({
|
|||
paths.seam = new Path()
|
||||
.move(points.cfHem)
|
||||
.join(paths.hemBase)
|
||||
.join(paths.sideSeam)
|
||||
.join(paths.saBase)
|
||||
.line(points.cfHem)
|
||||
.close()
|
||||
|
@ -105,6 +143,7 @@ function teaganFront({
|
|||
paths.sa = new Path()
|
||||
.move(points.cfHem)
|
||||
.join(paths.hemBase.offset(sa * 3))
|
||||
.join(paths.sideSeam.offset(sa))
|
||||
.join(paths.saBase.offset(sa))
|
||||
.line(points.cfNeck)
|
||||
.attr('class', 'fabric sa')
|
||||
|
@ -119,6 +158,18 @@ function teaganFront({
|
|||
to: points.hem,
|
||||
y: points.hem.y + sa * 2.5 + 15,
|
||||
})
|
||||
if (options.curveToWaist) {
|
||||
macro('hd', {
|
||||
from: points.waist,
|
||||
to: points.hem,
|
||||
y: points.hem.y + sa * 2.5 + 30
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.hem,
|
||||
to: points.waist,
|
||||
x: points.waist.x - 15,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
from: points.hem,
|
||||
to: points.armhole,
|
||||
|
@ -150,7 +201,7 @@ function teaganFront({
|
|||
y: points.neck.y - sa - 45,
|
||||
})
|
||||
// These dimensions are only for the front
|
||||
let id = part.getId()
|
||||
let id = getId()
|
||||
macro('vd', {
|
||||
id,
|
||||
from: points.cfHem,
|
||||
|
@ -182,6 +233,8 @@ export const front = {
|
|||
backNeckCutout: { pct: 8, min: 4, max: 12, menu: 'fit' },
|
||||
// Teagan specific
|
||||
draftForHighBust: { bool: false, menu: 'fit' },
|
||||
curveToWaist: { bool: false, menu: 'fit' },
|
||||
curvedWaistEase: { pct: 25, min: 8, max: 40, menu: 'fit' },
|
||||
hipsEase: { pct: 18, min: 8, max: 30, menu: 'fit' },
|
||||
necklineDepth: { pct: 25, min: 20, max: 40, menu: 'style' },
|
||||
necklineWidth: { pct: 30, min: 10, max: 50, menu: 'style' },
|
||||
|
|
15
markdown/org/docs/patterns/teagan/options/curvetowaist/en.md
Normal file
15
markdown/org/docs/patterns/teagan/options/curvetowaist/en.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
title: "Curve to waist"
|
||||
---
|
||||
|
||||
Choose this option to draft Teagan to curve towards your waist before curving towards the hips.
|
||||
|
||||
If waist measurement (plus ease) is smaller than hips (plus ease), this creates an hourglass shape such as found in 'fitted' or 'ladies' T-shirts (as opposed to 'regular' or 'unisex').
|
||||
|
||||
<Note>
|
||||
This option can also be used when the waist measurement exceeds the hip measurement, but this results in a non-standard T-shirt shape which may be impossible to put on.
|
||||
</Note>
|
||||
|
||||
## Effect of this option on the pattern
|
||||
|
||||

|
Loading…
Add table
Add a link
Reference in a new issue