commit
b6edabe63f
45 changed files with 1994 additions and 3 deletions
|
@ -67,8 +67,6 @@ cd freesewing
|
|||
yarn kickstart
|
||||
```
|
||||
|
||||
If you don't want to set up a dev environment, you can [](https://gitpod.io/#https://github.com/freesewing/freesewing), though we recommend that you fork this repo and then put `gitpod.io/#<entire-url-of-your-fork` into a browser 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.
|
||||
|
|
|
@ -148,6 +148,9 @@ mui-theme:
|
|||
'@material-ui/core': *matui-core
|
||||
'react': *react
|
||||
'react-dom': '^17.0.2'
|
||||
noble:
|
||||
peer:
|
||||
'@freesewing/bella': *freesewing
|
||||
legend:
|
||||
peer:
|
||||
'@freesewing/plugin-buttons': *freesewing
|
||||
|
|
|
@ -75,6 +75,8 @@ packageJson:
|
|||
author: SeaZeeZee (https://github.com/SeaZeeZee)
|
||||
lunetius: &starf
|
||||
author: Starfetch (https://github.com/starfetch)
|
||||
noble:
|
||||
author: woutervdub (https://github.com/woutervdub)
|
||||
plugin-gore:
|
||||
author: AlfaLyr (https://github.com/alfalyr)
|
||||
prettier-config:
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
"bent": "A FreeSewing pattern for a menswear body block with a two-part sleeve",
|
||||
"breanna": "A FreeSewing pattern for a basic body block for womenswear",
|
||||
"brian": "A FreeSewing pattern for a basic body block for menswear",
|
||||
"noble": "A FreeSewing pattern princess seam bodice block",
|
||||
"titan": "A FreeSewing pattern for a unisex trouser block"
|
||||
},
|
||||
"garments": {
|
||||
|
|
9
designs/noble/CHANGELOG.md
Normal file
9
designs/noble/CHANGELOG.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Change log for: @freesewing/noble
|
||||
|
||||
|
||||
|
||||
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.
|
||||
|
260
designs/noble/README.md
Normal file
260
designs/noble/README.md
Normal file
|
@ -0,0 +1,260 @@
|
|||

|
||||
<p align='center'><a
|
||||
href="https://www.npmjs.com/package/@freesewing/noble"
|
||||
title="@freesewing/noble on NPM"
|
||||
><img src="https://img.shields.io/npm/v/@freesewing/noble.svg"
|
||||
alt="@freesewing/noble on NPM"/>
|
||||
</a><a
|
||||
href="https://opensource.org/licenses/MIT"
|
||||
title="License: MIT"
|
||||
><img src="https://img.shields.io/npm/l/@freesewing/noble.svg?label=License"
|
||||
alt="License: MIT"/>
|
||||
</a><a
|
||||
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
|
||||
title="Code quality on DeepScan"
|
||||
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
|
||||
alt="Code quality on DeepScan"/>
|
||||
</a><a
|
||||
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Anoble"
|
||||
title="Open issues tagged pkg:noble"
|
||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:noble.svg?label=Issues"
|
||||
alt="Open issues tagged pkg:noble"/>
|
||||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-90-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a><a
|
||||
href="https://chat.freesewing.org"
|
||||
title="Chat with us on Discord"
|
||||
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
|
||||
alt="Chat with us on Discord"/>
|
||||
</a><a
|
||||
href="https://freesewing.org/patrons/join"
|
||||
title="Become a FreeSewing Patron"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
|
||||
alt="Become a FreeSewing Patron"/>
|
||||
</a><a
|
||||
href="https://instagram.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a></p>
|
||||
|
||||
# @freesewing/noble
|
||||
|
||||
FIXME: A FreeSewing pattern that needs a description
|
||||
|
||||
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo*
|
||||
holding [all our NPM packages](https://freesewing.dev/reference/packages/).
|
||||
|
||||
This folder holds: @freesewing/noble
|
||||
|
||||
If you're not entirely sure what to do or how to start, type this command:
|
||||
|
||||
```
|
||||
npm run tips
|
||||
```
|
||||
|
||||
## 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
|
||||
our sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide 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
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
## 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 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt=""/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt=""/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt=""/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt=""/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt=""/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt=""/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt=""/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt=""/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt=""/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt=""/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt=""/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt=""/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt=""/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt=""/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt=""/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt=""/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt=""/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt=""/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt=""/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt=""/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt=""/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
55
designs/noble/build.js
Normal file
55
designs/noble/build.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* This script will build the package with esbuild */
|
||||
const esbuild = require('esbuild')
|
||||
const pkg = require('./package.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.js'],
|
||||
external: ["@freesewing"],
|
||||
metafile: process.env.VERBOSE ? true : false,
|
||||
minify: process.env.NO_MINIFY ? false : true,
|
||||
sourcemap: true,
|
||||
}
|
||||
|
||||
// Different formats
|
||||
const formats = {
|
||||
cjs: "dist/index.js",
|
||||
esm: "dist/index.mjs",
|
||||
}
|
||||
|
||||
// Let esbuild generate different formats
|
||||
let result
|
||||
(async () => {
|
||||
for (const [format, outfile] of Object.entries(formats)) {
|
||||
result = await esbuild
|
||||
.build({ ...options, outfile, format })
|
||||
.catch(() => process.exit(1))
|
||||
}
|
||||
|
||||
if (process.env.VERBOSE) {
|
||||
const info = await esbuild.analyzeMetafile(result.metafile)
|
||||
console.log(info)
|
||||
}
|
||||
|
||||
// Also build a version that has all dependencies bundled
|
||||
// This makes it easy to run tests
|
||||
await esbuild
|
||||
.build({
|
||||
...options,
|
||||
outfile: 'tests/dist/index.mjs',
|
||||
format: 'esm',
|
||||
external: [],
|
||||
})
|
||||
.catch(() => process.exit(1))
|
||||
|
||||
})()
|
111
designs/noble/config/index.js
Normal file
111
designs/noble/config/index.js
Normal file
|
@ -0,0 +1,111 @@
|
|||
// import { version } from '../package.json'
|
||||
import Bella from '@freesewing/bella'
|
||||
|
||||
import { version } from '../package.json'
|
||||
import configHelpers from '@freesewing/config-helpers'
|
||||
const { pctBasedOn } = configHelpers
|
||||
|
||||
export default {
|
||||
...Bella.config,
|
||||
name: 'noble',
|
||||
version,
|
||||
design: 'Noble Incognito',
|
||||
code: 'Wouter van Wageningen',
|
||||
department: 'tops',
|
||||
type: 'block',
|
||||
difficulty: 3,
|
||||
optionGroups: {
|
||||
type: ['dartPosition'],
|
||||
fit: ['chestEase', 'waistEase', 'bustSpanEase'],
|
||||
darts: ['backDartHeight', 'waistDartLength', 'shoulderDartPosition','upperDartLength','dartOutsideCP','armholeDartPosition'],
|
||||
armhole: [
|
||||
'armholeDepth',
|
||||
'backArmholeSlant',
|
||||
'backArmholeCurvature',
|
||||
'frontArmholePitchDepth',
|
||||
'backArmholePitchDepth',
|
||||
],
|
||||
advanced: ['backNeckCutout', 'backHemSlope', 'frontShoulderWidth', 'highBustWidth', 'shoulderToShoulderEase'],
|
||||
},
|
||||
measurements: [
|
||||
'chest',
|
||||
'waist',
|
||||
'waistBack',
|
||||
'neck',
|
||||
'hpsToWaistFront',
|
||||
'hpsToWaistBack',
|
||||
'shoulderToShoulder',
|
||||
'shoulderSlope',
|
||||
// ],
|
||||
// optionalMeasurements: [
|
||||
'highBust',
|
||||
'underbust',
|
||||
'bustSpan',
|
||||
'hpsToBust',
|
||||
],
|
||||
hide: ['bellaFrontSideDart', 'bellaBack', 'backPoints', 'frontPoints',],
|
||||
inject: {
|
||||
...Bella.config.inject,
|
||||
backPoints: 'bellaBack',
|
||||
backInside: 'backPoints',
|
||||
backOutside: 'backPoints',
|
||||
frontPoints: 'bellaFrontSideDart',
|
||||
frontInside: 'frontPoints',
|
||||
frontOutside: 'frontPoints',
|
||||
},
|
||||
dependencies: {
|
||||
// The inheritance makes this a bit messy
|
||||
bellaFrontSideDart: 'bellaBack',
|
||||
backPoints: 'bellaBack',
|
||||
backInside: 'backPoints',
|
||||
backOutside: 'backPoints',
|
||||
frontPoints: 'bellaBack',
|
||||
frontInside: 'frontPoints',
|
||||
frontOutside: ['frontPoints','frontInside'],
|
||||
},
|
||||
parts: [
|
||||
'backPoints',
|
||||
'backInside',
|
||||
'backOutside',
|
||||
'frontPoints',
|
||||
'frontInside',
|
||||
'frontOutside',
|
||||
],
|
||||
options: {
|
||||
// Constants
|
||||
acrossBackFactor: 0.925,
|
||||
shoulderSlopeBack: 1.23,
|
||||
neckWidthBack: 0.197,
|
||||
neckWidthFront: 0.17,
|
||||
shoulderToShoulderCorrection: 0.995,
|
||||
backDartLocation: 0.145,
|
||||
backCenterWaistReduction: 0.35,
|
||||
collarFactor: 0.19,
|
||||
|
||||
// Percentages
|
||||
backNeckCutout: { pct: 6, min: 3, max: 9 },
|
||||
waistEase: { pct: 5, min: 1, max: 20 },
|
||||
chestEase: { pct: 11, min: 5, max: 20 },
|
||||
bustSpanEase: { pct: 0, min: -5, max: 20 },
|
||||
shoulderToShoulderEase: { pct: -0.5, min: -1, max: 5 },
|
||||
backDartHeight: { pct: 46, min: 38, max: 54 },
|
||||
armholeDepth: { pct: 44, min: 38, max: 46 },
|
||||
backHemSlope: { deg: 2.5, min: 0, max: 5 },
|
||||
backArmholeSlant: { deg: 5, min: 1, max: 9 },
|
||||
backArmholeCurvature: { pct: 63, min: 50, max: 85 },
|
||||
frontArmholeCurvature: { pct: 63, min: 50, max: 85 },
|
||||
fullChestEaseReduction: { pct: 4, min: 0, max: 8 },
|
||||
frontShoulderWidth: { pct: 95, max: 98, min: 92 },
|
||||
frontArmholePitchDepth: { pct: 29, max: 31, min: 27 },
|
||||
backArmholePitchDepth: { pct: 35, max: 40, min: 30 },
|
||||
highBustWidth: { pct: 86, max: 92, min: 80 },
|
||||
bustDartLength: { pct: 90, min: 75, max: 100 },
|
||||
waistDartLength: { pct: 90, min: 75, max: 95 },
|
||||
bustDartCurve: { pct: 100, min: 0, max: 100 },
|
||||
shoulderDartPosition: { pct: 50, min: 10, max: 90, hide: function(settings) {(settings.options.dartPosition != 'shoulder')} },
|
||||
upperDartLength: { pct: 90, min: 80, max: 95 },
|
||||
armholeDartPosition: { pct: 50, min: 10, max: 90, hide: function(settings) {(settings.options.dartPosition != 'shoulder')} },
|
||||
dartPosition: { dflt: 'shoulder', list: ['shoulder','armhole'] },
|
||||
}
|
||||
|
||||
}
|
65
designs/noble/package.json
Normal file
65
designs/noble/package.json
Normal file
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"name": "@freesewing/noble",
|
||||
"version": "2.21.0-rc.0",
|
||||
"description": "FIXME: A FreeSewing pattern that needs a description",
|
||||
"author": "Joost De Cock <joost@joost.at> (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"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
"scripts": {
|
||||
"build": "node build.js",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.js",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
"test": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register",
|
||||
"vbuild": "VERBOSE=1 node build.js",
|
||||
"lab": "cd ../../sites/lab && yarn start",
|
||||
"tips": "node ../../scripts/help.mjs",
|
||||
"prettier": "npx prettier --write 'src/*.js' 'config/*.js'",
|
||||
"testci": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step5": "node build.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "^2.21.0-rc.0",
|
||||
"@freesewing/plugin-bundle": "^2.21.0-rc.0",
|
||||
"@freesewing/config-helpers": "^2.21.0-rc.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "^9.1.1",
|
||||
"chai": "^4.2.0"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
"README.md",
|
||||
"package.json"
|
||||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=6"
|
||||
}
|
||||
}
|
157
designs/noble/src/backInside.js
Normal file
157
designs/noble/src/backInside.js
Normal file
|
@ -0,0 +1,157 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
utils,
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
Snippet,
|
||||
snippets,
|
||||
options,
|
||||
measurements,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
} = part.shorthand()
|
||||
|
||||
|
||||
if( options.dartPosition != 'shoulder' ) {
|
||||
paths.insideSeam = paths.seam.clone().setRender(true)
|
||||
} else {
|
||||
// Hide Bella paths
|
||||
for (let key of Object.keys(paths)) paths[key].render = false
|
||||
for (let i in snippets) delete snippets[i]
|
||||
|
||||
paths.insideSeam = new Path()
|
||||
.move(points.cbNeck)
|
||||
.curve_(points.cbNeckCp2, points.waistCenter)
|
||||
.line(points.dartBottomLeft)
|
||||
.curve(points.dartLeftCp, points.shoulderDartCpDown, points.dartTip)
|
||||
.curve(points.shoulderDartCpUp, points.shoulderDart, points.shoulderDart)
|
||||
.line(points.hps)
|
||||
._curve(points.cbNeckCp1, points.cbNeck)
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
snippets.dartTip = new Snippet('notch', points.dartTip)
|
||||
|
||||
macro('title', {
|
||||
at: points.titleAnchor,
|
||||
nr: 3,
|
||||
title: ( options.dartPosition != 'shoulder' ? 'Back' : 'Inside Back' )
|
||||
})
|
||||
macro("grainline", {
|
||||
from: points.grainlineFrom,
|
||||
to: points.grainlineTo,
|
||||
})
|
||||
|
||||
if (sa) paths.sa = paths.insideSeam.offset(sa).attr('class', 'fabric sa')
|
||||
|
||||
if( paperless ) {
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
points.shoulderPoint = points.shoulderDart.clone()
|
||||
} else {
|
||||
points.shoulderPoint = points.shoulder.clone()
|
||||
}
|
||||
macro('hd', {
|
||||
from: points.waistCenter,
|
||||
to: points.shoulderPoint,
|
||||
y: points.waistCenter.y +sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.waistCenter,
|
||||
to: points.dartTip,
|
||||
y: points.waistCenter.y +sa + 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.waistCenter,
|
||||
to: points.dartBottomLeft,
|
||||
y: points.waistCenter.y +sa + 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cbNeck,
|
||||
to: points.dartBottomLeft,
|
||||
y: points.waistCenter.y +sa + 45,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cbNeck,
|
||||
to: points.hps,
|
||||
y: points.hps.y -sa - 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.hps,
|
||||
to: points.shoulderPoint,
|
||||
y: points.hps.y -sa - 15,
|
||||
})
|
||||
if( options.dartPosition != 'shoulder' ) {
|
||||
macro('hd', {
|
||||
from: points.dartTip,
|
||||
to: points.waistSide,
|
||||
y: points.waistCenter.y +sa + 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.dartBottomRight,
|
||||
to: points.waistSide,
|
||||
y: points.waistCenter.y +sa + 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.dartBottomRight,
|
||||
to: points.armhole,
|
||||
y: points.waistCenter.y +sa + 45,
|
||||
})
|
||||
}
|
||||
|
||||
let extraOffset = 0
|
||||
if( options.dartPosition != 'shoulder' ) {
|
||||
macro('vd', {
|
||||
from: points.shoulderPoint,
|
||||
to: points.waistSide,
|
||||
x: points.shoulderPoint.x +sa + 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.armhole,
|
||||
to: points.waistSide,
|
||||
x: points.shoulderPoint.x +sa + 15,
|
||||
})
|
||||
extraOffset = 10
|
||||
}
|
||||
|
||||
macro('vd', {
|
||||
from: points.shoulderPoint,
|
||||
to: points.dartTip,
|
||||
x: points.shoulderPoint.x +sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulderPoint,
|
||||
to: points.dartBottomLeft,
|
||||
x: points.shoulderPoint.x +sa + 25 +extraOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulderPoint,
|
||||
to: points.waistCenter,
|
||||
x: points.shoulderPoint.x +sa + 35 +extraOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.hps,
|
||||
to: points.waistCenter,
|
||||
x: points.shoulderPoint.x +sa + 45 +extraOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.waistCenter,
|
||||
to: points.cbNeck,
|
||||
x: points.cbNeck.x -sa - 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.waistCenter,
|
||||
to: points.hps,
|
||||
x: points.cbNeck.x -sa - 25,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
125
designs/noble/src/backOutside.js
Normal file
125
designs/noble/src/backOutside.js
Normal file
|
@ -0,0 +1,125 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
utils,
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
Snippet,
|
||||
snippets,
|
||||
options,
|
||||
measurements,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
} = part.shorthand()
|
||||
|
||||
if( options.dartPosition != 'shoulder' ) {
|
||||
return part
|
||||
}
|
||||
|
||||
paths.dart = new Path()
|
||||
.move(points.shoulderDart)
|
||||
.curve(points.shoulderDart, points.shoulderDartCpUp, points.dartTip)
|
||||
.curve(points.shoulderDartCpDown, points.dartRightCp, points.dartBottomRight)
|
||||
.setRender(false)
|
||||
|
||||
paths.outsideSeam = new Path()
|
||||
.move(points.dartBottomRight)
|
||||
.line(points.waistSide)
|
||||
.curve_(points.waistSideCp2, points.armhole)
|
||||
.curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch)
|
||||
.curve_(points.armholePitchCp2, points.shoulder)
|
||||
.line(points.shoulderDart)
|
||||
.join(paths.dart)
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
if (complete) {
|
||||
snippets.dartTip = new Snippet('notch', points.dartTip)
|
||||
|
||||
points.titleAnchor = points.dartBottomRight.shiftFractionTowards( points.waistSide, .1 ).shiftFractionTowards( points.shoulder, .3 )
|
||||
macro('title', {
|
||||
at: points.titleAnchor,
|
||||
nr: 4,
|
||||
title: 'Outside Back',
|
||||
})
|
||||
points.grainlineFrom.x = points.shoulderDart.x
|
||||
points.grainlineTo.x = points.shoulderDart.x
|
||||
|
||||
macro("grainline", {
|
||||
from: points.grainlineFrom,
|
||||
to: points.grainlineTo,
|
||||
})
|
||||
|
||||
if (sa) paths.sa = paths.outsideSeam.offset(sa).attr('class', 'fabric sa')
|
||||
if( paperless ) {
|
||||
let pLeft = paths.dart.edge('left')
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.waistSide,
|
||||
y: points.waistCenter.y +sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.dartBottomRight,
|
||||
to: points.armhole,
|
||||
y: points.waistCenter.y +sa + 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.dartTip,
|
||||
to: points.waistSide,
|
||||
y: points.waistCenter.y +sa + 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.dartBottomRight,
|
||||
to: points.waistSide,
|
||||
y: points.waistCenter.y +sa + 45,
|
||||
})
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.shoulder,
|
||||
y: points.shoulderDart.y -sa - 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.shoulderDart,
|
||||
to: points.shoulder,
|
||||
y: points.shoulderDart.y -sa - 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.shoulderDart,
|
||||
to: points.armhole,
|
||||
y: points.shoulderDart.y -sa - 35,
|
||||
})
|
||||
|
||||
macro('vd', {
|
||||
from: points.shoulder,
|
||||
to: points.dartTip,
|
||||
x: points.armhole.x +sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.armhole,
|
||||
to: points.waistSide,
|
||||
x: points.armhole.x +sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulder,
|
||||
to: points.waistSide,
|
||||
x: points.armhole.x +sa + 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulder,
|
||||
to: points.dartBottomRight,
|
||||
x: points.armhole.x +sa + 35,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulderDart,
|
||||
to: points.dartBottomRight,
|
||||
x: points.armhole.x +sa + 45,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
74
designs/noble/src/backPoints.js
Normal file
74
designs/noble/src/backPoints.js
Normal file
|
@ -0,0 +1,74 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
options,
|
||||
snippets,
|
||||
} = part.shorthand()
|
||||
|
||||
// Hide Bella paths
|
||||
for (let key of Object.keys(paths)) paths[key].render = false
|
||||
for (let i in snippets) delete snippets[i]
|
||||
|
||||
delete points.__titleNr
|
||||
delete points.__titleName
|
||||
delete points.__titlePattern
|
||||
delete points.scaleboxAnchor
|
||||
delete points.__scaleboxImperialBottomLeft
|
||||
delete points.__scaleboxMetricBottomLeft
|
||||
delete points.__scaleboxImperialTopLeft
|
||||
delete points.__scaleboxMetricTopLeft
|
||||
delete points.__scaleboxImperialTopRight
|
||||
delete points.__scaleboxMetricTopRight
|
||||
delete points.__scaleboxImperialBottomRight
|
||||
delete points.__scaleboxMetricBottomRight
|
||||
delete points.__scaleboxLead
|
||||
delete points.__scaleboxTitle
|
||||
delete points.__scaleboxText
|
||||
delete points.__scaleboxLink
|
||||
delete points.__scaleboxImperial
|
||||
delete points.__scaleboxMetric
|
||||
delete points.bustDartLeft
|
||||
delete points.bustDartLeftCp
|
||||
|
||||
points.shoulderDart = points.hps.shiftFractionTowards( points.shoulder, options.shoulderDartPosition )
|
||||
|
||||
let aUp = points.dartTip.angle( points.shoulderDart )
|
||||
let aDown = points.dartBottomRight.angle( points.dartTip )
|
||||
let aDiff = Math.abs( aUp - aDown )
|
||||
|
||||
// let dartCpAdjustment = Math.abs( options.shoulderDartPosition -.5) +.05
|
||||
let dartCpAdjustment = aDiff /50
|
||||
|
||||
points.shoulderDartCpUp = points.shoulderDart.shiftFractionTowards( points.dartTip, 1 - dartCpAdjustment)
|
||||
points.shoulderDartCpDown = points.shoulderDart.shiftFractionTowards( points.dartTip, 1 +dartCpAdjustment )
|
||||
|
||||
let iLength = (new Path()
|
||||
.move(points.dartBottomLeft)
|
||||
.curve(points.dartLeftCp, points.shoulderDartCpDown, points.dartTip)
|
||||
.curve(points.shoulderDartCpUp, points.shoulderDart, points.shoulderDart)).length();
|
||||
|
||||
let iteration = 0
|
||||
let diff = 0
|
||||
let angle = 0
|
||||
do {
|
||||
angle = diff*( oLength > iLength ? -.1 : .1 )
|
||||
|
||||
points.dartBottomRight = points.dartBottomRight.rotate( angle, points.waistSide )
|
||||
|
||||
let oLength = (new Path()
|
||||
.move(points.shoulderDart)
|
||||
.curve(points.shoulderDart, points.shoulderDartCpUp, points.dartTip)
|
||||
.curve(points.shoulderDartCpDown, points.dartRightCp, points.dartBottomRight)).length();
|
||||
|
||||
diff = oLength -iLength
|
||||
iteration ++
|
||||
|
||||
} while( diff < -.5 || diff > .5 && iteration < 100 )
|
||||
if( iteration >= 100 ) {
|
||||
raise.error('Something is not quite right here!')
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
178
designs/noble/src/frontInside.js
Normal file
178
designs/noble/src/frontInside.js
Normal file
|
@ -0,0 +1,178 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
utils,
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
Snippet,
|
||||
snippets,
|
||||
options,
|
||||
measurements,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
} = part.shorthand()
|
||||
|
||||
delete points.waistDartHem
|
||||
delete points.waistDartRight
|
||||
delete points.waistDartRightCp
|
||||
delete points.waistDartCpBottom
|
||||
delete points.bustDartBottom
|
||||
delete points.bustDartCpBottom
|
||||
delete points.bustDartTip
|
||||
delete points.bustDartTop
|
||||
delete points.shoulderDartTipCpDownOutside
|
||||
delete points.ex
|
||||
delete points.bustB
|
||||
delete points.shoulder
|
||||
delete points.shoulderDartShoulder
|
||||
delete points.shoulderDartOutside
|
||||
delete points.pitchMax
|
||||
delete points.armholeCpTarget
|
||||
delete points.armholePitch
|
||||
delete points.armholePitchCp1
|
||||
delete points.armholePitchCp2
|
||||
delete points.armhole
|
||||
delete points.armholeCp2
|
||||
delete points.bustDartCpTop
|
||||
delete points.bustSide
|
||||
delete points.bustDartMiddle
|
||||
delete points.bustDartEdge
|
||||
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
paths.insideSeam = new Path()
|
||||
.move(points.cfHem)
|
||||
.line(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip)
|
||||
.line(points.shoulderDartInside)
|
||||
.line(points.hps)
|
||||
.curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck)
|
||||
|
||||
paths.seam = paths.insideSeam.join( new Path().move(points.cfNeck).line(points.cfHem))
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
store.set( 'shoulderDartTipNotch', (new Path()
|
||||
.move(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip)).length())
|
||||
|
||||
} else {
|
||||
paths.insideSeam = new Path()
|
||||
.move(points.cfHem)
|
||||
.line(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.armholeDartTipCpDownInside, points.armholeDartTipInside)
|
||||
.curve(points.waistCircleInsideCp1, points.armholeCircleInsideCp1, points.armholeDartInside)
|
||||
.join(paths.armholeInside)
|
||||
.line(points.hps)
|
||||
.curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck)
|
||||
|
||||
paths.seam = paths.insideSeam.join( new Path().move(points.cfNeck).line(points.cfHem))
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
store.set( 'shoulderDartTipNotch', (new Path()
|
||||
.move(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.armholeDartTipCpDownInside, points.armholeDartTipInside)).length())
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
snippets.shoulderDartTip = new Snippet('notch', points.shoulderDartTip)
|
||||
} else {
|
||||
snippets.shoulderDartTip = new Snippet('notch', points.armholeDartTipInside)
|
||||
}
|
||||
points.titleAnchor = new Point(points.hpsCp2.x *.75, points.cfNeckCp1.y *1.5)
|
||||
macro('title', {
|
||||
at: points.titleAnchor,
|
||||
nr: 1,
|
||||
title: 'Inside Front',
|
||||
})
|
||||
points.scaleboxAnchor = points.titleAnchor.shift(-90, 90).shift(0,10)
|
||||
macro('scalebox', { at: points.scaleboxAnchor, rotate: 270 })
|
||||
|
||||
macro('cutonfold', {
|
||||
from: points.cfNeck,
|
||||
to: points.cfHem,
|
||||
grainline: true,
|
||||
})
|
||||
|
||||
if (sa) {
|
||||
paths.sa = paths.insideSeam.offset(sa).line(points.cfNeck).attr('class', 'fabric sa')
|
||||
paths.sa = paths.sa.move(points.cfHem).line(paths.sa.start())
|
||||
}
|
||||
|
||||
if (paperless) {
|
||||
let extraOffset = 0
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
macro('hd', {
|
||||
from: points.cfNeck,
|
||||
to: points.shoulderDartInside,
|
||||
y: points.hps.y - 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.shoulderDartInside,
|
||||
x: 0 -30,
|
||||
})
|
||||
} else {
|
||||
extraOffset = 10
|
||||
macro('hd', {
|
||||
from: points.cfNeck,
|
||||
to: points.shoulderCp1,
|
||||
y: points.hps.y - 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cfNeck,
|
||||
to: points.armholeDartInsideCp2,
|
||||
y: points.hps.y - 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.armholeDartInsideCp2,
|
||||
x: 0 -20,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.shoulderCp1,
|
||||
x: 0 -40,
|
||||
})
|
||||
}
|
||||
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.armholeDartTipInside,
|
||||
x: 0 - 10,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.cfNeck,
|
||||
x: 0 - 20 -extraOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.cfHem,
|
||||
to: points.hps,
|
||||
x: 0 - 40 -extraOffset,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cfBust,
|
||||
to: points.armholeDartTipInside,
|
||||
y: points.cfHem.y + sa + 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cfHem,
|
||||
to: points.waistDartLeft,
|
||||
y: points.cfHem.y + sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.cfNeck,
|
||||
to: points.hps,
|
||||
y: points.hps.y - sa - 15,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
211
designs/noble/src/frontOutside.js
Normal file
211
designs/noble/src/frontOutside.js
Normal file
|
@ -0,0 +1,211 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
utils,
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
Snippet,
|
||||
snippets,
|
||||
options,
|
||||
measurements,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
} = part.shorthand()
|
||||
|
||||
delete points.bustDartTop
|
||||
delete points.bustSide
|
||||
delete points.bustDartMiddle
|
||||
delete points.bustDartBottom
|
||||
delete points.bustDartCpBottom
|
||||
delete points.bustB
|
||||
delete points.bustDartEdge
|
||||
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
paths.princessSeam = new Path()
|
||||
.move(points.shoulderDartOutside)
|
||||
.curve(points.shoulderDartTipCpDownOutside, points.waistUpDartRightCpUp, points.waistUpDartRight)
|
||||
.curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight)
|
||||
.setRender(false)
|
||||
paths.armhole = new Path()
|
||||
.move(points.armhole)
|
||||
.curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch)
|
||||
.curve_(points.armholePitchCp2, points.shoulder)
|
||||
.setRender(false)
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.waistDartRight)
|
||||
.line(points.sideHem)
|
||||
.line(points.armhole)
|
||||
.join(paths.armhole)
|
||||
.line(points.shoulderDartOutside)
|
||||
.join(paths.princessSeam)
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
} else {
|
||||
paths.princessSeam = new Path()
|
||||
.move(points.armholeDartOutside)
|
||||
.curve(points.armholeCircleOutsideCp1, points.waistCircleOutsideCp1, points.waistUpDartRight)
|
||||
.curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight)
|
||||
.setRender(false)
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.waistDartRight)
|
||||
.line(points.sideHem)
|
||||
.line(points.armhole)
|
||||
.join(paths.armholeOutside.reverse())
|
||||
.join(paths.princessSeam)
|
||||
.close()
|
||||
.attr('class', 'fabric')
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
points.snippet = paths.princessSeam.shiftAlong(paths.princessSeam.length() -store.get('shoulderDartTipNotch'))
|
||||
snippets.shoulderDartTip = new Snippet('notch', points.snippet)
|
||||
|
||||
points.titleAnchor = points.waistDartRight
|
||||
.shiftFractionTowards(points.armhole, 0.3)
|
||||
.shiftFractionTowards(points.shoulderDartOutside, 0.2)
|
||||
macro('title', {
|
||||
at: points.titleAnchor,
|
||||
nr: 2,
|
||||
title: 'Outside Front',
|
||||
})
|
||||
points.grainTop = points.armhole.shift(225, 20)
|
||||
points.grainBottom = points.sideHemInitial.shift(135, 20)
|
||||
|
||||
macro('grainline', {
|
||||
from: points.grainBottom,
|
||||
to: points.grainTop,
|
||||
})
|
||||
|
||||
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||
|
||||
if(paperless) {
|
||||
let pLeft = paths.princessSeam.edge('left')
|
||||
macro('hd', {
|
||||
from: points.waistDartRight,
|
||||
to: points.armholeOutsidePitchCp1,
|
||||
y: points.sideHemInitial.y +sa + 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.waistDartRight,
|
||||
to: points.sideHemInitial,
|
||||
y: points.sideHemInitial.y +sa + 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.sideHemInitial,
|
||||
y: points.sideHemInitial.y +sa + 15,
|
||||
})
|
||||
|
||||
macro('vd', {
|
||||
from: points.armholeOutsidePitchCp1,
|
||||
to: points.sideHemInitial,
|
||||
x: points.sideHemInitial.x +sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.waistDartRight,
|
||||
to: pLeft,
|
||||
x: pLeft.x -sa - 15,
|
||||
})
|
||||
|
||||
if( options.dartPosition == 'shoulder' ) {
|
||||
macro('hd', {
|
||||
from: points.shoulderDartOutside,
|
||||
to: points.shoulder,
|
||||
y: points.shoulderDartOutside.y -sa - 15,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.snippet,
|
||||
to: points.shoulder,
|
||||
y: points.shoulderDartOutside.y -sa - 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.shoulder,
|
||||
y: points.shoulderDartOutside.y -sa - 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: points.waistDartRight,
|
||||
to: points.shoulder,
|
||||
y: points.sideHemInitial.y +sa + 45,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulder,
|
||||
to: points.sideHemInitial,
|
||||
x: points.shoulder.x //+sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.shoulderDartOutside,
|
||||
to: points.sideHemInitial,
|
||||
x: points.shoulder.x +sa + 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.waistDartRight,
|
||||
to: points.shoulderDartOutside,
|
||||
x: pLeft.x -sa - 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.snippet,
|
||||
to: points.shoulderDartOutside,
|
||||
x: pLeft.x -sa - 15,
|
||||
})
|
||||
|
||||
let pArmholeLeft = paths.armhole.edge('left')
|
||||
macro('hd', {
|
||||
from: points.waistDartRight,
|
||||
to: pArmholeLeft,
|
||||
y: points.sideHemInitial.y +sa +5,
|
||||
})
|
||||
macro('vd', {
|
||||
from: pArmholeLeft,
|
||||
to: points.sideHemInitial,
|
||||
x: points.sideHemInitial.x +sa + 25,
|
||||
})
|
||||
} else {
|
||||
let pTop = paths.princessSeam.edge('top')
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.armholeOutsidePitchCp1,
|
||||
y: pTop.y -sa - 35,
|
||||
})
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: points.armholeDartOutside,
|
||||
y: pTop.y -sa - 25,
|
||||
})
|
||||
macro('hd', {
|
||||
from: pLeft,
|
||||
to: pTop,
|
||||
y: pTop.y -sa - 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.waistDartRight,
|
||||
to: pTop,
|
||||
x: pLeft.x -sa - 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.snippet,
|
||||
to: pTop,
|
||||
x: pLeft.x -sa - 15,
|
||||
})
|
||||
macro('vd', {
|
||||
from: points.armholeDartOutside,
|
||||
to: points.sideHemInitial,
|
||||
x: points.sideHemInitial.x +sa + 25,
|
||||
})
|
||||
macro('vd', {
|
||||
from: pTop,
|
||||
to: points.sideHemInitial,
|
||||
x: points.sideHemInitial.x +sa + 35,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
335
designs/noble/src/frontPoints.js
Normal file
335
designs/noble/src/frontPoints.js
Normal file
|
@ -0,0 +1,335 @@
|
|||
export default function (part) {
|
||||
let {
|
||||
utils,
|
||||
store,
|
||||
sa,
|
||||
Point,
|
||||
points,
|
||||
Path,
|
||||
paths,
|
||||
Snippet,
|
||||
snippets,
|
||||
options,
|
||||
measurements,
|
||||
complete,
|
||||
paperless,
|
||||
macro,
|
||||
} = part.shorthand()
|
||||
|
||||
const bCircle = 0.552284749831
|
||||
|
||||
// Hide Bella paths
|
||||
for (let key of Object.keys(paths)) paths[key].render = false
|
||||
for (let i in snippets) delete snippets[i]
|
||||
|
||||
//removing macros not required from Bella
|
||||
delete points.titleAnchor
|
||||
delete points.__titleNr
|
||||
delete points.__titleName
|
||||
delete points.__titlePattern
|
||||
delete points.scaleboxAnchor
|
||||
delete points.__scaleboxImperialBottomLeft
|
||||
delete points.__scaleboxMetricBottomLeft
|
||||
delete points.__scaleboxImperialTopLeft
|
||||
delete points.__scaleboxMetricTopLeft
|
||||
delete points.__scaleboxImperialTopRight
|
||||
delete points.__scaleboxMetricTopRight
|
||||
delete points.__scaleboxImperialBottomRight
|
||||
delete points.__scaleboxMetricBottomRight
|
||||
delete points.__scaleboxLead
|
||||
delete points.__scaleboxTitle
|
||||
delete points.__scaleboxText
|
||||
delete points.__scaleboxLink
|
||||
delete points.__scaleboxImperial
|
||||
delete points.__scaleboxMetric
|
||||
|
||||
points.shoulderDartInside = points.hps.shiftFractionTowards(
|
||||
points.shoulder,
|
||||
(options.dartPosition == 'shoulder' ? options.shoulderDartPosition : .5)
|
||||
)
|
||||
points.orgShoulder = points.shoulder.clone()
|
||||
points.orgArmhole = points.armhole.clone()
|
||||
points.orgArmholeCp2 = points.armholeCp2.clone()
|
||||
points.orgArmholePitch = points.armholePitch.clone()
|
||||
points.orgArmholePitchCp1 = points.armholePitchCp1.clone()
|
||||
points.orgArmholePitchCp2 = points.armholePitchCp2.clone()
|
||||
let armholePath = new Path()
|
||||
.move(points.shoulder)
|
||||
._curve(points.armholePitchCp2, points.armholePitch)
|
||||
.curve(points.armholePitchCp1, points.armholeCp2, points.armhole)
|
||||
|
||||
points.armholeDartInside = armholePath.shiftFractionAlong(options.armholeDartPosition)
|
||||
points.armholeDartOutside = points.armholeDartInside.clone()
|
||||
|
||||
// paths.armholeTemp = armholePath.clone().setRender(true).attr('class', 'lining')
|
||||
let armholePaths = armholePath.split(points.armholeDartInside)
|
||||
|
||||
let armholePathInside = armholePaths[0].clone().setRender(false)
|
||||
let armholePathOutside = armholePaths[1].clone().setRender(false)
|
||||
let armholeDartAngle =
|
||||
armholePathInside.reverse().shiftAlong(1).angle(armholePathOutside.shiftAlong(1)) - 90
|
||||
|
||||
points.armholeDartArmhole = points.armholeDartInside.shiftFractionTowards(
|
||||
points.armholeDartOutside,
|
||||
0.5
|
||||
)
|
||||
points.armholeDartTip = points.armholeDartArmhole.shiftFractionTowards(
|
||||
points.bust,
|
||||
options.upperDartLength
|
||||
)
|
||||
|
||||
points.armholeCircleInsideCp1 = points.armholeDartInside.shift(
|
||||
armholeDartAngle,
|
||||
bCircle * points.armholeDartInside.dist(points.armholeDartTip)
|
||||
)
|
||||
points.armholeCircleOutsideCp1 = points.armholeCircleInsideCp1.clone()
|
||||
|
||||
points.shoulderCp1 = armholePathInside.ops[1].cp1.clone()
|
||||
points.armholeInsidePitch = armholePathInside.ops[1].to.clone()
|
||||
points.armholeInsidePitchCp2 = armholePathInside.ops[1].cp2.clone()
|
||||
if (armholePathInside.ops.length == 2) {
|
||||
points.armholeInsidePitchCp1 = points.armholeDartInside.clone()
|
||||
points.armholeDartInsideCp2 = points.armholeDartInside.clone()
|
||||
} else {
|
||||
points.armholeInsidePitchCp1 = armholePathInside.ops[2].cp1.clone()
|
||||
points.armholeDartInsideCp2 = armholePathInside.ops[2].cp2.clone()
|
||||
}
|
||||
points.armholeDartOutsideCp1 = armholePathOutside.ops[1].cp1.clone()
|
||||
points.armholeOutsidePitch = armholePathOutside.ops[1].to.clone()
|
||||
points.armholeOutsidePitchCp2 = armholePathOutside.ops[1].cp2.clone()
|
||||
if (armholePathOutside.ops.length == 2) {
|
||||
points.armholeOutsidePitchCp1 = points.armhole.clone()
|
||||
points.armholeCp2 = points.armhole.clone()
|
||||
} else {
|
||||
points.armholeOutsidePitchCp1 = armholePathOutside.ops[2].cp1.clone()
|
||||
points.armholeCp2 = armholePathOutside.ops[2].cp2.clone()
|
||||
}
|
||||
|
||||
if( points.armholeDartInside.sitsRoughlyOn( points.armholeInsidePitch ) ) {
|
||||
paths.armholeInside = new Path()
|
||||
.move(points.armholeDartInside)
|
||||
.curve(points.armholeInsidePitchCp2, points.shoulderCp1, points.shoulder)
|
||||
.setRender(false)
|
||||
} else {
|
||||
paths.armholeInside = new Path()
|
||||
.move(points.armholeDartInside)
|
||||
.curve(points.armholeDartInsideCp2, points.armholeInsidePitchCp1, points.armholeInsidePitch)
|
||||
.curve(points.armholeInsidePitchCp2, points.shoulderCp1, points.shoulder)
|
||||
.setRender(false)
|
||||
}
|
||||
|
||||
let rotateAngle =
|
||||
points.shoulderDartInside.angle(points.bustA) - points.bustDartTop.angle(points.bustA)
|
||||
if (rotateAngle < 0) {
|
||||
rotateAngle += 360
|
||||
}
|
||||
if (rotateAngle > 360) {
|
||||
rotateAngle -= 360
|
||||
}
|
||||
|
||||
points.shoulderDartCpTop = points.bustDartCpTop.rotate(rotateAngle, points.bustA)
|
||||
points.shoulderDartCpBottom = points.bustDartCpBottom.rotate(rotateAngle, points.bustA)
|
||||
|
||||
rotateAngle =
|
||||
points.armholeDartInside.angle(points.bustA) - points.bustDartTop.angle(points.bustA)
|
||||
if (rotateAngle < 0) {
|
||||
rotateAngle += 360
|
||||
}
|
||||
if (rotateAngle > 360) {
|
||||
rotateAngle -= 360
|
||||
}
|
||||
|
||||
points.armholeDartCpTop = points.bustDartCpTop.rotate(rotateAngle, points.bustA)
|
||||
points.armholeDartCpBottom = points.bustDartCpBottom.rotate(rotateAngle, points.bustA)
|
||||
|
||||
let spreadAngle =
|
||||
/*360 -*/ points.bustA.angle(points.bustDartBottom) - points.bustA.angle(points.bustDartTop)
|
||||
|
||||
points.shoulderDartOutside = points.shoulderDartInside.rotate(spreadAngle, points.bustA)
|
||||
points.shoulderDartShoulder = points.shoulderDartInside.shiftFractionTowards(
|
||||
points.shoulderDartOutside,
|
||||
0.5
|
||||
)
|
||||
|
||||
points.shoulderDartTip = points.shoulderDartShoulder.shiftFractionTowards(
|
||||
points.bust,
|
||||
options.upperDartLength
|
||||
)
|
||||
let dartRatio =
|
||||
new Path().move(points.waistDartHem).line(points.waistDartTip).length() /
|
||||
new Path().move(points.shoulderDartShoulder).line(points.shoulderDartTip).length()
|
||||
|
||||
points.shoulder = points.shoulder.rotate(spreadAngle, points.bustA)
|
||||
points.armhole = points.armhole.rotate(spreadAngle, points.bustA)
|
||||
points.armholeCp2 = points.armholeCp2.rotate(spreadAngle, points.bustA)
|
||||
points.armholePitch = points.armholePitch.rotate(spreadAngle, points.bustA)
|
||||
points.armholePitchCp1 = points.armholePitchCp1.rotate(spreadAngle, points.bustA)
|
||||
points.armholePitchCp2 = points.armholePitchCp2.rotate(spreadAngle, points.bustA)
|
||||
points.armholeCircleOutsideCp1 = points.armholeCircleOutsideCp1.rotate(spreadAngle, points.bustA)
|
||||
points.armholeDartOutside = points.armholeDartOutside.rotate(spreadAngle, points.bustA)
|
||||
points.armholeDartOutsideCp1 = points.armholeDartOutsideCp1.rotate(spreadAngle, points.bustA)
|
||||
points.armholeOutsidePitchCp2 = points.armholeOutsidePitchCp2.rotate(spreadAngle, points.bustA)
|
||||
points.armholeOutsidePitch = points.armholeOutsidePitch.rotate(spreadAngle, points.bustA)
|
||||
points.armholeOutsidePitchCp1 = points.armholeOutsidePitchCp1.rotate(spreadAngle, points.bustA)
|
||||
|
||||
if( points.armhole.sitsRoughlyOn( points.armholeOutsidePitch ) ) {
|
||||
paths.armholeOutside = new Path()
|
||||
.move(points.armholeDartOutside)
|
||||
.curve(points.armholeDartOutsideCp1, points.armholeOutsidePitchCp2, points.armhole)
|
||||
.setRender(false)
|
||||
} else {
|
||||
paths.armholeOutside = new Path()
|
||||
.move(points.armholeDartOutside)
|
||||
.curve(points.armholeDartOutsideCp1, points.armholeOutsidePitchCp2, points.armholeOutsidePitch)
|
||||
.curve(points.armholeOutsidePitchCp1, points.armholeCp2, points.armhole)
|
||||
.setRender(false)
|
||||
}
|
||||
|
||||
paths.armholeTempDart = new Path()
|
||||
.move(points.armholeDartOutside)
|
||||
._curve(points.armholeDartCpBottom, points.armholeDartTip)
|
||||
.curve_(points.armholeDartCpTop, points.armholeDartInside)
|
||||
.setRender(false)
|
||||
|
||||
points.shoulderDartTipCpDownOutside = points.shoulderDartOutside.shiftFractionTowards(
|
||||
points.bust,
|
||||
1 + (1 - options.upperDartLength) + (1 - options.waistDartLength) * dartRatio
|
||||
)
|
||||
// points.shoulderDartTipCpDownOutside = points.shoulderDartTipCpDownOutside.rotate( options.dartOutsideCP *10, points.shoulderDartOutside )
|
||||
|
||||
points.shoulderDartTipCpDownInside = points.shoulderDartInside.shiftFractionTowards(
|
||||
points.shoulderDartTip,
|
||||
1 + (1 - options.upperDartLength) + (1 - options.waistDartLength) * dartRatio
|
||||
)
|
||||
points.armholeDartTipCpDownInside = points.armholeDartTip.shiftFractionTowards(
|
||||
// points.waistDartHem,
|
||||
points.waistDartLeft,
|
||||
1 - options.upperDartLength + (1 - options.waistDartLength) * dartRatio
|
||||
)
|
||||
|
||||
points.bustAcp = points.waistDartRight.shiftOutwards(points.bustA, 10)
|
||||
|
||||
paths.shoulderInsideSeam = new Path()
|
||||
.move(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip)
|
||||
.line(points.shoulderDartInside)
|
||||
.setRender(false)
|
||||
|
||||
paths.armholeInsideSeam = new Path()
|
||||
.move(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.armholeDartTipCpDownInside, points.armholeDartTip)
|
||||
.setRender(false)
|
||||
|
||||
paths.sOutsideSeam = new Path()
|
||||
.move(points.waistDartRight)
|
||||
.curve(points.bustAcp, points.shoulderDartTipCpDownOutside, points.shoulderDartOutside)
|
||||
.setRender(false)
|
||||
|
||||
points.waistDartRightCp = points.bustAcp.clone()
|
||||
|
||||
let shoulderInsideSeam = new Path()
|
||||
.move(points.waistDartLeft)
|
||||
.curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip)
|
||||
.line(points.shoulderDartInside)
|
||||
.setRender(false)
|
||||
|
||||
points.waistUpDartLeft = paths.armholeInsideSeam.shiftAlong(
|
||||
points.waistDartLeft.dist(points.armholeDartTip) * 0.5
|
||||
)
|
||||
points.waistCircleInsideCp1 = points.waistUpDartLeft.shiftTowards(
|
||||
points.waistDartLeft,
|
||||
-0.5 * bCircle * points.armholeDartOutside.dist(points.armholeDartTip)
|
||||
)
|
||||
points.shoulderDartTipCpDownOutside = points.shoulderDartTipCpDownOutside
|
||||
.rotate(-2.5, points.shoulderDartOutside)
|
||||
.shiftFractionTowards(points.shoulderDartOutside, 0.2)
|
||||
|
||||
let lInside = shoulderInsideSeam.length()
|
||||
let iteration = 1
|
||||
let diff = 0
|
||||
do {
|
||||
points.waistDartRight = points.waistDartRight.rotate(diff * 0.1, points.sideHemInitial)
|
||||
|
||||
let outsideSeam = new Path()
|
||||
.move(points.waistDartRight)
|
||||
.curve(points.bustAcp, points.shoulderDartTipCpDownOutside, points.shoulderDartOutside)
|
||||
|
||||
points.waistUpDartRight = outsideSeam.shiftAlong(
|
||||
points.waistDartRight.dist(points.waistDartRightCp) * 0.5
|
||||
)
|
||||
points.waistUpDartRightCpDown = points.waistUpDartRight.shiftFractionTowards(
|
||||
points.waistDartRight,
|
||||
0.25
|
||||
)
|
||||
// points.waistUpDartRightCpUp = points.waistUpDartRight.shiftFractionTowards( points.waistDartRight, -.25 )
|
||||
points.waistUpDartRightCpUp = points.waistUpDartRight.shiftFractionTowards(
|
||||
points.waistDartRight,
|
||||
-0.6
|
||||
)
|
||||
points.waistCpUp = points.waistDartRight
|
||||
.shiftTowards(
|
||||
points.sideHemInitial,
|
||||
points.waistDartRight.dist(points.waistUpDartRight) * 0.25
|
||||
)
|
||||
.rotate(90, points.waistDartRight)
|
||||
points.waistCircleInsideCp1 = points.armholeDartTip.shiftTowards(
|
||||
points.armholeDartTipCpDownInside,
|
||||
-0.5 * bCircle * points.armholeDartInside.dist(points.armholeDartTip)
|
||||
)
|
||||
|
||||
outsideSeam = new Path()
|
||||
.move(points.waistDartRight)
|
||||
.curve(points.waistCpUp, points.waistUpDartRightCpDown, points.waistUpDartRight)
|
||||
.curve(
|
||||
points.waistUpDartRightCpUp,
|
||||
points.shoulderDartTipCpDownOutside,
|
||||
points.shoulderDartOutside
|
||||
)
|
||||
|
||||
diff = shoulderInsideSeam.length() - outsideSeam.length()
|
||||
iteration++
|
||||
} while ((diff > 1 || diff < -1) && iteration < 200)
|
||||
if (iteration >= 200) {
|
||||
raise.error('Something is not quite right here!')
|
||||
}
|
||||
points.waistDartRightCp = points.bustAcp.clone()
|
||||
points.armholeDartTipInside = points.armholeDartTip.clone()
|
||||
points.waistCircleOutsideCp1 = points.waistUpDartRight.shiftTowards(
|
||||
points.waistDartRight,
|
||||
-1 * bCircle * points.armholeDartOutside.dist(points.armholeDartTip)
|
||||
)
|
||||
|
||||
diff = 0
|
||||
iteration = 0
|
||||
do {
|
||||
let dist = points.armholeDartTipInside.dist(points.armholeDartTipCpDownInside)
|
||||
if( points.armholeDartTipInside.x > points.waistCircleOutsideCp1 ) {
|
||||
points.armholeDartTipInside.x = points.armholeDartTipInside.x -.5
|
||||
points.armholeDartTipInside.y = points.armholeDartTipInside.y +.5
|
||||
} else {
|
||||
points.waistCircleOutsideCp1 = points.waistCircleOutsideCp1.shiftTowards( points.waistUpDartRight, diff > 0 ? 1 :-1 )
|
||||
}
|
||||
points.armholeDartTipCpDownInside = points.waistCircleInsideCp1.shiftOutwards(points.armholeDartTipInside, dist)
|
||||
|
||||
paths.armholeTempCircleOutside = new Path()
|
||||
.move(points.armholeDartOutside)
|
||||
.curve(points.armholeCircleOutsideCp1, points.waistCircleOutsideCp1, points.waistUpDartRight)
|
||||
.curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight)
|
||||
.setRender(false)
|
||||
.attr('class', 'lining')
|
||||
paths.armholeTempCircleInside = new Path()
|
||||
.move(points.armholeDartInside)
|
||||
.curve(points.armholeCircleInsideCp1, points.waistCircleInsideCp1, points.armholeDartTipInside)
|
||||
.curve(points.armholeDartTipCpDownInside, points.waistDartLeftCp, points.waistDartLeft)
|
||||
.setRender(false)
|
||||
.attr('class', 'lining')
|
||||
|
||||
diff = paths.armholeTempCircleOutside.length() - paths.armholeTempCircleInside.length()
|
||||
iteration ++
|
||||
} while( (diff < -1 || diff > 1) && iteration < 200 )
|
||||
if (iteration >= 200) {
|
||||
raise.error('Something is not quite right here!')
|
||||
}
|
||||
|
||||
return part
|
||||
}
|
33
designs/noble/src/index.js
Normal file
33
designs/noble/src/index.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
import freesewing from '@freesewing/core'
|
||||
import Bella from '@freesewing/bella'
|
||||
import bundle from '@freesewing/plugin-bundle'
|
||||
import config from '../config'
|
||||
// Parts
|
||||
import draftBackPoints from './backPoints'
|
||||
import draftBackInside from './backInside'
|
||||
import draftBackOutside from './backOutside'
|
||||
import draftFrontPoints from './frontPoints'
|
||||
import draftFrontInside from './frontInside'
|
||||
import draftFrontOutside from './frontOutside'
|
||||
|
||||
// Create design
|
||||
const Noble = new freesewing.Design(config, bundle)
|
||||
|
||||
// Attach draft methods to prototype
|
||||
Noble.prototype.draftBellaBack = function (part) {
|
||||
return new Bella(this.settings).draftBack(part)
|
||||
}
|
||||
Noble.prototype.draftBellaFrontSideDart = function (part) {
|
||||
return new Bella(this.settings).draftFrontSideDart(part)
|
||||
}
|
||||
|
||||
Noble.prototype.draftBackPoints = draftBackPoints
|
||||
Noble.prototype.draftBackInside = draftBackInside
|
||||
Noble.prototype.draftBackOutside = draftBackOutside
|
||||
Noble.prototype.draftFrontPoints = draftFrontPoints
|
||||
Noble.prototype.draftFrontInside = draftFrontInside
|
||||
Noble.prototype.draftFrontOutside = draftFrontOutside
|
||||
|
||||
export { config, Noble }
|
||||
|
||||
export default Noble
|
36
markdown/org/docs/patterns/noble/cutting/en.md
Normal file
36
markdown/org/docs/patterns/noble/cutting/en.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
title: "Noble body block: Cutting Instructions"
|
||||
---
|
||||
|
||||
**Main fabric**
|
||||
|
||||
- Cut **1 Front Inside** part on the fold.
|
||||
- Cut **2 Front Outside** part.
|
||||
|
||||
### Shoulder dart
|
||||
|
||||
- Cut **2 Back Inside** part.
|
||||
- Cut **2 Back Outside** part.
|
||||
|
||||
### Armhole dart
|
||||
|
||||
- Cut **2 Back** part.
|
||||
|
||||
These cutting instructions are just for the default Noble block. Adjust your cutting accordingly if you have/are making changes to the block.
|
||||
|
||||
<Tip>
|
||||
|
||||
If you do not have someone to help pin you into Noble then you may find it easier to Cut 2 Front Inside parts with seam allowance and sew the backs up when constructing so you can pin in the front.
|
||||
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
|
||||
###### Noble is a block, not a pattern
|
||||
|
||||
A block is a basic shape on which other patterns are based.
|
||||
They are sometimes also called slopers, although purists will argue that a block and a sloper are different things.
|
||||
|
||||
Blocks are typically not made as-is but rather serve as a basis for other patterns.
|
||||
|
||||
</Note>
|
5
markdown/org/docs/patterns/noble/en.md
Normal file
5
markdown/org/docs/patterns/noble/en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: "Noble body block"
|
||||
---
|
||||
|
||||
<PatternDocs pattern='noble' />
|
18
markdown/org/docs/patterns/noble/fabric/en.md
Normal file
18
markdown/org/docs/patterns/noble/fabric/en.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
title: "Noble body block: Fabric Options"
|
||||
---
|
||||
|
||||
If you are making a default Noble to see how it fits we recommend a fabric such as **Calico (Muslin)** or a cheaper fabric that matches the drape and stretch of the fabric you intend to make a finalised version of Noble with.
|
||||
|
||||
You can use scraps of fabrics from your stash so don't worry about buying fabric specifically for Noble.
|
||||
|
||||
<Note>
|
||||
|
||||
###### Noble is a block, not a pattern
|
||||
|
||||
A block is a basic shape on which other patterns are based.
|
||||
They are sometimes also called slopers, although purists will argue that a block and a sloper are different things.
|
||||
|
||||
Blocks are typically not made as-is but rather serve as a basis for other patterns.
|
||||
|
||||
</Note>
|
80
markdown/org/docs/patterns/noble/instructions/en.md
Normal file
80
markdown/org/docs/patterns/noble/instructions/en.md
Normal file
|
@ -0,0 +1,80 @@
|
|||
---
|
||||
title: "Noble body block: Sewing Instructions"
|
||||
---
|
||||
|
||||
<Note>
|
||||
|
||||
###### Noble is a block, not a pattern
|
||||
|
||||
A block is a basic shape on which other patterns are based.
|
||||
They are sometimes also called slopers, although purists will argue that a block and a sloper are different things.
|
||||
|
||||
Blocks are typically not made as-is but rather serve as a basis for other patterns so the instructions below will not go in depth about closures or finishes and are for the default Noble block.
|
||||
|
||||
Noble is based on the Bella body block
|
||||
|
||||
</Note>
|
||||
|
||||
### Step 1: Mock-up Construction
|
||||
|
||||
- Sew the front inside to the front outside, good sides together.
|
||||
|
||||
### Shoulder seam
|
||||
|
||||
- Sew the back inside to the back outside, good sides together.
|
||||
|
||||
### Armhole seam
|
||||
|
||||
- Close the back darts.
|
||||
|
||||
### Both
|
||||
|
||||
- Sew the front to the backs at the shoulders, good sides together.
|
||||
- Sew the front to the backs at the side seams, good sides together.
|
||||
|
||||
<Tip>
|
||||
|
||||
If you are making adjustments you may wish to sew the seams wrong sides together to make them easier to adjust.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Step 2: Try it on
|
||||
|
||||
- Try it on and check the fit by pinning the back closed whilst wearing it.
|
||||
- Make any alterations and try it on again.
|
||||
- Repeat until you are happy.
|
||||
|
||||
<Tip>
|
||||
|
||||
If you do not have someone to help with pinning, you may find it easier to cut the front part in two with seam allowance rather than on a fold and sew the back seam up so that you can pin in the front when trying on.
|
||||
|
||||
Keep an eye out for anything you keep doing whilst wearing the mock-up, are you pulling it down? Constantly adjusting the shoulder? etc. Things like these are signs of where the pattern may need adjusting.
|
||||
|
||||
Sometimes you may need to wear the mock-up for an extended amount of time to get a better sense of the fit so don't be afraid to walk around in it for a couple of hours.
|
||||
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
|
||||
Remember to treat Noble as a basis rather than a final product, so adjust what you need to get the desired look.
|
||||
For instance:
|
||||
|
||||
- Change the neck line
|
||||
- Add/change the closure allowances
|
||||
- Alter the dart placements
|
||||
- Add a collar
|
||||
|
||||
It is all up to you! Experiment and go forth!
|
||||
|
||||
</Note>
|
||||
|
||||
### Step 3: Make a paper pattern
|
||||
|
||||
- Once happy with all your changes unpick your mockup and make a paper pattern based off of it.
|
||||
- Now you have a pattern you can use to produce a garment.
|
||||
|
||||
<Note>
|
||||
|
||||
It is best practice to make a paper pattern from the mock-up if you have made any alterations, as this will allow you to clean up any lines but also means you have a pattern that you can keep producing garments from.
|
||||
|
||||
</Note>
|
5
markdown/org/docs/patterns/noble/measurements/en.md
Normal file
5
markdown/org/docs/patterns/noble/measurements/en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: "Noble body block: Required Measurements"
|
||||
---
|
||||
|
||||
<PatternMeasurements pattern='noble' />
|
21
markdown/org/docs/patterns/noble/needs/en.md
Normal file
21
markdown/org/docs/patterns/noble/needs/en.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: "Noble body block: What You Need"
|
||||
---
|
||||
|
||||
To make Noble, you will need the following:
|
||||
|
||||
- Basic sewing supplies
|
||||
- About 0.5 metres (0.6 yards) of a suitable fabric ([see Noble Fabric options](/docs/patterns/noble/fabric/))
|
||||
|
||||
This list is for a default Noble Block. If you have/are making changes to the block you may need to get additional items such as closures, binding etc.
|
||||
|
||||
<Note>
|
||||
|
||||
###### Noble is a block, not a pattern
|
||||
|
||||
A block is a basic shape on which other patterns are based.
|
||||
They are sometimes also called slopers, although purists will argue that a block and a sloper are different things.
|
||||
|
||||
Blocks are typically not made as-is but rather serve as a basis for other patterns.
|
||||
|
||||
</Note>
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Armhole Dart Position"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **Armhole Dart Position** option allows you to move the position of the dart/princess seam.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Armhole depth"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **armhole depth** option controls the depth of the armhole.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Back armhole curvature"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back armhole curvature** option controls how much the armhole is scooped at out the bottom in the back.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Back armhole pitch depth"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back armhole pitch depth** option controls the vertical position of the armhole pitch point at the back.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Back armhole slant"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back armhole slant** slightly rotates the armhole around the back pitch point.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Back dart height"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back dart height** option controls the height (length if you will) of the back dart.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Back hem slope"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back hem slope** option controls the slope of the hem at the back.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: "Back neck cutout"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **back neck cutout** option controls how far the neck opening is scooped out at the back.
|
||||
|
||||
## Effect of this option on the pattern
|
||||
|
10
markdown/org/docs/patterns/noble/options/bustdartcurve/en.md
Normal file
10
markdown/org/docs/patterns/noble/options/bustdartcurve/en.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: "Bust dart curve"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **bust dart curve** option controls the curvature of the bust dart.
|
||||
From straight to slightly curved.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: "Bust dart length"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **bust dart length** option controls the length of the bust dart.
|
||||
The maximum length brings the dart all the way to the bust apex.
|
||||
|
||||
## Effect of this option on the pattern
|
11
markdown/org/docs/patterns/noble/options/bustspanease/en.md
Normal file
11
markdown/org/docs/patterns/noble/options/bustspanease/en.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: "Bust span ease"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **bust span ease** option controls how much ease is applied to the bust span.
|
||||
|
||||
<Note>This will not add ease to the garment, but merely influence the bust point</Note>
|
||||
|
||||
## Effect of this option on the pattern
|
9
markdown/org/docs/patterns/noble/options/chestease/en.md
Normal file
9
markdown/org/docs/patterns/noble/options/chestease/en.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Chest ease"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **chest ease** option controls the amount of ease at the fullest part of your chest.
|
||||
|
||||
## Effect of this option on the pattern
|
5
markdown/org/docs/patterns/noble/options/en.md
Normal file
5
markdown/org/docs/patterns/noble/options/en.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: "Bella body block: Design Options"
|
||||
---
|
||||
|
||||
<PatternOptions pattern='bella' />
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Front armhole curvature"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
Controls how deep the armhole is scooped out at the front bottom
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Front armhole pitch depth"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **front armhole pitch depth** option controls the vertical position of the armhole pitch point at the front.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Front shoulder width"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **front shoulder width** option controls the width of the shoulders at the front, relative to the back.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: "Full chest ease reduction"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
Allows you to independently reduce the ease around the chest to make it fit tight(er) in that area
|
||||
|
||||
## Effect of this option on the pattern
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "High bust width"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **high bust width** option allows you to tweak the high bust width at the front.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Shoulder Dart Position"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **Shoulder Dart Position** option allows you to move the position of the dart/princess seam.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Shoulder to Shoulder Ease"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **Shoulder to Shoulder Ease** option allows you to add ease between the shoulders.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Upper Dart Length"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **Upper Dart Length** controls the length of the upper dart, 100% is all teh way to the bust point.
|
||||
|
||||
## Effect of this option on the pattern
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Waist dart length"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **waist dart length** option controls the length of the waist dart towards the bust.
|
||||
|
||||
## Effect of this option on the pattern
|
9
markdown/org/docs/patterns/noble/options/waistease/en.md
Normal file
9
markdown/org/docs/patterns/noble/options/waistease/en.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Waist ease"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
The **waist ease** option controls the amount of ease at your waist.
|
||||
|
||||
## Effect of this option on the pattern
|
Loading…
Add table
Add a link
Reference in a new issue