diff --git a/packages/benjamin/config/index.js b/packages/benjamin/config/index.js index 8def710629b..3aca0bad135 100644 --- a/packages/benjamin/config/index.js +++ b/packages/benjamin/config/index.js @@ -10,7 +10,7 @@ export default { difficulty: 3, tags: ['top', 'basics'], optionGroups: { - fit: ['collarEase', 'adjustmentRibbon', 'bandLength'], + fit: ['collarEase', 'adjustmentRibbon'], style: ['tipWidth', 'knotWidth', 'bowLength', 'bowStyle', 'endStyle'] }, measurements: ['neckCircumference'], @@ -23,20 +23,16 @@ export default { hide: ['base'], parts: ['ribbon'], options: { - transitionLength: 0.7, // 70% of bandLength - bandLength: { - pct: 17, - min: 15, - max: 20 - }, + transitionLength: 2, //Twice the knot + bandLength: 0.17, ribbonWidth: { pct: 6, - min: 4, + min: 5, max: 8 }, tipWidth: { pct: 15, - min: 10, + min: 0, max: 20 }, knotWidth: { @@ -62,6 +58,9 @@ export default { dflt: 'straight', list: ['straight', 'pointed', 'rounded'] }, - adjustmentRibbon: { bool: false } + adjustmentRibbon: { + bool: false + }, + adjustmentRibbonWidth: 20 } } diff --git a/packages/benjamin/src/base.js b/packages/benjamin/src/base.js index ebcd4f9b270..77239d24bd4 100644 --- a/packages/benjamin/src/base.js +++ b/packages/benjamin/src/base.js @@ -27,12 +27,18 @@ export default function(part) { ]) store.set(option, measurements.neckCircumference * options[option]) - // For easy access - const knot = store.get('knotWidth') + if (options.adjustmentRibbon) { + store.set('ribbonWidth', Math.max(options.adjustmentRibbonWidth, store.get('ribbonWidth'))) + } const ribbon = store.get('ribbonWidth') + store.set('knotWidth', Math.max(ribbon, store.get('knotWidth'))) + const knot = store.get('knotWidth') + store.set('tipWidth', Math.max(knot, store.get('tipWidth'))) + + // For easy access const tip = store.get('tipWidth') const band = store.get('bandLength') - const transition = band * options.transitionLength + const transition = knot * options.transitionLength const bow = store.get('bowLength') // Points @@ -55,7 +61,6 @@ export default function(part) { points.tip = new Point(points.tip2Bottom.x + points.tip2Bottom.y, 0) } else points.tip = new Point(points.tip2Bottom.x, 0) - points.grainlineStart = new Point(0, 0) points.titleAnchor = new Point(points.tip1Top.x, 0) // Paths @@ -93,6 +98,9 @@ export default function(part) { points.transitionBottomRight, cpl ) + if (points.transitionBottomRightCp2.y > points.tip1Bottom.y) + points.transitionBottomRightCp2.y = points.tip1Bottom.y + points.transitionTopRightCp1 = points.transitionBottomRightCp2.flipY() points.tip1TopCp2 = points.tip1Top.shift(180, cpl) points.tip1TopCp1 = points.tip1Top.shift(0, cpl) @@ -105,10 +113,8 @@ export default function(part) { points.tip2TopCp2 = points.tip2Top.shift(180, cpl) points.tip2BottomCp1 = points.tip2Bottom.shift(180, cpl) - paths.seam = new Path() - .move(points.bandTopLeft) - .line(points.bandBottomLeft) - .line(points.bandBottomRight) + paths.bow = new Path() + .move(points.bandBottomRight) .line(points.transitionBottomRight) .curve(points.transitionBottomRightCp2, points.tip1BottomCp1, points.tip1Bottom) .curve(points.tip1BottomCp2, points.knotBottomCp1, points.knotBottom) @@ -119,46 +125,34 @@ export default function(part) { .curve(points.knotTopCp2, points.tip1TopCp1, points.tip1Top) .curve(points.tip1TopCp2, points.transitionTopRightCp1, points.transitionTopRight) .line(points.bandTopRight) - .line(points.bandTopLeft) - .close() + .setRender(false) } else { - paths.seam = new Path() - .move(points.bandTopLeft) - .line(points.bandBottomLeft) - .line(points.bandBottomRight) + paths.bow = new Path() + .move(points.bandBottomRight) .line(points.transitionBottomRight) .line(points.tip2Bottom) .join(paths.cap) .line(points.tip2Top) .line(points.transitionTopRight) .line(points.bandTopRight) - .line(points.bandTopLeft) - .close() + .setRender(false) } - paths.seam.attr('class', 'fabric') - // Complete? if (complete) { - if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') - - macro('grainline', { - from: points.grainlineStart, - to: points.tip - }) points.logoAnchor = points.tip.shift(180, 20) - snippets.logo = new Snippet('logo', points.logoAnchor).attr('data-scale', 0.5) + snippets.logo = new Snippet('logo', points.logoAnchor).attr('data-scale', tip / 120) // Paperless? if (paperless) { - let baseY = points.tip2Bottom.y + 15 + sa + let baseY = points.tip2Bottom.y + sa + macro('hd', { + from: points.knotBottom, + to: points.tip2Bottom, + y: baseY + }) + baseY += 15 if (options.bowStyle === 'butterfly' || options.bowStyle === 'diamond') { - macro('hd', { - from: points.knotBottom, - to: points.tip2Bottom, - y: baseY - }) - baseY += 15 macro('hd', { from: points.tip1Bottom, to: points.tip2Bottom, @@ -182,11 +176,8 @@ export default function(part) { y: baseY }) baseY += 15 - macro('hd', { - from: points.bandBottomLeft, - to: points.tip2Bottom, - y: baseY - }) + store.set('baseY', baseY) + macro('vd', { from: points.bandBottomRight, to: points.bandTopRight diff --git a/packages/benjamin/src/bow1.js b/packages/benjamin/src/bow1.js index 6aef8e6b0da..932756abdd9 100644 --- a/packages/benjamin/src/bow1.js +++ b/packages/benjamin/src/bow1.js @@ -1,15 +1,56 @@ export default function(part) { - let { complete, macro, points, paths, sa } = part.shorthand() + let { + options, + Point, + points, + Path, + paths, + complete, + macro, + sa, + store, + paperless + } = part.shorthand() - paths.seam.render = true + points.bandBottomLeft = points.bandBottomLeft.shift(0, 0) + points.bandTopLeft = points.bandBottomLeft.flipY() + + points.grainlineStart = new Point(0, 0) + + macro('grainline', { + from: points.grainlineStart, + to: points.tip.shift(180, 20) + }) + + paths.seam = new Path() + .move(points.bandTopLeft) + .line(points.bandBottomLeft) + .join(paths.bow) + .line(points.bandTopLeft) + .close() + .attr('class', 'fabric') + .setRender(true) if (complete) { - if (sa) paths.sa.render = true + // Paperless? + if (paperless) { + macro('hd', { + from: points.bandBottomLeft, + to: points.tip2Bottom, + y: store.get('baseY') + }) + } + if (sa) { + paths.sa = paths.seam + .offset(sa) + .attr('class', 'fabric sa') + .setRender(true) + } macro('title', { at: points.titleAnchor, nr: 1, title: 'bowTie', - scale: 0.8 + scale: (store.get('tipWidth')/75) }) points.scaleboxAnchor = points.bandTopLeft.shift(30, 80) macro('scalebox', { at: points.scaleboxAnchor }) diff --git a/packages/benjamin/src/bow2.js b/packages/benjamin/src/bow2.js index b518dd22587..393769d5948 100644 --- a/packages/benjamin/src/bow2.js +++ b/packages/benjamin/src/bow2.js @@ -1,20 +1,61 @@ export default function(part) { - let { options, points, paths, complete, macro, sa } = part.shorthand() + let { + options, + Point, + points, + Path, + paths, + complete, + macro, + sa, + store, + paperless + } = part.shorthand() - if (options.adjustmentRibbon) { + if (!options.adjustmentRibbon) { part.render = false return part } - paths.seam.render = true + points.bandBottomLeft = points.bandBottomLeft.shift(180, 90) + points.bandTopLeft = points.bandBottomLeft.flipY() + + points.grainlineStart = new Point(-90, 0) + + macro('grainline', { + from: points.grainlineStart, + to: points.tip.shift(180, 20) + }) + + paths.seam = new Path() + .move(points.bandTopLeft) + .line(points.bandBottomLeft) + .join(paths.bow) + .line(points.bandTopLeft) + .close() + .attr('class', 'fabric') + .setRender(true) if (complete) { - if (sa) paths.sa.render = true + // Paperless? + if (paperless) { + macro('hd', { + from: points.bandBottomLeft, + to: points.tip2Bottom, + y: store.get('baseY') + }) + } + if (sa) { + paths.sa = paths.seam + .offset(sa) + .attr('class', 'fabric sa') + .setRender(true) + } macro('title', { at: points.titleAnchor, nr: 2, title: 'bowTie', - scale: 0.8 + scale: (store.get('tipWidth')/75) }) } diff --git a/packages/benjamin/src/bow3.js b/packages/benjamin/src/bow3.js index 4a9e7a612ea..2152c339930 100644 --- a/packages/benjamin/src/bow3.js +++ b/packages/benjamin/src/bow3.js @@ -1,18 +1,61 @@ export default function(part) { - let { options, points, paths, complete, macro, sa } = part.shorthand() + let { + options, + Point, + points, + Path, + paths, + complete, + macro, + sa, + store, + paperless + } = part.shorthand() - if (options.adjustmentRibbon) { + if (!options.adjustmentRibbon) { part.render = false return part } + points.bandBottomLeft = points.bandBottomLeft.shift(180, 290) + points.bandTopLeft = points.bandBottomLeft.flipY() + + points.grainlineStart = new Point(-290, 0) + + macro('grainline', { + from: points.grainlineStart, + to: points.tip.shift(180, 20) + }) + + paths.seam = new Path() + .move(points.bandTopLeft) + .line(points.bandBottomLeft) + .join(paths.bow) + .line(points.bandTopLeft) + .close() + .attr('class', 'fabric') + .setRender(true) + if (complete) { - if (sa) paths.sa.render = true + // Paperless? + if (paperless) { + macro('hd', { + from: points.bandBottomLeft, + to: points.tip2Bottom, + y: store.get('baseY') + }) + } + if (sa) { + paths.sa = paths.seam + .offset(sa) + .attr('class', 'fabric sa') + .setRender(true) + } macro('title', { at: points.titleAnchor, nr: 3, title: 'bowTie', - scale: 0.8 + scale: (store.get('tipWidth')/75) }) } diff --git a/packages/benjamin/src/ribbon.js b/packages/benjamin/src/ribbon.js index e805b159603..606444d29e4 100644 --- a/packages/benjamin/src/ribbon.js +++ b/packages/benjamin/src/ribbon.js @@ -13,7 +13,7 @@ export default function(part) { paperless } = part.shorthand() - if (!options.adjustmentRibbon) { + if (options.adjustmentRibbon) { part.render = false return part } @@ -21,8 +21,10 @@ export default function(part) { // Points points.bottomLeft = new Point(0, 0.5 * store.get('ribbonWidth')) points.topLeft = points.bottomLeft.flipY() - // FIXME: How long should this adjustment ribbon be? - points.bottomRight = points.bottomLeft.shift(0, measurements.neckCircumference) + points.bottomRight = points.bottomLeft.shift( + 0, + measurements.neckCircumference * (1 + options.collarEase) + ) points.topRight = points.bottomRight.flipY() points.titleAnchor = points.topLeft.shiftFractionTowards(points.bottomRight, 0.5) @@ -40,9 +42,9 @@ export default function(part) { if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') macro('title', { at: points.titleAnchor, - nr: 4, + nr: 2, title: 'ribbon', - scale: 0.5 + scale: 0.3 }) if (paperless) { diff --git a/packages/penelope/src/waistband.js b/packages/penelope/src/waistband.js index 3887ad42e6d..5889dc84e73 100644 --- a/packages/penelope/src/waistband.js +++ b/packages/penelope/src/waistband.js @@ -14,6 +14,11 @@ export default function(part) { macro } = part.shorthand() + if (!options.waistBand) { + part.render = false + return part + } + let waistEase = options.waistEase let waist = measurements.naturalWaist waist += waistEase @@ -50,7 +55,9 @@ export default function(part) { macro('title', { nr: 3, at: points.titleAnchor, - title: 'waistband' + title: 'waistband', + rotation: 90, + scale: 0.75 }) if (sa) { diff --git a/packages/waralee/src/facings.js b/packages/waralee/src/facings.js index 1aca35b258d..f926e3c2302 100644 --- a/packages/waralee/src/facings.js +++ b/packages/waralee/src/facings.js @@ -45,28 +45,28 @@ export default function(part) { // Complete? if (complete) { - points.frontTitle = points.frontTL.shift(270, 15).shift(0, 50) + points.frontTitle = points.frontTL.shift(270, 50).shift(0, 50) macro('title', { nr: 5, at: points.frontTitle.shift(0, 30), title: 'frontFacing', prefix: 'front' }) - points.frontLogo = points.frontTitle.shift(270, 15) + points.frontLogo = points.frontTitle.shift(270, 0) snippets.frontLogo = new Snippet('logo', points.frontLogo).attr('data-scale', 0.4) points.frontText = points.frontLogo .shift(-90, 25) .attr('data-text', 'Waralee') .attr('data-text-class', 'center') - points.backTitle = points.backTL.shift(270, 15).shift(0, 50) + points.backTitle = points.backTL.shift(270, 50).shift(0, 50) macro('title', { nr: 6, at: points.backTitle.shift(0, 30), title: 'backFacing', prefix: 'back' }) - points.backLogo = points.backTitle.shift(270, 15) + points.backLogo = points.backTitle.shift(270, 0) snippets.backLogo = new Snippet('logo', points.backLogo).attr('data-scale', 0.4) points.backText = points.backLogo .shift(-90, 25)