chore(breanna): Port to v3 stage 2
This commit is contained in:
parent
a4983dfdc6
commit
b8fd8a4d19
18 changed files with 98 additions and 114 deletions
|
@ -1,23 +1,22 @@
|
||||||
import { base } from './base.mjs'
|
import { base } from './base.mjs'
|
||||||
import { pluginBundle } from '@freesewing/plugin-bundle'
|
import { pluginBundle } from '@freesewing/plugin-bundle'
|
||||||
|
|
||||||
function draftBreannaBack (part) {
|
function draftBreannaBack({
|
||||||
let {
|
sa,
|
||||||
sa,
|
points,
|
||||||
points,
|
Path,
|
||||||
Path,
|
paths,
|
||||||
paths,
|
Snippet,
|
||||||
Snippet,
|
snippets,
|
||||||
snippets,
|
complete,
|
||||||
complete,
|
paperless,
|
||||||
paperless,
|
macro,
|
||||||
macro,
|
Point,
|
||||||
Point,
|
options,
|
||||||
options,
|
utils,
|
||||||
utils,
|
store,
|
||||||
store,
|
part,
|
||||||
} = part.shorthand()
|
}) {
|
||||||
|
|
||||||
// Shoulder dart
|
// Shoulder dart
|
||||||
if (options.shoulderDart) {
|
if (options.shoulderDart) {
|
||||||
points.shoulderDartCenter = points.hps.shiftFractionTowards(points.shoulder, 0.5)
|
points.shoulderDartCenter = points.hps.shiftFractionTowards(points.shoulder, 0.5)
|
||||||
|
@ -280,10 +279,9 @@ function draftBreannaBack (part) {
|
||||||
return part
|
return part
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const back = {
|
export const back = {
|
||||||
from: base,
|
from: base,
|
||||||
name: 'breanna.back',
|
name: 'breanna.back',
|
||||||
plugins: [ pluginBundle ],
|
plugins: [pluginBundle],
|
||||||
draft: draftBreannaBack,
|
draft: draftBreannaBack,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
function draftBreannaBase (part) {
|
function draftBreannaBase({ store, points, Point, measurements, options, utils, part }) {
|
||||||
let { store, points, Point, measurements, options, utils } = part.shorthand()
|
|
||||||
|
|
||||||
// HPS
|
// HPS
|
||||||
points.hps = new Point((measurements.neck * (1 + options.collarEase)) / options.collarFactor, 0)
|
points.hps = new Point((measurements.neck * (1 + options.collarEase)) / options.collarFactor, 0)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Where to cut for a dart in a given location
|
// Where to cut for a dart in a given location
|
||||||
export function getDartInsertionPoint (points, utils, loc, angle) {
|
export function getDartInsertionPoint(points, utils, loc, angle) {
|
||||||
let tip = points.bustPoint
|
let tip = points.bustPoint
|
||||||
switch (loc) {
|
switch (loc) {
|
||||||
case 700:
|
case 700:
|
||||||
|
@ -46,7 +46,7 @@ export function getDartInsertionPoint (points, utils, loc, angle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// What points need to be rotated after cutting the primary bust dart
|
// What points need to be rotated after cutting the primary bust dart
|
||||||
export function getPrimaryDartRotationList (loc) {
|
export function getPrimaryDartRotationList(loc) {
|
||||||
let rotate = ['cfWaist']
|
let rotate = ['cfWaist']
|
||||||
if (loc >= 1100) rotate.push('cfNeck')
|
if (loc >= 1100) rotate.push('cfNeck')
|
||||||
if (loc >= 1130) rotate.push('hpsCp2')
|
if (loc >= 1130) rotate.push('hpsCp2')
|
||||||
|
@ -61,7 +61,7 @@ export function getPrimaryDartRotationList (loc) {
|
||||||
// What points need to be rotated after cutting the secondary bust dart
|
// What points need to be rotated after cutting the secondary bust dart
|
||||||
// loc1 = primary bust dart location
|
// loc1 = primary bust dart location
|
||||||
// loc2 = secondary bust dart location
|
// loc2 = secondary bust dart location
|
||||||
export function getSecondaryDartRotationList (loc1, loc2) {
|
export function getSecondaryDartRotationList(loc1, loc2) {
|
||||||
let rotate = ['primaryBustDart1']
|
let rotate = ['primaryBustDart1']
|
||||||
if (loc1 <= 700 && loc2 >= 800) rotate.push('cfWaist')
|
if (loc1 <= 700 && loc2 >= 800) rotate.push('cfWaist')
|
||||||
if (loc1 <= 1000 && loc2 >= 1100) rotate.push('cfNeck')
|
if (loc1 <= 1000 && loc2 >= 1100) rotate.push('cfNeck')
|
||||||
|
@ -74,7 +74,7 @@ export function getSecondaryDartRotationList (loc1, loc2) {
|
||||||
return rotate
|
return rotate
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDartLocationsAsNumbers (options) {
|
export function getDartLocationsAsNumbers(options) {
|
||||||
let loc1 = options.primaryBustDart
|
let loc1 = options.primaryBustDart
|
||||||
let loc2 = options.secondaryBustDart
|
let loc2 = options.secondaryBustDart
|
||||||
loc1 = Number(loc1.slice(0, 2) + loc1.slice(-2))
|
loc1 = Number(loc1.slice(0, 2) + loc1.slice(-2))
|
||||||
|
@ -111,7 +111,7 @@ export const getSaDartPaths = (Path, points) => [
|
||||||
* still need to turn them into darts that make sense in practice.
|
* still need to turn them into darts that make sense in practice.
|
||||||
* This method takes care of that
|
* This method takes care of that
|
||||||
*/
|
*/
|
||||||
export function applyBustDarts (points, options, utils) {
|
export function applyBustDarts(points, options, utils) {
|
||||||
// Find the bust dart edge point
|
// Find the bust dart edge point
|
||||||
points.primaryBustDartEdge = utils.beamsIntersect(
|
points.primaryBustDartEdge = utils.beamsIntersect(
|
||||||
points.primaryBustDart1,
|
points.primaryBustDart1,
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
import { base } from './base.mjs'
|
import { base } from './base.mjs'
|
||||||
import { back } from './back.mjs'
|
import { back } from './back.mjs'
|
||||||
|
|
||||||
function draftBreannaFrontBase (part) {
|
function draftBreannaFrontBase({
|
||||||
let { points, Path, paths, Point, measurements, options, utils, store } = part.shorthand()
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Point,
|
||||||
|
measurements,
|
||||||
|
options,
|
||||||
|
utils,
|
||||||
|
store,
|
||||||
|
part,
|
||||||
|
}) {
|
||||||
// Fit neck
|
// Fit neck
|
||||||
points.cfHps = points.cbHps.clone()
|
points.cfHps = points.cbHps.clone()
|
||||||
points.cfNeck = points.hps.rotate(-90, points.cfHps)
|
points.cfNeck = points.hps.rotate(-90, points.cfHps)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1100 (part) {
|
export function frontWithPrimaryAt1100(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1130 (part) {
|
export function frontWithPrimaryAt1130(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1200 (part) {
|
export function frontWithPrimaryAt1200(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1300 (part) {
|
export function frontWithPrimaryAt1300(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1330 (part) {
|
export function frontWithPrimaryAt1330(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt1400 (part) {
|
export function frontWithPrimaryAt1400(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt600 (part) {
|
export function frontWithPrimaryAt600(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt700 (part) {
|
export function frontWithPrimaryAt700(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryAt800 (part) {
|
export function frontWithPrimaryAt800(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('secondaryBustDartLocation')) {
|
switch (store.get('secondaryBustDartLocation')) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export function frontWithPrimaryOnly (part) {
|
export function frontWithPrimaryOnly(part) {
|
||||||
let { points, Path, store } = part.shorthand()
|
let { points, Path, store } = part.shorthand()
|
||||||
|
|
||||||
switch (store.get('primaryBustDartLocation')) {
|
switch (store.get('primaryBustDartLocation')) {
|
||||||
|
|
|
@ -21,22 +21,21 @@ import {
|
||||||
getSaDartPaths,
|
getSaDartPaths,
|
||||||
} from './dart-utils.mjs'
|
} from './dart-utils.mjs'
|
||||||
|
|
||||||
function draftBreannaFront (part) {
|
function draftBreannaFront({
|
||||||
let {
|
options,
|
||||||
options,
|
store,
|
||||||
store,
|
utils,
|
||||||
utils,
|
points,
|
||||||
points,
|
Path,
|
||||||
Path,
|
paths,
|
||||||
paths,
|
sa,
|
||||||
sa,
|
complete,
|
||||||
complete,
|
paperless,
|
||||||
paperless,
|
macro,
|
||||||
macro,
|
snippets,
|
||||||
snippets,
|
Snippet,
|
||||||
Snippet,
|
part,
|
||||||
} = part.shorthand()
|
}) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We're starting from front-base here, which is injected into this part
|
* We're starting from front-base here, which is injected into this part
|
||||||
* It has a single primary bust dart at 06:00
|
* It has a single primary bust dart at 06:00
|
||||||
|
|
|
@ -12,7 +12,7 @@ import { sleeveCap } from './sleevecap.mjs'
|
||||||
// Create design
|
// Create design
|
||||||
const Breanna = new Design({
|
const Breanna = new Design({
|
||||||
data,
|
data,
|
||||||
parts: [ back, front, sleeve ]
|
parts: [back, front, sleeve],
|
||||||
})
|
})
|
||||||
|
|
||||||
// Named exports
|
// Named exports
|
||||||
|
|
|
@ -3,8 +3,8 @@ import { front } from './front.mjs'
|
||||||
import { frontBase } from './front-base.mjs'
|
import { frontBase } from './front-base.mjs'
|
||||||
import { back } from './back.mjs'
|
import { back } from './back.mjs'
|
||||||
|
|
||||||
function draftBreannaSleeve (part) {
|
function draftBreannaSleeve(params) {
|
||||||
let {
|
const {
|
||||||
store,
|
store,
|
||||||
sa,
|
sa,
|
||||||
measurements,
|
measurements,
|
||||||
|
@ -18,7 +18,8 @@ function draftBreannaSleeve (part) {
|
||||||
complete,
|
complete,
|
||||||
paperless,
|
paperless,
|
||||||
macro,
|
macro,
|
||||||
} = part.shorthand()
|
part,
|
||||||
|
} = params
|
||||||
|
|
||||||
// Wrist
|
// Wrist
|
||||||
let top = paths.sleevecap.edge('topLeft').y
|
let top = paths.sleevecap.edge('topLeft').y
|
||||||
|
@ -70,7 +71,8 @@ function draftBreannaSleeve (part) {
|
||||||
if (q1Len === frontTarget) points.frontNotch = points.capQ1.clone()
|
if (q1Len === frontTarget) points.frontNotch = points.capQ1.clone()
|
||||||
else if (q1Len > frontTarget) points.frontNotch = q1.shiftAlong(frontTarget)
|
else if (q1Len > frontTarget) points.frontNotch = q1.shiftAlong(frontTarget)
|
||||||
else {
|
else {
|
||||||
let q2 = new Path().move(points.capQ1)
|
let q2 = new Path()
|
||||||
|
.move(points.capQ1)
|
||||||
.curve(points.capQ1Cp2, points.capQ2Cp1, points.capQ2)
|
.curve(points.capQ1Cp2, points.capQ2Cp1, points.capQ2)
|
||||||
.curve(points.capQ2Cp2, points.capQ3Cp1, points.capQ3)
|
.curve(points.capQ2Cp2, points.capQ3Cp1, points.capQ3)
|
||||||
points.frontNotch = q2.shiftAlong(frontTarget - q1Len)
|
points.frontNotch = q2.shiftAlong(frontTarget - q1Len)
|
||||||
|
@ -81,7 +83,8 @@ function draftBreannaSleeve (part) {
|
||||||
if (q4Len === backTarget) points.backNotch = points.capQ4.clone()
|
if (q4Len === backTarget) points.backNotch = points.capQ4.clone()
|
||||||
else if (q4Len > backTarget) points.backNotch = q4.shiftAlong(backTarget)
|
else if (q4Len > backTarget) points.backNotch = q4.shiftAlong(backTarget)
|
||||||
else {
|
else {
|
||||||
let q3 = new Path().move(points.capQ4)
|
let q3 = new Path()
|
||||||
|
.move(points.capQ4)
|
||||||
.curve(points.capQ4Cp1, points.capQ3Cp2, points.capQ3)
|
.curve(points.capQ4Cp1, points.capQ3Cp2, points.capQ3)
|
||||||
.curve(points.capQ3Cp1, points.capQ2Cp2, points.capQ2)
|
.curve(points.capQ3Cp1, points.capQ2Cp2, points.capQ2)
|
||||||
points.backNotch = q3.shiftAlong(backTarget - q4Len)
|
points.backNotch = q3.shiftAlong(backTarget - q4Len)
|
||||||
|
@ -125,11 +128,8 @@ function draftBreannaSleeve (part) {
|
||||||
export const sleeve = {
|
export const sleeve = {
|
||||||
name: 'breanna.sleeve',
|
name: 'breanna.sleeve',
|
||||||
from: sleeveCap,
|
from: sleeveCap,
|
||||||
after: [ front, frontBase, back ],
|
after: [front, frontBase, back],
|
||||||
measurements: [
|
measurements: ['shoulderToWrist', 'wrist'],
|
||||||
'shoulderToWrist',
|
|
||||||
'wrist',
|
|
||||||
],
|
|
||||||
options: {
|
options: {
|
||||||
cuffEase: { pct: 20, min: 0, max: 50, menu: 'fit' },
|
cuffEase: { pct: 20, min: 0, max: 50, menu: 'fit' },
|
||||||
sleeveLengthBonus: { pct: 0, min: -40, max: 10, menu: 'style' },
|
sleeveLengthBonus: { pct: 0, min: -40, max: 10, menu: 'style' },
|
||||||
|
|
|
@ -33,8 +33,8 @@ function sleevecapAdjust(store, twoBacks = false, options = null) {
|
||||||
store.set('sleeveFactor', factor)
|
store.set('sleeveFactor', factor)
|
||||||
}
|
}
|
||||||
|
|
||||||
function draftSleevecap(part, run) {
|
function draftSleevecap(params, run) {
|
||||||
let { store, measurements, options, Point, points, Path, paths } = part.shorthand()
|
let { store, measurements, options, Point, points, Path, paths, part } = params
|
||||||
// Sleeve center axis
|
// Sleeve center axis
|
||||||
points.centerBiceps = new Point(0, 0)
|
points.centerBiceps = new Point(0, 0)
|
||||||
points.centerCap = points.centerBiceps.shift(
|
points.centerCap = points.centerBiceps.shift(
|
||||||
|
@ -153,8 +153,8 @@ function draftSleevecap(part, run) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function redrawSleevecapFront(part, delta) {
|
function redrawSleevecapFront(params, delta) {
|
||||||
let { store, points, Path, paths } = part.shorthand()
|
let { store, points, Path, paths } = params
|
||||||
let factor = points.bicepsRight.x
|
let factor = points.bicepsRight.x
|
||||||
for (let p of [
|
for (let p of [
|
||||||
'bicepsRight',
|
'bicepsRight',
|
||||||
|
@ -184,14 +184,14 @@ function redrawSleevecapFront(part, delta) {
|
||||||
store.set('sleevecapLength', paths.sleevecap.length())
|
store.set('sleevecapLength', paths.sleevecap.length())
|
||||||
}
|
}
|
||||||
|
|
||||||
function draftBreannaSleevecap (part) {
|
function draftBreannaSleevecap(params) {
|
||||||
let { store, options, Point, points, paths } = part.shorthand()
|
const { store, options, Point, points, paths, part } = params
|
||||||
|
|
||||||
// Step 1: sleevecap for 2 backs joined together (twoBacks = true)
|
// Step 1: sleevecap for 2 backs joined together (twoBacks = true)
|
||||||
store.set('sleeveFactor', 1)
|
store.set('sleeveFactor', 1)
|
||||||
let run = 0
|
let run = 0
|
||||||
do {
|
do {
|
||||||
draftSleevecap(part, run)
|
draftSleevecap(params, run)
|
||||||
sleevecapAdjust(store, true, options)
|
sleevecapAdjust(store, true, options)
|
||||||
run++
|
run++
|
||||||
} while (
|
} while (
|
||||||
|
@ -209,7 +209,7 @@ function draftBreannaSleevecap (part) {
|
||||||
// Step 2: sleevecap for back joined with front (twoBacks = false)
|
// Step 2: sleevecap for back joined with front (twoBacks = false)
|
||||||
run = 0
|
run = 0
|
||||||
do {
|
do {
|
||||||
redrawSleevecapFront(part, sleevecapDelta(store))
|
redrawSleevecapFront(params, sleevecapDelta(store))
|
||||||
sleevecapAdjust(store)
|
sleevecapAdjust(store)
|
||||||
run++
|
run++
|
||||||
} while (options.breannaFitSleeve === true && run < 50 && Math.abs(sleevecapDelta(store)) > 2)
|
} while (options.breannaFitSleeve === true && run < 50 && Math.abs(sleevecapDelta(store)) > 2)
|
||||||
|
@ -226,47 +226,28 @@ function draftBreannaSleevecap (part) {
|
||||||
export const sleeveCap = {
|
export const sleeveCap = {
|
||||||
name: 'breanna.sleeveCap',
|
name: 'breanna.sleeveCap',
|
||||||
hide: true,
|
hide: true,
|
||||||
after: [ front, frontBase, back ],
|
after: [front, frontBase, back],
|
||||||
options: {
|
options: {
|
||||||
bicepsEase: { pct: 15, min: 0, max: 50, menu: 'fit' },
|
bicepsEase: { pct: 15, min: 0, max: 50, menu: 'fit' },
|
||||||
sleevecapEase: { pct: 0.5, min: 0, max: 2.5,
|
sleevecapEase: { pct: 0.5, min: 0, max: 2.5, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapTopFactorX: { pct: 50, min: 25, max: 75, menu: 'advanced.sleevecap' },
|
||||||
sleevecapTopFactorX: { pct: 50, min: 25, max: 75,
|
sleevecapTopFactorY: { pct: 110, min: 35, max: 165, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapBackFactorX: { pct: 45, min: 35, max: 55, menu: 'advanced.sleevecap' },
|
||||||
sleevecapTopFactorY: { pct: 110, min: 35, max: 165,
|
sleevecapBackFactorY: { pct: 33, min: 30, max: 65, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapFrontFactorX: { pct: 55, min: 35, max: 65, menu: 'advanced.sleevecap' },
|
||||||
sleevecapBackFactorX: { pct: 45, min: 35, max: 55,
|
sleevecapFrontFactorY: { pct: 33, min: 30, max: 65, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ1Offset: { pct: 3, min: 0, max: 7, menu: 'advanced.sleevecap' },
|
||||||
sleevecapBackFactorY: { pct: 33, min: 30, max: 65,
|
sleevecapQ2Offset: { pct: 5.5, min: 0, max: 7, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ3Offset: { pct: 4.5, min: 0, max: 7, menu: 'advanced.sleevecap' },
|
||||||
sleevecapFrontFactorX: { pct: 55, min: 35, max: 65,
|
sleevecapQ4Offset: { pct: 1, min: 0, max: 7, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ1Spread1: { pct: 10, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
sleevecapFrontFactorY: { pct: 33, min: 30, max: 65,
|
sleevecapQ1Spread2: { pct: 12.5, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ2Spread1: { pct: 12.5, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
sleevecapQ1Offset: { pct: 3, min: 0, max: 7,
|
sleevecapQ2Spread2: { pct: 12.5, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ3Spread1: { pct: 12.5, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
sleevecapQ2Offset: { pct: 5.5, min: 0, max: 7,
|
sleevecapQ3Spread2: { pct: 8, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
sleevecapQ4Spread1: { pct: 7, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
sleevecapQ3Offset: { pct: 4.5, min: 0, max: 7,
|
sleevecapQ4Spread2: { pct: 7, min: 4, max: 20, menu: 'advanced.sleevecap' },
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ4Offset: { pct: 1, min: 0, max: 7,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ1Spread1: { pct: 10, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ1Spread2: { pct: 12.5, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ2Spread1: { pct: 12.5, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ2Spread2: { pct: 12.5, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ3Spread1: { pct: 12.5, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ3Spread2: { pct: 8, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ4Spread1: { pct: 7, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
sleevecapQ4Spread2: { pct: 7, min: 4, max: 20,
|
|
||||||
menu: 'advanced.sleevecap' },
|
|
||||||
},
|
},
|
||||||
draft: draftBreannaSleevecap,
|
draft: draftBreannaSleevecap,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue