chore(bee): Ported to v3
This commit is contained in:
parent
07175a7d00
commit
1bcdce2223
12 changed files with 820 additions and 922 deletions
|
@ -14,7 +14,7 @@ const banner = `/**
|
|||
const options = {
|
||||
banner: { js: banner },
|
||||
bundle: true,
|
||||
entryPoints: ['src/index.js'],
|
||||
entryPoints: ['src/index.mjs'],
|
||||
format: 'esm',
|
||||
outfile: 'dist/index.mjs',
|
||||
external: ["@freesewing"],
|
||||
|
|
|
@ -1,154 +0,0 @@
|
|||
import pkg from '../package.json' assert { type: 'json' }
|
||||
import configHelpers from '@freesewing/config-helpers'
|
||||
|
||||
const { pctBasedOn } = configHelpers
|
||||
const { version } = pkg
|
||||
|
||||
export default {
|
||||
version,
|
||||
name: 'bee',
|
||||
design: 'PrudenceRabbit',
|
||||
code: 'bobgeorgethe3rd',
|
||||
department: 'tops',
|
||||
type: 'pattern',
|
||||
difficulty: 3,
|
||||
optionGroups: {
|
||||
fit: [
|
||||
'chestEase',
|
||||
'waistEase',
|
||||
'bustSpanEase',
|
||||
'topDepth',
|
||||
'bottomCupDepth',
|
||||
'sideDepth',
|
||||
'sideCurve',
|
||||
'frontCurve',
|
||||
'bellaGuide',
|
||||
],
|
||||
style: [
|
||||
'ties',
|
||||
'neckTieWidth',
|
||||
'neckTieLength',
|
||||
'neckTieEnds',
|
||||
'neckTieColours',
|
||||
'bandTieWidth',
|
||||
'bandTieLength',
|
||||
'bandTieEnds',
|
||||
'bandTieColours',
|
||||
'crossBackTies',
|
||||
'bandLength',
|
||||
],
|
||||
advanced: [
|
||||
{ bellaDarts: ['backDartHeight'] },
|
||||
{ bellaArmhole: ['armholeDepth', 'frontArmholePitchDepth'] },
|
||||
{
|
||||
bellaAdvanced: [
|
||||
'frontShoulderWidth',
|
||||
'fullChestEaseReduction',
|
||||
'highBustWidth',
|
||||
'shoulderToShoulderEase',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
measurements: [
|
||||
'highBust',
|
||||
'chest',
|
||||
'underbust',
|
||||
'waist',
|
||||
'waistBack',
|
||||
'bustSpan',
|
||||
'neck',
|
||||
'hpsToBust',
|
||||
'hpsToWaistFront',
|
||||
'hpsToWaistBack',
|
||||
'shoulderToShoulder',
|
||||
'shoulderSlope',
|
||||
'bustPointToUnderbust',
|
||||
// FIXME: Measurement from waist up to armhole (for sleeveless)
|
||||
],
|
||||
dependencies: {
|
||||
frontSideDart: 'back',
|
||||
bandTie: 'cup',
|
||||
cup: 'neckTie',
|
||||
},
|
||||
inject: { cup: 'frontSideDart' },
|
||||
hide: ['frontSideDart', 'back'],
|
||||
parts: [
|
||||
'back',
|
||||
'frontSideDart',
|
||||
'cup',
|
||||
'neckTie',
|
||||
'bandTie',
|
||||
// 'frontShoulderDart'
|
||||
],
|
||||
options: {
|
||||
// Constants
|
||||
acrossBackFactor: 0.925,
|
||||
shoulderSlopeBack: 1.23,
|
||||
neckWidthBack: 0.197,
|
||||
neckWidthFront: 0.17,
|
||||
backDartLocation: 0.145,
|
||||
backCenterWaistReduction: 0.35,
|
||||
collarFactor: 0.19,
|
||||
backNeckCutout: 0.06,
|
||||
backHemSlope: 2.5,
|
||||
backArmholeSlant: 5,
|
||||
backArmholeCurvature: 0.63,
|
||||
frontArmholeCurvature: 0.63,
|
||||
backArmholePitchDepth: 0.35,
|
||||
bustDartLength: 1,
|
||||
waistDartLength: 1,
|
||||
bustDartCurve: 1,
|
||||
// Percentages
|
||||
//Bella Fit
|
||||
waistEase: { pct: 5, min: 1, max: 20 },
|
||||
chestEase: { pct: 11, min: 5, max: 20 },
|
||||
bustSpanEase: { pct: 10, min: 0, max: 20 },
|
||||
//Bella Advanced
|
||||
shoulderToShoulderEase: { pct: -0.5, min: -1, max: 5 },
|
||||
backDartHeight: { pct: 46, min: 38, max: 54 },
|
||||
armholeDepth: { pct: 44, min: 38, max: 46 },
|
||||
frontArmholePitchDepth: { pct: 29, max: 31, min: 27 },
|
||||
frontShoulderWidth: { pct: 95, max: 98, min: 92 },
|
||||
fullChestEaseReduction: { pct: 4, min: 0, max: 8 },
|
||||
highBustWidth: { pct: 86, max: 92, min: 80 },
|
||||
// Bikini Top
|
||||
topDepth: { pct: 54, min: 50, max: 80 },
|
||||
//neckTieWidth: { mm: 13, min: 6, max: 30},
|
||||
neckTieWidth: {
|
||||
pct: 6,
|
||||
min: 2,
|
||||
max: 18,
|
||||
snap: {
|
||||
metric: [6, 13, 19, 25, 32, 38],
|
||||
imperial: [6.35, 12.7, 19.05, 25.4, 31.75, 38.1],
|
||||
},
|
||||
...pctBasedOn('bustSpan'),
|
||||
},
|
||||
neckTieLength: { pct: 80, min: 70, max: 100 },
|
||||
neckTieEnds: { dflt: 'straight', list: ['straight', 'pointed'] },
|
||||
neckTieColours: { dflt: 'one', list: ['one', 'two'] },
|
||||
//bandTieWidth: { mm: 13, min: 6, max: 30 },
|
||||
bandTieWidth: {
|
||||
pct: 3,
|
||||
min: 1,
|
||||
max: 9,
|
||||
snap: {
|
||||
metric: [6, 13, 19, 25, 32, 38],
|
||||
imperial: [6.35, 12.7, 19.05, 25.4, 31.75, 38.1],
|
||||
},
|
||||
toAbs: (pct, { measurements }) => measurements.hpsToWaistFront * pct,
|
||||
},
|
||||
bandTieLength: { pct: 35, min: 30, max: 50 },
|
||||
bandTieEnds: { dflt: 'straight', list: ['straight', 'pointed'] },
|
||||
bandTieColours: { dflt: 'one', list: ['one', 'two'] },
|
||||
bottomCupDepth: { pct: 8, min: 0, max: 20 },
|
||||
sideDepth: { pct: 20.6, min: 0, max: 30 },
|
||||
sideCurve: { pct: 0, min: -50, max: 50 },
|
||||
frontCurve: { pct: 0, min: -50, max: 50 },
|
||||
bellaGuide: { bool: false },
|
||||
ties: { bool: true },
|
||||
crossBackTies: { bool: false },
|
||||
bandLength: { pct: 85, min: 75, max: 90 },
|
||||
},
|
||||
}
|
|
@ -38,7 +38,7 @@
|
|||
"vbuild": "VERBOSE=1 node --experimental-json-modules build.mjs",
|
||||
"lab": "cd ../../sites/lab && yarn start",
|
||||
"tips": "node ../../scripts/help.mjs",
|
||||
"prettier": "npx prettier --write 'src/*.js' 'config/*.js'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step5": "node --experimental-json-modules build.mjs"
|
||||
},
|
||||
|
|
206
designs/bee/src/band-tie.mjs
Normal file
206
designs/bee/src/band-tie.mjs
Normal file
|
@ -0,0 +1,206 @@
|
|||
import { cup } from './cup.mjs'
|
||||
|
||||
export const bandTie = {
|
||||
name: 'bee.bandTie',
|
||||
after: cup,
|
||||
options: {
|
||||
bandTieWidth: {
|
||||
pct: 3,
|
||||
min: 1,
|
||||
max: 9,
|
||||
snap: {
|
||||
metric: [6, 13, 19, 25, 32, 38],
|
||||
imperial: [6.35, 12.7, 19.05, 25.4, 31.75, 38.1],
|
||||
},
|
||||
toAbs: (pct, { measurements }) => measurements.hpsToWaistFront * pct,
|
||||
menu: 'style',
|
||||
},
|
||||
bandTieLength: { pct: 35, min: 30, max: 50, menu: 'style' },
|
||||
bandTieEnds: { dflt: 'straight', list: ['straight', 'pointed'], menu: 'style' },
|
||||
bandTieColours: { dflt: 'one', list: ['one', 'two'], menu: 'style' },
|
||||
},
|
||||
draft: part => {
|
||||
const {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
measurements,
|
||||
snippets,
|
||||
Snippet,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
// band tie
|
||||
if (!options.ties) {
|
||||
if (!options.crossBackTies) {
|
||||
part.render = false
|
||||
}
|
||||
}
|
||||
let bandTieLength
|
||||
if (options.crossBackTies)
|
||||
bandTieLength = (measurements.underbust * options.bandLength) / 2 + options.neckTieWidth * 2
|
||||
else bandTieLength = (measurements.underbust + measurements.underbust * options.bandTieLength) / 2
|
||||
let bandTieWidth
|
||||
if (options.crossBackTies) bandTieWidth = absoluteOptions.bandTieWidth * 2
|
||||
else bandTieWidth = absoluteOptions.bandTieWidth
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.topRight = new Point(bandTieWidth * 2, points.topLeft.y)
|
||||
points.bottomLeft = new Point(points.topLeft.x, bandTieLength)
|
||||
points.bottomRight = new Point(points.topRight.x, bandTieLength)
|
||||
if (!options.crossBackTies) {
|
||||
switch (options.bandTieEnds) {
|
||||
case 'straight':
|
||||
points.topMiddle = new Point(bandTieWidth, points.topLeft.y)
|
||||
break
|
||||
case 'pointed':
|
||||
points.topMiddle = new Point(bandTieWidth, points.topLeft.y - bandTieWidth)
|
||||
}
|
||||
} else points.topMiddle = new Point(bandTieWidth, points.topLeft.y)
|
||||
|
||||
points.bottomMiddle = new Point(points.topMiddle.x, bandTieLength)
|
||||
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
break
|
||||
case 'two':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomMiddle)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
points.cofLeft = points.bottomLeft.shift(0, bandTieWidth * (1 / 8))
|
||||
points.grainlineLeft = points.topLeft.translate(bandTieWidth * (1 / 8), bandTieLength * (3 / 4))
|
||||
points.title = points.topLeft.translate(bandTieWidth * (1 / 8), bandTieLength * (1 / 4))
|
||||
if (!options.crossBackTies) {
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 3,
|
||||
title: 'band tie',
|
||||
scale: 0.2,
|
||||
})
|
||||
} else
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 3,
|
||||
title: 'band',
|
||||
scale: 0.5,
|
||||
})
|
||||
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
points.cofRight = points.bottomLeft.shift(0, bandTieWidth * (15 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(0, bandTieWidth * (14 / 8))
|
||||
paths.foldline = new Path()
|
||||
.move(points.topMiddle)
|
||||
.line(points.bottomMiddle)
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
.attr('class', 'various')
|
||||
break
|
||||
case 'two':
|
||||
points.cofRight = points.bottomLeft.shift(0, bandTieWidth * (7 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(0, bandTieWidth * (7 / 8))
|
||||
}
|
||||
macro('grainline', {
|
||||
from: points.grainlineLeft,
|
||||
to: points.grainlineRight,
|
||||
})
|
||||
macro('cutonfold', {
|
||||
from: points.cofLeft,
|
||||
to: points.cofRight,
|
||||
grainline: true,
|
||||
})
|
||||
if (options.crossBackTies) {
|
||||
let gatherLength = store.get('gatherLength')
|
||||
snippets.centreNotch = new Snippet('notch', points.bottomRight)
|
||||
points.sideNotch = points.bottomRight.shift(90, gatherLength)
|
||||
snippets.sideNotch = new Snippet('notch', points.sideNotch)
|
||||
paths.casingFold = new Path()
|
||||
.move(points.topLeft.shift(-90, options.neckTieWidth))
|
||||
.line(points.topRight.shift(-90, options.neckTieWidth))
|
||||
.attr('class', 'various')
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topLeft,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.x - sa - 30,
|
||||
})
|
||||
break
|
||||
case 'two':
|
||||
}
|
||||
if (!options.crossBackTies) {
|
||||
switch (options.bandTieEnds) {
|
||||
case 'straight':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
break
|
||||
case 'pointed':
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 30,
|
||||
})
|
||||
}
|
||||
} else
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
if (options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.sideNotch,
|
||||
to: points.bottomRight,
|
||||
x: points.topRight.x + sa + 20,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
||||
}
|
||||
|
|
@ -1,183 +0,0 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
measurements,
|
||||
snippets,
|
||||
Snippet,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
// band tie
|
||||
if (!options.ties) {
|
||||
if (!options.crossBackTies) {
|
||||
part.render = false
|
||||
}
|
||||
}
|
||||
let bandTieLength
|
||||
if (options.crossBackTies)
|
||||
bandTieLength = (measurements.underbust * options.bandLength) / 2 + options.neckTieWidth * 2
|
||||
else bandTieLength = (measurements.underbust + measurements.underbust * options.bandTieLength) / 2
|
||||
let bandTieWidth
|
||||
if (options.crossBackTies) bandTieWidth = absoluteOptions.bandTieWidth * 2
|
||||
else bandTieWidth = absoluteOptions.bandTieWidth
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.topRight = new Point(bandTieWidth * 2, points.topLeft.y)
|
||||
points.bottomLeft = new Point(points.topLeft.x, bandTieLength)
|
||||
points.bottomRight = new Point(points.topRight.x, bandTieLength)
|
||||
if (!options.crossBackTies) {
|
||||
switch (options.bandTieEnds) {
|
||||
case 'straight':
|
||||
points.topMiddle = new Point(bandTieWidth, points.topLeft.y)
|
||||
break
|
||||
case 'pointed':
|
||||
points.topMiddle = new Point(bandTieWidth, points.topLeft.y - bandTieWidth)
|
||||
}
|
||||
} else points.topMiddle = new Point(bandTieWidth, points.topLeft.y)
|
||||
|
||||
points.bottomMiddle = new Point(points.topMiddle.x, bandTieLength)
|
||||
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
break
|
||||
case 'two':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomMiddle)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
points.cofLeft = points.bottomLeft.shift(0, bandTieWidth * (1 / 8))
|
||||
points.grainlineLeft = points.topLeft.translate(bandTieWidth * (1 / 8), bandTieLength * (3 / 4))
|
||||
points.title = points.topLeft.translate(bandTieWidth * (1 / 8), bandTieLength * (1 / 4))
|
||||
if (!options.crossBackTies) {
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 3,
|
||||
title: 'band tie',
|
||||
scale: 0.2,
|
||||
})
|
||||
} else
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 3,
|
||||
title: 'band',
|
||||
scale: 0.5,
|
||||
})
|
||||
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
points.cofRight = points.bottomLeft.shift(0, bandTieWidth * (15 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(0, bandTieWidth * (14 / 8))
|
||||
paths.foldline = new Path()
|
||||
.move(points.topMiddle)
|
||||
.line(points.bottomMiddle)
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
.attr('class', 'various')
|
||||
break
|
||||
case 'two':
|
||||
points.cofRight = points.bottomLeft.shift(0, bandTieWidth * (7 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(0, bandTieWidth * (7 / 8))
|
||||
}
|
||||
macro('grainline', {
|
||||
from: points.grainlineLeft,
|
||||
to: points.grainlineRight,
|
||||
})
|
||||
macro('cutonfold', {
|
||||
from: points.cofLeft,
|
||||
to: points.cofRight,
|
||||
grainline: true,
|
||||
})
|
||||
if (options.crossBackTies) {
|
||||
let gatherLength = store.get('gatherLength')
|
||||
snippets.centreNotch = new Snippet('notch', points.bottomRight)
|
||||
points.sideNotch = points.bottomRight.shift(90, gatherLength)
|
||||
snippets.sideNotch = new Snippet('notch', points.sideNotch)
|
||||
paths.casingFold = new Path()
|
||||
.move(points.topLeft.shift(-90, options.neckTieWidth))
|
||||
.line(points.topRight.shift(-90, options.neckTieWidth))
|
||||
.attr('class', 'various')
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topLeft,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
switch (options.bandTieColours) {
|
||||
case 'one':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.x - sa - 30,
|
||||
})
|
||||
break
|
||||
case 'two':
|
||||
}
|
||||
if (!options.crossBackTies) {
|
||||
switch (options.bandTieEnds) {
|
||||
case 'straight':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
break
|
||||
case 'pointed':
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 30,
|
||||
})
|
||||
}
|
||||
} else
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
if (options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.sideNotch,
|
||||
to: points.bottomRight,
|
||||
x: points.topRight.x + sa + 20,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
|
@ -1,379 +0,0 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
utils,
|
||||
measurements,
|
||||
snippets,
|
||||
Snippet,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
//inherited from Bella
|
||||
let angle = store.get('bustDartAngleSide')
|
||||
//removing paths and snippets not required from Bella
|
||||
for (let i in paths) delete paths[i]
|
||||
for (let i in snippets) delete snippets[i]
|
||||
//removing macros not required from Bella
|
||||
macro('title', false)
|
||||
macro('scalebox', false)
|
||||
//bella alterations
|
||||
points.sideHemNew = points.armhole.shiftOutwards(
|
||||
points.bustDartTop,
|
||||
points.bustDartBottom.dist(points.sideHemInitial)
|
||||
)
|
||||
points.waistDartRightRotated = points.waistDartRight.rotate(angle, points.bust)
|
||||
if (options.bellaGuide) {
|
||||
paths.bellaGuide = new Path()
|
||||
.move(points.sideHemNew)
|
||||
.line(points.bustDartTop)
|
||||
.line(points.armhole)
|
||||
.curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch)
|
||||
.curve_(points.armholePitchCp2, points.shoulder)
|
||||
.line(points.hps)
|
||||
.curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck)
|
||||
.line(points.cfHem)
|
||||
.line(points.waistDartLeft)
|
||||
.line(points.bustA)
|
||||
.line(points.waistDartRightRotated)
|
||||
.line(points.sideHemNew)
|
||||
.attr('class', 'various lashed')
|
||||
.close()
|
||||
}
|
||||
|
||||
//bikini top
|
||||
let underbust =
|
||||
measurements.bustPointToUnderbust + measurements.bustPointToUnderbust * options.bottomCupDepth
|
||||
points.top = points.bustA.shiftTowards(points.hps, measurements.hpsToBust * options.topDepth)
|
||||
points.topLeft = points.top.shift(
|
||||
points.top.angle(points.hps) + 90,
|
||||
absoluteOptions.neckTieWidth / 2
|
||||
)
|
||||
points.topRight = points.top.shift(
|
||||
points.top.angle(points.hps) - 90,
|
||||
absoluteOptions.neckTieWidth / 2
|
||||
)
|
||||
points.leftDart = points.bustA.shiftTowards(points.waistDartLeft, underbust)
|
||||
points.rightDart = points.bustA.shiftTowards(points.waistDartRightRotated, underbust)
|
||||
points.lefti = utils.beamsIntersect(
|
||||
points.leftDart,
|
||||
points.leftDart.shift(points.leftDart.angle(points.bustA) + 90, 10),
|
||||
points.cfNeck,
|
||||
points.cfHem
|
||||
)
|
||||
points.righti = utils.beamsIntersect(
|
||||
points.rightDart,
|
||||
points.rightDart.shift(points.rightDart.angle(points.bustA) - 90, 10),
|
||||
points.armhole,
|
||||
points.sideHemNew
|
||||
)
|
||||
points.rightiOffset = points.righti.shiftFractionTowards(points.rightDart, options.sideDepth)
|
||||
points.sideEdge = points.rightiOffset.shift(
|
||||
points.armhole.angle(points.righti),
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.frontEdge = points.lefti.shift(
|
||||
points.cfNeck.angle(points.cfHem),
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.middleDart = points.bustA.shift(
|
||||
points.bustA.angle(points.leftDart) +
|
||||
(points.bustA.angle(points.rightDart) - points.bustA.angle(points.leftDart)) / 2,
|
||||
points.bustA.dist(points.leftDart)
|
||||
)
|
||||
points.casingDart = points.bustA.shiftOutwards(points.middleDart, absoluteOptions.bandTieWidth)
|
||||
points.leftControli = utils.beamsIntersect(
|
||||
points.casingDart,
|
||||
points.casingDart.shift(points.bustA.angle(points.middleDart) - 90, 10),
|
||||
points.cfNeck,
|
||||
points.cfHem
|
||||
)
|
||||
points.rightControli = utils.beamsIntersect(
|
||||
points.casingDart,
|
||||
points.casingDart.shift(points.bustA.angle(points.middleDart) + 90, 10),
|
||||
points.armhole,
|
||||
points.sideHemNew
|
||||
)
|
||||
points.leftControl = points.casingDart.shiftFractionTowards(points.leftControli, 0.5)
|
||||
points.rightControl = points.casingDart.shiftFractionTowards(points.rightControli, 0.5)
|
||||
points.middleSideFront = points.rightiOffset.shiftFractionTowards(points.topRight, 0.5)
|
||||
points.sideCurveControl = points.middleSideFront.shiftFractionTowards(
|
||||
points.bustA,
|
||||
options.sideCurve
|
||||
)
|
||||
points.middleFront = points.topLeft.shiftFractionTowards(points.lefti, 0.5)
|
||||
points.frontCurveControl = points.middleFront.shiftFractionTowards(
|
||||
points.bustA,
|
||||
options.frontCurve
|
||||
)
|
||||
points.leftControlOffset = points.leftControl.shiftTowards(
|
||||
points.top,
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.rightControlOffset = points.rightControl.shiftTowards(
|
||||
points.top,
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
if (!options.crossBackTies) {
|
||||
paths.seam = new Path()
|
||||
.move(points.sideEdge)
|
||||
.line(points.rightiOffset)
|
||||
.curve_(points.sideCurveControl, points.topRight)
|
||||
.line(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.line(points.frontEdge)
|
||||
.curve_(points.leftControl, points.casingDart)
|
||||
.curve_(points.rightControl, points.sideEdge)
|
||||
.close()
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
paths.seam = new Path()
|
||||
.move(points.rightiOffset)
|
||||
.curve_(points.sideCurveControl, points.topRight)
|
||||
.line(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.close()
|
||||
}
|
||||
if (complete) {
|
||||
points.grainlineTop = points.top.shiftFractionTowards(points.bustA, 0.05)
|
||||
points.grainlineBottom = points.bustA.shiftFractionTowards(points.top, 0.05)
|
||||
macro('grainline', {
|
||||
from: points.grainlineTop,
|
||||
to: points.grainlineBottom,
|
||||
})
|
||||
paths.frontCurve = new Path()
|
||||
.move(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.setRender(false)
|
||||
points.frontNotch = paths.frontCurve.shiftFractionAlong(0.5)
|
||||
snippets.frontNotch = new Snippet('notch', points.frontNotch)
|
||||
snippets.lefti = new Snippet('notch', points.lefti)
|
||||
snippets.righti = new Snippet('notch', points.rightiOffset)
|
||||
if (!options.crossBackTies) {
|
||||
snippets.frontEdge = new Snippet('notch', points.frontEdge)
|
||||
snippets.sideEdge = new Snippet('notch', points.sideEdge)
|
||||
}
|
||||
points.title = points.grainlineBottom.shift(
|
||||
points.bustA.angle(points.top) - 90,
|
||||
points.grainlineTo.dist(points.grainlineBottom)
|
||||
)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 1,
|
||||
title: 'cup',
|
||||
scale: 0.7,
|
||||
rotation: 90 - points.bustA.angle(points.top) - 270,
|
||||
})
|
||||
points.scalebox = new Point(points.lefti.x + 12.7, points.topLeft.y + 12.7)
|
||||
macro('miniscale', { at: points.scalebox })
|
||||
if (!options.crossBackTies) {
|
||||
paths.casingline = new Path()
|
||||
.move(points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.attr('class', 'fabric lashed')
|
||||
.attr('data-text', 'Casing Stitching Line')
|
||||
.attr('data-text-class', 'center')
|
||||
}
|
||||
points.logo = points.grainlineTop.shiftOutwards(
|
||||
points.grainlineBottom,
|
||||
points.grainlineTo.dist(points.grainlineBottom) * 9
|
||||
)
|
||||
snippets.logo = new Snippet('logo', points.logo)
|
||||
.attr('data-rotate', 90 - points.bustA.angle(points.top) - 270)
|
||||
.attr('data-scale', 0.7)
|
||||
if (!options.ties) {
|
||||
let neckTieLength = utils.units(store.get('neckTieLength'))
|
||||
points.neckTieLength = points.__miniscaleImperialBottomLeft
|
||||
.shiftFractionTowards(points.lefti, 1 / 10)
|
||||
.attr('data-text', 'Neck Tie Length: ')
|
||||
.attr('data-text', neckTieLength)
|
||||
if (!options.crossBackTies) {
|
||||
let bandTieLength = utils.units(
|
||||
measurements.underbust + measurements.underbust * options.bandTieLength
|
||||
)
|
||||
points.backTieLength = points.__miniscaleImperialBottomLeft
|
||||
.shiftFractionTowards(points.lefti, 2 / 10)
|
||||
.attr('data-text', 'Band Tie Length: ')
|
||||
.attr('data-text', bandTieLength)
|
||||
}
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.frontEdge,
|
||||
to: points.lefti,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
from: points.lefti,
|
||||
to: points.topLeft,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.frontEdge,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 30,
|
||||
})
|
||||
}
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.lefti,
|
||||
to: points.topLeft,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topRight,
|
||||
to: points.rightiOffset,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('hd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.sideEdge,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
}
|
||||
macro('hd', {
|
||||
from: points.frontEdge,
|
||||
to: points.rightiOffset,
|
||||
y: points.topRight.y - sa - 30,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('hd', {
|
||||
from: points.frontEdge,
|
||||
to: points.sideEdge,
|
||||
y: points.topRight.y - sa - 40,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
from: points.topRight,
|
||||
to: points.rightiOffset,
|
||||
x: points.sideEdge.x + sa + 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.sideEdge,
|
||||
x: points.sideEdge.x + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.topRight,
|
||||
to: points.sideEdge,
|
||||
x: points.sideEdge.x + sa + 30,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.sideEdge,
|
||||
to: points.casingDart,
|
||||
x: points.sideEdge.x + sa + 10,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.sideEdge,
|
||||
to: points.casingDart,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.casingDart,
|
||||
to: points.frontEdge,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.casingDart,
|
||||
to: points.frontEdge,
|
||||
x: points.frontEdge.x - sa - 10,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.casingDart,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 40,
|
||||
})
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.middleDart,
|
||||
x: points.sideEdge.x + sa + 10,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.middleDart,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.middleDart,
|
||||
to: points.lefti,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.middleDart,
|
||||
to: points.lefti,
|
||||
x: points.frontEdge.x - sa - 10,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.middleDart,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 30,
|
||||
})
|
||||
}
|
||||
macro('ld', {
|
||||
from: points.rightiOffset,
|
||||
to: points.righti,
|
||||
})
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
paths.curve = new Path()
|
||||
.move(points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.setRender(false)
|
||||
paths.dart = new Path()
|
||||
.move(
|
||||
points.bustA.shiftOutwards(points.leftDart, points.topRight.dist(points.rightiOffset))
|
||||
)
|
||||
.line(points.bustA)
|
||||
.line(
|
||||
points.bustA.shiftOutwards(points.rightDart, points.topRight.dist(points.rightiOffset))
|
||||
)
|
||||
.setRender(false)
|
||||
for (let p of paths.curve.intersects(paths.dart)) {
|
||||
points.rightDarti = points.bustA.shiftFractionTowards(p, 1)
|
||||
}
|
||||
for (let p of paths.curve.reverse().intersects(paths.dart)) {
|
||||
points.leftDarti = points.bustA.shiftFractionTowards(p, 1)
|
||||
}
|
||||
let leftCurve = paths.curve.reverse().split(points.leftDarti)
|
||||
for (let i in leftCurve) {
|
||||
paths.leftCurve = leftCurve[i].setRender(false)
|
||||
}
|
||||
let rightCurve = paths.curve.split(points.rightDarti)
|
||||
for (let i in rightCurve) {
|
||||
paths.rightCurve = rightCurve[i].setRender(false)
|
||||
}
|
||||
store.set('gatherLength', paths.leftCurve.length() + paths.rightCurve.length())
|
||||
}
|
||||
}
|
||||
return part
|
||||
}
|
396
designs/bee/src/cup.mjs
Normal file
396
designs/bee/src/cup.mjs
Normal file
|
@ -0,0 +1,396 @@
|
|||
import { frontSideDart } from '@freesewing/bella'
|
||||
import { neckTie } from './neck-tie.mjs'
|
||||
|
||||
export const cup = {
|
||||
name: 'bee.cup',
|
||||
from: { ...frontSideDart, hidden: true },
|
||||
after: neckTie,
|
||||
options: {
|
||||
topDepth: { pct: 54, min: 50, max: 80, menu: 'fit' },
|
||||
bottomCupDepth: { pct: 8, min: 0, max: 20, menu: 'fit' },
|
||||
sideDepth: { pct: 20.6, min: 0, max: 30, menu: 'fit' },
|
||||
sideCurve: { pct: 0, min: -50, max: 50, menu: 'fit' },
|
||||
frontCurve: { pct: 0, min: -50, max: 50, menu: 'fit' },
|
||||
bellaGuide: { bool: false, menu: 'fit' },
|
||||
},
|
||||
draft: part => {
|
||||
const {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
utils,
|
||||
measurements,
|
||||
snippets,
|
||||
Snippet,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
//inherited from Bella
|
||||
let angle = store.get('bustDartAngleSide')
|
||||
//removing paths and snippets not required from Bella
|
||||
for (let i in paths) delete paths[i]
|
||||
for (let i in snippets) delete snippets[i]
|
||||
//removing macros not required from Bella
|
||||
macro('title', false)
|
||||
macro('scalebox', false)
|
||||
//bella alterations
|
||||
points.sideHemNew = points.armhole.shiftOutwards(
|
||||
points.bustDartTop,
|
||||
points.bustDartBottom.dist(points.sideHemInitial)
|
||||
)
|
||||
points.waistDartRightRotated = points.waistDartRight.rotate(angle, points.bust)
|
||||
if (options.bellaGuide) {
|
||||
paths.bellaGuide = new Path()
|
||||
.move(points.sideHemNew)
|
||||
.line(points.bustDartTop)
|
||||
.line(points.armhole)
|
||||
.curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch)
|
||||
.curve_(points.armholePitchCp2, points.shoulder)
|
||||
.line(points.hps)
|
||||
.curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck)
|
||||
.line(points.cfHem)
|
||||
.line(points.waistDartLeft)
|
||||
.line(points.bustA)
|
||||
.line(points.waistDartRightRotated)
|
||||
.line(points.sideHemNew)
|
||||
.attr('class', 'various lashed')
|
||||
.close()
|
||||
}
|
||||
|
||||
//bikini top
|
||||
let underbust =
|
||||
measurements.bustPointToUnderbust + measurements.bustPointToUnderbust * options.bottomCupDepth
|
||||
points.top = points.bustA.shiftTowards(points.hps, measurements.hpsToBust * options.topDepth)
|
||||
points.topLeft = points.top.shift(
|
||||
points.top.angle(points.hps) + 90,
|
||||
absoluteOptions.neckTieWidth / 2
|
||||
)
|
||||
points.topRight = points.top.shift(
|
||||
points.top.angle(points.hps) - 90,
|
||||
absoluteOptions.neckTieWidth / 2
|
||||
)
|
||||
points.leftDart = points.bustA.shiftTowards(points.waistDartLeft, underbust)
|
||||
points.rightDart = points.bustA.shiftTowards(points.waistDartRightRotated, underbust)
|
||||
points.lefti = utils.beamsIntersect(
|
||||
points.leftDart,
|
||||
points.leftDart.shift(points.leftDart.angle(points.bustA) + 90, 10),
|
||||
points.cfNeck,
|
||||
points.cfHem
|
||||
)
|
||||
points.righti = utils.beamsIntersect(
|
||||
points.rightDart,
|
||||
points.rightDart.shift(points.rightDart.angle(points.bustA) - 90, 10),
|
||||
points.armhole,
|
||||
points.sideHemNew
|
||||
)
|
||||
points.rightiOffset = points.righti.shiftFractionTowards(points.rightDart, options.sideDepth)
|
||||
points.sideEdge = points.rightiOffset.shift(
|
||||
points.armhole.angle(points.righti),
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.frontEdge = points.lefti.shift(
|
||||
points.cfNeck.angle(points.cfHem),
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.middleDart = points.bustA.shift(
|
||||
points.bustA.angle(points.leftDart) +
|
||||
(points.bustA.angle(points.rightDart) - points.bustA.angle(points.leftDart)) / 2,
|
||||
points.bustA.dist(points.leftDart)
|
||||
)
|
||||
points.casingDart = points.bustA.shiftOutwards(points.middleDart, absoluteOptions.bandTieWidth)
|
||||
points.leftControli = utils.beamsIntersect(
|
||||
points.casingDart,
|
||||
points.casingDart.shift(points.bustA.angle(points.middleDart) - 90, 10),
|
||||
points.cfNeck,
|
||||
points.cfHem
|
||||
)
|
||||
points.rightControli = utils.beamsIntersect(
|
||||
points.casingDart,
|
||||
points.casingDart.shift(points.bustA.angle(points.middleDart) + 90, 10),
|
||||
points.armhole,
|
||||
points.sideHemNew
|
||||
)
|
||||
points.leftControl = points.casingDart.shiftFractionTowards(points.leftControli, 0.5)
|
||||
points.rightControl = points.casingDart.shiftFractionTowards(points.rightControli, 0.5)
|
||||
points.middleSideFront = points.rightiOffset.shiftFractionTowards(points.topRight, 0.5)
|
||||
points.sideCurveControl = points.middleSideFront.shiftFractionTowards(
|
||||
points.bustA,
|
||||
options.sideCurve
|
||||
)
|
||||
points.middleFront = points.topLeft.shiftFractionTowards(points.lefti, 0.5)
|
||||
points.frontCurveControl = points.middleFront.shiftFractionTowards(
|
||||
points.bustA,
|
||||
options.frontCurve
|
||||
)
|
||||
points.leftControlOffset = points.leftControl.shiftTowards(
|
||||
points.top,
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
points.rightControlOffset = points.rightControl.shiftTowards(
|
||||
points.top,
|
||||
absoluteOptions.bandTieWidth
|
||||
)
|
||||
if (!options.crossBackTies) {
|
||||
paths.seam = new Path()
|
||||
.move(points.sideEdge)
|
||||
.line(points.rightiOffset)
|
||||
.curve_(points.sideCurveControl, points.topRight)
|
||||
.line(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.line(points.frontEdge)
|
||||
.curve_(points.leftControl, points.casingDart)
|
||||
.curve_(points.rightControl, points.sideEdge)
|
||||
.close()
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
paths.seam = new Path()
|
||||
.move(points.rightiOffset)
|
||||
.curve_(points.sideCurveControl, points.topRight)
|
||||
.line(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.close()
|
||||
}
|
||||
if (complete) {
|
||||
points.grainlineTop = points.top.shiftFractionTowards(points.bustA, 0.05)
|
||||
points.grainlineBottom = points.bustA.shiftFractionTowards(points.top, 0.05)
|
||||
macro('grainline', {
|
||||
from: points.grainlineTop,
|
||||
to: points.grainlineBottom,
|
||||
})
|
||||
paths.frontCurve = new Path()
|
||||
.move(points.topLeft)
|
||||
.curve_(points.frontCurveControl, points.lefti)
|
||||
.setRender(false)
|
||||
points.frontNotch = paths.frontCurve.shiftFractionAlong(0.5)
|
||||
snippets.frontNotch = new Snippet('notch', points.frontNotch)
|
||||
snippets.lefti = new Snippet('notch', points.lefti)
|
||||
snippets.righti = new Snippet('notch', points.rightiOffset)
|
||||
if (!options.crossBackTies) {
|
||||
snippets.frontEdge = new Snippet('notch', points.frontEdge)
|
||||
snippets.sideEdge = new Snippet('notch', points.sideEdge)
|
||||
}
|
||||
points.title = points.grainlineBottom.shift(
|
||||
points.bustA.angle(points.top) - 90,
|
||||
points.grainlineTo.dist(points.grainlineBottom)
|
||||
)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 1,
|
||||
title: 'cup',
|
||||
scale: 0.7,
|
||||
rotation: 90 - points.bustA.angle(points.top) - 270,
|
||||
})
|
||||
points.scalebox = new Point(points.lefti.x + 12.7, points.topLeft.y + 12.7)
|
||||
macro('miniscale', { at: points.scalebox })
|
||||
if (!options.crossBackTies) {
|
||||
paths.casingline = new Path()
|
||||
.move(points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.attr('class', 'fabric lashed')
|
||||
.attr('data-text', 'Casing Stitching Line')
|
||||
.attr('data-text-class', 'center')
|
||||
}
|
||||
points.logo = points.grainlineTop.shiftOutwards(
|
||||
points.grainlineBottom,
|
||||
points.grainlineTo.dist(points.grainlineBottom) * 9
|
||||
)
|
||||
snippets.logo = new Snippet('logo', points.logo)
|
||||
.attr('data-rotate', 90 - points.bustA.angle(points.top) - 270)
|
||||
.attr('data-scale', 0.7)
|
||||
if (!options.ties) {
|
||||
let neckTieLength = utils.units(store.get('neckTieLength'))
|
||||
points.neckTieLength = points.__miniscaleImperialBottomLeft
|
||||
.shiftFractionTowards(points.lefti, 1 / 10)
|
||||
.attr('data-text', 'Neck Tie Length: ')
|
||||
.attr('data-text', neckTieLength)
|
||||
if (!options.crossBackTies) {
|
||||
let bandTieLength = utils.units(
|
||||
measurements.underbust + measurements.underbust * options.bandTieLength
|
||||
)
|
||||
points.backTieLength = points.__miniscaleImperialBottomLeft
|
||||
.shiftFractionTowards(points.lefti, 2 / 10)
|
||||
.attr('data-text', 'Band Tie Length: ')
|
||||
.attr('data-text', bandTieLength)
|
||||
}
|
||||
}
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.frontEdge,
|
||||
to: points.lefti,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
from: points.lefti,
|
||||
to: points.topLeft,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.frontEdge,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 30,
|
||||
})
|
||||
}
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.lefti,
|
||||
to: points.topLeft,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topRight,
|
||||
to: points.rightiOffset,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('hd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.sideEdge,
|
||||
y: points.topRight.y - sa - 20,
|
||||
})
|
||||
}
|
||||
macro('hd', {
|
||||
from: points.frontEdge,
|
||||
to: points.rightiOffset,
|
||||
y: points.topRight.y - sa - 30,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('hd', {
|
||||
from: points.frontEdge,
|
||||
to: points.sideEdge,
|
||||
y: points.topRight.y - sa - 40,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
from: points.topRight,
|
||||
to: points.rightiOffset,
|
||||
x: points.sideEdge.x + sa + 20,
|
||||
})
|
||||
if (!options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.sideEdge,
|
||||
x: points.sideEdge.x + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.topRight,
|
||||
to: points.sideEdge,
|
||||
x: points.sideEdge.x + sa + 30,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.sideEdge,
|
||||
to: points.casingDart,
|
||||
x: points.sideEdge.x + sa + 10,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.sideEdge,
|
||||
to: points.casingDart,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.casingDart,
|
||||
to: points.frontEdge,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.casingDart,
|
||||
to: points.frontEdge,
|
||||
x: points.frontEdge.x - sa - 10,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.casingDart,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 40,
|
||||
})
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
macro('vd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.middleDart,
|
||||
x: points.sideEdge.x + sa + 10,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.rightiOffset,
|
||||
to: points.middleDart,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.middleDart,
|
||||
to: points.lefti,
|
||||
y: points.casingDart.y + sa + 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.middleDart,
|
||||
to: points.lefti,
|
||||
x: points.frontEdge.x - sa - 10,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.middleDart,
|
||||
to: points.topRight,
|
||||
x: points.frontEdge.x - sa - 30,
|
||||
})
|
||||
}
|
||||
macro('ld', {
|
||||
from: points.rightiOffset,
|
||||
to: points.righti,
|
||||
})
|
||||
}
|
||||
if (options.crossBackTies) {
|
||||
paths.curve = new Path()
|
||||
.move(points.lefti)
|
||||
.curve_(points.leftControlOffset, points.middleDart)
|
||||
.curve_(points.rightControlOffset, points.rightiOffset)
|
||||
.setRender(false)
|
||||
paths.dart = new Path()
|
||||
.move(
|
||||
points.bustA.shiftOutwards(points.leftDart, points.topRight.dist(points.rightiOffset))
|
||||
)
|
||||
.line(points.bustA)
|
||||
.line(
|
||||
points.bustA.shiftOutwards(points.rightDart, points.topRight.dist(points.rightiOffset))
|
||||
)
|
||||
.setRender(false)
|
||||
for (let p of paths.curve.intersects(paths.dart)) {
|
||||
points.rightDarti = points.bustA.shiftFractionTowards(p, 1)
|
||||
}
|
||||
for (let p of paths.curve.reverse().intersects(paths.dart)) {
|
||||
points.leftDarti = points.bustA.shiftFractionTowards(p, 1)
|
||||
}
|
||||
let leftCurve = paths.curve.reverse().split(points.leftDarti)
|
||||
for (let i in leftCurve) {
|
||||
paths.leftCurve = leftCurve[i].setRender(false)
|
||||
}
|
||||
let rightCurve = paths.curve.split(points.rightDarti)
|
||||
for (let i in rightCurve) {
|
||||
paths.rightCurve = rightCurve[i].setRender(false)
|
||||
}
|
||||
store.set('gatherLength', paths.leftCurve.length() + paths.rightCurve.length())
|
||||
}
|
||||
}
|
||||
return part
|
||||
}
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
import freesewing from '@freesewing/core'
|
||||
import Bella from '@freesewing/bella'
|
||||
import bundle from '@freesewing/plugin-bundle'
|
||||
import config from '../config'
|
||||
// Parts
|
||||
import draftCup from './cup'
|
||||
import draftNeckTie from './neckTie'
|
||||
import draftBandTie from './bandTie'
|
||||
//import draftFrontShoulderDart from './front-shoulder-dart'
|
||||
|
||||
// Create design
|
||||
const Bee = new freesewing.Design(config, bundle)
|
||||
|
||||
// Attach draft methods to prototype
|
||||
for (let m of ['draftBack', 'draftFrontSideDart']) {
|
||||
Bee.prototype[m] = function (part) {
|
||||
return new Bella(this.settings)[m](part)
|
||||
}
|
||||
}
|
||||
Bee.prototype.draftCup = draftCup
|
||||
Bee.prototype.draftNeckTie = draftNeckTie
|
||||
Bee.prototype.draftBandTie = draftBandTie
|
||||
//Bee.prototype.draftFrontShoulderDart = (part) => draftFrontShoulderDart(part)
|
||||
|
||||
// Named exports
|
||||
export { config, Bee }
|
||||
|
||||
// Default export
|
||||
export default Bee
|
16
designs/bee/src/index.mjs
Normal file
16
designs/bee/src/index.mjs
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { Design } from '@freesewing/core'
|
||||
import { name, version } from '../package.json'
|
||||
import { pluginBundle } from '@freesewing/plugin-bundle'
|
||||
import { cup } from './cup.mjs'
|
||||
import { neckTie } from './neck-tie.mjs'
|
||||
import { bandTie } from './band-tie.mjs'
|
||||
|
||||
const Bee = new Design({
|
||||
name,
|
||||
version,
|
||||
parts: [ cup, neckTie, bandTie ],
|
||||
plugins: pluginBundle,
|
||||
})
|
||||
|
||||
export { cup, neckTie, bandTie, Bee }
|
||||
|
190
designs/bee/src/neck-tie.mjs
Normal file
190
designs/bee/src/neck-tie.mjs
Normal file
|
@ -0,0 +1,190 @@
|
|||
import { pctBasedOn } from '@freesewing/core'
|
||||
|
||||
export const neckTie = {
|
||||
name: 'bee.neckTie',
|
||||
measurements: [ 'underbust', 'hpsToBust', 'hpsToWaistFront' ],
|
||||
options: {
|
||||
ties: { bool: true, menu: 'style' },
|
||||
crossBackTies: { bool: false, menu: 'style' },
|
||||
bandLength: { pct: 85, min: 75, max: 90, menu: 'style' },
|
||||
neckTieLength: { pct: 80, min: 70, max: 100, menu: 'style' },
|
||||
neckTieWidth: {
|
||||
pct: 6,
|
||||
min: 2,
|
||||
max: 18,
|
||||
snap: {
|
||||
metric: [6, 13, 19, 25, 32, 38],
|
||||
imperial: [6.35, 12.7, 19.05, 25.4, 31.75, 38.1],
|
||||
},
|
||||
menu: 'style',
|
||||
...pctBasedOn('bustSpan'),
|
||||
},
|
||||
neckTieEnds: { dflt: 'straight', list: ['straight', 'pointed'], menu: 'style' },
|
||||
neckTieColours: { dflt: 'one', list: ['one', 'two'], menu: 'style' },
|
||||
},
|
||||
draft: part => {
|
||||
const {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
measurements,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
// neck tie
|
||||
if (!options.ties) {
|
||||
part.render = false
|
||||
}
|
||||
let neckTieLength
|
||||
if (options.crossBackTies)
|
||||
neckTieLength =
|
||||
(Math.sqrt(
|
||||
Math.pow(measurements.hpsToWaistFront, 2) +
|
||||
Math.pow(measurements.underbust - measurements.underbust * options.neckTieLength, 2)
|
||||
) +
|
||||
measurements.underbust -
|
||||
measurements.underbust * options.bandLength +
|
||||
measurements.underbust -
|
||||
measurements.underbust * options.bandLength * options.neckTieLength) /
|
||||
2
|
||||
else neckTieLength = (measurements.hpsToBust + measurements.hpsToBust * options.neckTieLength) / 2
|
||||
store.set('neckTieLength', neckTieLength * 2)
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.topRight = new Point(absoluteOptions.neckTieWidth * 2, points.topLeft.y)
|
||||
points.bottomLeft = new Point(points.topLeft.x, neckTieLength)
|
||||
points.bottomRight = new Point(points.topRight.x, neckTieLength)
|
||||
switch (options.neckTieEnds) {
|
||||
case 'straight':
|
||||
points.topMiddle = new Point(absoluteOptions.neckTieWidth, points.topLeft.y)
|
||||
break
|
||||
case 'pointed':
|
||||
points.topMiddle = new Point(
|
||||
absoluteOptions.neckTieWidth,
|
||||
points.topLeft.y - absoluteOptions.neckTieWidth
|
||||
)
|
||||
}
|
||||
|
||||
points.bottomMiddle = new Point(points.topMiddle.x, neckTieLength)
|
||||
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
break
|
||||
case 'two':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomMiddle)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
points.cofLeft = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (1 / 8))
|
||||
points.grainlineLeft = points.topLeft.translate(
|
||||
absoluteOptions.neckTieWidth * (1 / 8),
|
||||
neckTieLength * (3 / 4)
|
||||
)
|
||||
points.title = points.topLeft.translate(
|
||||
absoluteOptions.neckTieWidth * (1 / 8),
|
||||
neckTieLength * (1 / 4)
|
||||
)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 2,
|
||||
title: 'neck tie',
|
||||
scale: 0.2,
|
||||
})
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
points.cofRight = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (15 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(
|
||||
0,
|
||||
absoluteOptions.neckTieWidth * (14 / 8)
|
||||
)
|
||||
paths.foldline = new Path()
|
||||
.move(points.topMiddle)
|
||||
.line(points.bottomMiddle)
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
.attr('class', 'various')
|
||||
break
|
||||
case 'two':
|
||||
points.cofRight = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (7 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(
|
||||
0,
|
||||
absoluteOptions.neckTieWidth * (7 / 8)
|
||||
)
|
||||
}
|
||||
macro('grainline', {
|
||||
from: points.grainlineLeft,
|
||||
to: points.grainlineRight,
|
||||
})
|
||||
macro('cutonfold', {
|
||||
from: points.cofLeft,
|
||||
to: points.cofRight,
|
||||
grainline: true,
|
||||
})
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topLeft,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.x - sa - 30,
|
||||
})
|
||||
break
|
||||
case 'two':
|
||||
}
|
||||
switch (options.neckTieEnds) {
|
||||
case 'straight':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
break
|
||||
case 'pointed':
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 30,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
||||
}
|
||||
|
|
@ -1,164 +0,0 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
measurements,
|
||||
absoluteOptions,
|
||||
} = part.shorthand()
|
||||
// neck tie
|
||||
if (!options.ties) {
|
||||
part.render = false
|
||||
}
|
||||
let neckTieLength
|
||||
if (options.crossBackTies)
|
||||
neckTieLength =
|
||||
(Math.sqrt(
|
||||
Math.pow(measurements.hpsToWaistFront, 2) +
|
||||
Math.pow(measurements.underbust - measurements.underbust * options.neckTieLength, 2)
|
||||
) +
|
||||
measurements.underbust -
|
||||
measurements.underbust * options.bandLength +
|
||||
measurements.underbust -
|
||||
measurements.underbust * options.bandLength * options.neckTieLength) /
|
||||
2
|
||||
else neckTieLength = (measurements.hpsToBust + measurements.hpsToBust * options.neckTieLength) / 2
|
||||
store.set('neckTieLength', neckTieLength * 2)
|
||||
points.topLeft = new Point(0, 0)
|
||||
points.topRight = new Point(absoluteOptions.neckTieWidth * 2, points.topLeft.y)
|
||||
points.bottomLeft = new Point(points.topLeft.x, neckTieLength)
|
||||
points.bottomRight = new Point(points.topRight.x, neckTieLength)
|
||||
switch (options.neckTieEnds) {
|
||||
case 'straight':
|
||||
points.topMiddle = new Point(absoluteOptions.neckTieWidth, points.topLeft.y)
|
||||
break
|
||||
case 'pointed':
|
||||
points.topMiddle = new Point(
|
||||
absoluteOptions.neckTieWidth,
|
||||
points.topLeft.y - absoluteOptions.neckTieWidth
|
||||
)
|
||||
}
|
||||
|
||||
points.bottomMiddle = new Point(points.topMiddle.x, neckTieLength)
|
||||
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomRight)
|
||||
.line(points.topRight)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
break
|
||||
case 'two':
|
||||
paths.seam = new Path()
|
||||
.move(points.bottomMiddle)
|
||||
.line(points.topMiddle)
|
||||
.line(points.topLeft)
|
||||
.line(points.bottomLeft)
|
||||
.close()
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
points.cofLeft = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (1 / 8))
|
||||
points.grainlineLeft = points.topLeft.translate(
|
||||
absoluteOptions.neckTieWidth * (1 / 8),
|
||||
neckTieLength * (3 / 4)
|
||||
)
|
||||
points.title = points.topLeft.translate(
|
||||
absoluteOptions.neckTieWidth * (1 / 8),
|
||||
neckTieLength * (1 / 4)
|
||||
)
|
||||
macro('title', {
|
||||
at: points.title,
|
||||
nr: 2,
|
||||
title: 'neck tie',
|
||||
scale: 0.2,
|
||||
})
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
points.cofRight = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (15 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(
|
||||
0,
|
||||
absoluteOptions.neckTieWidth * (14 / 8)
|
||||
)
|
||||
paths.foldline = new Path()
|
||||
.move(points.topMiddle)
|
||||
.line(points.bottomMiddle)
|
||||
.attr('data-text', 'Fold-line')
|
||||
.attr('data-text-class', 'center')
|
||||
.attr('class', 'various')
|
||||
break
|
||||
case 'two':
|
||||
points.cofRight = points.bottomLeft.shift(0, absoluteOptions.neckTieWidth * (7 / 8))
|
||||
points.grainlineRight = points.grainlineLeft.shift(
|
||||
0,
|
||||
absoluteOptions.neckTieWidth * (7 / 8)
|
||||
)
|
||||
}
|
||||
macro('grainline', {
|
||||
from: points.grainlineLeft,
|
||||
to: points.grainlineRight,
|
||||
})
|
||||
macro('cutonfold', {
|
||||
from: points.cofLeft,
|
||||
to: points.cofRight,
|
||||
grainline: true,
|
||||
})
|
||||
if (sa) {
|
||||
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
}
|
||||
if (paperless) {
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topLeft,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
switch (options.neckTieColours) {
|
||||
case 'one':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topRight,
|
||||
y: points.topLeft.x - sa - 30,
|
||||
})
|
||||
break
|
||||
case 'two':
|
||||
}
|
||||
switch (options.neckTieEnds) {
|
||||
case 'straight':
|
||||
macro('hd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
y: points.topLeft.x - sa - 20,
|
||||
})
|
||||
break
|
||||
case 'pointed':
|
||||
macro('vd', {
|
||||
from: points.topLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.bottomLeft,
|
||||
to: points.topMiddle,
|
||||
x: points.topLeft.x - sa - 30,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
|
@ -1,17 +1,16 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import Pattern from './dist/index.mjs'
|
||||
// This file is auto-generated | Any changes you make will be overwritten.
|
||||
import { Bee } from './dist/index.mjs'
|
||||
|
||||
// Shared tests
|
||||
import { testPatternConfig } from '../../../tests/patterns/config.mjs'
|
||||
import { testPatternDrafting } from '../../../tests/patterns/drafting.mjs'
|
||||
import { testPatternSampling } from '../../../tests/patterns/sampling.mjs'
|
||||
import { testPatternConfig } from '../../../tests/designs/config.mjs'
|
||||
import { testPatternDrafting } from '../../../tests/designs/drafting.mjs'
|
||||
import { testPatternSampling } from '../../../tests/designs/sampling.mjs'
|
||||
|
||||
// Test config
|
||||
testPatternConfig("bee", new Pattern())
|
||||
testPatternConfig(Bee)
|
||||
|
||||
// Test drafting
|
||||
testPatternDrafting("bee", Pattern)
|
||||
// Test drafting - Change the second parameter to `true` to log errors
|
||||
testPatternDrafting(Bee, true)
|
||||
|
||||
// Test sampling
|
||||
testPatternSampling( "bee", Pattern)
|
||||
// Test sampling - Change the second parameter to `true` to log errors
|
||||
testPatternSampling(Bee, false)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue