diff --git a/designs/lumina/CHANGELOG.md b/designs/lumina/CHANGELOG.md new file mode 100644 index 00000000000..c077f713761 --- /dev/null +++ b/designs/lumina/CHANGELOG.md @@ -0,0 +1,17 @@ +# Change log for: @freesewing/lumina + + +## 3.0.0 (2022-09-30) + +### Changed + + - All FreeSewing pacakges are now ESM only. + - All FreeSewing pacakges now use named exports. + - Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required. + + +This is the **initial release**, and the start of this change log. + +> Prior to version 2, FreeSewing was not a JavaScript project. +> As such, that history is out of scope for this change log. + diff --git a/designs/lumina/README.md b/designs/lumina/README.md new file mode 100644 index 00000000000..b39499c4729 --- /dev/null +++ b/designs/lumina/README.md @@ -0,0 +1,143 @@ +![FreeSewing](https://static.freesewing.org/banner.png) +

@freesewing/lumina on NPM + License: MIT + Code quality on DeepScan + Open issues tagged pkg:lumina + All Contributors +

Follow @freesewing_org on Twitter + Chat with us on Discord + Become a FreeSewing Patron + Follow @freesewing_org on Twitter +

+ +# @freesewing/lumina + +A FreeSewing pattern that needs a description + + + + +## What am I looking at? 🤔 + +This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages. + +This folder holds: @freesewing/lumina + +If you're not entirely sure what to do or how to start, type this command: + +``` +npm run tips +``` + +> If you don't want to set up a dev environment, you can run it in your browser: +> +> [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing) +> +> We recommend that you fork our repository and then +> put `gitpod.io/# to start up a browser-based dev environment of your own. + +## About FreeSewing 💀 + +Where the world of makers and developers collide, that's where you'll find FreeSewing. + +If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate +sewing patterns adapted to your measurements. + +If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/). +The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox +for parametric design of sewing patterns. But FreeSewing also provides a range +of [plugins](https://freesewing.dev/reference/plugins/) that further extend the +functionality of the platform. + +If you have NodeJS installed, you can try it right now by running: + +```bash +npx create-freesewing-pattern +``` + +Getting started guides are available for: +- [Linux](https://freesewing.dev/tutorials/getting-started-linux/) +- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/) +- [Windows](https://freesewing.dev/tutorials/getting-started-windows/) + +The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will +show you how to create your first parametric design. + +## Support FreeSewing: Become a patron 🥰 + +FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. + +If you feel FreeSewing is worthwhile, and you can spend a few coins without +hardship, then you should [join us and become a patron](https://freesewing.org/community/join). + +## Links 👩‍💻 + +**Official channels** + + - 💻 Makers website: [FreeSewing.org](https://freesewing.org) + - 💻 Developers website: [FreeSewing.dev](https://freesewing.dev) + - ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose), + [Issues](https://github.com/freesewing/freesewing/issues) & + [Discussions](https://github.com/freesewing/freesewing/discussions) on + [GitHub](https://github.com/freesewing/freesewing) + +**Social media** + + - 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) + - 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org) + +**Places the FreeSewing community hangs out** + + - 💬 [Discord](https://discord.freesewing.org/) + - 💬 [Facebook](https://www.facebook.com/groups/627769821272714/) + - 💬 [Reddit](https://www.reddit.com/r/freesewing/) + +## License: MIT 🤓 + +© [Joost De Cock](https://github.com/joostdecock). +See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. + +## Where to get help 🤯 + +For [Support](https://github.com/freesewing/freesewing/issues/new/choose), +please use the [Issues](https://github.com/freesewing/freesewing/issues) & +[Discussions](https://github.com/freesewing/freesewing/discussions) on +[GitHub](https://github.com/freesewing/freesewing). + diff --git a/designs/lumina/build.mjs b/designs/lumina/build.mjs new file mode 100644 index 00000000000..99ace216bc8 --- /dev/null +++ b/designs/lumina/build.mjs @@ -0,0 +1,35 @@ +/* This script will build the package with esbuild */ +import esbuild from 'esbuild' +import pkg from './package.json' assert { type: 'json' } + +// Create banner based on package info +const banner = `/** + * ${pkg.name} | v${pkg.version} + * ${pkg.description} + * (c) ${new Date().getFullYear()} ${pkg.author} + * @license ${pkg.license} + */` + +// Shared esbuild options +const options = { + banner: { js: banner }, + bundle: true, + entryPoints: ['src/index.mjs'], + format: 'esm', + outfile: 'dist/index.mjs', + external: ['@freesewing'], + metafile: process.env.VERBOSE ? true : false, + minify: process.env.NO_MINIFY ? false : true, + sourcemap: true, +} + +// Let esbuild generate the build +const build = async () => { + const result = await esbuild.build(options).catch(() => process.exit(1)) + + if (process.env.VERBOSE) { + const info = await esbuild.analyzeMetafile(result.metafile) + console.log(info) + } +} +build() diff --git a/designs/lumina/data.mjs b/designs/lumina/data.mjs new file mode 100644 index 00000000000..07613cf0741 --- /dev/null +++ b/designs/lumina/data.mjs @@ -0,0 +1,4 @@ +// This file is auto-generated | All changes you make will be overwritten. +export const name = '@freesewing/lumina' +export const version = '3.0.0' +export const data = { name, version } diff --git a/designs/lumina/i18n/de.json b/designs/lumina/i18n/de.json new file mode 100644 index 00000000000..8cf0182cebd --- /dev/null +++ b/designs/lumina/i18n/de.json @@ -0,0 +1,7 @@ +{ + "t": "Lumina", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lumina/i18n/en.json b/designs/lumina/i18n/en.json new file mode 100644 index 00000000000..60d27a6076b --- /dev/null +++ b/designs/lumina/i18n/en.json @@ -0,0 +1,101 @@ +{ + "t": "Lumina leggings", + "d": "A FreeSewing pattern for a pair of leggings", + "p": { + "shape": "Shape", + "leg": "Leg", + "panel": "Side panel", + "pocket": "Pocket", + "waistband": "Waistband" + }, + "s": { + "couldNotLowerWaist.t": "Could not lower the waist", + "cantFitTheWaistPoint.t": "Cannot fit the waist point", + "couldNoFitWaistband.t": "Could not fit the waistband", + "couldNotCreatePocket.t": "Could not create the pocket", + "dimensions.d": "Dimensions", + "dimensions.t": "Waistband will be {{{ waistbandlength }}} long total.\nThe length of the garment along the side will be {{{ length }}}." + }, + "o": { + "ease": { + "t": "Ease", + "d": "This controls the amount of ease. Since this is a pattern for leggings that is normally made of stretch fabric, the ease is negative, meaning the fabric is stretched around the body." + }, + "length": { + "t": "Leg length", + "d": "The length of the legs. Look in the Messages from the designer for the exact length." + }, + "waistlowering": { + "t": "Waist lowering", + "d": "Lowering of the waist. This is a percentage of the Waist-To-Hips measurement." + }, + "waistband": { + "t": "Waistband", + "d": "Add a separate waistband to the design." + }, + "waistbandYes": { + "t": "With a Waistband", + "d": "Add a separate waistband." + }, + "waistbandNo": { + "t": "Without a Waistband", + "d": "Do not add a separate waistband." + }, + "lowerwaistbandback": { + "t": "Waistband Lowering", + "d": "Lower the waistband in the back." + }, + "lowerwaistbandbackYes": { + "t": "Lower the Waistband", + "d": "Lower the waistband in the back, creating a 'V' shape." + }, + "lowerwaistbandbackNo": { + "t": "Straight waistband", + "d": "Do not lower the waistband in the back." + }, + "waistbandsize": { + "t": "Waistband size", + "d": "Size (height) of the waistband. This is a percentage of the Waist-To-Hips measurement." + }, + "waistreduction": { + "t": "Waist circumference reduction", + "d": "The amount by which the waist should be reduced. This is a percentage of the waist circumference. Only available when the waistband option is selected. Look in the Messages from the designer for the exact size." + }, + "pocket": { + "t": "Pocket", + "d": "Add pockets" + }, + "pocketYes": { + "t": "Add pockets", + "d": "Add pockets in the side panel" + }, + "pocketNo": { + "t": "No pockets", + "d": "Pockets are not added" + }, + "pocketdepth": { + "t": "Pocket depth", + "d": "Depth (height) of the pocket. This is a percentage of the Waist-To-Seat measurement." + }, + "fixedsidepanel": { + "t": "Side panel", + "d": "Fixed-width, or shaped side panel" + }, + "fixedsidepanelYes": { + "t": "Fixed side panel", + "d": "Create a fixed-width side panel" + }, + "fixedsidepanelNo": { + "t": "Shaped side panel", + "d": "Create a shaped side panel, consisting of a percentage of the leg circumference" + }, + "sidepanel": { + "t": "Side Panel size", + "d": "Size (width) of the side panel. This is a percentage of the waist circumference." + }, + "smoothing": { + "t": "Smoothing", + "d": "This setting controls the amount of smoothing that is done to create the side seams (and overall shape of the leggings)." + } + } +} diff --git a/designs/lumina/i18n/es.json b/designs/lumina/i18n/es.json new file mode 100644 index 00000000000..8cf0182cebd --- /dev/null +++ b/designs/lumina/i18n/es.json @@ -0,0 +1,7 @@ +{ + "t": "Lumina", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lumina/i18n/fr.json b/designs/lumina/i18n/fr.json new file mode 100644 index 00000000000..8cf0182cebd --- /dev/null +++ b/designs/lumina/i18n/fr.json @@ -0,0 +1,7 @@ +{ + "t": "Lumina", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lumina/i18n/index.mjs b/designs/lumina/i18n/index.mjs new file mode 100644 index 00000000000..36aac928b67 --- /dev/null +++ b/designs/lumina/i18n/index.mjs @@ -0,0 +1,8 @@ +import en from './en.json' assert { type: 'json' } +import de from './de.json' assert { type: 'json' } +import es from './es.json' assert { type: 'json' } +import fr from './fr.json' assert { type: 'json' } +import nl from './nl.json' assert { type: 'json' } +import uk from './uk.json' assert { type: 'json' } + +export const i18n = { en, de, es, fr, nl, uk } diff --git a/designs/lumina/i18n/nl.json b/designs/lumina/i18n/nl.json new file mode 100644 index 00000000000..8cf0182cebd --- /dev/null +++ b/designs/lumina/i18n/nl.json @@ -0,0 +1,7 @@ +{ + "t": "Lumina", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lumina/i18n/uk.json b/designs/lumina/i18n/uk.json new file mode 100644 index 00000000000..8cf0182cebd --- /dev/null +++ b/designs/lumina/i18n/uk.json @@ -0,0 +1,7 @@ +{ + "t": "Lumina", + "d": "A FreeSewing pattern that needs a description", + "p": { }, + "s": { }, + "o": { } +} diff --git a/designs/lumina/package.json b/designs/lumina/package.json new file mode 100644 index 00000000000..a9bbafb3063 --- /dev/null +++ b/designs/lumina/package.json @@ -0,0 +1,73 @@ +{ + "name": "@freesewing/lumina", + "version": "3.0.0", + "description": "A FreeSewing pattern that needs a description", + "author": "Joost De Cock (https://github.com/joostdecock)", + "homepage": "https://freesewing.org/", + "repository": "github:freesewing/freesewing", + "license": "MIT", + "bugs": { + "url": "https://github.com/freesewing/freesewing/issues" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "keywords": [ + "freesewing", + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "pattern", + "sewing", + "sewing pattern" + ], + "type": "module", + "module": "dist/index.mjs", + "exports": { + ".": { + "internal": "./src/index.mjs", + "default": "./dist/index.mjs" + } + }, + "scripts": { + "build": "node build.mjs", + "build:all": "yarn build", + "clean": "rimraf dist", + "mbuild": "NO_MINIFY=1 node build.mjs", + "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -", + "test": "npx mocha tests/*.test.mjs", + "vbuild": "VERBOSE=1 node build.mjs", + "lab": "cd ../../sites/lab && yarn start", + "tips": "node ../../scripts/help.mjs", + "lint": "npx eslint 'src/**' 'tests/*.mjs'", + "prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'", + "testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js", + "wbuild": "node build.mjs", + "wbuild:all": "yarn wbuild" + }, + "peerDependencies": { + "@freesewing/core": "3.0.0" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "10.2.0", + "chai": "4.3.10", + "@freesewing/models": "3.0.0", + "@freesewing/plugin-timing": "3.0.0" + }, + "files": [ + "dist/*", + "README.md" + ], + "publishConfig": { + "access": "public", + "tag": "latest" + }, + "engines": { + "node": "18", + "npm": "9" + } +} diff --git a/designs/lumina/src/index.mjs b/designs/lumina/src/index.mjs new file mode 100644 index 00000000000..85f68e79c47 --- /dev/null +++ b/designs/lumina/src/index.mjs @@ -0,0 +1,20 @@ +// + +import { Design } from '@freesewing/core' +import { i18n } from '../i18n/index.mjs' +import { data } from '../data.mjs' +// Parts +import { shape } from './shape.mjs' +import { panel } from './panel.mjs' +import { leg } from './leg.mjs' +import { pocket } from './pocket.mjs' +import { waistband } from './waistband.mjs' + +// Create new design +const Lumina = new Design({ + data, + parts: [shape, panel, leg, waistband, pocket], +}) + +// Named exports +export { i18n, Lumina, shape, panel, leg, waistband, pocket } diff --git a/designs/lumina/src/leg.mjs b/designs/lumina/src/leg.mjs new file mode 100644 index 00000000000..69d98f20852 --- /dev/null +++ b/designs/lumina/src/leg.mjs @@ -0,0 +1,151 @@ +import { shape } from './shape.mjs' + +export const leg = { + name: 'lumina.leg', + from: shape, + draft: ({ sa, points, Path, paths, Snippet, snippets, macro, store, part }) => { + paths.front = paths.front.reverse().unhide().addText('front', 'note center').setClass('hidden') + paths.frontSplit.unhide().addText('front', 'note center').setClass('hidden') + paths.back.unhide().addText('back', 'note center').setClass('hidden') + paths.backSplit = paths.backSplit + .reverse() + .unhide() + .addText('back', 'note center') + .setClass('hidden') + + paths.seam = new Path() + .move(points.frontSplitHem) + .join(paths.backSplit) + .join(paths.backWaistband.reverse()) + .join(paths.back) + .join(paths.front) + .join(paths.frontWaistband) + .join(paths.frontSplit) + .close() + + if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') + + store.cutlist.addCut({ cut: 2, from: 'fabric' }) + points.gridAnchor = points.middleUpperLeg.clone() + + points.logo = points.middleUpperLeg.shiftFractionTowards(points.frontSplitUpperLeg, 0.5) + snippets.logo = new Snippet('logo', points.logo) + + points.title = points.middleUpperLeg.shiftFractionTowards(points.backSplitUpperLeg, 0.6) + macro('title', { + at: points.title, + nr: 1, + title: 'leg', + align: 'center', + }) + + points.scalebox = points.middleUpperLeg.shift(270, 50) + macro('scalebox', { + at: points.scalebox, + }) + + snippets.middle = new Snippet('notch', points.frontUpperLeg) + snippets.front0 = new Snippet('notch', paths.front.shiftFractionAlong(0.5)) + snippets.front1 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.2)) + snippets.front2 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.4)) + snippets.front3 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.6)) + snippets.front4 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.8)) + snippets.back0 = new Snippet('notch', paths.back.shiftFractionAlong(0.5)) + snippets.back1 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.25)) + snippets.back2 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.5)) + snippets.back3 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.75)) + + const middleBottom = points.frontSplitHem.shiftFractionTowards(points.backSplitHem, 0.5) + middleBottom.x = 0 + const top = paths.seam.edge('top') + top.x = 0 + const back = paths.seam.edge('right') + const front = paths.seam.edge('left') + + if (!points.frontSplitWaistband.sitsRoughlyOn(front)) { + macro('hd', { + id: 'middleToFront', + from: front, + to: points.middleUpperLeg, + y: top.y - sa - 35, + }) + } + if (!points.backSplitWaistband.sitsRoughlyOn(back)) { + macro('hd', { + id: 'middleToBack', + from: points.middleUpperLeg, + to: back, + y: top.y - sa - 35, + }) + } + macro('hd', { + id: 'middleToFrontSplitWaistband', + from: points.frontSplitWaistband, + to: points.middleUpperLeg, + y: top.y - sa - 25, + }) + macro('hd', { + id: 'middleToBackSplitWaistband', + from: points.middleUpperLeg, + to: points.backSplitWaistband, + y: top.y - sa - 25, + }) + macro('hd', { + id: 'middleToFrontWaistband', + from: points.frontWaistband, + to: points.middleUpperLeg, + y: top.y - sa - 15, + }) + macro('hd', { + id: 'middleToBackWaistband', + from: points.middleUpperLeg, + to: points.backWaistband, + y: top.y - sa - 15, + }) + macro('hd', { + id: 'bottomFront', + from: points.frontSplitHem, + to: middleBottom, + y: middleBottom.y + sa + 15, + }) + macro('hd', { + id: 'bottomBack', + from: middleBottom, + to: points.backSplitHem, + y: middleBottom.y + sa + 15, + }) + + macro('vd', { + id: 'middle', + from: points.middleUpperLeg, + to: middleBottom, + x: 0, + }) + macro('vd', { + id: 'front', + from: points.frontWaistband, + to: points.middleUpperLeg, + x: -15, + }) + macro('vd', { + id: 'back', + from: points.backWaistband, + to: points.middleUpperLeg, + x: 15, + }) + macro('vd', { + id: 'frontSplit', + from: points.frontSplitWaistband, + to: points.frontSplitHem, + x: front.x - sa - 15, + }) + macro('vd', { + id: 'backSplit', + from: points.backSplitWaistband, + to: points.backSplitHem, + x: back.x + sa + 15, + }) + + return part + }, +} diff --git a/designs/lumina/src/panel.mjs b/designs/lumina/src/panel.mjs new file mode 100644 index 00000000000..684322006e0 --- /dev/null +++ b/designs/lumina/src/panel.mjs @@ -0,0 +1,109 @@ +import { shape } from './shape.mjs' + +export const panel = { + name: 'lumina.panel', + from: shape, + draft: ({ sa, Point, points, Path, paths, Snippet, snippets, macro, store, part }) => { + paths.panelWaistband = new Path() + .move(points.frontPanelWaistband) + .line(points.backPanelWaistband) + .setText('top', 'note center') + .setClass('hidden') + paths.panelHem = new Path() + .move(points.backPanelHem) + .line(points.frontPanelHem) + .setText('bottom', 'note center') + .setClass('hidden') + paths.frontPanel.reverse().setText('front', 'note center').setClass('hidden') + paths.backPanel = paths.backPanel.unhide().setText('back', 'note center').setClass('hidden') + + paths.seam = new Path() + .move(points.backPanelHem) + .join(paths.backPanel.reverse()) + .join(paths.panelWaistband.reverse()) + .join(paths.frontPanel) + .join(paths.panelHem.reverse()) + .reverse() + .close() + + if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') + + snippets.front1 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.2)) + snippets.front2 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.4)) + snippets.front3 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.6)) + snippets.front4 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.8)) + snippets.back1 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.25)) + snippets.back2 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.5)) + snippets.back3 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.75)) + + store.cutlist.addCut({ cut: 2, from: 'fabric' }) + points.gridAnchor = points.middleSeat.clone() + + points.title = points.middleSeat.clone() + macro('title', { + at: points.title, + nr: 2, + title: 'panel', + align: 'center', + }) + + const middleTop = points.frontPanelWaistband.shiftFractionTowards( + points.backPanelWaistband, + 0.5 + ) + const middleBottom = new Point(middleTop.x, points.frontPanelHem.y) + const back = paths.backPanel.edge('left') + const front = paths.frontPanel.edge('right') + + macro('hd', { + id: 'topFront', + from: middleTop, + to: points.frontPanelWaistband, + y: middleTop.y - sa - 15, + }) + macro('hd', { + id: 'topBack', + from: points.backPanelWaistband, + to: middleTop, + y: middleTop.y - sa - 15, + }) + macro('hd', { + id: 'middleFront', + from: middleBottom, + to: front, + y: middleBottom.y + sa + 25, + }) + macro('hd', { + id: 'middleBack', + from: back, + to: middleBottom, + y: middleBottom.y + sa + 25, + }) + macro('hd', { + id: 'bottomFront', + from: middleBottom, + to: points.frontPanelHem, + y: middleBottom.y + sa + 15, + }) + macro('hd', { + id: 'bottomBack', + from: points.backPanelHem, + to: middleBottom, + y: middleBottom.y + sa + 15, + }) + macro('vd', { + id: 'front', + from: points.frontPanelWaistband, + to: points.frontPanelHem, + x: front.x + sa + 15, + }) + macro('vd', { + id: 'back', + from: points.backPanelWaistband, + to: points.backPanelHem, + x: back.x - sa - 15, + }) + + return part + }, +} diff --git a/designs/lumina/src/pocket.mjs b/designs/lumina/src/pocket.mjs new file mode 100644 index 00000000000..a8a4ebf44f8 --- /dev/null +++ b/designs/lumina/src/pocket.mjs @@ -0,0 +1,154 @@ +import { pctBasedOn } from '@freesewing/core' +import { panel } from './panel.mjs' +import { shape } from './shape.mjs' + +export const pocket = { + name: 'lumina.pocket', + after: panel, + from: shape, + options: { + pocket: { bool: true, menu: 'style' }, + pocketdepth: { + pct: 90, + min: 20, + max: 120, + ...pctBasedOn('waistToSeat'), + // eslint-disable-next-line no-unused-vars + menu: (settings, mergedOptions) => (mergedOptions?.pocket ? 'style' : false), + }, + }, + draft: ({ + measurements, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + macro, + store, + log, + part, + }) => { + if (!options.pocket) { + return part.hide() + } + + const pocketDepth = measurements.waistToSeat * options.pocketdepth + + paths.pocketWaistband = new Path() + .move(points.frontPanelWaistband) + .line(points.backPanelWaistband) + .addText('top', 'note center') + .setClass('hidden') + points.frontPocketHem = paths.frontPanel.shiftAlong(pocketDepth) + points.backPocketHem = paths.backPanel.shiftAlong(pocketDepth) + paths.pocketHem = new Path() + .move(points.backPocketHem) + .line(points.frontPocketHem) + .addText('bottom', 'note center') + .setClass('hidden') + const frontPocketSplit = paths.frontPanel.split(points.frontPocketHem) + if (frontPocketSplit) { + paths.frontPocket = frontPocketSplit[0] + .reverse() + .unhide() + .addText('front', 'note center') + .setClass('hidden') + } else { + log.info('lumina:couldNotCreatePocket') + return part.hide() + } + const backPocketSplit = paths.backPanel.split(points.backPocketHem) + if (backPocketSplit) { + paths.backPocket = backPocketSplit[0] + .unhide() + .addText('back', 'note center') + .setClass('hidden') + } else { + log.info('lumina:couldNotCreatePocket') + return part.hide() + } + + paths.seam = new Path() + .move(points.frontPocketHem) + .join(paths.pocketHem.reverse()) + .join(paths.backPocket.reverse()) + .join(paths.pocketWaistband.reverse()) + .join(paths.frontPocket.reverse()) + .close() + .reverse() + + if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') + + for (var i = 1; i < 4; i++) { + if (paths.frontPanel.length() * (0.2 * i) < pocketDepth) { + snippets['front' + i] = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.2 * i)) + } + + if (paths.backPanel.length() * (0.25 * i) < pocketDepth) { + snippets['back' + i] = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.25 * i)) + } + } + + store.cutlist.addCut({ cut: 2, from: 'fabric' }) + points.gridAnchor = points.middleSeat.clone() + + points.title = points.frontPocketHem.shiftFractionTowards(points.backPanelWaistband, 0.5) + macro('title', { + at: points.title, + nr: 4, + title: 'pocket', + align: 'center', + }) + + const middleTop = points.frontPanelWaistband.shiftFractionTowards( + points.backPanelWaistband, + 0.5 + ) + const middleBottom = new Point(middleTop.x, points.frontPocketHem.y) + const back = paths.backPocket.edge('left') + const front = paths.frontPocket.edge('right') + + macro('hd', { + id: 'topFront', + from: middleTop, + to: points.frontPanelWaistband, + y: middleTop.y - sa - 15, + }) + macro('hd', { + id: 'topBack', + from: points.backPanelWaistband, + to: middleTop, + y: middleTop.y - sa - 15, + }) + macro('hd', { + id: 'bottomFront', + from: middleBottom, + to: front, + y: middleBottom.y + sa + 15, + }) + macro('hd', { + id: 'bottomBack', + from: back, + to: middleBottom, + y: middleBottom.y + sa + 15, + }) + macro('vd', { + id: 'front', + from: points.frontPanelWaistband, + to: points.frontPocketHem, + x: points.frontPocketHem.x + sa + 15, + }) + macro('vd', { + id: 'back', + from: points.backPanelWaistband, + to: points.backPocketHem, + x: points.backPocketHem.x - sa - 15, + }) + + return part + }, +} diff --git a/designs/lumina/src/shape.mjs b/designs/lumina/src/shape.mjs new file mode 100644 index 00000000000..9d0d21a5fc0 --- /dev/null +++ b/designs/lumina/src/shape.mjs @@ -0,0 +1,631 @@ +import { pctBasedOn } from '@freesewing/core' +import { extendPath, createControlPoints } from '@freesewing/lumira' + +export const createPath = (paths, Path, points, pathName, names) => { + let i + paths[pathName] = new Path() + .move(points[names[0]]) + ._curve(points[names[1] + 'Cp2'], points[names[1]]) + for (i = 2; i < names.length - 1; i++) { + paths[pathName].curve(points[names[i - 1] + 'Cp1'], points[names[i] + 'Cp2'], points[names[i]]) + } + paths[pathName].curve_(points[names[i - 1] + 'Cp1'], points[names[i]]) + + return paths[pathName] +} + +const lowerWaist = (paths, Path, points, log, waistLowering, pathName, pointName) => { + const newPath = extendPath(Path, paths[pathName], 100, 0) + const newWaist = newPath.shiftAlong(waistLowering + 100) + if (newWaist.sitsRoughlyOn(points[pathName + pointName])) { + return + } + points[pathName + pointName] = newWaist + const pTemp = newPath.split(points[pathName + pointName]) + if (pTemp.length != 2) { + log.info('lumina:couldNotLowerWaist') + } + paths[pathName] = pTemp[1].hide() +} + +const createWaistPoint = (options, measurements, Path, points, utils, log, front) => { + const kneeTemp = points.middleCrossSeam.shiftFractionTowards( + points.middleKnee, + options.crotchToKnee + ) + const angle = + 90 + + (front + ? options.crossSeamAngle * (measurements.waistBack / measurements.waist) + : -1 * options.crossSeamAngle * (1 - measurements.waistBack / measurements.waist)) + const crossSeam = front + ? measurements.crossSeamFront + : measurements.crossSeam - measurements.crossSeamFront + let waist = kneeTemp.shift(angle, measurements.waistToKnee) + const crossSeamCp = points.middleCrossSeam.shiftFractionTowards( + utils.beamIntersectsY(kneeTemp, waist, points.middleCrossSeam.y), + options.crotchPointsCP + ) + let waistCp = waist.shiftFractionTowards(points.middleKnee, options.waistToKneeCP) + const kneeToWaist = measurements.waistToKnee * 0.75 + + let diff = 0 + let iter = 0 + do { + // waist = kneeTemp.shift(angle, kneeToWaist +((diff > 0 ? 1 : -1) *iter)) + waist = kneeTemp.shift(angle, kneeToWaist + diff * 1.03) + // waist = kneeTemp.shift(angle, kneeToWaist *ratio) + waistCp = waist.shiftFractionTowards(points.middleKnee, options.waistToKneeCP) + + const crossSeamPath = new Path().move(points.middleCrossSeam).curve(crossSeamCp, waistCp, waist) + + diff = crossSeam - crossSeamPath.length() + // console.log({i:iter,d:diff,cs:crossSeam,csl:crossSeamPath.length()}) + } while (++iter < 100 && (diff > 1 || diff < -1)) + if (iter >= 100) { + log.error('lumina:cantFitTheWaistPoint') + } + + if (front) { + points.frontWaist = waist.clone() + points.frontWaistband = waist.clone() + points.frontWaistCp = waistCp.clone() + points.frontCrossSeamCp = crossSeamCp.clone() + } else { + points.backWaist = waist.clone() + points.backWaistband = waist.clone() + points.backWaistCp = waistCp.clone() + points.backCrossSeamCp = crossSeamCp.clone() + } +} + +const createSidePoints = ({ + measurements, + points, + utils, + prefix, + postfix, + names, + ratio, + ratioFixed, + ease, + waistReduction, + distanceCompensation, + fixedSidePanel, +}) => { + let measurement + let lastGood = 0 + for (let i = 0; i < names.length; i++) { + let m1 = 0, + m2 = 0 + if (names[i] != 'Waist') { + m1 = measurements['waistTo' + names[i]] + } + if (names[lastGood] != 'Waist') { + m2 = measurements['waistTo' + names[lastGood]] + } + let distance = m2 - m1 + switch (names[i]) { + case 'UpperLeg': { + measurement = measurements['upperLeg'] + const intersect = utils.beamIntersectsCurve( + points[prefix + names[i]], + points[prefix + names[i]].shift(prefix == 'front' ? 180 : 0, ratioFixed * 100), + points.middleCrossSeam, + points[prefix + 'CrossSeamCp'], + points[prefix + 'WaistCp'], + points[prefix + 'Waist'] + ) + + if (false !== intersect) { + if (intersect.constructor === Array) { + measurement += intersect[0].dist(points[prefix + names[i]]) + } else { + measurement += intersect.dist(points[prefix + names[i]]) + } + } + break + } + case 'Waist': { + measurement = + (prefix == 'front' + ? measurements.waist - measurements.waistBack + : measurements.waistBack) - + waistReduction * 0.5 + break + } + case 'Seat': { + measurement = + prefix == 'front' ? measurements.seat - measurements.seatBack : measurements.seatBack + distance *= distanceCompensation + break + } + default: { + measurement = measurements[names[i].toLowerCase()] + // Adjust for thigh size when using positive ease + if (ease > 1 && (names[i] == 'Ankle' || names[i] == 'Knee')) { + measurement *= 1.2 + } + } + } + measurement /= 2 + measurement *= ease + let ci + const width = measurement * ratio + const reduction = + ratio == 0 + ? measurement + : fixedSidePanel > 0 + ? width < measurement - fixedSidePanel + ? measurement - fixedSidePanel + : width + : width + if (i == 0) { + points[prefix + postfix + names[i]] = points[prefix + names[i]].shift( + prefix == 'front' ? 180 : 0, + reduction + ) + } else { + let iter = 0 + do { + ci = utils.circlesIntersect( + points[prefix + names[i]], + reduction * (1 + iter * 0.02), + points[prefix + postfix + names[lastGood]], + distance + ) + if (false !== ci) { + points[prefix + postfix + names[i]] = ci[prefix == 'front' ? 0 : 1] + } + } while (iter++ < 100 && (false == ci || isNaN(ci[prefix == 'front' ? 0 : 1].x))) + + lastGood = i + } + } +} + +const smoothPoints = (points, prefix, postfix, names, smoothness) => { + let adjust + for (let i = 0; i < names.length - 2; i++) { + adjust = false + if (prefix == 'front') { + adjust = + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) > + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 2]]) + } else { + adjust = + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) < + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 2]]) + } + if (adjust) { + const angleDiff = + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 2]]) - + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) + + points[prefix + postfix + names[i + 1]] = points[prefix + postfix + names[i]].shift( + points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) + + smoothness * angleDiff, + points[prefix + postfix + names[i]].dist(points[prefix + postfix + names[i + 1]]) + ) + } + } +} + +export const shape = { + name: 'lumina.shape', + measurements: [ + 'waist', + 'waistBack', + 'hips', + 'seat', + 'seatBack', + 'inseam', + 'waistToSeat', + 'waistToUpperLeg', + 'waistToKnee', + 'waistToHips', + 'waistToFloor', + 'knee', + 'ankle', + 'crossSeam', + 'crossSeamFront', + 'heel', + 'upperLeg', + ], + options: { + waistband: { bool: true, menu: 'style' }, + lowerwaistbandback: { + bool: true, + // eslint-disable-next-line no-unused-vars + menu: (settings, mergedOptions) => (mergedOptions?.waistband ? 'style' : false), + }, + ease: { pct: -8, min: -25, max: 10, menu: 'fit' }, + length: { pct: 35, min: 10, max: 100, menu: 'style' }, + waistbandsize: { + pct: 50, + min: 0, + max: 150, + ...pctBasedOn('waistToHips'), + // eslint-disable-next-line no-unused-vars + menu: (settings, mergedOptions) => (mergedOptions?.waistband ? 'style' : false), + }, + waistlowering: { pct: 35, min: -10, max: 60, ...pctBasedOn('waistToHips'), menu: 'style' }, + waistreduction: { + pct: 4, + min: 0, + max: 10, + ...pctBasedOn('waist'), + // eslint-disable-next-line no-unused-vars + menu: (settings, mergedOptions) => (mergedOptions?.waistband ? 'fit' : false), + }, + + sidepanel: { pct: 25, min: 10, max: 40, menu: 'style' }, + smoothing: { pct: 85, min: 50, max: 100, menu: 'advanced' }, + fixedsidepanel: { bool: false, menu: 'style' }, + crossSeamAngle: 35, + crotchToKnee: 0.4, + waistToKneeCP: 0.4, + kneeToWaistLength: 400, + crotchPointsCP: 2, + }, + draft: ({ + measurements, + options, + Point, + Path, + points, + paths, + utils, + store, + units, + log, + part, + }) => { + const inseam = + measurements.inseam > measurements.waistToFloor - measurements.waistToUpperLeg + ? measurements.waistToFloor - measurements.waistToUpperLeg + : measurements.inseam + const crotchOffset = measurements.waistToFloor - inseam + const waistLowering = measurements.waistToHips * options.waistlowering + const waistReduction = options.waistband ? measurements.waist * options.waistreduction : 0 + const waistbandSize = options.waistband + ? measurements.waistToHips * + (options.waistlowering + options.waistbandsize > 1.5 + ? 1.5 - options.waistlowering + : options.waistbandsize) + : 0 + const sideRatio = 1 - options.sidepanel + // const sideRatio = 3 / 5 + const ease = options.ease + 1 + const waistToAnkle = measurements.waistToFloor - measurements.heel / Math.PI + + store.set('waistbandSize', waistbandSize) + store.set('waistLowering', waistLowering) + + measurements['waistToAnkle'] = measurements.waistToFloor - measurements.heel / Math.PI + const sideFixed = (((measurements.waist - measurements.waistBack) * ease) / 2) * sideRatio + const fixedSidePanel = + (((measurements.waist - measurements.waistBack - waistReduction) * ease) / 2) * + options.sidepanel + + points.middleWaist = new Point(0, 0) + points.middleHips = points.middleWaist.shift(270, measurements.waistToHips) + points.middleSeat = points.middleWaist.shift(270, measurements.waistToSeat) + points.frontCrossSeam = + points.backCrossSeam = + points.middleCrossSeam = + points.middleWaist.shift(270, crotchOffset) + points.frontUpperLeg = + points.backUpperLeg = + points.middleUpperLeg = + points.middleWaist.shift(270, measurements.waistToUpperLeg) + points.frontKnee = + points.backKnee = + points.middleKnee = + points.middleWaist.shift(270, measurements.waistToKnee) + points.frontAnkle = + points.backAnkle = + points.middleAnkle = + points.middleWaist.shift(270, waistToAnkle) + points.frontFloor = + points.backFloor = + points.middleFloor = + points.middleWaist.shift(270, measurements.waistToFloor) + + createWaistPoint(options, measurements, Path, points, utils, log, true) + createWaistPoint(options, measurements, Path, points, utils, log, false) + + const frontCrossSeam = new Path() + .move(points.frontWaist) + .curve(points.frontWaistCp, points.frontCrossSeamCp, points.middleCrossSeam) + const backCrossSeam = new Path() + .move(points.backWaist) + .curve(points.backWaistCp, points.backCrossSeamCp, points.middleCrossSeam) + + points.frontSeat = frontCrossSeam.shiftAlong( + measurements.waistToSeat * (measurements.crossSeamFront / measurements.waistToUpperLeg) * 0.8 + ) + points.frontHips = frontCrossSeam.shiftAlong( + measurements.waistToHips * (measurements.crossSeamFront / measurements.waistToUpperLeg) + ) + + points.backSeat = backCrossSeam.shiftAlong( + measurements.waistToSeat * (measurements.waistToSeat / measurements.waistToUpperLeg) + ) + points.backHips = backCrossSeam.shiftAlong( + measurements.waistToHips * (measurements.waistToSeat / measurements.waistToUpperLeg) + ) + ;['front', 'back'].forEach((prefix) => { + createSidePoints({ + measurements: measurements, + points: points, + utils: utils, + prefix: prefix, + postfix: 'Side', + names: ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'], + ratio: 0, + ratioFixed: 0.1, + ease: ease, + waistReduction: waistReduction, + distanceCompensation: 1, + fixedSidePanel: 0, + }) + points[prefix + 'SideWaistband'] = points[prefix + 'SideWaist'].clone() + }) + + points.middleWaistband = points.middleWaist.clone() + ;['front', 'back'].forEach((prefix) => { + createSidePoints({ + measurements: measurements, + points: points, + utils: utils, + prefix: prefix, + postfix: 'Split', + names: ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'], + ratio: sideRatio, + ratioFixed: sideFixed, + ease: ease, + waistReduction: waistReduction, + distanceCompensation: + (points.frontAnkle.dist(points.frontCrossSeam) + frontCrossSeam.length()) / + (measurements.waistToFloor - measurements.heel / Math.PI), + fixedSidePanel: options.fixedsidepanel ? fixedSidePanel : 0, + }) + points[prefix + 'SplitWaistband'] = points[prefix + 'SplitWaist'].clone() + }) + + points.backHipsCp1 = points.backWaistCp.clone() + points.backWaistCp = points.backWaist.shift( + points.backWaist.angle(points.backSplitWaist) - 90, + points.backWaist.dist(points.backHips) / 3 + ) + points.backHipsCp2 = points.backSeat.shiftOutwards( + points.backHips, + points.backWaist.dist(points.backHips) / 4 + ) + points.frontHipsCp1 = points.frontWaistCp.clone() + points.frontWaistCp = points.frontWaist.shift( + points.frontWaist.angle(points.frontSplitWaist) + 90, + points.frontWaist.dist(points.frontHips) / 3 + ) + points.frontHipsCp2 = points.frontSeat.shiftOutwards( + points.frontHips, + points.frontWaist.dist(points.frontHips) / 4 + ) + + paths.front = new Path() + .move(points.frontWaist) + .curve(points.frontWaistCp, points.frontHipsCp2, points.frontHips) + .curve(points.frontHipsCp1, points.frontCrossSeamCp, points.middleCrossSeam) + paths.back = new Path() + .move(points.backWaist) + .curve(points.backWaistCp, points.backHipsCp2, points.backHips) + .curve(points.backHipsCp1, points.backCrossSeamCp, points.middleCrossSeam) + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split'].forEach((type) => { + smoothPoints( + points, + prefix, + type, + ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'], + options.smoothing + ) + }) + }) + + paths.middle = new Path().move(points.middleWaist).line(points.middleFloor).setHidden() + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split'].forEach((type) => { + createControlPoints(points, 3, [ + prefix + type + 'Waist', + prefix + type + 'Seat', + prefix + type + 'UpperLeg', + prefix + type + 'Knee', + prefix + type + 'Ankle', + ]) + }) + }) + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split'].forEach((type) => { + createPath(paths, Path, points, prefix + type, [ + prefix + type + 'Waist', + prefix + type + 'Seat', + prefix + type + 'UpperLeg', + prefix + type + 'Knee', + prefix + type + 'Ankle', + ]) + }) + }) + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Waist', 'Waistband', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => { + points[prefix + 'Panel' + name] = points['middle' + name].shift( + prefix == 'front' ? 0 : 180, + points[prefix + 'Side' + name].dist(points[prefix + 'Split' + name]) + ) + }) + }) + ;['front', 'back'].forEach((prefix) => { + createControlPoints(points, 3, [ + prefix + 'Panel' + 'Waist', + prefix + 'Panel' + 'Seat', + prefix + 'Panel' + 'UpperLeg', + prefix + 'Panel' + 'Knee', + prefix + 'Panel' + 'Ankle', + ]) + }) + ;['front', 'back'].forEach((prefix) => { + createPath(paths, Path, points, prefix + 'Panel', [ + prefix + 'Panel' + 'Waist', + prefix + 'Panel' + 'Seat', + prefix + 'Panel' + 'UpperLeg', + prefix + 'Panel' + 'Knee', + prefix + 'Panel' + 'Ankle', + ]) + }) + + const frontSplitlength = paths.frontSplit.length() + + while (Math.abs(frontSplitlength - paths.frontPanel.length()) > 1) { + // eslint-disable-next-line no-extra-semi + ;['front', 'back'].forEach((prefix) => { + const diff = paths[prefix + 'Split'].length() / paths[prefix + 'Panel'].length() + const names = ['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle'] + for (let i = 0; i < names.length - 1; i++) { + points[prefix + 'Panel' + names[i]] = points[ + prefix + 'Panel' + names[i + 1] + ].shiftFractionTowards(points[prefix + 'Panel' + names[i]], diff) + } + }) + ;['front', 'back'].forEach((prefix) => { + createControlPoints(points, 3, [ + prefix + 'Panel' + 'Waist', + prefix + 'Panel' + 'Seat', + prefix + 'Panel' + 'UpperLeg', + prefix + 'Panel' + 'Knee', + prefix + 'Panel' + 'Ankle', + ]) + }) + ;['front', 'back'].forEach((prefix) => { + createPath(paths, Path, points, prefix + 'Panel', [ + prefix + 'Panel' + 'Waist', + prefix + 'Panel' + 'Seat', + prefix + 'Panel' + 'UpperLeg', + prefix + 'Panel' + 'Knee', + prefix + 'Panel' + 'Ankle', + ]) + }) + } + + if (options.length < 1) { + const length = (1 - options.length) * (inseam - (measurements.waistToFloor - waistToAnkle)) + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split', 'Panel'].forEach((type) => { + points[prefix + type + 'Hem'] = paths[prefix + type].reverse().shiftAlong(length) + paths[prefix + type] = paths[prefix + type].split(points[prefix + type + 'Hem'])[0] + }) + }) + } else { + // eslint-disable-next-line no-extra-semi + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split', 'Panel'].forEach((type) => { + points[prefix + type + 'Hem'] = points[prefix + type + 'Ankle'] + }) + }) + } + + lowerWaist(paths, Path, points, log, waistLowering, 'middle', 'Waist') + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split', 'Panel'].forEach((type) => { + lowerWaist(paths, Path, points, log, waistLowering, prefix + type, 'Waist') + }) + lowerWaist(paths, Path, points, log, waistLowering, prefix, 'Waist') + }) + ;['front', 'back'].forEach((prefix) => { + // eslint-disable-next-line no-extra-semi + ;['Side', 'Split', 'Panel'].forEach((type) => { + lowerWaist(paths, Path, points, log, waistbandSize, prefix + type, 'Waistband') + }) + lowerWaist(paths, Path, points, log, waistbandSize, prefix, 'Waistband') + }) + + store.set( + 'waistLength', + points.backWaist.dist(points.backSideWaist) + points.frontWaist.dist(points.frontSideWaist) + ) + ;['front', 'back'].forEach((prefix) => { + const waistbandLength = points[prefix + 'Waistband'].dist(points[prefix + 'SplitWaistband']) + const direction = prefix == 'front' ? 90 : -90 + let angle = paths[prefix].shiftAlong(1).angle(points[prefix + 'Waistband']) + points[prefix + 'WaistbandCp'] = points[prefix + 'Waistband'].shift( + angle + direction, + waistbandLength * 0.35 + ) + angle = paths[prefix + 'Split'].shiftAlong(1).angle(points[prefix + 'SplitWaistband']) + points[prefix + 'SplitWaistbandCp'] = points[prefix + 'SplitWaistband'].shift( + angle + direction * -1, + waistbandLength * 0.35 + ) + paths[prefix + 'Waistband'] = new Path() + .move(points[prefix + 'Waistband']) + .curve( + points[prefix + 'WaistbandCp'], + points[prefix + 'SplitWaistbandCp'], + points[prefix + 'SplitWaistband'] + ) + .hide() + }) + + store.set( + 'waistbandLength', + paths.backWaistband.length() + + paths.frontWaistband.length() + + points.frontPanelWaistband.dist(points.backPanelWaistband) + ) + + if (options.waistband && options.lowerwaistbandback) { + // Lower the back a little more to get a V-shape in the back + // lowerWaist(paths, Path, points, waistLowering * 0.5, 'back', 'Waistband') + lowerWaist( + paths, + Path, + points, + log, + (waistLowering + waistbandSize) * 0.5, + 'back', + 'Waistband' + ) + paths.backWaistband = new Path() + .move(points.backWaistband) + ._curve(points.backSplitWaistbandCp, points.backSplitWaistband) + .hide() + } + + store.set('waistbandBackLength', paths.backWaistband.length()) + store.set('waistbandFrontLength', paths.frontWaistband.length()) + store.set('waistbandPanelLength', points.frontPanelWaistband.dist(points.backPanelWaistband)) + + store.flag.note({ + msg: `lumina:dimensions`, + replace: { + waistbandlength: units( + (store.get('waistbandBackLength') + + store.get('waistbandFrontLength') + + store.get('waistbandPanelLength')) * + 2 + ), + length: units( + store.get('waistbandSize') + points.frontPanelWaistband.dist(points.frontPanelHem) + ), + }, + }) + + return part //.hide() + }, +} diff --git a/designs/lumina/src/waistband.mjs b/designs/lumina/src/waistband.mjs new file mode 100644 index 00000000000..319d9cf2e24 --- /dev/null +++ b/designs/lumina/src/waistband.mjs @@ -0,0 +1,208 @@ +import { shape } from './shape.mjs' + +export const waistband = { + name: 'lumina.waistband', + after: shape, + draft: ({ + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + macro, + log, + utils, + part, + }) => { + if (false === options.waistband) { + return part.hide() + } + const waistLength = store.get('waistLength') + const waistbandFrontLength = store.get('waistbandFrontLength') + const waistbandPanelLength = store.get('waistbandPanelLength') + const waistbandLength = store.get('waistbandLength') + const waistbandSize = store.get('waistbandSize') + const waistLowering = store.get('waistLowering') + if (waistbandSize <= 0) { + return part.hide() + } + + points.origin = new Point(0, 0) + + const angleRad = Math.asin((Math.abs(waistbandLength - waistLength) * 0.5) / waistbandSize) + const radius = (waistLength * 0.5) / Math.sin(angleRad) + const baseAngle = waistLength < waistbandLength ? 270 : 90 + let angle = utils.rad2deg(angleRad) + if (isNaN(angle)) { + log.info('lumina:couldNoFitWaistband') + store.flag.note({ + msg: `lumina:couldNoFitWaistband`, + }) + return part.hide() + } + + let diff = 0 + let iter = 0 + let segments, cpDistance + do { + angle += diff * 0.025 + segments = 360 / angle + + cpDistance = (4 / 3) * Math.tan(Math.PI / (segments * 2)) * radius + + points.waistFront = points.origin.shift(baseAngle + angle, radius) + points.waistBack = points.origin.shift(baseAngle - angle, radius) + points.waistFrontCP = points.waistFront.shift(baseAngle - 90 + angle, cpDistance) + points.waistBackCP = points.waistBack.shift(baseAngle + 90 - angle, cpDistance) + + paths.waist = new Path() + .move(points.waistBack) + .curve(points.waistBackCP, points.waistFrontCP, points.waistFront) + + diff = waistLength - paths.waist.length() + } while (iter++ < 100 && (diff < -0.5 || diff > 0.5)) + if (iter >= 100) { + log.info('lumina:couldNoFitWaistband') + return part.hide() + } + + points.waistbandFront = points.waistFront.shift(270 + angle, waistbandSize) + points.waistbandBack = points.waistBack.shift(270 - angle, waistbandSize) + + cpDistance = + (4 / 3) * + Math.tan(Math.PI / (segments * 2)) * + (radius + waistbandSize * (waistLength < waistbandLength ? 1 : -1)) + points.waistbandFrontCP = points.waistbandFront.shift(baseAngle - 90 + angle, cpDistance) + points.waistbandBackCP = points.waistbandBack.shift(baseAngle + 90 - angle, cpDistance) + + paths.waistband = new Path() + .move(points.waistbandBack) + .curve(points.waistbandBackCP, points.waistbandFrontCP, points.waistbandFront) + + diff = waistbandLength - paths.waistband.length() + const rWaistband = paths.waistband.reverse() + + points.snippetPanelBack = rWaistband.shiftAlong(waistbandFrontLength + waistbandPanelLength) + snippets.panelBack = new Snippet('notch', points.snippetPanelBack) + points.snippetPanelFront = rWaistband.shiftAlong(waistbandFrontLength) + snippets.panelFront = new Snippet('notch', points.snippetPanelFront) + + if (options.lowerwaistbandback) { + paths.waistband = rWaistband.split(points.snippetPanelBack)[0] + points.waistbandBackPanel = points.snippetPanelBack.copy() + points.waistbandBackPanelCP = points.snippetPanelFront.shiftFractionTowards( + points.waistbandBackPanel, + 1.4 + ) + points.waistbandBack = points.waistBack.shiftOutwards( + points.waistbandBack, + (waistLowering + waistbandSize) * 0.5 + ) + paths.waistband = new Path() + .move(points.waistbandBack) + ._curve(points.waistbandBackPanelCP, points.waistbandBackPanel) + .join(paths.waistband.reverse()) + } + + paths.front = new Path() + .move(points.waistbandFront) + .line(points.waistFront) + .setText('front', 'note center') + .setClass('hidden') + paths.back = new Path() + .move(points.waistBack) + .line(points.waistbandBack) + .setText('back', 'note center') + .setClass('hidden') + + let top = paths.waist.edge('top') + if (top.y == points.waistBack.y) { + top = paths.waist.edge('bottom') + } + let bottom = paths.waistband.shiftFractionAlong(0.5) + if (bottom.y == points.waistbandFront.y) { + bottom = paths.waistband.edge('top') + } + + macro('cutonfold', { + from: points.waistbandFront, + to: points.waistFront, + }) + store.cutlist.addCut({ cut: 2, from: 'fabric', onFold: true }) + + points.title = points.snippetPanelFront.shiftFractionTowards(points.snippetPanelBack, 0.5) + points.title.y = top.y + 20 + macro('title', { + at: points.title, + nr: 3, + title: 'waistband', + align: 'center', + scale: 0.35, + }) + + paths.seamSA = new Path() + .move(points.waistFront) + .join(paths.waist.reverse()) + .line(points.waistbandBack) + .join(paths.waistband) + .hide() + + paths.seam = new Path().move(points.waistbandFront).line(points.waistFront).join(paths.seamSA) + + if (sa) { + const seamSA = paths.seamSA.offset(sa) + paths.sa = new Path() + .move(points.waistFront) + .line(seamSA.start()) + .join(seamSA) + .line(points.waistbandFront) + .attr('class', 'fabric sa') + } + + macro('hd', { + id: 'top', + from: points.waistBack, + to: points.waistFront, + y: Math.min(points.waistFront.y, top.y) - sa - 15, + }) + macro('hd', { + id: 'bottom', + from: points.waistbandBack, + to: points.waistbandFront, + y: Math.max(points.waistbandFront.y, Math.max(bottom.y, points.waistbandBack.y)) + sa + 15, + }) + macro('vd', { + id: 'top', + from: points.waistBack, + to: top, + x: top.x - 15, + noStartMarker: true, + noEndMarker: true, + }) + macro('vd', { + id: 'bottom', + from: points.waistFront, + to: bottom, + x: top.x + 15, + }) + macro('ld', { + id: 'front', + from: points.waistFront, + to: points.waistbandFront, + d: 15, + }) + macro('ld', { + id: 'back', + from: points.waistBack, + to: points.waistbandBack, + d: -15, + }) + + return part + }, +} diff --git a/designs/lumina/tests/shared.test.mjs b/designs/lumina/tests/shared.test.mjs new file mode 100644 index 00000000000..36dafb5c605 --- /dev/null +++ b/designs/lumina/tests/shared.test.mjs @@ -0,0 +1,20 @@ +// This file is auto-generated | Any changes you make will be overwritten. +import { Lumina, i18n } from '../src/index.mjs' + +// Shared tests +import { testPatternConfig } from '../../../tests/designs/config.mjs' +import { testPatternI18n } from '../../../tests/designs/i18n.mjs' +import { testPatternDrafting } from '../../../tests/designs/drafting.mjs' +import { testPatternSampling } from '../../../tests/designs/sampling.mjs' + +// Test config +testPatternConfig(Lumina) + +// Test translation +testPatternI18n(Lumina, i18n) + +// Test drafting - Change the second parameter to `true` to log errors +testPatternDrafting(Lumina, false) + +// Test sampling - Change the second parameter to `true` to log errors +testPatternSampling(Lumina, false) diff --git a/designs/lumira/src/shape.mjs b/designs/lumira/src/shape.mjs index a3ff366da28..1693277241b 100644 --- a/designs/lumira/src/shape.mjs +++ b/designs/lumira/src/shape.mjs @@ -20,16 +20,17 @@ export const controlPoints = (p1, p2, p3, cpDistanceDivider) => { } else { angle = Math.abs(p2.angle(p1) - p2.angle(p3)) / 2 } - return { - cp1: - p3 !== undefined - ? p2.shift(p2.angle(p3) - angle + 90, p2.dist(p3) / cpDistanceDivider) - : null, - cp2: - p1 !== undefined - ? p2.shift(p2.angle(p1) + angle - 90, p2.dist(p1) / cpDistanceDivider) - : null, + let cp1 = + p3 !== undefined ? p2.shift(p2.angle(p3) - angle + 90, p2.dist(p3) / cpDistanceDivider) : null + let cp2 = + p1 !== undefined ? p2.shift(p2.angle(p1) + angle - 90, p2.dist(p1) / cpDistanceDivider) : null + if (p1 !== undefined && p2.sitsRoughlyOn(p1)) { + return { cp1: p1.clone(), cp2: cp2 } } + if (p3 !== undefined && p2.sitsRoughlyOn(p3)) { + return { cp1: cp1, cp2: p3.clone() } + } + return { cp1: cp1, cp2: cp2 } } export const createControlPoints = (points, cpDistanceDivider, names) => { for (let i = 0; i < names.length; i++) { diff --git a/markdown/org/docs/designs/lumina/cutting/de.md b/markdown/org/docs/designs/lumina/cutting/de.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/de.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/cutting/en.md b/markdown/org/docs/designs/lumina/cutting/en.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/en.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/cutting/es.md b/markdown/org/docs/designs/lumina/cutting/es.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/es.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/cutting/fr.md b/markdown/org/docs/designs/lumina/cutting/fr.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/fr.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/cutting/nl.md b/markdown/org/docs/designs/lumina/cutting/nl.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/nl.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/cutting/uk.md b/markdown/org/docs/designs/lumina/cutting/uk.md new file mode 100644 index 00000000000..c43389eed9a --- /dev/null +++ b/markdown/org/docs/designs/lumina/cutting/uk.md @@ -0,0 +1,14 @@ +--- +title: "Lumina leggings: Cutting Instructions" +--- + +### Materials + +- **Main fabric** + - Cut **2 leg** parts + - Cut **2 panel** parts + +Optionally + - Cut **2 waistband** parts on the fold + - Cut **2 pocket** parts + diff --git a/markdown/org/docs/designs/lumina/de.md b/markdown/org/docs/designs/lumina/de.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/de.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/markdown/org/docs/designs/lumina/en.md b/markdown/org/docs/designs/lumina/en.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/en.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/markdown/org/docs/designs/lumina/es.md b/markdown/org/docs/designs/lumina/es.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/es.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/markdown/org/docs/designs/lumina/fabric/de.md b/markdown/org/docs/designs/lumina/fabric/de.md new file mode 100644 index 00000000000..a5d75a18050 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/de.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a wovel fabric). + + + +These fabrics come in different weights. Pick one that works for how you intent to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletic use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fabric/en.md b/markdown/org/docs/designs/lumina/fabric/en.md new file mode 100644 index 00000000000..e1246c5d5be --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/en.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a woven fabric). + + + +These fabrics come in different weights. Pick one that works for how you intend to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletics use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fabric/es.md b/markdown/org/docs/designs/lumina/fabric/es.md new file mode 100644 index 00000000000..a5d75a18050 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/es.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a wovel fabric). + + + +These fabrics come in different weights. Pick one that works for how you intent to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletic use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fabric/fr.md b/markdown/org/docs/designs/lumina/fabric/fr.md new file mode 100644 index 00000000000..a5d75a18050 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/fr.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a wovel fabric). + + + +These fabrics come in different weights. Pick one that works for how you intent to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletic use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fabric/nl.md b/markdown/org/docs/designs/lumina/fabric/nl.md new file mode 100644 index 00000000000..a5d75a18050 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/nl.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a wovel fabric). + + + +These fabrics come in different weights. Pick one that works for how you intent to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletic use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fabric/uk.md b/markdown/org/docs/designs/lumina/fabric/uk.md new file mode 100644 index 00000000000..a5d75a18050 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fabric/uk.md @@ -0,0 +1,30 @@ +--- +title: "Lumina leggings: Fabric Options" +--- + +### Main Fabric + +This pattern requires a stretch fabric. The stretch needs to be perpendicular to the grainline. There is no stretch required along +the grainline, but a 4-way stretch fabric can definitely be used. Not all stretch fabrics have the same amount of stretch. The default +ease value of -5% works well for fabrics that have 60% stretch. If your fabric has a different amount of stretch, you may want to +adjust this setting accordingly. Reduce the ease when your fabric has more stretch. Getting the ease right is *very* important for +getting a good fit. + + + +If the ease setting is larger than 0 (positive ease), any type of knit fabric can be used. Keep in mind that even with the ease +set at the maximum, you probably will not be able to use a fabric with no stretch at all (a wovel fabric). + + + +These fabrics come in different weights. Pick one that works for how you intent to use it. Thicker fabrics provide more support +and warmth. + +For yoga pants, take something that has a medium thickness. Supplex is a good choice for this. It also works well for cycling. For +other athletic use fabrics that would be appropriate for that. Most fabrics that contain spandex will work. + + + +Since this pattern has an outside panel, you can use contrasting fabrics to make interesting effects. + + diff --git a/markdown/org/docs/designs/lumina/fr.md b/markdown/org/docs/designs/lumina/fr.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/fr.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/markdown/org/docs/designs/lumina/instructions/de.md b/markdown/org/docs/designs/lumina/instructions/de.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/de.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/instructions/en.md b/markdown/org/docs/designs/lumina/instructions/en.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/en.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/instructions/es.md b/markdown/org/docs/designs/lumina/instructions/es.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/es.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/instructions/fr.md b/markdown/org/docs/designs/lumina/instructions/fr.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/fr.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/instructions/nl.md b/markdown/org/docs/designs/lumina/instructions/nl.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/nl.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/instructions/uk.md b/markdown/org/docs/designs/lumina/instructions/uk.md new file mode 100644 index 00000000000..734587b5b3c --- /dev/null +++ b/markdown/org/docs/designs/lumina/instructions/uk.md @@ -0,0 +1,67 @@ +--- +title: "Lumina leggings: Sewing Instructions" +--- + + + +This is a garment made from a stretch fabric. So use appropriate seam solutions. A serger is a good way to do this, as +are specific stitches that certain sewing machines provide. A zigzag stitch will do if that's all you have. + +Keep in mind that since these seams are always under tension, it may be a good idea to double them up, or +provide a zigzag in addition to serging the seam. + + + +### Step 1: The waistband (optional) + +- Sew the two pieces to each other, right sides together, along the top seam. +- Press the seam open +- Sew the back seam, right sides together. This creates a loop. + + +If you want to include elastic into the waistband, now is a good time to do so. You should +add it to the seam you just sewed. + + +### Step 2: The cross seam + +- Sew both leg pieces together along the cross seam. + +### Step 3: Pockets + +- Serge the top of the two panels. +- Fold this top over onto itself, and stitch in place. Using a double needle is a good way to do this. +Zigzag works too. Make sure that you fold it slightly more than the seam allowance. +- Lay the panel down with the right side down. +- Lay the pocket part on top, right side down, aligning the notches. Pin in place +- Stitch the bottom of the pocket to the panel. Again, a double needle or zigzag works well. + +### Step 4: Panels + +- Align all the front notches of the panel to the front of the leg panel, right sides together. +If you included the pocket option, make sure you treat the pocket and panel pieces as one piece. +- Seam this seam on both legs. +- Repeat for the back side of the panel and leg parts + + +The number and distance of the notches on the front and back seams are different. + + +### Step 5: Attaching the waistband + +- Align the waistband seam with the seam in the back. Align the notches with the panel seams. +- Sew all the way around, attaching the waistband to the legs. Make sure you sew both pieces of the waistband +into this seam. This seam will combine three layers, both layers of the waistband, and one layer of the leg +pieces. + + +If you have included the pocket option, take extra care not to sew the folded over part of the panel into +the waistband seam. + + +### Step 6: Finish up + +Now you can add the elastic to the leg openings. Otherwise finish those in any way you like. + + +You're all done! Enjoy your Lumina leggings! diff --git a/markdown/org/docs/designs/lumina/measurements/de.md b/markdown/org/docs/designs/lumina/measurements/de.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/de.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/measurements/en.md b/markdown/org/docs/designs/lumina/measurements/en.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/en.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/measurements/es.md b/markdown/org/docs/designs/lumina/measurements/es.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/es.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/measurements/fr.md b/markdown/org/docs/designs/lumina/measurements/fr.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/fr.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/measurements/nl.md b/markdown/org/docs/designs/lumina/measurements/nl.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/nl.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/measurements/uk.md b/markdown/org/docs/designs/lumina/measurements/uk.md new file mode 100644 index 00000000000..063e941c890 --- /dev/null +++ b/markdown/org/docs/designs/lumina/measurements/uk.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Required Measurements" +--- + + diff --git a/markdown/org/docs/designs/lumina/needs/de.md b/markdown/org/docs/designs/lumina/needs/de.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/de.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/needs/en.md b/markdown/org/docs/designs/lumina/needs/en.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/en.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/needs/es.md b/markdown/org/docs/designs/lumina/needs/es.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/es.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/needs/fr.md b/markdown/org/docs/designs/lumina/needs/fr.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/fr.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/needs/nl.md b/markdown/org/docs/designs/lumina/needs/nl.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/nl.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/needs/uk.md b/markdown/org/docs/designs/lumina/needs/uk.md new file mode 100644 index 00000000000..f7c5cb0c474 --- /dev/null +++ b/markdown/org/docs/designs/lumina/needs/uk.md @@ -0,0 +1,10 @@ +--- +title: "Lumina leggings: What You Need" +--- + +To make Lumina, you will need the following: + +- Basic sewing supplies +- About 1.5 metres (1.7 yards) of a suitable fabric ([see Lumina Fabric options](/docs/designs/lumina/fabric/)) +- Elastic for the leg openings and waist. + diff --git a/markdown/org/docs/designs/lumina/nl.md b/markdown/org/docs/designs/lumina/nl.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/nl.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/markdown/org/docs/designs/lumina/notes/de.md b/markdown/org/docs/designs/lumina/notes/de.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/de.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/notes/en.md b/markdown/org/docs/designs/lumina/notes/en.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/en.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/notes/es.md b/markdown/org/docs/designs/lumina/notes/es.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/es.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/notes/fr.md b/markdown/org/docs/designs/lumina/notes/fr.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/fr.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/notes/nl.md b/markdown/org/docs/designs/lumina/notes/nl.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/nl.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/notes/uk.md b/markdown/org/docs/designs/lumina/notes/uk.md new file mode 100644 index 00000000000..621e3ea7633 --- /dev/null +++ b/markdown/org/docs/designs/lumina/notes/uk.md @@ -0,0 +1,21 @@ +--- +title: "Lumina leggings: Designer Notes" +--- + +I started working on this design when I wanted to make a pair of cycling shorts. I had made a pair in the past, +using a commercial pattern. And since you can buy the chamois separately, this is a great garment to make. + +After starting this, I realized that there would be people who would want a more traditional leggings pattern. +So I decided to make two patterns, one with a seam on the inside of the leg (traditional), and one without a +seam on the inside (this one). I played with the idea to keep both patterns under one name, but it became +obvious that it would be better to have two different patterns instead. Since this one was called `lumina`, I +named the other `lumira`. As it may be, I quickly got distracted by the other version, and that one was +published first. + +Since this pattern has a panel on the side, it seemed easy to add a pocket option. So if you want to keep +your mobile phone on you while working out, this is the pattern to use. + +I was also in need of a pair of gym climbing pants. So this pattern has the option to have a positive ease +setting, allowing you to use a non-stretch knit fabric. This makes for loose-fitting workout pants. + +Wouter diff --git a/markdown/org/docs/designs/lumina/options/de.md b/markdown/org/docs/designs/lumina/options/de.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/de.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/ease/de.md b/markdown/org/docs/designs/lumina/options/ease/de.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/de.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/ease/en.md b/markdown/org/docs/designs/lumina/options/ease/en.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/en.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/ease/es.md b/markdown/org/docs/designs/lumina/options/ease/es.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/es.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/ease/fr.md b/markdown/org/docs/designs/lumina/options/ease/fr.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/fr.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/ease/nl.md b/markdown/org/docs/designs/lumina/options/ease/nl.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/nl.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/ease/uk.md b/markdown/org/docs/designs/lumina/options/ease/uk.md new file mode 100644 index 00000000000..46458170021 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/ease/uk.md @@ -0,0 +1,19 @@ +--- +title: "Ease" +--- + +*** + +Controls the amount of ease built into the pattern. Since these are leggings that are to be made of stretch fabric, +the ease is nagative. So the completed garment will be narrower than the measurements would dictate. + + +Getting the ease right for your type of fabric is essential for getting a good fit. If you make the ease +too negative, the leggings will be too constricting, and limiting movement. If you don't make the ease +negative enough, the leggings will not hug your legs and torso. The fabric should be stretched in all +places, without being too tight. + + + +With a positive ease, these leggings will turn into slightly loose fitting pants + diff --git a/markdown/org/docs/designs/lumina/options/en.md b/markdown/org/docs/designs/lumina/options/en.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/en.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/es.md b/markdown/org/docs/designs/lumina/options/es.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/es.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/fr.md b/markdown/org/docs/designs/lumina/options/fr.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/fr.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/length/de.md b/markdown/org/docs/designs/lumina/options/length/de.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/de.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/length/en.md b/markdown/org/docs/designs/lumina/options/length/en.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/en.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/length/es.md b/markdown/org/docs/designs/lumina/options/length/es.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/es.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/length/fr.md b/markdown/org/docs/designs/lumina/options/length/fr.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/fr.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/length/nl.md b/markdown/org/docs/designs/lumina/options/length/nl.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/nl.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/length/uk.md b/markdown/org/docs/designs/lumina/options/length/uk.md new file mode 100644 index 00000000000..8033f405444 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/length/uk.md @@ -0,0 +1,19 @@ +--- +title: "Leg length" +--- + +*** + +Controls the length of the legs. This is a percentage of the inseam. + + + +Since the inseam is measured to the floor, and these leggings max out at the ankle, +The maximum is beyond the ankle, and is ignored. The slider will not do anything +for the top 10% or so. + + + + + + diff --git a/markdown/org/docs/designs/lumina/options/nl.md b/markdown/org/docs/designs/lumina/options/nl.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/nl.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/de.md b/markdown/org/docs/designs/lumina/options/pocket/de.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/de.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/en.md b/markdown/org/docs/designs/lumina/options/pocket/en.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/en.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/es.md b/markdown/org/docs/designs/lumina/options/pocket/es.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/es.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/fr.md b/markdown/org/docs/designs/lumina/options/pocket/fr.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/fr.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/nl.md b/markdown/org/docs/designs/lumina/options/pocket/nl.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/nl.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocket/uk.md b/markdown/org/docs/designs/lumina/options/pocket/uk.md new file mode 100644 index 00000000000..cc77272532a --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocket/uk.md @@ -0,0 +1,10 @@ +--- +title: "Pocket" +--- + +*** + +The pattern allows for a pocket to be added in the side panel. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/de.md b/markdown/org/docs/designs/lumina/options/pocketdepth/de.md new file mode 100644 index 00000000000..eb2157b6391 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/de.md @@ -0,0 +1,11 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/en.md b/markdown/org/docs/designs/lumina/options/pocketdepth/en.md new file mode 100644 index 00000000000..2fa34028e67 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/en.md @@ -0,0 +1,10 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/es.md b/markdown/org/docs/designs/lumina/options/pocketdepth/es.md new file mode 100644 index 00000000000..eb2157b6391 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/es.md @@ -0,0 +1,11 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/fr.md b/markdown/org/docs/designs/lumina/options/pocketdepth/fr.md new file mode 100644 index 00000000000..eb2157b6391 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/fr.md @@ -0,0 +1,11 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/nl.md b/markdown/org/docs/designs/lumina/options/pocketdepth/nl.md new file mode 100644 index 00000000000..eb2157b6391 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/nl.md @@ -0,0 +1,11 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + + diff --git a/markdown/org/docs/designs/lumina/options/pocketdepth/uk.md b/markdown/org/docs/designs/lumina/options/pocketdepth/uk.md new file mode 100644 index 00000000000..eb2157b6391 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/pocketdepth/uk.md @@ -0,0 +1,11 @@ +--- +title: "Pocket depth" +--- + +*** + +Controls the depth of the pocket. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/de.md b/markdown/org/docs/designs/lumina/options/sidepanel/de.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/de.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/en.md b/markdown/org/docs/designs/lumina/options/sidepanel/en.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/en.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/es.md b/markdown/org/docs/designs/lumina/options/sidepanel/es.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/es.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/fr.md b/markdown/org/docs/designs/lumina/options/sidepanel/fr.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/fr.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/nl.md b/markdown/org/docs/designs/lumina/options/sidepanel/nl.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/nl.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanel/uk.md b/markdown/org/docs/designs/lumina/options/sidepanel/uk.md new file mode 100644 index 00000000000..e5f01fa1451 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanel/uk.md @@ -0,0 +1,15 @@ +--- +title: "Side panel" +--- + +*** + +Have either a fixed width side panel, or one that follows the contours of the legs. + + +Even a fixed width side panel will taper towards the ankle + + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/de.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/de.md new file mode 100644 index 00000000000..80e25f47b11 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/de.md @@ -0,0 +1,11 @@ +--- +title: "Side panel side" +--- + +*** + +Controls the width of the side panel. This is a percentage of the waist. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/en.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/en.md new file mode 100644 index 00000000000..80e25f47b11 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/en.md @@ -0,0 +1,11 @@ +--- +title: "Side panel side" +--- + +*** + +Controls the width of the side panel. This is a percentage of the waist. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/es.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/es.md new file mode 100644 index 00000000000..80e25f47b11 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/es.md @@ -0,0 +1,11 @@ +--- +title: "Side panel side" +--- + +*** + +Controls the width of the side panel. This is a percentage of the waist. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/fr.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/fr.md new file mode 100644 index 00000000000..80e25f47b11 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/fr.md @@ -0,0 +1,11 @@ +--- +title: "Side panel side" +--- + +*** + +Controls the width of the side panel. This is a percentage of the waist. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/nl.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/nl.md new file mode 100644 index 00000000000..80e25f47b11 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/nl.md @@ -0,0 +1,11 @@ +--- +title: "Side panel side" +--- + +*** + +Controls the width of the side panel. This is a percentage of the waist. + + + + diff --git a/markdown/org/docs/designs/lumina/options/sidepanelsize/uk.md b/markdown/org/docs/designs/lumina/options/sidepanelsize/uk.md new file mode 100644 index 00000000000..e671be76993 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/sidepanelsize/uk.md @@ -0,0 +1,11 @@ +--- +title: "Front gusset length" +--- + +*** + +Controls the length of the gusset in the front. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/de.md b/markdown/org/docs/designs/lumina/options/smoothing/de.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/de.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/en.md b/markdown/org/docs/designs/lumina/options/smoothing/en.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/en.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/es.md b/markdown/org/docs/designs/lumina/options/smoothing/es.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/es.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/fr.md b/markdown/org/docs/designs/lumina/options/smoothing/fr.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/fr.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/nl.md b/markdown/org/docs/designs/lumina/options/smoothing/nl.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/nl.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/smoothing/uk.md b/markdown/org/docs/designs/lumina/options/smoothing/uk.md new file mode 100644 index 00000000000..ffc36921dfa --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/smoothing/uk.md @@ -0,0 +1,11 @@ +--- +title: "Smoothing" +--- + +*** + +This option controls the amount of smoothing of the side seam the pattern employs. + + + + diff --git a/markdown/org/docs/designs/lumina/options/uk.md b/markdown/org/docs/designs/lumina/options/uk.md new file mode 100644 index 00000000000..7b6330f3b63 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/uk.md @@ -0,0 +1,5 @@ +--- +title: "Lumina leggings: Design Options" +--- + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/de.md b/markdown/org/docs/designs/lumina/options/waistband/de.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/de.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/en.md b/markdown/org/docs/designs/lumina/options/waistband/en.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/en.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/es.md b/markdown/org/docs/designs/lumina/options/waistband/es.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/es.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/fr.md b/markdown/org/docs/designs/lumina/options/waistband/fr.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/fr.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/nl.md b/markdown/org/docs/designs/lumina/options/waistband/nl.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/nl.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistband/uk.md b/markdown/org/docs/designs/lumina/options/waistband/uk.md new file mode 100644 index 00000000000..2c9aa3d1f6f --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistband/uk.md @@ -0,0 +1,11 @@ +--- +title: "Waistband" +--- + +*** + +Adds a waistband + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/de.md b/markdown/org/docs/designs/lumina/options/waistbandsize/de.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/de.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/en.md b/markdown/org/docs/designs/lumina/options/waistbandsize/en.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/en.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/es.md b/markdown/org/docs/designs/lumina/options/waistbandsize/es.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/es.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/fr.md b/markdown/org/docs/designs/lumina/options/waistbandsize/fr.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/fr.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/nl.md b/markdown/org/docs/designs/lumina/options/waistbandsize/nl.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/nl.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistbandsize/uk.md b/markdown/org/docs/designs/lumina/options/waistbandsize/uk.md new file mode 100644 index 00000000000..ae583903bc5 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistbandsize/uk.md @@ -0,0 +1,11 @@ +--- +title: "Waistband size" +--- + +*** + +Controls the size of the waistband. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/de.md b/markdown/org/docs/designs/lumina/options/waistlowering/de.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/de.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/en.md b/markdown/org/docs/designs/lumina/options/waistlowering/en.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/en.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/es.md b/markdown/org/docs/designs/lumina/options/waistlowering/es.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/es.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/fr.md b/markdown/org/docs/designs/lumina/options/waistlowering/fr.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/fr.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/nl.md b/markdown/org/docs/designs/lumina/options/waistlowering/nl.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/nl.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistlowering/uk.md b/markdown/org/docs/designs/lumina/options/waistlowering/uk.md new file mode 100644 index 00000000000..9b5ab3119ed --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistlowering/uk.md @@ -0,0 +1,11 @@ +--- +title: "Waist lowering" +--- + +*** + +This lowers where the top of the leggings stop. Can be anywhere between the true waist and the hips. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/de.md b/markdown/org/docs/designs/lumina/options/waistreduction/de.md new file mode 100644 index 00000000000..d1d96e2d838 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/de.md @@ -0,0 +1,11 @@ +--- +title: "Taillenreduzierung" +--- + +*** + +Reduziert die Taille für eine leichte Passform. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/en.md b/markdown/org/docs/designs/lumina/options/waistreduction/en.md new file mode 100644 index 00000000000..3ddc6afca62 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/en.md @@ -0,0 +1,11 @@ +--- +title: "Waist reduction" +--- + +*** + +Reduces the waist for a more snug fit. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/es.md b/markdown/org/docs/designs/lumina/options/waistreduction/es.md new file mode 100644 index 00000000000..733c368906e --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/es.md @@ -0,0 +1,11 @@ +--- +title: "Reducción de cintura" +--- + +*** + +Reduce la cintura para un mejor encaje. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/fr.md b/markdown/org/docs/designs/lumina/options/waistreduction/fr.md new file mode 100644 index 00000000000..adb79fade75 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/fr.md @@ -0,0 +1,11 @@ +--- +title: "Réduction de la taille" +--- + +*** + +Réduit la taille de la ceinture pour un porté plus ajusté. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/nl.md b/markdown/org/docs/designs/lumina/options/waistreduction/nl.md new file mode 100644 index 00000000000..de91c0babc0 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/nl.md @@ -0,0 +1,11 @@ +--- +title: "Reductie taille" +--- + +*** + +Vermindert de taille voor een meer snug pas. + + + + diff --git a/markdown/org/docs/designs/lumina/options/waistreduction/uk.md b/markdown/org/docs/designs/lumina/options/waistreduction/uk.md new file mode 100644 index 00000000000..bed881dfcf2 --- /dev/null +++ b/markdown/org/docs/designs/lumina/options/waistreduction/uk.md @@ -0,0 +1,11 @@ +--- +title: "Зменшення талії" +--- + +*** + +Зменшує талію для більш щільного прилягання. + + + + diff --git a/markdown/org/docs/designs/lumina/uk.md b/markdown/org/docs/designs/lumina/uk.md new file mode 100644 index 00000000000..c3d49f4c903 --- /dev/null +++ b/markdown/org/docs/designs/lumina/uk.md @@ -0,0 +1,8 @@ +--- +title: "Lumina leggings" +--- + + + + + diff --git a/sites/lab/pages/new/lumina.mjs b/sites/lab/pages/new/lumina.mjs new file mode 100644 index 00000000000..879bea41040 --- /dev/null +++ b/sites/lab/pages/new/lumina.mjs @@ -0,0 +1,41 @@ +/* + * This page is auto-generated. Do not edit it by hand. + */ +import { Lumina } from 'designs/lumina/src/index.mjs' +// Dependencies +import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import { nsMerge } from 'shared/utils.mjs' +// Components +import { PageWrapper, ns as pageNs } from 'shared/components/wrappers/page.mjs' +import { Workbench, ns as wbNs } from 'shared/components/workbench/new.mjs' +import { WorkbenchLayout } from 'site/components/layouts/workbench.mjs' + +// Translation namespaces used on this page +const ns = nsMerge('lumina', wbNs, pageNs) + +const NewLuminaPage = ({ page, docs }) => ( + + + +) + +export default NewLuminaPage + +export async function getStaticProps({ locale }) { + return { + props: { + ...(await serverSideTranslations(locale, ns)), + page: { + locale, + path: ['new', 'lumina'], + title: 'Lumina', + }, + }, + } +} diff --git a/sites/shared/i18n/designs.mjs b/sites/shared/i18n/designs.mjs index d6d0bdbc570..06cdac638c5 100644 --- a/sites/shared/i18n/designs.mjs +++ b/sites/shared/i18n/designs.mjs @@ -59,6 +59,7 @@ import { i18n as waralee } from '@freesewing/waralee' import { i18n as yuri } from '@freesewing/yuri' import { i18n as otis } from '@freesewing/otis' import { i18n as lumira } from '@freesewing/lumira' +import { i18n as lumina } from '@freesewing/lumina' export const designs = { aaron, @@ -118,4 +119,5 @@ export const designs = { yuri, otis, lumira, + lumina, }