1
0
Fork 0

breaking(simon): Replace yokeDart option by roundBack option

This option address fitting for a rounded back.
Something `yokeDart` used to do by adding a dart to the side of the
yoke.

However, in doing so `yokeDart` would change the lenght of the armhole
which is not ideal. The now `roundBack` option instead lengtens the back
in the middle, tapering off towards the sides. Thereby accomplishing
the same alteration without influencing the lenght of the armhole.
This commit is contained in:
Joost De Cock 2021-06-20 09:36:39 +02:00
parent af2ee352c7
commit 6c58069570
4 changed files with 44 additions and 62 deletions

View file

@ -14,6 +14,7 @@
See [#642](https://github.com/freesewing/freesewing/issues/642)
- The `s3collar and `s3armhole` options now allow shifting the shoulder seam
(`s3` is short for *Shift Shoulder Seam*)
- Added the `roundBack` option to replace the `yokeDart` option
sven: *s3optsAdded
Changed:
@ -43,6 +44,10 @@
tutorial:
- Set department in the config to one of the newly accepted values
Removed:
simon:
- The `yokeDart` option is replaced by the `roundBack` option
2.16.2:
date: 2021-05-05

View file

@ -134,6 +134,10 @@ hemStyle:
baseball: Baseball hem
slashed: Slashed hem
roundBack:
title: Round back
description: To fit a round(er) back, this adds length to the center back (at the yoke) that tapers of towards the sides.
seperateButtonholePlacket:
title: Seperate buttonhole placket
description: Draft a separate buttonhole placket.
@ -158,10 +162,6 @@ waistEase:
title: Waist ease
description: The amount of ease at your (natural) waist.
yokeDart:
title: Yoke dart
description: Whether to include a dart at the sides of the yoke to fit a rounder back.
yokeHeight:
title: Yoke height
description: Controls the height of the yoke

View file

@ -19,7 +19,7 @@ export default {
'sleeveLengthBonus',
'waistEase',
'hipsEase',
'yokeDart',
'roundBack',
],
style: [
'hemStyle',
@ -218,9 +218,10 @@ export default {
hemCurve: { pct: 50, min: 25, max: 100 },
hipsEase: { pct: 15, min: 10, max: 35 },
lengthBonus: { pct: 25, min: -4, max: 60 },
roundBack: { pct: 0, min: 0, max: 10 },
shoulderEase: { pct: 2, min: 0, max: 15 },
shoulderSlopeReduction: { pct: 0, min: 0, max: 8 },
yokeHeight: { pct: 55, min: 10, max: 100 },
yokeHeight: { pct: 55, min: 10, max: 90 },
// s3 is short for Shoulder Seam Shift
s3Collar: { pct: 0, min: -100, max: 100 },
s3Armhole: { pct: 0, min: -100, max: 100 },
@ -247,7 +248,6 @@ export default {
sleeveLengthBonus: { pct: 0, min: -40, max: 10 },
sleevePlacketLength: { pct: 25, min: 15, max: 35 },
waistEase: { pct: 15, min: 10, max: 35 },
yokeDart: { pct: 0, min: 0, max: 15 },
backDartShaping: { pct: 25, min: 5, max: 75 },
},
}

View file

@ -98,15 +98,33 @@ export default (part) => {
paths.backArmholeBack = back.setRender(false)
}
// Round back
paths.armhole = new Path()
.move(points.armhole)
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
.curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
if (options.yokeHeight < 1 && options.yokeHeight > 0) paths.armhole = paths.armhole.join(paths.backArmholeBack)
else if (options.yokeHeight === 0) paths.armhole = paths.armhole.join(paths.backArmhole)
paths.armhole.render = false
if (options.roundBack > 0) {
points.cbTop = points.cbYoke.shift(90, points.armholePitch.x * options.roundBack)
points.cbTopCp1 = points.cbTop.shift(0, points.armholePitch.x * 0.5)
paths.roundedBack = new Path().move(points.armholeYokeSplit)._curve(points.cbTopCp1, points.cbTop).line(points.cbYoke)
}
// Box pleat
if (options.boxPleat) {
points.boxPleatLeft = points.cbYoke.shift(0, options.boxPleatWidth / 2)
points.boxPleatLeft = paths.roundedBack
? points.cbTop.shift(0, options.boxPleatWidth / 2)
: points.cbYoke.shift(0, options.boxPleatWidth / 2)
points.boxPleatMid = points.boxPleatLeft.shift(0, options.boxPleatFold)
points.boxPleatRight = points.boxPleatMid.shift(0, options.boxPleatFold)
points.boxPleatLeftBottom = new Point(points.boxPleatLeft.x, points.armholeHollowCp2.y)
points.boxPleatMidBottom = new Point(points.boxPleatMid.x, points.armholeHollowCp2.y)
points.boxPleatRightBottom = new Point(points.boxPleatRight.x, points.armholeHollowCp2.y)
paths.armhole.setRender(true).attr('class', 'stroke-xl highlight debug canvas')
paths.armhole = paths.armhole.translate(options.boxPleatFold * 2, 0)
for (let p of [
'armholePitch',
'armholePitchCp1',
@ -115,52 +133,11 @@ export default (part) => {
'armholeHollowCp1',
'armholeCp2',
'armhole',
'armholeYokeSplit'
])
points[p] = points[p].shift(0, options.boxPleatFold * 2)
}
// Yoke dart
paths.armhole = new Path()
.move(points.armhole)
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
.curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
if (options.yokeHeight < 1 && options.yokeHeight > 0) paths.armhole = paths.armhole.join(paths.backArmholeBack)
else if (options.yokeHeight === 0) paths.armhole = paths.armhole.join(paths.backArmhole)
/*
paths.armhole.render = false
if (options.yokeDart > 0) {
points.tmp1 = points.armholePitch.shift(
-90,
points.armholePitch.dy(points.armhole) * options.yokeDart
)
points.tmp2 = points.tmp1.shift(180, 50)
points.tmp3 = points.tmp1.shift(0, 50)
points.yokeDartEdge = utils.lineIntersectsCurve(
points.tmp2,
points.tmp3,
points.armholePitch,
points.armholePitchCp1,
points.armholeHollowCp2,
points.armholeHollow
)
points.yokeDartTip = points.armholePitch.shift(180, points.armholePitch.x * 0.4)
points.yokeDartTipCp1 = points.armholePitch.shiftFractionTowards(points.yokeDartTip, 0.4)
paths.armhole = paths.armhole.split(points.yokeDartEdge)[0]
paths.armhole._curve(points.yokeDartTipCp1, points.yokeDartTip)
// Adapt armhole length to accomodate dart
store.set(
'backArmholeLength',
store.get('backArmholeLength') - points.yokeDartEdge.dist(points.armholePitch)
)
}
*/
// Never make the hips more narrow than the waist because that looks silly
//if (points.hem.x < points.waist.x) {
// points.hem.x = points.waist.x
// points.hips.x = points.waist.x
// points.hipsCp2.x = points.waist.x
//}
// Draft hem
switch (options.hemStyle) {
@ -175,7 +152,6 @@ export default (part) => {
.curve(points.hipsCp2, points.waistCp1, points.waist)
.curve_(points.waistCp2, points.armhole)
.join(paths.armhole)
.line(points.cbYoke)
paths.hemBase = new Path()
.move(points.cbHem)
.line(points.bballStart)
@ -194,7 +170,6 @@ export default (part) => {
.curve(points.hipsCp2, points.waistCp1, points.waist)
.curve_(points.waistCp2, points.armhole)
.join(paths.armhole)
.line(points.cbYoke)
paths.hemBase = new Path()
.move(points.cbHem)
.line(points.slashEnd)
@ -207,9 +182,11 @@ export default (part) => {
.curve(points.hipsCp2, points.waistCp1, points.waist)
.curve_(points.waistCp2, points.armhole)
.join(paths.armhole)
.line(points.cbYoke)
paths.hemBase = new Path().move(points.cbHem).line(points.hem)
}
// Take rounded back into account
if (paths.roundedBack) paths.saBase = paths.saBase.join(paths.roundedBack)
else paths.saBase = paths.saBase.line(points.cbYoke)
// Paths
paths.saBase.render = false
@ -336,26 +313,26 @@ export default (part) => {
to: points.armhole,
x: points.hips.x + 60 + sa,
})
if (options.yokeDart > 0) {
if (options.roundBack > 0) {
macro('vd', {
from: points.armhole,
to: points.yokeDartEdge,
to: points.armholeYokeSplit,
x: points.armhole.x + 15 + sa,
})
macro('vd', {
from: points.armhole,
to: points.yokeDartTip,
to: points.cbTop,
x: points.armhole.x + 30 + sa,
})
macro('hd', {
from: points.cbYoke,
to: points.yokeDartTip,
y: points.cbYoke.y - 15 - sa,
from: points.cbTop,
to: points.armholePitch,
y: points.cbTop.y - 15 - sa,
})
macro('hd', {
from: points.cbYoke,
to: points.yokeDartEdge,
y: points.cbYoke.y - 30 - sa,
from: points.cbTop,
to: points.armholeYokeSplit,
y: points.cbTop.y - 30 - sa,
})
} else {
macro('vd', {