1
0
Fork 0
freesewing/designs/wahid/src/front.mjs

512 lines
16 KiB
JavaScript
Raw Normal View History

2022-09-03 15:41:48 +02:00
import { constructMainDart, shapeSideSeam, dartPath } from './shared.mjs'
import { front as brianFront } from '@freesewing/brian'
import {
frontOverlap,
necklineDrop,
frontStyle,
frontInset,
shoulderInset,
neckInset,
hemStyle,
hemRadius,
pocketWidth,
pocketAngle,
pocketLocation,
frontScyeDart,
buttons,
waistEase,
hipsEase,
} from './options.mjs'
2022-09-11 08:14:04 -07:00
function wahidFront({
points,
Point,
paths,
Path,
measurements,
options,
utils,
macro,
snippets,
Snippet,
complete,
sa,
paperless,
store,
part,
}) {
2019-02-17 17:21:39 +01:00
// Cleanup from Brian
2019-08-03 15:03:33 +02:00
for (let i of Object.keys(paths)) delete paths[i]
delete snippets.armholePitchNotch
2019-02-17 17:21:39 +01:00
// Neck cutout
points.closureTop = new Point(
measurements.chest * options.frontOverlap * -1,
2019-02-17 20:42:05 +01:00
points.waist.y * options.necklineDrop
2019-08-03 15:03:33 +02:00
)
if (options.frontStyle === 'classic')
points.closureTopCp1 = new Point(points.neck.x, (points.waist.y * options.necklineDrop) / 2)
2019-02-17 20:42:05 +01:00
else {
2019-08-03 15:03:33 +02:00
points.closureTopCp1 = new Point(points.neck.x, points.closureTop.y)
2019-02-17 20:42:05 +01:00
}
2019-02-17 17:21:39 +01:00
// Front inset
2019-08-03 15:03:33 +02:00
let shoulderLen = points.shoulder.dist(points.neck)
let frontInset = shoulderLen * options.frontInset
points.armholePitch = points.armholePitch.shift(180, frontInset)
points.armholePitchCp1 = points.armholePitchCp1.shift(180, frontInset)
points.armholePitchCp2 = points.armholePitchCp2.shift(180, frontInset)
points.armholeHollow = points.armholeHollow.shift(180, frontInset / 2)
points.armholeHollowCp2 = points.armholeHollowCp2.shift(180, frontInset / 2)
points.armholeHollowCp1 = points.armholeHollowCp1.shift(180, frontInset / 2)
2019-02-17 17:21:39 +01:00
// Shoulder inset
2019-08-03 15:03:33 +02:00
points.shoulder = points.shoulder.shiftTowards(points.neck, shoulderLen * options.shoulderInset)
2019-02-17 17:21:39 +01:00
points.shoulderCp1 = points.shoulderCp1.shift(
points.shoulder.angle(points.neck),
shoulderLen * options.shoulderInset
2019-08-03 15:03:33 +02:00
)
2019-02-17 17:21:39 +01:00
// Neck inset
2019-08-03 15:03:33 +02:00
points.neck = points.neck.shiftTowards(points.shoulder, shoulderLen * options.neckInset)
points.neckCp2 = points.neck.shift(points.shoulder.angle(points.neck) + 90, shoulderLen * 0.2)
2019-02-17 17:21:39 +01:00
// Construct main dart
2019-08-03 15:03:33 +02:00
constructMainDart(part)
2019-02-17 17:21:39 +01:00
// Shape side seam
2019-08-03 15:03:33 +02:00
shapeSideSeam(part)
2019-02-17 17:21:39 +01:00
// Hem
2019-08-03 15:03:33 +02:00
if (options.hemStyle === 'classic') {
2019-02-17 17:21:39 +01:00
// Construct cutaway
2019-08-03 15:03:33 +02:00
let cutaway = points.closureTop.dx(points.hem) / 4
points.closureBottom = new Point(points.closureTop.x, points.hem.y - cutaway / 2)
points.hemTip = new Point(points.closureBottom.x + cutaway, points.closureBottom.y + cutaway)
2019-02-17 17:21:39 +01:00
// Shifting hem point to have a continious hem curve to work from
2019-08-03 15:03:33 +02:00
let shift = points.dartHemLeft.dx(points.dartHemRight)
points.splitHem = points.hem.shift(180, shift)
2019-02-17 17:21:39 +01:00
// Split hem curve on left side of dart
points.hemSplit = utils.curveIntersectsX(
points.hemTip,
points.hemTip,
points.dartHemLeft,
points.splitHem,
points.dartHemLeft.x
2019-08-03 15:03:33 +02:00
)
2019-02-17 17:21:39 +01:00
// Split the hem curve
let [c1, c2] = utils.splitCurve(
points.hemTip,
points.hemTip,
points.dartHemLeft,
points.splitHem,
points.hemSplit
2019-08-03 15:03:33 +02:00
)
points.splitDartHemLeftCp1 = c1.cp2
points.splitDartHemRightCp2 = c2.cp1.shift(0, shift)
points.splitHemCp1 = c2.cp2.shift(0, shift)
2019-02-17 17:21:39 +01:00
points.splitDartHemLeft = utils.curveIntersectsX(
points.hemTip,
points.hemTip,
points.dartHemLeft,
points.splitHem,
points.dartHemLeft.x
2019-08-03 15:03:33 +02:00
)
points.splitDartHemRight = points.splitDartHemLeft.shift(0, shift)
points.lastButton = new Point(0, points.closureBottom.y)
} else if (options.hemStyle === 'rounded') {
2019-08-03 15:03:33 +02:00
points.closureBottom = new Point(points.closureTop.x, points.hem.y)
2019-02-17 17:21:39 +01:00
// Draw rounded hem
let radius = measurements.hips * options.hemRadius
2019-02-17 17:21:39 +01:00
// Avoid radius extending beyond the dart
if (radius > points.closureTop.dx(points.dartHemLeft))
2019-08-03 15:03:33 +02:00
radius = points.closureTop.dx(points.dartHemLeft)
macro('round', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.hem,
via: points.closureBottom,
radius,
2021-04-24 10:16:31 +02:00
prefix: 'round',
2019-08-03 15:03:33 +02:00
})
points.lastButton = new Point(0, points.roundStart.y)
} else {
points.closureBottom = new Point(points.closureTop.x, points.hem.y)
points.lastButton = new Point(0, points.hem.y)
2019-02-17 17:21:39 +01:00
}
// We use the roundEnd and roundStart points later on
// let's make sure they exist even if the hem is not rounded
// (essentially a rounded hem with radius zero
if (!points.roundStart) points.roundStart = points.closureBottom.clone()
if (!points.roundEnd) points.roundEnd = points.closureBottom.clone()
2019-02-17 20:42:05 +01:00
// Add dart start and end point regardless of style or front or back
2019-08-03 15:03:33 +02:00
points.dartStart = options.hemStyle === 'classic' ? points.splitDartHemLeft : points.dartHemLeft
points.dartEnd = options.hemStyle === 'classic' ? points.splitDartHemRight : points.dartHemRight
2019-02-17 17:21:39 +01:00
// Pockets
let pw = measurements.hips * options.pocketWidth // Pocket width
2019-08-03 15:03:33 +02:00
let pwh = pw * options.weltHeight // Pocket welt height
let pwvh = pwh / Math.cos(utils.deg2rad(options.pocketAngle)) // Pocket welt vertical height
2019-02-17 17:21:39 +01:00
points.pocketTopMid = points.dartWaistCenter.shiftFractionTowards(
points.dartHipCenter,
options.pocketLocation
2019-08-03 15:03:33 +02:00
)
2019-02-17 17:21:39 +01:00
points.pocketTopMidLeft = utils.curveIntersectsY(
points.dartWaistLeft,
points.dartWaistLeftCpBottom,
points.dartHipLeftCpTop,
points.dartHipLeft,
points.pocketTopMid.y
2019-08-03 15:03:33 +02:00
)
2019-02-17 17:21:39 +01:00
points.pocketBottomMidLeft = utils.curveIntersectsY(
points.dartWaistLeft,
points.dartWaistLeftCpBottom,
points.dartHipLeftCpTop,
points.dartHipLeft,
points.pocketTopMid.y + pwvh
2019-08-03 15:03:33 +02:00
)
points.pocketTopLeft = points.pocketTopMidLeft.shift(180 + options.pocketAngle, pw / 2)
points.pocketBottomLeft = points.pocketTopLeft.shift(options.pocketAngle - 90, pwh)
points.pocketTopMidRight = points.pocketTopMidLeft.flipX(points.pocketTopMid)
points.pocketBottomMidRight = points.pocketBottomMidLeft.flipX(points.pocketTopMid)
points.pocketTopRight = points.pocketTopMidRight.shift(options.pocketAngle, pw / 2)
points.pocketBottomRight = points.pocketTopRight.shift(options.pocketAngle - 90, pwh)
// Store pocket bag length
2019-08-03 15:03:33 +02:00
store.set('pocketBagLength', points.pocketTopMid.dy(points.cfHem) * 0.75)
if (options.frontScyeDart) {
// Front scye dart
points._dartWidth = points.dartTop.shiftFractionTowards(
points.armholeHollow.rotate(options.frontScyeDart, points.dartTop),
1.5
)
points.armholeHollowTop = new Path()
.move(points.armholeHollow)
.curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
.intersects(new Path().move(points.dartTop).line(points._dartWidth))
.pop()
// Adjust control point
points.armholeHollowCp2 = points.armholeHollowCp2.shift(
points.armholeHollow.angle(points.armholeHollowTop),
points.armholeHollow.dist(points.armholeHollowTop)
)
// Rotate front scye dart into front dart
let toRotate = [
'dartWaistRightCpTop',
'dartWaistRight',
'dartWaistRightCpBottom',
'dartHipRightCpTop',
'dartHipRight',
'dartHemRight',
'splitDartHemRight',
'splitDartHemRightCp2',
'splitHemCp1',
'hem',
'hips',
'hipsCp2',
'waistCp1',
'waist',
'waistCp2',
'armhole',
'armholeCp2',
'armholeHollow',
'pocketTopMidRight',
'pocketBottomMidRight',
'pocketTopRight',
'pocketBottomRight',
2021-04-24 10:16:31 +02:00
'dartEnd',
]
for (let p of toRotate) {
if (typeof points[p] !== 'undefined')
points[p] = points[p].rotate(options.frontScyeDart, points.dartTop)
}
points.armholeHollowCp1 = points.armholeHollowCp2.rotate(180, points.armholeHollow)
2019-02-17 17:21:39 +01:00
}
// Facing/Lining boundary (flb)
points.flbTop = points.neck.shiftFractionTowards(points.shoulder, 0.5)
points.flbCp = points.dartTop.shift(-90, points.armholePitch.dy(points.flbTop) / 2)
2022-08-13 21:09:23 +00:00
points.flbCpTop = points.flbTop
.shiftTowards(points.neck, points.flbTop.dy(points.armholePitch))
.rotate(90, points.flbTop)
2019-02-17 17:21:39 +01:00
// Seam line
2019-08-03 15:03:33 +02:00
delete paths.cutonfold
delete paths.saBase
delete paths.sa
2019-02-17 20:42:05 +01:00
paths.saBase = new Path()
.move(points.hem)
2019-02-17 17:21:39 +01:00
.line(points.hips)
.curve(points.hipsCp2, points.waistCp1, points.waist)
.curve_(points.waistCp2, points.armhole)
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
.curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
.curve(points.armholePitchCp2, points.shoulderCp1, points.shoulder)
.line(points.neck)
2019-08-03 15:03:33 +02:00
.curve(points.neckCp2, points.closureTopCp1, points.closureTop)
if (options.hemStyle === 'classic') {
2019-02-17 17:21:39 +01:00
paths.saBase
.line(points.closureBottom)
.line(points.hemTip)
2019-08-03 15:03:33 +02:00
._curve(points.splitDartHemLeftCp1, points.splitDartHemLeft)
2019-02-17 20:42:05 +01:00
paths.hemBase = new Path()
.move(points.dartEnd)
2019-08-03 15:03:33 +02:00
.curve(points.splitDartHemRightCp2, points.splitHemCp1, points.hem)
} else if (options.hemStyle === 'rounded') {
2019-02-17 17:21:39 +01:00
paths.saBase
.line(points.roundStart)
.curve(points.roundCp1, points.roundCp2, points.roundEnd)
2019-08-03 15:03:33 +02:00
.line(points.dartHemLeft)
paths.hemBase = new Path().move(points.dartEnd).line(points.hem)
} else {
paths.saBase.line(points.closureBottom).line(points.dartHemLeft)
paths.hemBase = new Path().move(points.dartEnd).line(points.hem)
2019-02-17 17:21:39 +01:00
}
2019-08-03 15:03:33 +02:00
paths.dart = dartPath(part)
paths.seam = paths.saBase.join(paths.dart).join(paths.hemBase).close().attr('class', 'fabric')
2022-09-18 17:01:19 +02:00
paths.saBase.hide()
paths.hemBase.hide()
paths.dart.hide()
2019-02-17 17:21:39 +01:00
if (complete) {
// Pocket path
paths.pocket = new Path()
.move(points.pocketTopMidLeft)
.line(points.pocketTopLeft)
.line(points.pocketBottomLeft)
.line(points.pocketBottomMidLeft)
.move(points.pocketBottomMidRight)
.line(points.pocketBottomRight)
.line(points.pocketTopRight)
.line(points.pocketTopMidRight)
.attr('class', 'fabric dashed')
2019-02-17 17:21:39 +01:00
// Buttons
2019-08-03 15:03:33 +02:00
points.button1 = new Point(0, points.closureTop.y + 10)
let delta = points.button1.dist(points.lastButton) / (options.buttons - 1)
2019-02-17 17:21:39 +01:00
for (let i = 1; i <= options.buttons; i++) {
2019-08-03 15:03:33 +02:00
points['button' + i] = points.button1.shift(-90, delta * (i - 1))
snippets['button' + i] = new Snippet('button', points['button' + i])
snippets['buttonhole' + i] = new Snippet('buttonhole', points['button' + i]).attr(
'data-rotate',
90
)
2019-02-17 17:21:39 +01:00
}
// Facing/Lining boundary (flb)
paths.flbFacing = new Path()
.move(points.dartTop)
.curve(points.flbCp, points.flbCpTop, points.flbTop)
2019-08-03 15:03:33 +02:00
.attr('class', 'fabric')
paths.flbLining = paths.flbFacing.clone().attr('class', 'lining dashed')
2022-08-13 21:09:23 +00:00
//Grainline
2022-08-13 21:09:23 +00:00
macro('grainline', {
to: points.neck,
from: new Point(points.neck.x, points.cfHem.y),
2022-08-13 21:09:23 +00:00
})
2019-02-17 20:42:05 +01:00
if (sa) {
paths.sa = paths.saBase
.offset(sa)
2022-06-25 14:12:48 -04:00
.join(paths.hemBase.offset(sa))
2019-08-03 15:03:33 +02:00
.close()
2022-08-14 08:44:50 +00:00
.attr('class', 'fabric sa')
2019-02-17 20:42:05 +01:00
}
2019-02-17 17:21:39 +01:00
if (paperless) {
2019-08-03 15:03:33 +02:00
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.neck,
2021-04-24 10:16:31 +02:00
y: points.neck.y - 15 - sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.shoulder,
2021-04-24 10:16:31 +02:00
y: points.neck.y - 30 - sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.armhole,
2021-04-24 10:16:31 +02:00
y: points.neck.y - 45 - sa,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.neck,
to: points.shoulder,
2021-04-24 10:16:31 +02:00
d: 15 + sa,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.neck,
to: points.flbTop,
2021-04-24 10:16:31 +02:00
d: -15,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.armhole,
to: points.shoulder,
2021-04-24 10:16:31 +02:00
x: points.armhole.x + 15 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.armhole,
to: points.neck,
2021-04-24 10:16:31 +02:00
x: points.armhole.x + 30 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.hem,
to: points.armhole,
2021-04-24 10:16:31 +02:00
x: (points.armhole.x > points.hem.x ? points.armhole.x : points.hem.x) + 15 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
from: options.hemStyle === 'classic' ? points.splitDartHemRight : points.dartHemRight,
2019-02-17 17:21:39 +01:00
to: points.armhole,
2021-04-24 10:16:31 +02:00
x: (points.armhole.x > points.hem.x ? points.armhole.x : points.hem.x) + 30 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
from: options.hemStyle === 'classic' ? points.splitDartHemLeft : points.dartHemLeft,
2019-02-17 17:21:39 +01:00
to: points.armhole,
2021-04-24 10:16:31 +02:00
x: (points.armhole.x > points.hem.x ? points.armhole.x : points.hem.x) + 45 + sa,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.dartHemRight,
to: points.hem,
2021-04-24 10:16:31 +02:00
d: 15,
2019-08-03 15:03:33 +02:00
})
if (options.hemStyle === 'classic') {
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureBottom,
to: points.hemTip,
2021-04-24 10:16:31 +02:00
y: points.hemTip.y + 15 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureBottom,
to: points.splitDartHemLeft,
2021-04-24 10:16:31 +02:00
y: points.hemTip.y + 30 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureBottom,
to: points.splitDartHemRight,
2021-04-24 10:16:31 +02:00
y: points.hemTip.y + 45 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureBottom,
to: points.hem,
2021-04-24 10:16:31 +02:00
y: points.hemTip.y + 60 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.hemTip,
to: points.closureBottom,
2021-04-24 10:16:31 +02:00
x: points.closureBottom.x - 15 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.hemTip,
to: points.pocketTopMidLeft,
2021-04-24 10:16:31 +02:00
x: points.closureBottom.x - 30 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.hemTip,
to: points.dartWaistLeft,
2021-04-24 10:16:31 +02:00
x: points.closureBottom.x - 45 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.hemTip,
to: points.closureTop,
2021-04-24 10:16:31 +02:00
x: points.closureBottom.x - 60 - sa,
2019-08-03 15:03:33 +02:00
})
2019-02-17 17:21:39 +01:00
} else {
2019-08-03 15:03:33 +02:00
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.roundStart,
to: points.roundEnd,
2021-04-24 10:16:31 +02:00
y: points.roundEnd.y + 15 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.roundStart,
to: points.dartHemLeft,
2021-04-24 10:16:31 +02:00
y: points.roundEnd.y + 30 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.roundStart,
to: points.dartHemRight,
2021-04-24 10:16:31 +02:00
y: points.roundEnd.y + 45 + sa,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.roundStart,
to: points.hem,
2021-04-24 10:16:31 +02:00
y: points.roundEnd.y + 60 + sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.roundEnd,
to: points.roundStart,
2021-04-24 10:16:31 +02:00
x: points.roundStart.x - 15 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.roundEnd,
to: points.pocketTopMidLeft,
2021-04-24 10:16:31 +02:00
x: points.roundStart.x - 30 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.roundEnd,
to: points.dartWaistLeft,
2021-04-24 10:16:31 +02:00
x: points.roundStart.x - 45 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.roundEnd,
to: points.closureTop,
2021-04-24 10:16:31 +02:00
x: points.roundStart.x - 60 - sa,
2019-08-03 15:03:33 +02:00
})
2019-02-17 17:21:39 +01:00
}
2019-08-03 15:03:33 +02:00
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.neck,
2021-04-24 10:16:31 +02:00
x: points.closureTop.x - 15 - sa,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.button2,
to: points.button1,
2021-04-24 10:16:31 +02:00
x: points.button1.x + 15,
2019-08-03 15:03:33 +02:00
})
macro('hd', {
2019-02-17 17:21:39 +01:00
from: points.closureTop,
to: points.button2,
2021-04-24 10:16:31 +02:00
y: points.button2.y + 15,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.dartWaistLeft,
2021-04-24 10:16:31 +02:00
to: points.dartWaistRight,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.dartHipLeft,
2021-04-24 10:16:31 +02:00
to: points.dartHipRight,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.pocketTopLeft,
to: points.pocketTopMidLeft,
2021-04-24 10:16:31 +02:00
d: 15,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.pocketTopMidRight,
to: points.pocketTopRight,
2021-04-24 10:16:31 +02:00
d: 15,
2019-08-03 15:03:33 +02:00
})
macro('ld', {
2019-02-17 17:21:39 +01:00
from: points.pocketBottomRight,
to: points.pocketTopRight,
2021-04-24 10:16:31 +02:00
d: -15,
2019-08-03 15:03:33 +02:00
})
macro('vd', {
2019-02-17 17:21:39 +01:00
from: points.pocketTopMidLeft,
to: points.dartTop,
2021-04-24 10:16:31 +02:00
x: points.closureTop.x - 30 - sa,
2019-08-03 15:03:33 +02:00
})
2019-02-17 17:21:39 +01:00
}
}
2019-08-03 15:03:33 +02:00
return part
}
2022-09-03 15:41:48 +02:00
export const front = {
name: 'wahid.front',
from: brianFront,
hideDependencies: true,
2022-09-03 15:41:48 +02:00
measurements: ['hips', 'waist'],
options: {
frontOverlap,
necklineDrop,
frontStyle,
frontInset,
shoulderInset,
neckInset,
hemStyle,
hemRadius,
pocketWidth,
pocketAngle,
pocketLocation,
frontScyeDart,
buttons,
waistEase,
hipsEase,
},
draft: wahidFront,
}