New FS version
This commit is contained in:
parent
777b40c414
commit
c68f8d71b7
13 changed files with 1676 additions and 0 deletions
51
packages/hi/CHANGELOG.md
Normal file
51
packages/hi/CHANGELOG.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# Change log for: @freesewing/benjamin
|
||||||
|
|
||||||
|
|
||||||
|
## 2.20.0 (2022-01-24)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Switched to default import for version from package.json
|
||||||
|
|
||||||
|
## 2.16.1 (2021-05-30)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Changed `department` setting in config in line with new grouping
|
||||||
|
|
||||||
|
## 2.8.1 (2020-08-16)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed issue with (length of) band
|
||||||
|
|
||||||
|
## 2.8.0 (2020-08-10)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix for incorrect length of the ribbon
|
||||||
|
|
||||||
|
## 2.7.0 (2020-07-12)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Removed `Circumference` suffix from measurement names
|
||||||
|
|
||||||
|
## 2.0.2 (2019-09-06)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Added bandLength option to fit optiongroup (it was missing)
|
||||||
|
|
||||||
|
## 2.0.0 (2019-08-25)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Initial release
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
253
packages/hi/README.md
Normal file
253
packages/hi/README.md
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|

|
||||||
|
<p align='center'><a
|
||||||
|
href="https://www.npmjs.com/package/@freesewing/benjamin"
|
||||||
|
title="@freesewing/benjamin on NPM"
|
||||||
|
><img src="https://img.shields.io/npm/v/@freesewing/benjamin.svg"
|
||||||
|
alt="@freesewing/benjamin on NPM"/>
|
||||||
|
</a><a
|
||||||
|
href="https://opensource.org/licenses/MIT"
|
||||||
|
title="License: MIT"
|
||||||
|
><img src="https://img.shields.io/npm/l/@freesewing/benjamin.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%3Abenjamin"
|
||||||
|
title="Open issues tagged pkg:benjamin"
|
||||||
|
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:benjamin.svg?label=Issues"
|
||||||
|
alt="Open issues tagged pkg:benjamin"/>
|
||||||
|
</a><a
|
||||||
|
href="#contributors-"
|
||||||
|
title="All Contributors"
|
||||||
|
><img src="https://img.shields.io/badge/all_contributors-89-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/benjamin
|
||||||
|
|
||||||
|
A FreeSewing pattern for a bow tie
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## What am I looking at? 🤔
|
||||||
|
|
||||||
|
This repository is our *monorepo*
|
||||||
|
holding [all our NPM packages](https://freesewing.dev/reference/packages/).
|
||||||
|
|
||||||
|
This folder holds: @freesewing/benjamin
|
||||||
|
|
||||||
|
## 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="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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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!
|
||||||
|
|
30
packages/hi/config/index.js
Normal file
30
packages/hi/config/index.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
import { version } from '../package.json'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'hi',
|
||||||
|
version: version,
|
||||||
|
design: 'Wouter Van Wageningen',
|
||||||
|
code: 'Wouter Van Wageningen',
|
||||||
|
department: 'accessories',
|
||||||
|
type: 'pattern',
|
||||||
|
difficulty: 4,
|
||||||
|
optionGroups: {
|
||||||
|
style: ['size','nosePointiness','aggressive'],
|
||||||
|
},
|
||||||
|
measurements: ['neck'],
|
||||||
|
parts: ['body','tail','aboveMouth','belly','topFin','bottomFin','mouth'],
|
||||||
|
dependencies: {
|
||||||
|
tail: 'body',
|
||||||
|
aboveMouth: ['body','mouth'],
|
||||||
|
topFin: 'body',
|
||||||
|
belly: ['body','aboveMouth'],
|
||||||
|
bottomFin: ['body','belly','aboveMouth'],
|
||||||
|
},
|
||||||
|
inject: {},
|
||||||
|
hide: [],
|
||||||
|
options: {
|
||||||
|
nosePointiness: {pct: 0, min: -5,max: +10},
|
||||||
|
aggressive: {bool: false},
|
||||||
|
size: {pct: 33, min: 5, max: 500 },
|
||||||
|
},
|
||||||
|
}
|
92
packages/hi/package.json
Normal file
92
packages/hi/package.json
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
{
|
||||||
|
"name": "@freesewing/hi",
|
||||||
|
"version": "2.20.8",
|
||||||
|
"description": "A FreeSewing pattern for a shark",
|
||||||
|
"author": "woutervdub (https://github.com/woutervdub)",
|
||||||
|
"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": {
|
||||||
|
"clean": "rimraf dist",
|
||||||
|
"build": "rollup -c",
|
||||||
|
"cibuild_step1": "rollup -c",
|
||||||
|
"test": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register",
|
||||||
|
"pubtest": "npm publish --registry http://localhost:6662",
|
||||||
|
"pubforce": "npm publish",
|
||||||
|
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||||
|
"start": "rollup -c -w",
|
||||||
|
"netlify": "echo \"Not configured yet\"",
|
||||||
|
"testci": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register --reporter ../../tests/reporters/terse.js"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@freesewing/core": "^2.20.8",
|
||||||
|
"@freesewing/plugin-bundle": "^2.20.8"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"react": "^17.0.2",
|
||||||
|
"react-dom": "^17.0.2",
|
||||||
|
"@babel/plugin-proposal-class-properties": "^7.13.0",
|
||||||
|
"@freesewing/components": "^2.20.8",
|
||||||
|
"@freesewing/css-theme": "^2.20.8",
|
||||||
|
"@freesewing/i18n": "^2.20.8",
|
||||||
|
"@freesewing/mui-theme": "^2.20.8",
|
||||||
|
"@freesewing/plugin-bust": "^2.20.8",
|
||||||
|
"@freesewing/plugin-buttons": "^2.20.8",
|
||||||
|
"@freesewing/plugin-flip": "^2.20.8",
|
||||||
|
"@freesewing/utils": "^2.20.8",
|
||||||
|
"react-scripts": "^5.0.0",
|
||||||
|
"webpack": "^5.67.0",
|
||||||
|
"rollup": "^2.66.1",
|
||||||
|
"@rollup/plugin-babel": "^5.3.0",
|
||||||
|
"@rollup/plugin-commonjs": "^21.0.1",
|
||||||
|
"@rollup/plugin-json": "^4.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^13.1.3",
|
||||||
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
||||||
|
"@material-ui/core": "^4.12.3",
|
||||||
|
"@material-ui/icons": "^4.11.2",
|
||||||
|
"@material-ui/lab": "^v4.0.0-alpha.60",
|
||||||
|
"axios": "^0.25.0",
|
||||||
|
"react-intl": "^5.24.4",
|
||||||
|
"prop-types": "^15.8.1",
|
||||||
|
"mocha": "^9.1.1",
|
||||||
|
"chai": "^4.2.0",
|
||||||
|
"@babel/register": "^7.10.5"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist/*",
|
||||||
|
"README.md",
|
||||||
|
"package.json"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public",
|
||||||
|
"tag": "latest"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0",
|
||||||
|
"npm": ">=6"
|
||||||
|
},
|
||||||
|
"rollup": {
|
||||||
|
"exports": "default"
|
||||||
|
}
|
||||||
|
}
|
29
packages/hi/rollup.config.js
Normal file
29
packages/hi/rollup.config.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import resolve from '@rollup/plugin-node-resolve'
|
||||||
|
import commonjs from '@rollup/plugin-commonjs'
|
||||||
|
import json from '@rollup/plugin-json'
|
||||||
|
import peerDepsExternal from 'rollup-plugin-peer-deps-external'
|
||||||
|
import { name, version, description, author, license, main, module, rollup } from './package.json'
|
||||||
|
|
||||||
|
const banner = `/**\n * ${name} | v${version}\n * ${description}\n * (c) ${new Date().getFullYear()} ${author}\n * @license ${license}\n */`
|
||||||
|
const output = [
|
||||||
|
{
|
||||||
|
banner,
|
||||||
|
file: main,
|
||||||
|
format: 'cjs',
|
||||||
|
sourcemap: true,
|
||||||
|
exports: rollup.exports,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
if (typeof module !== 'undefined')
|
||||||
|
output.push({
|
||||||
|
banner,
|
||||||
|
file: module,
|
||||||
|
format: 'es',
|
||||||
|
sourcemap: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: 'src/index.js',
|
||||||
|
output,
|
||||||
|
plugins: [peerDepsExternal(), resolve({ modulesOnly: true }), commonjs(), json()],
|
||||||
|
}
|
114
packages/hi/src/aboveMouth.js
Normal file
114
packages/hi/src/aboveMouth.js
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
|
||||||
|
let aboveMouth01_02d = 266.7238454769277 * options.size
|
||||||
|
let aboveMouth01_02a = 353.4089695458119
|
||||||
|
let aboveMouth02_03d = 28.348200101593726 * options.size
|
||||||
|
let aboveMouth02_03a = 233.13495309848912
|
||||||
|
let aboveMouth01_04d = 57.858419828059574 * options.size
|
||||||
|
let aboveMouth01_04a = 208.91023166349467
|
||||||
|
let aboveMouth01cp1d = 62.927189989701574 * options.size
|
||||||
|
let aboveMouth01cp1a = 298.7196048714283
|
||||||
|
let aboveMouth02cp2d = 169.53367533325053 * options.size
|
||||||
|
let aboveMouth02cp2a = 195.1209034747764
|
||||||
|
let aboveMouth03cp1d = 172.36585117998288 * options.size
|
||||||
|
let aboveMouth03cp1a = 197.87876803095696
|
||||||
|
let aboveMouth04cp2d = 66.94005927693816 * options.size
|
||||||
|
let aboveMouth04cp2a = 308.8121959753343
|
||||||
|
|
||||||
|
|
||||||
|
let faceTopLength = store.get('faceTopLength')
|
||||||
|
|
||||||
|
let diff = 0
|
||||||
|
let iteration = 0
|
||||||
|
do {
|
||||||
|
points.aboveMouth01 = new Point(0, 0)
|
||||||
|
points.aboveMouth02 = points.aboveMouth01.shift(aboveMouth01_02a, aboveMouth01_02d)
|
||||||
|
points.aboveMouth03 = points.aboveMouth02.shift(aboveMouth02_03a, aboveMouth02_03d)
|
||||||
|
points.aboveMouth04 = points.aboveMouth01.shift(aboveMouth01_04a, aboveMouth01_04d)
|
||||||
|
|
||||||
|
points.aboveMouth01cp1 = points.aboveMouth01.shift(aboveMouth01cp1a, aboveMouth01cp1d)
|
||||||
|
points.aboveMouth02cp2 = points.aboveMouth02.shift(aboveMouth02cp2a, aboveMouth02cp2d)
|
||||||
|
points.aboveMouth03cp1 = points.aboveMouth03.shift(aboveMouth03cp1a, aboveMouth03cp1d)
|
||||||
|
points.aboveMouth04cp2 = points.aboveMouth04.shift(aboveMouth04cp2a, aboveMouth04cp2d)
|
||||||
|
diff =
|
||||||
|
faceTopLength -
|
||||||
|
new Path()
|
||||||
|
.move(points.aboveMouth03)
|
||||||
|
.curve(points.aboveMouth03cp1, points.aboveMouth04cp2, points.aboveMouth04)
|
||||||
|
.length()
|
||||||
|
|
||||||
|
aboveMouth01_02d = aboveMouth01_02d + diff
|
||||||
|
aboveMouth01_04d = aboveMouth01_04d + diff
|
||||||
|
iteration++
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
|
||||||
|
console.log({ iteration: iteration })
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.aboveMouth01)
|
||||||
|
.line(points.aboveMouth04)
|
||||||
|
.curve(points.aboveMouth04cp2, points.aboveMouth03cp1, points.aboveMouth03)
|
||||||
|
.line(points.aboveMouth02)
|
||||||
|
.curve(points.aboveMouth02cp2, points.aboveMouth01cp1, points.aboveMouth01)
|
||||||
|
.close()
|
||||||
|
|
||||||
|
console.log({ faceTopLength1: store.get('faceTopLength') })
|
||||||
|
console.log({
|
||||||
|
faceTopLength2: new Path()
|
||||||
|
.move(points.aboveMouth03)
|
||||||
|
.curve(points.aboveMouth03cp1, points.aboveMouth04cp2, points.aboveMouth04)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
store.set(
|
||||||
|
'aboveMouthTopLength',
|
||||||
|
new Path()
|
||||||
|
.move(points.aboveMouth03)
|
||||||
|
.curve(points.aboveMouth03cp1, points.aboveMouth04cp2, points.aboveMouth04)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
store.set(
|
||||||
|
'aboveMouthBottomLength',
|
||||||
|
new Path()
|
||||||
|
.move(points.aboveMouth01)
|
||||||
|
.curve(points.aboveMouth01cp1, points.aboveMouth02cp2, points.aboveMouth02)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
store.set('aboveMouthFinLength', points.aboveMouth02.dist(points.aboveMouth03))
|
||||||
|
console.log({ aboveMouthFinLength: store.get('aboveMouthFinLength') })
|
||||||
|
|
||||||
|
console.log({ mouthTopLength: store.get('mouthTopLength') })
|
||||||
|
|
||||||
|
points.aboveMouthSnippet = new Path()
|
||||||
|
.move(points.aboveMouth01)
|
||||||
|
.curve(points.aboveMouth01cp1, points.aboveMouth02cp2, points.aboveMouth02)
|
||||||
|
.shiftAlong(store.get('mouthTopLength'))
|
||||||
|
console.log({ aboveMouthSnippet: points.aboveMouthSnippet })
|
||||||
|
|
||||||
|
snippets.mouth = new Snippet('bnotch', points.aboveMouthSnippet)
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
202
packages/hi/src/belly.js
Normal file
202
packages/hi/src/belly.js
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
let belly01_02d = 224.8451041 * options.size
|
||||||
|
let belly02_03d = 108.1988389 * options.size
|
||||||
|
let belly03_04d = 216.7485605 * options.size
|
||||||
|
let belly04_05d = 164.7592153 * options.size
|
||||||
|
let belly01_10d = 129.2449198 * options.size
|
||||||
|
let belly01_02a = 25.7020193
|
||||||
|
let belly02_03a = 2.2164353
|
||||||
|
let belly03_04a = 338.0869319
|
||||||
|
|
||||||
|
let belly04_05a = 198.1877729
|
||||||
|
let belly01_10a = 163.4959859
|
||||||
|
let belly10_05d = 231.4386252 * options.size
|
||||||
|
let belly10_05a = 0
|
||||||
|
|
||||||
|
let belly01cp1d = 65.65512143 * options.size
|
||||||
|
let belly01cp2d = 38.20949996 * options.size
|
||||||
|
let belly02cp1d = 37.73513423 * options.size
|
||||||
|
let belly02cp2d = 118.64531230 * options.size
|
||||||
|
let belly03cp1d = 54.50254779 * options.size
|
||||||
|
let belly03cp2d = 40.68278830 * options.size
|
||||||
|
let belly04cp1d = 52.08589469 * options.size
|
||||||
|
let belly04cp2d = 62.46560129 * options.size
|
||||||
|
let belly05cp1d = 48.20828587 * options.size
|
||||||
|
// let belly05cp2d = 48.20828587 * options.size
|
||||||
|
let belly05cp2d = 68 * options.size
|
||||||
|
let belly10cp1d = 45.42602302 * options.size
|
||||||
|
// let belly10cp2d = 45.42602302 * options.size
|
||||||
|
let belly10cp2d = 65.42602302 * options.size
|
||||||
|
|
||||||
|
let belly01cp1a = 60.1172330
|
||||||
|
let belly01cp2a = 327.4394109
|
||||||
|
let belly02cp1a = 331.7898702
|
||||||
|
let belly02cp2a = 182.9449647
|
||||||
|
let belly03cp1a = 349.8613970
|
||||||
|
let belly03cp2a = 200.1533738
|
||||||
|
let belly04cp1a = 204.8857575
|
||||||
|
let belly04cp2a = 145.9357065
|
||||||
|
// let belly05cp1a = 8.1545383
|
||||||
|
let belly05cp1a = 8.1545383
|
||||||
|
// let belly05cp2a = 8.1545383
|
||||||
|
let belly05cp2a = 5
|
||||||
|
let belly10cp1a = 169.9644604
|
||||||
|
let belly10cp2a = 175.9644604
|
||||||
|
|
||||||
|
points.belly10 = new Point(0, 0)
|
||||||
|
points.belly01 = points.belly10.shift(belly01_10a, belly01_10d)
|
||||||
|
points.belly02 = points.belly01.shift(belly01_02a, belly01_02d)
|
||||||
|
points.belly03 = points.belly02.shift(belly02_03a, belly02_03d)
|
||||||
|
points.belly04 = points.belly03.shift(belly03_04a, belly03_04d)
|
||||||
|
points.belly05 = points.belly10.shift(belly10_05a, belly10_05d)
|
||||||
|
points.belly01cp1 = points.belly01.shift(belly01cp1a, belly01cp1d)
|
||||||
|
points.belly02cp1 = points.belly02.shift(belly02cp1a, belly02cp1d)
|
||||||
|
points.belly03cp1 = points.belly03.shift(belly03cp1a, belly03cp1d)
|
||||||
|
points.belly04cp1 = points.belly04.shift(belly04cp1a, belly04cp1d)
|
||||||
|
points.belly05cp1 = points.belly05.shift(belly05cp1a, belly05cp1d)
|
||||||
|
points.belly01cp2 = points.belly01.shift(belly01cp2a, belly01cp2d)
|
||||||
|
points.belly02cp2 = points.belly02.shift(belly02cp2a, belly02cp2d)
|
||||||
|
points.belly03cp2 = points.belly03.shift(belly03cp2a, belly03cp2d)
|
||||||
|
points.belly04cp2 = points.belly04.shift(belly04cp2a, belly04cp2d)
|
||||||
|
points.belly05cp2 = points.belly05.shift(belly05cp2a, belly05cp2d)
|
||||||
|
points.belly10cp1 = points.belly10.shift(belly10cp2a, belly10cp2d)
|
||||||
|
|
||||||
|
console.log({ belly10_05d: points.belly10.dist(points.belly05) })
|
||||||
|
|
||||||
|
let mouthPartLength =
|
||||||
|
store.get('aboveMouthBottomLength') -
|
||||||
|
store.get('mouthTopLength') +
|
||||||
|
store.get('mouthBottomLength')
|
||||||
|
|
||||||
|
console.log({ calc: mouthPartLength })
|
||||||
|
console.log({
|
||||||
|
actual: new Path()
|
||||||
|
.move(points.belly01)
|
||||||
|
.curve(points.belly01cp1, points.belly02cp2, points.belly02)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
let diff = 0
|
||||||
|
let iteration = 0
|
||||||
|
do {
|
||||||
|
points.belly01.x -= diff
|
||||||
|
points.belly01cp1.x -= diff
|
||||||
|
points.belly01cp2.x -= diff
|
||||||
|
|
||||||
|
iteration++
|
||||||
|
diff =
|
||||||
|
mouthPartLength -
|
||||||
|
new Path()
|
||||||
|
.move(points.belly01)
|
||||||
|
.curve(points.belly01cp1, points.belly02cp2, points.belly02)
|
||||||
|
.length()
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
|
||||||
|
let bellyTailLength = store.get('bellyTailLength')
|
||||||
|
console.log({ bellyTailLength: store.get('bellyTailLength') })
|
||||||
|
console.log({
|
||||||
|
first: new Path()
|
||||||
|
.move(points.belly03)
|
||||||
|
.curve(points.belly03cp1, points.belly04cp2, points.belly04)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
diff = 0
|
||||||
|
iteration = 0
|
||||||
|
do {
|
||||||
|
points.belly04.x -= diff
|
||||||
|
points.belly04cp1.x -= diff
|
||||||
|
points.belly04cp2.x -= diff
|
||||||
|
points.belly05.x -= diff
|
||||||
|
points.belly05cp2.x -= diff
|
||||||
|
|
||||||
|
iteration++
|
||||||
|
diff =
|
||||||
|
bellyTailLength -
|
||||||
|
new Path()
|
||||||
|
.move(points.belly03)
|
||||||
|
.curve(points.belly03cp1, points.belly04cp2, points.belly04)
|
||||||
|
.length()
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
|
||||||
|
console.log({
|
||||||
|
actual: new Path()
|
||||||
|
.move(points.belly03)
|
||||||
|
.curve(points.belly03cp1, points.belly04cp2, points.belly04)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
points.belly05cp1 = points.belly05cp2.flipY()
|
||||||
|
points.belly06 = points.belly04.flipY()
|
||||||
|
points.belly06cp1 = points.belly04cp2.flipY()
|
||||||
|
points.belly06cp2 = points.belly04cp1.flipY()
|
||||||
|
points.belly07 = points.belly03.flipY()
|
||||||
|
points.belly07cp1 = points.belly03cp2.flipY()
|
||||||
|
points.belly07cp2 = points.belly03cp1.flipY()
|
||||||
|
points.belly08 = points.belly02.flipY()
|
||||||
|
points.belly08cp1 = points.belly02cp2.flipY()
|
||||||
|
points.belly08cp2 = points.belly02cp1.flipY()
|
||||||
|
points.belly09 = points.belly01.flipY()
|
||||||
|
points.belly09cp1 = points.belly01cp2.flipY()
|
||||||
|
points.belly09cp2 = points.belly01cp1.flipY()
|
||||||
|
points.belly10cp2 = points.belly10cp1.flipY()
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.belly01)
|
||||||
|
.curve(points.belly01cp2, points.belly10cp1, points.belly10)
|
||||||
|
.curve(points.belly10cp2, points.belly09cp1, points.belly09)
|
||||||
|
.curve(points.belly09cp2, points.belly08cp1, points.belly08)
|
||||||
|
.curve(points.belly08cp2, points.belly07cp1, points.belly07)
|
||||||
|
.curve(points.belly07cp2, points.belly06cp1, points.belly06)
|
||||||
|
.curve(points.belly06cp2, points.belly05cp1, points.belly05)
|
||||||
|
.curve(points.belly05cp2, points.belly04cp1, points.belly04)
|
||||||
|
.curve(points.belly04cp2, points.belly03cp1, points.belly03)
|
||||||
|
.curve(points.belly03cp2, points.belly02cp1, points.belly02)
|
||||||
|
.curve(points.belly02cp2, points.belly01cp1, points.belly01)
|
||||||
|
.close()
|
||||||
|
|
||||||
|
store.set(
|
||||||
|
'bellyFinLength',
|
||||||
|
new Path()
|
||||||
|
.move(points.belly02)
|
||||||
|
.curve(points.belly02cp1, points.belly03cp2, points.belly03)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
console.log({ bellyFinLength: store.get('bellyFinLength') })
|
||||||
|
|
||||||
|
points.bellyMouthSnippet1 = new Path()
|
||||||
|
.move(points.belly01)
|
||||||
|
.curve(points.belly01cp1, points.belly02cp2, points.belly02)
|
||||||
|
.shiftAlong(store.get('mouthBottomLength'))
|
||||||
|
points.bellyMouthSnippet2 = points.bellyMouthSnippet1.flipY()
|
||||||
|
|
||||||
|
console.log({ aboveMouthSnippet: points.aboveMouthSnippet })
|
||||||
|
|
||||||
|
snippets.mouth1 = new Snippet('bnotch', points.bellyMouthSnippet1)
|
||||||
|
snippets.mouth2 = new Snippet('bnotch', points.bellyMouthSnippet2)
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
459
packages/hi/src/body.js
Normal file
459
packages/hi/src/body.js
Normal file
|
@ -0,0 +1,459 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
|
||||||
|
let body01_02d = 117.67274991262845 * options.size
|
||||||
|
let body02_03d = 124.91298035032229 * options.size
|
||||||
|
// let body02_03d = body01_02d
|
||||||
|
let body03_04d = 255.92397474640785 * options.size
|
||||||
|
let body04_05d = 201.01260719168837 * options.size
|
||||||
|
let body05_06d = 134.89080971660005 * options.size
|
||||||
|
let body06_07d = 49.03860703568160 * options.size
|
||||||
|
let body07_08d = 225.86340480918992 * options.size
|
||||||
|
let body08_09d = 66.84760000179512 * options.size
|
||||||
|
let body09_10d = 40.72782003741420 * options.size
|
||||||
|
let body10_11d = 23.78799421977402 * options.size
|
||||||
|
let body11_12d = 57.68530918700182 * options.size
|
||||||
|
let body12_13d = 98.06623978209830 * options.size
|
||||||
|
let body13_14d = 91.32736600274856 * options.size
|
||||||
|
let body14_15d = 295.10977066828880 * options.size
|
||||||
|
let body15_16d = 209.42633350581770 * options.size
|
||||||
|
let body16_17d = 152.51537318250902 * options.size
|
||||||
|
let body17_18d = 255.15294373571314 * options.size
|
||||||
|
let body18_19d = 71.90453921693678 * options.size
|
||||||
|
let body19_01d = 61.33021195137026 * options.size
|
||||||
|
|
||||||
|
let body01cp1d = 42.13103487929059 * options.size
|
||||||
|
body01cp1d = 32.13103487929059 * options.size
|
||||||
|
let body01cp2d = 23.72518967258217 * options.size
|
||||||
|
let body02cp1d = 44.99353642469105 * options.size
|
||||||
|
let body02cp2d = 42.33568754608812 * options.size
|
||||||
|
let body03cp1d = 62.59332758369697 * options.size
|
||||||
|
let body03cp2d = 40.89285869195256 * options.size
|
||||||
|
let body04cp1d = 176.21501525125487 * options.size
|
||||||
|
let body04cp2d = 130.11389715553065 * options.size
|
||||||
|
let body05cp1d = 29.56689479806765 * options.size
|
||||||
|
let body05cp2d = 104.66860665930352 * options.size
|
||||||
|
let body06cp1d = 8.03497915367552 * options.size
|
||||||
|
let body06cp2d = 34.57808908832297 * options.size
|
||||||
|
let body07cp1d = 89.11908088619404 * options.size
|
||||||
|
let body07cp2d = 25.54827831772624 * options.size
|
||||||
|
let body08cp1d = 41.24120086757895 * options.size
|
||||||
|
let body08cp2d = 158.23693200387828 * options.size
|
||||||
|
let body09cp1d = 4.87663090668135 * options.size
|
||||||
|
let body09cp2d = 25.76988630165065 * options.size
|
||||||
|
let body10cp1d = 4.13950105689086 * options.size
|
||||||
|
let body10cp2d = 13.27508493381490 * options.size
|
||||||
|
let body11cp1d = 17.66659910678904 * options.size
|
||||||
|
let body11cp2d = 17.66533107530116 * options.size
|
||||||
|
let body12cp1d = 14.46914569005365 * options.size
|
||||||
|
let body12cp2d = 39.51915145850176 * options.size
|
||||||
|
let body13cp1d = 35.66832366400192 * options.size
|
||||||
|
let body13cp2d = 48.53828530139895 * options.size
|
||||||
|
let body14cp1d = 77.26036056089820 * options.size
|
||||||
|
let body14cp2d = 37.42741381661305 * options.size
|
||||||
|
let body15cp1d = 74.89746640634775 * options.size
|
||||||
|
let body15cp2d = 101.16048880857042 * options.size
|
||||||
|
let body16cp1d = 36.21092864039804 * options.size
|
||||||
|
let body16cp2d = 63.69410844026312 * options.size
|
||||||
|
let body17cp1d = 97.90988675818191 * options.size
|
||||||
|
let body17cp2d = 62.08991689477443 * options.size
|
||||||
|
let body18cp1d = 22.74982929606286 * options.size
|
||||||
|
let body18cp2d = 16.57960183478481 * options.size
|
||||||
|
let body19cp1d = 23.95674278778315 * options.size
|
||||||
|
let body19cp2d = 24.49741270011998 * options.size
|
||||||
|
|
||||||
|
let eyeBigDist = 180.18315182058507 *options.size
|
||||||
|
let eyeSmallDist = 2.3629811679317316 *options.size
|
||||||
|
|
||||||
|
let gillLength = 41.01907104018812 *options.size
|
||||||
|
|
||||||
|
/*
|
||||||
|
let body01_02a = 350.1382392835908
|
||||||
|
let body02_03a = 219.2280235992150
|
||||||
|
let body03_04a = 339.6914424367389
|
||||||
|
let body04_05a = 327.5949161262267
|
||||||
|
let body05_06a = 308.0581973147166
|
||||||
|
let body06_07a = 73.6604388249373
|
||||||
|
let body07_08a = 45.7462208380377
|
||||||
|
let body08_09a = 337.5894682731302
|
||||||
|
let body09_10a = 305.1280145118106
|
||||||
|
let body10_11a = 62.0485099186233
|
||||||
|
let body11_12a = 31.5926663325278
|
||||||
|
let body12_13a = 351.3547159587854
|
||||||
|
let body13_14a = 65.2915054300727
|
||||||
|
let body14_15a = 146.7578208812976
|
||||||
|
let body15_16a = 179.0692249048048
|
||||||
|
let body16_17a = 173.6138831920282
|
||||||
|
let body17_18a = 182.5463896677164
|
||||||
|
let body18_19a = 168.3450180715549
|
||||||
|
let body19_01a = 239.6348252240278
|
||||||
|
|
||||||
|
let body01cp1a = 341.5263465356924
|
||||||
|
let body01cp2a = 75.6503959063636
|
||||||
|
let body02cp1a = 211.9535499171619
|
||||||
|
let body02cp2a = 179.4884199670842
|
||||||
|
let body03cp1a = 322.8538439425170
|
||||||
|
let body03cp2a = 45.3745027878966
|
||||||
|
let body04cp1a = 349.1071045662215
|
||||||
|
let body04cp2a = 170.7775897297436
|
||||||
|
let body05cp1a = 285.1596014648055
|
||||||
|
let body05cp2a = 108.5890112443549
|
||||||
|
let body06cp1a = 41.1852543570561
|
||||||
|
let body06cp2a = 164.1413220186340
|
||||||
|
let body07cp1a = 87.2041495377715
|
||||||
|
let body07cp2a = 267.0316498407170
|
||||||
|
let body08cp1a = 357.4386948546150
|
||||||
|
let body08cp2a = 178.5040422857397
|
||||||
|
let body09cp1a = 299.4140745661390
|
||||||
|
let body09cp2a = 119.4139505554426
|
||||||
|
let body10cp1a = 39.0878163024596
|
||||||
|
let body10cp2a = 131.9955535201102
|
||||||
|
let body11cp1a = 71.2799386715762
|
||||||
|
let body11cp2a = 251.2819695388968
|
||||||
|
let body12cp1a = 355.0877186628186
|
||||||
|
let body12cp2a = 175.0877829918719
|
||||||
|
let body13cp1a = 80.2392635965701
|
||||||
|
let body13cp2a = 171.4909473733658
|
||||||
|
let body14cp1a = 140.9298470364624
|
||||||
|
let body14cp2a = 236.9514886304476
|
||||||
|
let body15cp1a = 202.5529871921231
|
||||||
|
let body15cp2a = 333.1212843908838
|
||||||
|
let body16cp1a = 193.8904149121820
|
||||||
|
let body16cp2a = 321.0219904969430
|
||||||
|
let body17cp1a = 191.0428733832995
|
||||||
|
let body17cp2a = 318.4852423703768
|
||||||
|
let body18cp1a = 176.9688130385547
|
||||||
|
let body18cp2a = 358.1542838646098
|
||||||
|
let body19cp1a = 231.3360831292815
|
||||||
|
let body19cp2a = 338.5586388459373
|
||||||
|
|
||||||
|
let eyeBigAngle = 4.84999368439876
|
||||||
|
let eyeSmallAngle = 331.26569123319354
|
||||||
|
|
||||||
|
let gillAngle = 283.9416746517148
|
||||||
|
*/
|
||||||
|
|
||||||
|
let body01_02a = 170.1382393
|
||||||
|
let body02_03a = 39.2280236
|
||||||
|
let body03_04a = 159.6914424
|
||||||
|
let body04_05a = 147.5949161
|
||||||
|
let body05_06a = 128.0581973
|
||||||
|
let body06_07a = 253.6604388
|
||||||
|
let body07_08a = 225.7462208
|
||||||
|
let body08_09a = 157.5894683
|
||||||
|
let body09_10a = 125.1280145
|
||||||
|
let body10_11a = 242.0485099
|
||||||
|
let body11_12a = 211.5926663
|
||||||
|
let body12_13a = 171.354716
|
||||||
|
let body13_14a = 245.2915054
|
||||||
|
let body14_15a = 326.7578209
|
||||||
|
let body15_16a = 359.0692249
|
||||||
|
let body16_17a = 353.6138832
|
||||||
|
let body17_18a = 2.546389668
|
||||||
|
let body18_19a = 348.3450181
|
||||||
|
let body19_01a = 59.63482522
|
||||||
|
|
||||||
|
let body01cp1a = 161.5263465
|
||||||
|
let body01cp2a = 255.6503959
|
||||||
|
let body02cp1a = 31.95354992
|
||||||
|
//let body02cp2a = 359.48842
|
||||||
|
// let body02cp2a = 2.48842
|
||||||
|
let body02cp2a = 10
|
||||||
|
|
||||||
|
let body03cp1a = 142.8538439
|
||||||
|
let body03cp2a = 225.3745028
|
||||||
|
let body04cp1a = 169.1071046
|
||||||
|
let body04cp2a = 350.7775897
|
||||||
|
let body05cp1a = 105.1596015
|
||||||
|
let body05cp2a = 288.5890112
|
||||||
|
let body06cp1a = 221.1852544
|
||||||
|
let body06cp2a = 344.141322
|
||||||
|
let body07cp1a = 267.2041495
|
||||||
|
let body07cp2a = 87.03164984
|
||||||
|
let body08cp1a = 177.4386949
|
||||||
|
let body08cp2a = 358.5040423
|
||||||
|
let body09cp1a = 119.4140746
|
||||||
|
let body09cp2a = 299.4139506
|
||||||
|
let body10cp1a = 219.0878163
|
||||||
|
let body10cp2a = 311.9955535
|
||||||
|
let body11cp1a = 251.2799387
|
||||||
|
let body11cp2a = 71.28196954
|
||||||
|
let body12cp1a = 175.0877187
|
||||||
|
let body12cp2a = 355.087783
|
||||||
|
let body13cp1a = 260.2392636
|
||||||
|
let body13cp2a = 351.4909474
|
||||||
|
let body14cp1a = 320.929847
|
||||||
|
let body14cp2a = 56.95148863
|
||||||
|
let body15cp1a = 22.55298719
|
||||||
|
let body15cp2a = 153.1212844
|
||||||
|
let body16cp1a = 13.89041491
|
||||||
|
let body16cp2a = 141.0219905
|
||||||
|
let body17cp1a = 11.04287338
|
||||||
|
let body17cp2a = 138.4852424
|
||||||
|
let body18cp1a = 356.968813
|
||||||
|
let body18cp2a = 178.1542839
|
||||||
|
let body19cp1a = 51.33608313
|
||||||
|
let body19cp2a = 158.5586388
|
||||||
|
|
||||||
|
let eyeBigAngle = 184.8499937
|
||||||
|
let eyeSmallAngle = 151.2656912
|
||||||
|
|
||||||
|
let gillAngle = 103.9416747
|
||||||
|
|
||||||
|
points.body01 = new Point(0, 0)
|
||||||
|
points.body02 = points.body01.shift(body01_02a, body01_02d)
|
||||||
|
points.body03 = points.body02.shift(body02_03a, body02_03d)
|
||||||
|
points.body04 = points.body03.shift(body03_04a, body03_04d)
|
||||||
|
points.body05 = points.body04.shift(body04_05a, body04_05d)
|
||||||
|
points.body06 = points.body05.shift(body05_06a, body05_06d)
|
||||||
|
points.body07 = points.body06.shift(body06_07a, body06_07d)
|
||||||
|
points.body08 = points.body07.shift(body07_08a, body07_08d)
|
||||||
|
points.body09 = points.body08.shift(body08_09a, body08_09d)
|
||||||
|
points.body10 = points.body09.shift(body09_10a, body09_10d)
|
||||||
|
points.body11 = points.body10.shift(body10_11a, body10_11d)
|
||||||
|
points.body12 = points.body11.shift(body11_12a, body11_12d)
|
||||||
|
points.body13 = points.body12.shift(body12_13a, body12_13d)
|
||||||
|
points.body14 = points.body13.shift(body13_14a, body13_14d)
|
||||||
|
points.body15 = points.body14.shift(body14_15a, body14_15d)
|
||||||
|
points.body16 = points.body15.shift(body15_16a, body15_16d)
|
||||||
|
points.body17 = points.body16.shift(body16_17a, body16_17d)
|
||||||
|
points.body18 = points.body17.shift(body17_18a, body17_18d)
|
||||||
|
points.body19 = points.body18.shift(body18_19a, body18_19d)
|
||||||
|
|
||||||
|
points.body01cp1 = points.body01.shift(body01cp1a, body01cp1d)
|
||||||
|
points.body02cp1 = points.body02.shift(body02cp1a, body02cp1d)
|
||||||
|
points.body03cp1 = points.body03.shift(body03cp1a, body03cp1d)
|
||||||
|
points.body04cp1 = points.body04.shift(body04cp1a, body04cp1d)
|
||||||
|
points.body05cp1 = points.body05.shift(body05cp1a, body05cp1d)
|
||||||
|
points.body06cp1 = points.body06.shift(body06cp1a, body06cp1d)
|
||||||
|
points.body07cp1 = points.body07.shift(body07cp1a, body07cp1d)
|
||||||
|
points.body08cp1 = points.body08.shift(body08cp1a, body08cp1d)
|
||||||
|
points.body09cp1 = points.body09.shift(body09cp1a, body09cp1d)
|
||||||
|
points.body10cp1 = points.body10.shift(body10cp1a, body10cp1d)
|
||||||
|
points.body11cp1 = points.body11.shift(body11cp1a, body11cp1d)
|
||||||
|
points.body12cp1 = points.body12.shift(body12cp1a, body12cp1d)
|
||||||
|
points.body13cp1 = points.body13.shift(body13cp1a, body13cp1d)
|
||||||
|
points.body14cp1 = points.body14.shift(body14cp1a, body14cp1d)
|
||||||
|
points.body15cp1 = points.body15.shift(body15cp1a, body15cp1d)
|
||||||
|
points.body16cp1 = points.body16.shift(body16cp1a, body16cp1d)
|
||||||
|
points.body17cp1 = points.body17.shift(body17cp1a, body17cp1d)
|
||||||
|
points.body18cp1 = points.body18.shift(body18cp1a, body18cp1d)
|
||||||
|
points.body19cp1 = points.body19.shift(body19cp1a, body19cp1d)
|
||||||
|
|
||||||
|
points.body01cp2 = points.body01.shift(body01cp2a, body01cp2d)
|
||||||
|
points.body02cp2 = points.body02.shift(body02cp2a, body02cp2d)
|
||||||
|
points.body03cp2 = points.body03.shift(body03cp2a, body03cp2d)
|
||||||
|
points.body04cp2 = points.body04.shift(body04cp2a, body04cp2d)
|
||||||
|
points.body05cp2 = points.body05.shift(body05cp2a, body05cp2d)
|
||||||
|
points.body06cp2 = points.body06.shift(body06cp2a, body06cp2d)
|
||||||
|
points.body07cp2 = points.body07.shift(body07cp2a, body07cp2d)
|
||||||
|
points.body08cp2 = points.body08.shift(body08cp2a, body08cp2d)
|
||||||
|
points.body09cp2 = points.body09.shift(body09cp2a, body09cp2d)
|
||||||
|
points.body10cp2 = points.body10.shift(body10cp2a, body10cp2d)
|
||||||
|
points.body11cp2 = points.body11.shift(body11cp2a, body11cp2d)
|
||||||
|
points.body12cp2 = points.body12.shift(body12cp2a, body12cp2d)
|
||||||
|
points.body13cp2 = points.body13.shift(body13cp2a, body13cp2d)
|
||||||
|
points.body14cp2 = points.body14.shift(body14cp2a, body14cp2d)
|
||||||
|
points.body15cp2 = points.body15.shift(body15cp2a, body15cp2d)
|
||||||
|
points.body16cp2 = points.body16.shift(body16cp2a, body16cp2d)
|
||||||
|
points.body17cp2 = points.body17.shift(body17cp2a, body17cp2d)
|
||||||
|
points.body18cp2 = points.body18.shift(body18cp2a, body18cp2d)
|
||||||
|
points.body19cp2 = points.body19.shift(body19cp2a, body19cp2d)
|
||||||
|
|
||||||
|
//Adjust dart point:
|
||||||
|
points.body02 = points.body01.shift(body01_02a - 1.7, body01_02d)
|
||||||
|
|
||||||
|
// Front dart adjustments:
|
||||||
|
points.body01cp2 = points.body01.shift(
|
||||||
|
points.body01.angle(points.body19) +
|
||||||
|
(points.body19.angle(points.body01) - points.body19.angle(points.body19cp1)),
|
||||||
|
body01cp2d
|
||||||
|
)
|
||||||
|
body01cp1a = Math.min(
|
||||||
|
points.body01.angle(points.body01cp2) + 90 * (-1 + options.nosePointiness),
|
||||||
|
points.body01.angle(points.body02) - 5
|
||||||
|
)
|
||||||
|
console.log({pointiness: options.nosePointiness})
|
||||||
|
console.log({pointiness_a: points.body01.angle(points.body01cp2)})
|
||||||
|
console.log({pointiness_a: points.body01.angle(points.body01cp2) +90 * (-1 + options.nosePointiness)})
|
||||||
|
console.log({pointiness_m: points.body01.angle(points.body02) - 5})
|
||||||
|
|
||||||
|
points.body01cp1 = points.body01.shift(body01cp1a, body01cp1d)
|
||||||
|
|
||||||
|
// Make both sides of the dart equal:
|
||||||
|
points.body03 = points.body02.shift(body02_03a, body01_02d)
|
||||||
|
|
||||||
|
points.body02cp1 = points.body02.shift(
|
||||||
|
points.body02.angle(points.body03) -
|
||||||
|
(points.body02.angle(points.body02cp2) - points.body02.angle(points.body01)),
|
||||||
|
body02cp2d
|
||||||
|
)
|
||||||
|
points.body03cp2 = points.body03.shift(
|
||||||
|
points.body03.angle(points.body02) +
|
||||||
|
(points.body01.angle(points.body02) - points.body01.angle(points.body01cp1)),
|
||||||
|
body01cp1d
|
||||||
|
)
|
||||||
|
|
||||||
|
// Nose adjustment:
|
||||||
|
points.body03cp1 = points.body03.shift(
|
||||||
|
body03cp1a + Math.max(-10, 50 * options.nosePointiness),
|
||||||
|
body03cp1d
|
||||||
|
)
|
||||||
|
|
||||||
|
// Tail adjustment:
|
||||||
|
console.log(points.body13.angle(points.body13cp1) - points.body13.angle(points.body14))
|
||||||
|
console.log(points.body14.angle(points.body13) - points.body14.angle(points.body14cp2))
|
||||||
|
|
||||||
|
let tailCpAngle =
|
||||||
|
(points.body13.angle(points.body13cp1) -
|
||||||
|
points.body13.angle(points.body14) +
|
||||||
|
(points.body14.angle(points.body13) - points.body14.angle(points.body14cp2))) /
|
||||||
|
2
|
||||||
|
points.body14cp2 = points.body14.shift(
|
||||||
|
points.body14.angle(points.body13) - tailCpAngle,
|
||||||
|
body13cp1d
|
||||||
|
)
|
||||||
|
points.body13cp1 = points.body13.shift(
|
||||||
|
points.body13.angle(points.body14) + tailCpAngle,
|
||||||
|
body13cp1d
|
||||||
|
)
|
||||||
|
|
||||||
|
points.eyeBig = points.body01.shift( eyeBigAngle, eyeBigDist )
|
||||||
|
points.eyeSmall = points.eyeBig.shift( eyeSmallAngle, eyeSmallDist *(-2+(options.aggressive ? 0 : 1)))
|
||||||
|
|
||||||
|
let c = 0.55191502449351
|
||||||
|
let eyeBigX = 18.7757 * options.size
|
||||||
|
let eyeBigY = 11.6262 * options.size
|
||||||
|
points.eyeBigT = points.eyeBig.shift(90, eyeBigY / 2)
|
||||||
|
points.eyeBigB = points.eyeBig.shift(270, eyeBigY / 2).shift(
|
||||||
|
0,
|
||||||
|
options.aggressive ? eyeBigX / 3 : 0
|
||||||
|
)
|
||||||
|
points.eyeBigR = points.eyeBig.shift(0, eyeBigX / 2).shift(
|
||||||
|
270,
|
||||||
|
options.aggressive ? eyeBigY / 3 : 0
|
||||||
|
)
|
||||||
|
points.eyeBigL = points.eyeBig.shift(180, eyeBigX / 2)
|
||||||
|
points.eyeBigTcp1 = points.eyeBigT.shift(0, (eyeBigY / 2) * c)
|
||||||
|
points.eyeBigTcp2 = points.eyeBigT.shift(180, (eyeBigY / 2) * c)
|
||||||
|
points.eyeBigBcp1 = points.eyeBigB.shift(180, (eyeBigY / 2) * c)
|
||||||
|
points.eyeBigBcp2 = points.eyeBigB.shift(0, (eyeBigY / 2) * c)
|
||||||
|
points.eyeBigRcp1 = points.eyeBigR.shift(270, (eyeBigX / (options.aggressive ? 3 : 2)) * c)
|
||||||
|
points.eyeBigRcp2 = points.eyeBigR.shift(90, (eyeBigX / 2) * c)
|
||||||
|
points.eyeBigLcp1 = points.eyeBigL.shift(90, (eyeBigX / 2) * c)
|
||||||
|
points.eyeBigLcp2 = points.eyeBigL.shift(270, (eyeBigX / 2) * c)
|
||||||
|
|
||||||
|
paths.eyeBig = new Path()
|
||||||
|
.move(points.eyeBigT)
|
||||||
|
.curve(points.eyeBigTcp2, points.eyeBigLcp1, points.eyeBigL)
|
||||||
|
.curve(points.eyeBigLcp2, points.eyeBigBcp1, points.eyeBigB)
|
||||||
|
.curve(points.eyeBigBcp2, points.eyeBigRcp1, points.eyeBigR)
|
||||||
|
.curve(points.eyeBigRcp2, points.eyeBigTcp1, points.eyeBigT)
|
||||||
|
|
||||||
|
let eyeSmallX = 1.87089 * options.size *((options.aggressive ? 1.5 : 1))
|
||||||
|
let eyeSmallY = 1.5368 * options.size *((options.aggressive ? 1.5 : 1))
|
||||||
|
points.eyeSmallT = points.eyeSmall.shift(270, eyeSmallY / 2)
|
||||||
|
points.eyeSmallB = points.eyeSmall.shift(90, eyeSmallY / 2)
|
||||||
|
points.eyeSmallR = points.eyeSmall.shift(0, eyeSmallX / 2)
|
||||||
|
points.eyeSmallL = points.eyeSmall.shift(180, eyeSmallX / 2)
|
||||||
|
points.eyeSmallTcp1 = points.eyeSmallT.shift(0, (eyeSmallY / 2) * c)
|
||||||
|
points.eyeSmallTcp2 = points.eyeSmallT.shift(180, (eyeSmallY / 2) * c)
|
||||||
|
points.eyeSmallBcp1 = points.eyeSmallB.shift(180, (eyeSmallY / 2) * c)
|
||||||
|
points.eyeSmallBcp2 = points.eyeSmallB.shift(0, (eyeSmallY / 2) * c)
|
||||||
|
points.eyeSmallRcp1 = points.eyeSmallR.shift(270, (eyeSmallX / 2) * c)
|
||||||
|
points.eyeSmallRcp2 = points.eyeSmallR.shift(90, (eyeSmallX / 2) * c)
|
||||||
|
points.eyeSmallLcp1 = points.eyeSmallL.shift(90, (eyeSmallX / 2) * c)
|
||||||
|
points.eyeSmallLcp2 = points.eyeSmallL.shift(270, (eyeSmallX / 2) * c)
|
||||||
|
|
||||||
|
paths.eyeSmall = new Path()
|
||||||
|
.move(points.eyeSmallT)
|
||||||
|
.curve(points.eyeSmallTcp2, points.eyeSmallLcp1, points.eyeSmallL)
|
||||||
|
.curve(points.eyeSmallLcp2, points.eyeSmallBcp1, points.eyeSmallB)
|
||||||
|
.curve(points.eyeSmallBcp2, points.eyeSmallRcp1, points.eyeSmallR)
|
||||||
|
.curve(points.eyeSmallRcp2, points.eyeSmallTcp1, points.eyeSmallT)
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.body01)
|
||||||
|
.curve(points.body01cp1, points.body02cp2, points.body02)
|
||||||
|
.curve(points.body02cp1, points.body03cp2, points.body03)
|
||||||
|
.curve(points.body03cp1, points.body04cp2, points.body04)
|
||||||
|
.curve(points.body04cp1, points.body05cp2, points.body05)
|
||||||
|
.curve(points.body05cp1, points.body06cp2, points.body06)
|
||||||
|
.curve(points.body06cp1, points.body07cp2, points.body07)
|
||||||
|
.curve(points.body07cp1, points.body08cp2, points.body08)
|
||||||
|
.curve(points.body08cp1, points.body09cp2, points.body09)
|
||||||
|
.curve(points.body09cp1, points.body10cp2, points.body10)
|
||||||
|
.curve(points.body10cp1, points.body11cp2, points.body11)
|
||||||
|
.curve(points.body11cp1, points.body12cp2, points.body12)
|
||||||
|
.curve(points.body12cp1, points.body13cp2, points.body13)
|
||||||
|
.curve(points.body13cp1, points.body14cp2, points.body14)
|
||||||
|
.curve(points.body14cp1, points.body15cp2, points.body15)
|
||||||
|
.curve(points.body15cp1, points.body16cp2, points.body16)
|
||||||
|
.curve(points.body16cp1, points.body17cp2, points.body17)
|
||||||
|
.curve(points.body17cp1, points.body18cp2, points.body18)
|
||||||
|
.curve(points.body18cp1, points.body19cp2, points.body19)
|
||||||
|
.curve(points.body19cp1, points.body01cp2, points.body01)
|
||||||
|
|
||||||
|
|
||||||
|
let gillPath = new Path()
|
||||||
|
.move(points.body17)
|
||||||
|
.curve(points.body17cp1, points.body18cp2, points.body18)
|
||||||
|
points.gill1s = gillPath.shiftFractionAlong(0.018)
|
||||||
|
points.gill2s = gillPath.shiftFractionAlong(0.08 * 1 + 0.018)
|
||||||
|
points.gill3s = gillPath.shiftFractionAlong(0.08 * 2 + 0.018)
|
||||||
|
points.gill4s = gillPath.shiftFractionAlong(0.08 * 3 + 0.018)
|
||||||
|
points.gill5s = gillPath.shiftFractionAlong(0.08 * 4 + 0.018)
|
||||||
|
points.gill1e = points.gill1s.shift(gillAngle, gillLength *(1 +(0 * 0.08)))
|
||||||
|
points.gill2e = points.gill2s.shift(gillAngle, gillLength *(1 +(1 * 0.08)))
|
||||||
|
points.gill3e = points.gill3s.shift(gillAngle, gillLength *(1 +(2 * 0.08)))
|
||||||
|
points.gill4e = points.gill4s.shift(gillAngle, gillLength *(1 +(3 * 0.08)))
|
||||||
|
points.gill5e = points.gill5s.shift(gillAngle, gillLength *(1 +(4 * 0.08)))
|
||||||
|
|
||||||
|
paths.gill1 = new Path().move(points.gill1s).line(points.gill1e)
|
||||||
|
paths.gill2 = new Path().move(points.gill2s).line(points.gill2e)
|
||||||
|
paths.gill3 = new Path().move(points.gill3s).line(points.gill3e)
|
||||||
|
paths.gill4 = new Path().move(points.gill4s).line(points.gill4e)
|
||||||
|
paths.gill5 = new Path().move(points.gill5s).line(points.gill5e)
|
||||||
|
|
||||||
|
store.set( 'tailWidth', points.body13.dist( points.body14 ) )
|
||||||
|
store.set( 'tailCpAngle', points.body13.angle(points.body13cp1) - points.body13.angle(points.body14) )
|
||||||
|
store.set( 'tailCpDist', body13cp1d )
|
||||||
|
|
||||||
|
store.set( 'topFinOpening', points.body16.dist( points.body17 ))
|
||||||
|
store.set( 'topFinOpeningLength', (new Path().move(points.body16).curve(points.body16cp1, points.body17cp2, points.body17)).length())
|
||||||
|
|
||||||
|
store.set( 'faceTopLength', (new Path().move(points.body17).curve(points.body17cp1, points.body18cp2, points.body18).curve(points.body18cp1, points.body19cp2, points.body19)).length())
|
||||||
|
|
||||||
|
store.set( 'bellyLength', (new Path().move(points.body17).curve(points.body17cp1, points.body18cp2, points.body18).curve(points.body18cp1, points.body19cp2, points.body19)).length())
|
||||||
|
store.set( 'bellyTailLength', (new Path().move(points.body15).curve(points.body15cp1, points.body16cp2, points.body16)).length())
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if( sa ) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
|
||||||
|
macro('ld', {
|
||||||
|
from: points.body13,
|
||||||
|
to: points.body01,
|
||||||
|
d: -5,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
131
packages/hi/src/bottomFin.js
Normal file
131
packages/hi/src/bottomFin.js
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
|
||||||
|
let bottomFin01_02d = 250.63638754690027 * options.size
|
||||||
|
let bottomFin01_02a = 119.34849371430543
|
||||||
|
let bottomFin01_03d = 137.70322741678933 * options.size
|
||||||
|
let bottomFin01_03a = 175.11970494988498
|
||||||
|
let bottomFin01cp1d = 133.21819413653674 * options.size
|
||||||
|
let bottomFin01cp2d = 51.94197687805115 * options.size
|
||||||
|
let bottomFin01cp1a = 95.20910872095476
|
||||||
|
let bottomFin01cp2a = 158.66090918215986
|
||||||
|
let bottomFin02cp1d = 29.25974733588791 * options.size
|
||||||
|
let bottomFin02cp2d = 31.28292571739416 * options.size
|
||||||
|
let bottomFin02cp1a = 208.55316756249104
|
||||||
|
let bottomFin02cp2a = 28.113642612639804
|
||||||
|
let bottomFin03cp1d = 53.31550082293142 * options.size
|
||||||
|
let bottomFin03cp2d = 177.65809391356197 * options.size
|
||||||
|
let bottomFin03cp1a = 9.79694130335566
|
||||||
|
let bottomFin03cp2a = 80.81868300891519
|
||||||
|
|
||||||
|
let finLength = store.get('aboveMouthFinLength') + store.get('bellyFinLength')
|
||||||
|
let finCircumference = store.get('topFinCircumference')
|
||||||
|
|
||||||
|
console.log({ bellyFinLength: store.get('bellyFinLength') })
|
||||||
|
console.log({ finCircumference: store.get('topFinCircumference') })
|
||||||
|
|
||||||
|
let diff = 0
|
||||||
|
let iteration = 0
|
||||||
|
do {
|
||||||
|
points.bottomFin01 = new Point(0, 0)
|
||||||
|
points.bottomFin02 = points.bottomFin01.shift(bottomFin01_02a, bottomFin01_02d)
|
||||||
|
points.bottomFin03 = points.bottomFin01.shift(bottomFin01_03a, bottomFin01_03d)
|
||||||
|
|
||||||
|
points.bottomFin01cp1 = points.bottomFin01.shift(bottomFin01cp1a, bottomFin01cp1d)
|
||||||
|
points.bottomFin01cp2 = points.bottomFin01.shift(bottomFin01cp2a, bottomFin01cp2d)
|
||||||
|
points.bottomFin02cp1 = points.bottomFin02.shift(bottomFin02cp1a, bottomFin02cp1d)
|
||||||
|
points.bottomFin02cp2 = points.bottomFin02.shift(bottomFin02cp2a, bottomFin02cp2d)
|
||||||
|
points.bottomFin03cp1 = points.bottomFin03.shift(bottomFin03cp1a, bottomFin03cp1d)
|
||||||
|
points.bottomFin03cp2 = points.bottomFin03.shift(bottomFin03cp2a, bottomFin03cp2d)
|
||||||
|
diff =
|
||||||
|
finLength -
|
||||||
|
new Path()
|
||||||
|
.move(points.bottomFin03)
|
||||||
|
.curve(points.bottomFin03cp1, points.bottomFin01cp2, points.bottomFin01)
|
||||||
|
.length()
|
||||||
|
|
||||||
|
bottomFin01_03d = bottomFin01_03d + diff
|
||||||
|
iteration++
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
console.log({ iteration1: iteration })
|
||||||
|
|
||||||
|
diff = 0
|
||||||
|
iteration = 0
|
||||||
|
do {
|
||||||
|
points.bottomFin01 = new Point(0, 0)
|
||||||
|
points.bottomFin02 = points.bottomFin01.shift(bottomFin01_02a, bottomFin01_02d)
|
||||||
|
points.bottomFin03 = points.bottomFin01.shift(bottomFin01_03a, bottomFin01_03d)
|
||||||
|
|
||||||
|
points.bottomFin01cp1 = points.bottomFin01.shift(bottomFin01cp1a, bottomFin01cp1d)
|
||||||
|
points.bottomFin01cp2 = points.bottomFin01.shift(bottomFin01cp2a, bottomFin01cp2d)
|
||||||
|
points.bottomFin02cp1 = points.bottomFin02.shift(bottomFin02cp1a, bottomFin02cp1d)
|
||||||
|
points.bottomFin02cp2 = points.bottomFin02.shift(bottomFin02cp2a, bottomFin02cp2d)
|
||||||
|
points.bottomFin03cp1 = points.bottomFin03.shift(bottomFin03cp1a, bottomFin03cp1d)
|
||||||
|
points.bottomFin03cp2 = points.bottomFin03.shift(bottomFin03cp2a, bottomFin03cp2d)
|
||||||
|
diff =
|
||||||
|
finCircumference -
|
||||||
|
new Path()
|
||||||
|
.move(points.bottomFin01)
|
||||||
|
.curve(points.bottomFin01cp1, points.bottomFin02cp2, points.bottomFin02)
|
||||||
|
.curve(points.bottomFin02cp1, points.bottomFin03cp2, points.bottomFin03)
|
||||||
|
.length()
|
||||||
|
|
||||||
|
bottomFin01_02d = bottomFin01_02d + diff
|
||||||
|
iteration++
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
|
||||||
|
console.log({ iteration2: iteration })
|
||||||
|
|
||||||
|
console.log({ finLength: finLength })
|
||||||
|
console.log({
|
||||||
|
actual: new Path()
|
||||||
|
.move(points.bottomFin03)
|
||||||
|
.curve(points.bottomFin03cp1, points.bottomFin01cp2, points.bottomFin01)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.bottomFin01)
|
||||||
|
.curve(points.bottomFin01cp1, points.bottomFin02cp2, points.bottomFin02)
|
||||||
|
.curve(points.bottomFin02cp1, points.bottomFin03cp2, points.bottomFin03)
|
||||||
|
.curve(points.bottomFin03cp1, points.bottomFin01cp2, points.bottomFin01)
|
||||||
|
.close()
|
||||||
|
|
||||||
|
console.log({
|
||||||
|
bottomFinCirc: new Path()
|
||||||
|
.move(points.bottomFin01)
|
||||||
|
.curve(points.bottomFin01cp1, points.bottomFin02cp2, points.bottomFin02)
|
||||||
|
.curve(points.bottomFin02cp1, points.bottomFin03cp2, points.bottomFin03)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
points.bottomFinSnippet = new Path()
|
||||||
|
.move(points.bottomFin01)
|
||||||
|
.curve(points.bottomFin01cp2, points.bottomFin03cp1, points.bottomFin03)
|
||||||
|
.shiftAlong(store.get('aboveMouthFinLength'))
|
||||||
|
snippets.bottomFin = new Snippet('bnotch', points.bottomFinSnippet)
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
23
packages/hi/src/index.js
Normal file
23
packages/hi/src/index.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import freesewing from '@freesewing/core'
|
||||||
|
import plugins from '@freesewing/plugin-bundle'
|
||||||
|
import config from '../config'
|
||||||
|
import draftBody from './body'
|
||||||
|
import draftTail from './tail'
|
||||||
|
import draftMouth from './mouth'
|
||||||
|
import draftAboveMouth from './aboveMouth'
|
||||||
|
import draftBelly from './belly'
|
||||||
|
import draftTopFin from './topFin'
|
||||||
|
import draftBottomFin from './bottomFin'
|
||||||
|
|
||||||
|
// Create design
|
||||||
|
const Pattern = new freesewing.Design(config, plugins)
|
||||||
|
|
||||||
|
Pattern.prototype.draftBody = draftBody
|
||||||
|
Pattern.prototype.draftTail = draftTail
|
||||||
|
Pattern.prototype.draftMouth = draftMouth
|
||||||
|
Pattern.prototype.draftAboveMouth = draftAboveMouth
|
||||||
|
Pattern.prototype.draftBelly = draftBelly
|
||||||
|
Pattern.prototype.draftTopFin = draftTopFin
|
||||||
|
Pattern.prototype.draftBottomFin = draftBottomFin
|
||||||
|
|
||||||
|
export default Pattern
|
94
packages/hi/src/mouth.js
Normal file
94
packages/hi/src/mouth.js
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
let mouth01_02d = 141.93684055893488 * options.size
|
||||||
|
let mouth01_02a = 312.8254216093024
|
||||||
|
let mouth01_03d = 42.496 * options.size
|
||||||
|
let mouth01_03a = 270
|
||||||
|
let mouth01cp1d = 38.6204 * options.size
|
||||||
|
let mouth01cp1a = 0
|
||||||
|
let mouth02cp1d = 59.58739935676417 * options.size
|
||||||
|
let mouth02cp2d = 73.53520117766728 * options.size
|
||||||
|
let mouth02cp1a = 128.07726051101747
|
||||||
|
let mouth02cp2a = 95.21339058299296
|
||||||
|
let mouth03cp2d = 33.142 * options.size
|
||||||
|
let mouth03cp2a = 0
|
||||||
|
|
||||||
|
points.mouth01 = new Point(0, 0)
|
||||||
|
points.mouth02 = points.mouth01.shift(mouth01_02a, mouth01_02d)
|
||||||
|
points.mouth03 = points.mouth01.shift(mouth01_03a, mouth01_03d)
|
||||||
|
|
||||||
|
points.mouth01cp1 = points.mouth01.shift(mouth01cp1a, mouth01cp1d)
|
||||||
|
points.mouth02cp1 = points.mouth02.shift(mouth02cp1a, mouth02cp1d)
|
||||||
|
points.mouth02cp2 = points.mouth02.shift(mouth02cp2a, mouth02cp2d)
|
||||||
|
points.mouth03cp2 = points.mouth03.shift(mouth03cp2a, mouth03cp2d)
|
||||||
|
|
||||||
|
points.mouth04 = points.mouth02.flipX()
|
||||||
|
|
||||||
|
points.mouth01cp2 = points.mouth01cp1.flipX()
|
||||||
|
points.mouth04cp2 = points.mouth02cp1.flipX()
|
||||||
|
points.mouth04cp1 = points.mouth02cp2.flipX()
|
||||||
|
points.mouth03cp1 = points.mouth03cp2.flipX()
|
||||||
|
|
||||||
|
console.log({ mouth01_02d: points.mouth01.dist(points.mouth02) })
|
||||||
|
console.log({ mouth01_02a: points.mouth01.angle(points.mouth02) })
|
||||||
|
console.log({ mouth01_03d: points.mouth01.dist(points.mouth03) })
|
||||||
|
console.log({ mouth01_03a: points.mouth01.angle(points.mouth03) })
|
||||||
|
|
||||||
|
console.log({ mouth01cp1d: points.mouth01.dist(points.mouth01cp1) })
|
||||||
|
console.log({ mouth01cp1a: points.mouth01.angle(points.mouth01cp1) })
|
||||||
|
console.log({ mouth02cp1d: points.mouth02.dist(points.mouth02cp1) })
|
||||||
|
console.log({ mouth02cp2d: points.mouth02.dist(points.mouth02cp2) })
|
||||||
|
console.log({ mouth02cp1a: points.mouth02.angle(points.mouth02cp1) })
|
||||||
|
console.log({ mouth02cp2a: points.mouth02.angle(points.mouth02cp2) })
|
||||||
|
console.log({ mouth03cp2d: points.mouth03.dist(points.mouth03cp2) })
|
||||||
|
console.log({ mouth03cp2a: points.mouth03.angle(points.mouth03cp2) })
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.mouth01)
|
||||||
|
.curve(points.mouth01cp2, points.mouth04cp1, points.mouth04)
|
||||||
|
.curve(points.mouth04cp2, points.mouth03cp1, points.mouth03)
|
||||||
|
.curve(points.mouth03cp2, points.mouth02cp1, points.mouth02)
|
||||||
|
.curve(points.mouth02cp2, points.mouth01cp1, points.mouth01)
|
||||||
|
|
||||||
|
store.set(
|
||||||
|
'mouthTopLength',
|
||||||
|
new Path()
|
||||||
|
.move(points.mouth01)
|
||||||
|
.curve(points.mouth01cp1, points.mouth02cp2, points.mouth02)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
store.set(
|
||||||
|
'mouthBottomLength',
|
||||||
|
new Path()
|
||||||
|
.move(points.mouth03)
|
||||||
|
.curve(points.mouth03cp1, points.mouth04cp2, points.mouth04)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
|
||||||
|
snippets.mouthMidTop = new Snippet('bnotch', points.mouth01)
|
||||||
|
snippets.mouthMidBottom = new Snippet('bnotch', points.mouth03)
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
93
packages/hi/src/tail.js
Normal file
93
packages/hi/src/tail.js
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
|
||||||
|
let tail01_02d = 192.0129724628 * options.size
|
||||||
|
let tail01_02a = 53.242955551234914
|
||||||
|
let tail01_03d = 115.38057785000036 * options.size
|
||||||
|
let tail01_03a = 106.95066736265407
|
||||||
|
let tail01_04d = 230.05210782342334 * options.size
|
||||||
|
let tail01_04a = 138.66344842617497
|
||||||
|
let tail01_05d = 95.12771141996424 * options.size
|
||||||
|
let tail01_05a = 173.38284569091573
|
||||||
|
let tail01cp1d = 156.52907796955816 * options.size
|
||||||
|
let tail01cp2d = 33.33694275124821 * options.size
|
||||||
|
let tail01cp1a = 40.69161792982998
|
||||||
|
let tail01cp2a = 150.8191939475001
|
||||||
|
let tail02cp1d = 20.1307852802616 * options.size
|
||||||
|
let tail02cp2d = 26.418081118809575 * options.size
|
||||||
|
let tail02cp1a = 129.66709301725697
|
||||||
|
let tail02cp2a = 303.9168409570558
|
||||||
|
let tail03cp1d = 41.577 * options.size
|
||||||
|
let tail03cp2d = 41.575999999999965 * options.size
|
||||||
|
let tail03cp1a = 180
|
||||||
|
let tail03cp2a = -0
|
||||||
|
let tail04cp1d = 18.83137554720844 * options.size
|
||||||
|
let tail04cp2d = 18.830271479721173 * options.size
|
||||||
|
let tail04cp1a = 218.47354143777738
|
||||||
|
let tail04cp2a = 38.483984913053284
|
||||||
|
let tail05cp1d = 38.59528397356339 * options.size
|
||||||
|
let tail05cp2d = 126.7372982195849 * options.size
|
||||||
|
let tail05cp1a = 14.169822482118544
|
||||||
|
let tail05cp2a = 128.3396902984
|
||||||
|
|
||||||
|
points.tail01 = new Point(0, 0)
|
||||||
|
points.tail02 = points.tail01.shift(tail01_02a, tail01_02d)
|
||||||
|
points.tail03 = points.tail01.shift(tail01_03a, tail01_03d)
|
||||||
|
points.tail04 = points.tail01.shift(tail01_04a, tail01_04d)
|
||||||
|
points.tail05 = points.tail01.shift(tail01_05a, tail01_05d)
|
||||||
|
|
||||||
|
points.tail01cp1 = points.tail01.shift(tail01cp1a, tail01cp1d)
|
||||||
|
points.tail01cp2 = points.tail01.shift(tail01cp2a, tail01cp2d)
|
||||||
|
points.tail02cp1 = points.tail02.shift(tail02cp1a, tail02cp1d)
|
||||||
|
points.tail02cp2 = points.tail02.shift(tail02cp2a, tail02cp2d)
|
||||||
|
points.tail03cp1 = points.tail03.shift(tail03cp1a, tail03cp1d)
|
||||||
|
points.tail03cp2 = points.tail03.shift(tail03cp2a, tail03cp2d)
|
||||||
|
points.tail04cp1 = points.tail04.shift(tail04cp1a, tail04cp1d)
|
||||||
|
points.tail04cp2 = points.tail04.shift(tail04cp2a, tail04cp2d)
|
||||||
|
points.tail05cp1 = points.tail05.shift(tail05cp1a, tail05cp1d)
|
||||||
|
points.tail05cp2 = points.tail05.shift(tail05cp2a, tail05cp2d)
|
||||||
|
|
||||||
|
// Adjust tail opening:
|
||||||
|
points.tail05 = points.tail01.shift(points.tail01.angle(points.tail05), store.get('tailWidth'))
|
||||||
|
points.tail01cp2 = points.tail01.shift(
|
||||||
|
points.tail01.angle(points.tail05) - store.get('tailCpAngle'),
|
||||||
|
store.get('tailCpDist')
|
||||||
|
)
|
||||||
|
points.tail05cp1 = points.tail05.shift(
|
||||||
|
points.tail05.angle(points.tail01) + store.get('tailCpAngle'),
|
||||||
|
store.get('tailCpDist')
|
||||||
|
)
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.tail01)
|
||||||
|
.curve(points.tail01cp1, points.tail02cp2, points.tail02)
|
||||||
|
.curve(points.tail02cp1, points.tail03cp2, points.tail03)
|
||||||
|
.curve(points.tail03cp1, points.tail04cp2, points.tail04)
|
||||||
|
.curve(points.tail04cp1, points.tail05cp2, points.tail05)
|
||||||
|
.curve(points.tail05cp1, points.tail01cp2, points.tail01)
|
||||||
|
.close()
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
105
packages/hi/src/topFin.js
Normal file
105
packages/hi/src/topFin.js
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
export default function (part) {
|
||||||
|
let {
|
||||||
|
store,
|
||||||
|
sa,
|
||||||
|
Point,
|
||||||
|
points,
|
||||||
|
Path,
|
||||||
|
paths,
|
||||||
|
Snippet,
|
||||||
|
snippets,
|
||||||
|
options,
|
||||||
|
measurements,
|
||||||
|
complete,
|
||||||
|
paperless,
|
||||||
|
macro,
|
||||||
|
} = part.shorthand()
|
||||||
|
|
||||||
|
|
||||||
|
let topFinOpening = store.get('topFinOpening')
|
||||||
|
let topFinOpeningLength = store.get('topFinOpeningLength')
|
||||||
|
|
||||||
|
let topFin01_02d = 256.9537569065251 * options.size
|
||||||
|
let topFin01_02a = 325.46697637215823
|
||||||
|
let topFin01_03d = 149.5416276819869 * options.size
|
||||||
|
let topFin01_03a = 275.4353725228365
|
||||||
|
let topFin01cp1d = 178.52481158058 * options.size
|
||||||
|
let topFin01cp2d = 27.240286624072077 * options.size
|
||||||
|
let topFin01cp1a = 346.31732410079576
|
||||||
|
let topFin01cp2a = 254.05347154462484
|
||||||
|
let topFin02cp1d = 25.871054481794893 * options.size
|
||||||
|
let topFin02cp2d = 12.154549189501026 * options.size
|
||||||
|
let topFin02cp1a = 236.80010054081936
|
||||||
|
let topFin02cp2a = 56.66685795767527
|
||||||
|
let topFin03cp1d = 39.024661651837555 * options.size
|
||||||
|
let topFin03cp2d = 76.08965682877273 * options.size
|
||||||
|
let topFin03cp1a = 113.40393219481112
|
||||||
|
let topFin03cp2a = 22.511206474810457
|
||||||
|
|
||||||
|
let diff = 0
|
||||||
|
let iteration = 0
|
||||||
|
do {
|
||||||
|
points.topFin01 = new Point(0, 0)
|
||||||
|
points.topFin02 = points.topFin01.shift(topFin01_02a, topFin01_02d)
|
||||||
|
points.topFin03 = points.topFin01.shift(topFin01_03a, topFinOpening) // topFin01_03d
|
||||||
|
|
||||||
|
points.topFin01cp1 = points.topFin01.shift(topFin01cp1a, topFin01cp1d)
|
||||||
|
points.topFin01cp2 = points.topFin01.shift(topFin01cp2a, topFin01cp2d)
|
||||||
|
points.topFin02cp1 = points.topFin02.shift(topFin02cp1a, topFin02cp1d)
|
||||||
|
points.topFin02cp2 = points.topFin02.shift(topFin02cp2a, topFin02cp2d)
|
||||||
|
points.topFin03cp1 = points.topFin03.shift(topFin03cp1a, topFin03cp1d)
|
||||||
|
points.topFin03cp2 = points.topFin03.shift(topFin03cp2a, topFin03cp2d)
|
||||||
|
diff =
|
||||||
|
topFinOpeningLength -
|
||||||
|
new Path()
|
||||||
|
.move(points.topFin03)
|
||||||
|
.curve(points.topFin03cp1, points.topFin01cp2, points.topFin01)
|
||||||
|
.length()
|
||||||
|
|
||||||
|
topFinOpening = topFinOpening + diff
|
||||||
|
iteration++
|
||||||
|
} while ((diff < -1 || diff > 1) && iteration < 100)
|
||||||
|
|
||||||
|
console.log({ iteration: iteration })
|
||||||
|
|
||||||
|
paths.seam = new Path()
|
||||||
|
.move(points.topFin01)
|
||||||
|
.curve(points.topFin01cp2, points.topFin03cp1, points.topFin03)
|
||||||
|
.curve(points.topFin03cp2, points.topFin02cp1, points.topFin02)
|
||||||
|
.curve(points.topFin02cp2, points.topFin01cp1, points.topFin01)
|
||||||
|
.close()
|
||||||
|
|
||||||
|
console.log({ topFinLength1: store.get('topFinOpeningLength') })
|
||||||
|
console.log({
|
||||||
|
topFinLength2: new Path()
|
||||||
|
.move(points.topFin03)
|
||||||
|
.curve(points.topFin03cp1, points.topFin01cp2, points.topFin01)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
store.set(
|
||||||
|
'topFinCircumference',
|
||||||
|
new Path()
|
||||||
|
.move(points.topFin01)
|
||||||
|
.curve(points.topFin01cp1, points.topFin02cp2, points.topFin02)
|
||||||
|
.curve(points.topFin02cp1, points.topFin03cp2, points.topFin03)
|
||||||
|
.length()
|
||||||
|
)
|
||||||
|
|
||||||
|
console.log({
|
||||||
|
topFinCirc: new Path()
|
||||||
|
.move(points.topFin01)
|
||||||
|
.curve(points.topFin01cp1, points.topFin02cp2, points.topFin02)
|
||||||
|
.curve(points.topFin02cp1, points.topFin03cp2, points.topFin03)
|
||||||
|
.length(),
|
||||||
|
})
|
||||||
|
|
||||||
|
// Complete?
|
||||||
|
if (complete) {
|
||||||
|
if (sa) {
|
||||||
|
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return part
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue