1
0
Fork 0

Merge pull request #2276 from woutervdub/noble

New pattern: Noble
This commit is contained in:
Joost De Cock 2022-06-21 11:13:09 +02:00 committed by GitHub
commit b6edabe63f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
45 changed files with 1994 additions and 3 deletions

View file

@ -67,8 +67,6 @@ cd freesewing
yarn kickstart
```
If you don't want to set up a dev environment, you can [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](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.

View file

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

View file

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

View file

@ -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": {

View 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
View file

@ -0,0 +1,260 @@
![FreeSewing](https://static.freesewing.org/banner.png)
<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
View 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))
})()

View 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'] },
}
}

View 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"
}
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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

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

View file

@ -0,0 +1,5 @@
---
title: "Noble body block"
---
<PatternDocs pattern='noble' />

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

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

View file

@ -0,0 +1,5 @@
---
title: "Noble body block: Required Measurements"
---
<PatternMeasurements pattern='noble' />

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

View file

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

View file

@ -0,0 +1,9 @@
---
title: "Armhole depth"
---
---
The **armhole depth** option controls the depth of the armhole.
## Effect of this option on the pattern

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View 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

View file

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

View 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

View 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

View file

@ -0,0 +1,5 @@
---
title: "Bella body block: Design Options"
---
<PatternOptions pattern='bella' />

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View 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