1
0
Fork 0

chore(breanna): Port to v3 stage 2

This commit is contained in:
joostdecock 2022-09-10 20:35:46 +02:00
parent a4983dfdc6
commit b8fd8a4d19
18 changed files with 98 additions and 114 deletions

View file

@ -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,
} }

View file

@ -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)

View file

@ -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,

View file

@ -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)

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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')) {

View file

@ -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

View file

@ -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

View file

@ -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' },

View file

@ -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,
} }