add plugin-cutlist to plugin-annotations
This commit is contained in:
parent
04bab16cbd
commit
adbc817863
27 changed files with 229 additions and 513 deletions
1
.github/ISSUE_TEMPLATE/01_bug-report.yaml
vendored
1
.github/ISSUE_TEMPLATE/01_bug-report.yaml
vendored
|
@ -78,7 +78,6 @@ body:
|
||||||
- plugins/plugin-bundle
|
- plugins/plugin-bundle
|
||||||
- plugins/plugin-bust
|
- plugins/plugin-bust
|
||||||
- plugins/plugin-buttons
|
- plugins/plugin-buttons
|
||||||
- plugins/plugin-cutlist
|
|
||||||
- plugins/plugin-cutonfold
|
- plugins/plugin-cutonfold
|
||||||
- plugins/plugin-dimension
|
- plugins/plugin-dimension
|
||||||
- plugins/plugin-flip
|
- plugins/plugin-flip
|
||||||
|
|
1
.github/boring-cyborg.yml
vendored
1
.github/boring-cyborg.yml
vendored
|
@ -12,7 +12,6 @@ labelPRBasedOnFilePath:
|
||||||
":electric_plug: plugin-annotations": [ plugins/plugin-annotations/* ]
|
":electric_plug: plugin-annotations": [ plugins/plugin-annotations/* ]
|
||||||
":electric_plug: plugin-bundle": [ plugins/plugin-bundle/* ]
|
":electric_plug: plugin-bundle": [ plugins/plugin-bundle/* ]
|
||||||
":electric_plug: plugin-bust": [ plugins/plugin-bust/* ]
|
":electric_plug: plugin-bust": [ plugins/plugin-bust/* ]
|
||||||
":electric_plug: plugin-cutlist": [ plugins/plugin-cutlist/* ]
|
|
||||||
":electric_plug: plugin-flip": [ plugins/plugin-flip/* ]
|
":electric_plug: plugin-flip": [ plugins/plugin-flip/* ]
|
||||||
":electric_plug: plugin-gore": [ plugins/plugin-gore/* ]
|
":electric_plug: plugin-gore": [ plugins/plugin-gore/* ]
|
||||||
":electric_plug: plugin-i18n": [ plugins/plugin-i18n/* ]
|
":electric_plug: plugin-i18n": [ plugins/plugin-i18n/* ]
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"plugin-annotations": "A FreeSewing plugin that provides pattern annotations",
|
"plugin-annotations": "A FreeSewing plugin that provides pattern annotations",
|
||||||
"plugin-bundle": "An umbrella package of 8 essential FreeSewing build-time plugins",
|
"plugin-bundle": "An umbrella package of 8 essential FreeSewing build-time plugins",
|
||||||
"plugin-bust": "A FreeSewing plugin that helps with bust-adjusting menswear patterns",
|
"plugin-bust": "A FreeSewing plugin that helps with bust-adjusting menswear patterns",
|
||||||
"plugin-cutlist": "A FreeSewing plugin to store data regarding a pattern's cutlist",
|
|
||||||
"plugin-flip": "A FreeSewing plugin to flip parts horizontally",
|
"plugin-flip": "A FreeSewing plugin to flip parts horizontally",
|
||||||
"plugin-gore": "A FreeSewing plugin to generate gores for a semi-sphere or dome",
|
"plugin-gore": "A FreeSewing plugin to generate gores for a semi-sphere or dome",
|
||||||
"plugin-i18n": "A FreeSewing plugin for pattern translation",
|
"plugin-i18n": "A FreeSewing plugin for pattern translation",
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import { back } from './back.mjs'
|
import { back } from './back.mjs'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
|
|
||||||
export const frontSideDart = {
|
export const frontSideDart = {
|
||||||
name: 'bella.frontSideDart',
|
name: 'bella.frontSideDart',
|
||||||
after: back,
|
after: back,
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({
|
draft: ({
|
||||||
store,
|
store,
|
||||||
sa,
|
sa,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { back as bentBack } from '@freesewing/bent'
|
import { back as bentBack } from '@freesewing/bent'
|
||||||
import { calculateRatios } from './shared.mjs'
|
import { calculateRatios } from './shared.mjs'
|
||||||
import { hidePresets } from '@freesewing/core'
|
import { hidePresets } from '@freesewing/core'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
|
|
||||||
function draftCarltonBack({
|
function draftCarltonBack({
|
||||||
paperless,
|
paperless,
|
||||||
|
@ -250,6 +250,6 @@ export const back = {
|
||||||
waistEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
waistEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
||||||
seatEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
seatEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
||||||
},
|
},
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: draftCarltonBack,
|
draft: draftCarltonBack,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { front as bentFront } from '@freesewing/bent'
|
import { front as bentFront } from '@freesewing/bent'
|
||||||
import { calculateRatios } from './shared.mjs'
|
import { calculateRatios } from './shared.mjs'
|
||||||
import { hidePresets } from '@freesewing/core'
|
import { hidePresets } from '@freesewing/core'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
|
|
||||||
function draftCarltonFront({
|
function draftCarltonFront({
|
||||||
paperless,
|
paperless,
|
||||||
|
@ -506,6 +506,6 @@ export const front = {
|
||||||
seatEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
seatEase: { pct: 14, min: 8, max: 25, menu: 'fit' },
|
||||||
innerPocketWeltHeight: { pct: 3.5, min: 2.5, max: 5, menu: 'pockets' },
|
innerPocketWeltHeight: { pct: 3.5, min: 2.5, max: 5, menu: 'pockets' },
|
||||||
},
|
},
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: draftCarltonFront,
|
draft: draftCarltonFront,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { topSleeve as bentTopSleeve } from '@freesewing/bent'
|
import { topSleeve as bentTopSleeve } from '@freesewing/bent'
|
||||||
import { front as bentFront } from '@freesewing/bent'
|
import { front as bentFront } from '@freesewing/bent'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
|
|
||||||
function draftCarltonTopSleeve({
|
function draftCarltonTopSleeve({
|
||||||
paperless,
|
paperless,
|
||||||
|
@ -184,6 +184,6 @@ export const topSleeve = {
|
||||||
sleevecapHeight: { pct: 45, min: 40, max: 60, menu: 'advanced' },
|
sleevecapHeight: { pct: 45, min: 40, max: 60, menu: 'advanced' },
|
||||||
sleevecapEase: { pct: 1, min: 0, max: 10, menu: 'advanced' },
|
sleevecapEase: { pct: 1, min: 0, max: 10, menu: 'advanced' },
|
||||||
},
|
},
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: draftCarltonTopSleeve,
|
draft: draftCarltonTopSleeve,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { underSleeve as bentUnderSleeve } from '@freesewing/bent'
|
import { underSleeve as bentUnderSleeve } from '@freesewing/bent'
|
||||||
import { front as bentFront } from '@freesewing/bent'
|
import { front as bentFront } from '@freesewing/bent'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
|
|
||||||
function draftCarltonUnderSleeve({
|
function draftCarltonUnderSleeve({
|
||||||
paperless,
|
paperless,
|
||||||
|
@ -163,6 +163,6 @@ export const underSleeve = {
|
||||||
sleevecapHeight: { pct: 45, min: 40, max: 60, menu: 'advanced' },
|
sleevecapHeight: { pct: 45, min: 40, max: 60, menu: 'advanced' },
|
||||||
sleevecapEase: { pct: 1, min: 0, max: 10, menu: 'advanced' },
|
sleevecapEase: { pct: 1, min: 0, max: 10, menu: 'advanced' },
|
||||||
},
|
},
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: draftCarltonUnderSleeve,
|
draft: draftCarltonUnderSleeve,
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
title: "Include Cutting Instructions"
|
title: "Include Cutting Instructions"
|
||||||
---
|
---
|
||||||
|
|
||||||
To include cutting instructions with your part, use the [cutlist plugin](/reference/plugins/cutlist) to add the [`cutlist.addCut` method](/reference/plugins/cutlist#addcut) to your part's [`store`](/reference/api/store/extend)
|
To include cutting instructions with your part, use the [annotations plugin](/reference/plugins/annotations) to add the [`cutlist.addCut` method](/reference/plugins/cutlist#addcut) to your part's [`store`](/reference/api/store/extend)
|
||||||
|
|
||||||
<Tip>When you use the cutlist plugin, the [grainline plugin](/reference/plugins/grainline) and the [cut on fold plugin](/reference/plugins/cutonfold) will automatically add grain and fold information to the cutting instructions </Tip>
|
<Tip>The [grainline macro](/reference/macros/grainline) and the [cutonfold macro](/reference/macros/cutonfold) will automatically add grain and fold information to the cutting instructions </Tip>
|
||||||
|
|
||||||
<Tip>These cutting instructions get used by the [title macro](/reference/macros/title), so be sure to add them before adding your part's title. </Tip>
|
<Tip>These cutting instructions get used by the [title macro](/reference/macros/title), so be sure to add them before adding your part's title. </Tip>
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ You can use any `string` you want for your material, but here are some standard
|
||||||
For simple cutting instructions, you can rely on the default method parameters
|
For simple cutting instructions, you can rely on the default method parameters
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
const part = {
|
const part = {
|
||||||
name: 'example.front',
|
name: 'example.front',
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({part, store}) => {
|
draft: ({part, store}) => {
|
||||||
// add instructions to cut two mirrored from main fabric
|
// add instructions to cut two mirrored from main fabric
|
||||||
store.cutlist.addCut()
|
store.cutlist.addCut()
|
||||||
|
@ -64,11 +64,11 @@ For many designs, you'll want more than just "Cut 2 mirrored from Main Fabric"
|
||||||
You can override the default values to specify different materials, number of pieces to cut, and whether they should be mirrored or identical
|
You can override the default values to specify different materials, number of pieces to cut, and whether they should be mirrored or identical
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
const part = {
|
const part = {
|
||||||
name: 'example.front',
|
name: 'example.front',
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({part, store}) => {
|
draft: ({part, store}) => {
|
||||||
// add instructions to cut three identical from lining
|
// add instructions to cut three identical from lining
|
||||||
store.cutlist.addCut({cut: 3, material: 'lining', identical: true})
|
store.cutlist.addCut({cut: 3, material: 'lining', identical: true})
|
||||||
|
@ -80,11 +80,11 @@ const part = {
|
||||||
You can add as many sets of instructions as you need
|
You can add as many sets of instructions as you need
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
const part = {
|
const part = {
|
||||||
name: 'example.front',
|
name: 'example.front',
|
||||||
plugins: [pluginCutlist],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({part, store}) => {
|
draft: ({part, store}) => {
|
||||||
// add instructions to cut four mirrored from main fabric
|
// add instructions to cut four mirrored from main fabric
|
||||||
store.cutlist.addCut({cut: 4})
|
store.cutlist.addCut({cut: 4})
|
||||||
|
@ -100,12 +100,11 @@ const part = {
|
||||||
Sometimes you want some pieces cut on the fold and others cut as halves to seam together.
|
Sometimes you want some pieces cut on the fold and others cut as halves to seam together.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-cutlist'
|
||||||
import {pluginCutonfold} from '@freesewing/plugin-cutonfold'
|
|
||||||
|
|
||||||
const part = {
|
const part = {
|
||||||
name: 'example.front',
|
name: 'example.front',
|
||||||
plugins: [pluginCutlist, pluginCutonfold],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({part, points, Point, macro, store}) => {
|
draft: ({part, points, Point, macro, store}) => {
|
||||||
// set the cut on fold line
|
// set the cut on fold line
|
||||||
points.p1 = new Point(0, 0)
|
points.p1 = new Point(0, 0)
|
||||||
|
@ -127,12 +126,11 @@ const part = {
|
||||||
You set the grainline on a piece, but you also need some to be cut on the bias
|
You set the grainline on a piece, but you also need some to be cut on the bias
|
||||||
|
|
||||||
```js
|
```js
|
||||||
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-cutlist'
|
||||||
import {pluginGrainline} from '@freesewing/plugin-grainline'
|
|
||||||
|
|
||||||
const part = {
|
const part = {
|
||||||
name: 'example.front',
|
name: 'example.front',
|
||||||
plugins: [pluginCutlist, pluginGrainline],
|
plugins: [pluginAnnotations],
|
||||||
draft: ({part, points, Point, macro, store}) => {
|
draft: ({part, points, Point, macro, store}) => {
|
||||||
// set the cut on fold line
|
// set the cut on fold line
|
||||||
points.p1 = new Point(0, 0)
|
points.p1 = new Point(0, 0)
|
||||||
|
|
|
@ -24,6 +24,7 @@ The annotations plugin provides the following macros:
|
||||||
- [bartackFractionAlong](/reference/macros/bartackfractionalong)
|
- [bartackFractionAlong](/reference/macros/bartackfractionalong)
|
||||||
- [crossbox](/reference/macros/crossbox)
|
- [crossbox](/reference/macros/crossbox)
|
||||||
- [cutonfold](/reference/macros/cutonfold)
|
- [cutonfold](/reference/macros/cutonfold)
|
||||||
|
- [grainline](/reference/macros/grainline)
|
||||||
- [hd](/reference/macros/hd)
|
- [hd](/reference/macros/hd)
|
||||||
- [ld](/reference/macros/ld)
|
- [ld](/reference/macros/ld)
|
||||||
- [rmad](/reference/macros/rmad)
|
- [rmad](/reference/macros/rmad)
|
||||||
|
@ -35,6 +36,11 @@ The annotations plugin provides the following macros:
|
||||||
- [title](/reference/macros/title)
|
- [title](/reference/macros/title)
|
||||||
- [vd](/reference/macros/vd)
|
- [vd](/reference/macros/vd)
|
||||||
|
|
||||||
|
The annotations plugin also provides [methods to the Store for adding cutting instructions](#methods)
|
||||||
|
|
||||||
|
<Tip> For an in-depth look at how to add cutting instructions to your part, see our [cutlist how-to](/howtos/design/cutlist) </Tip>
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -54,6 +60,160 @@ import { annotationsPlugin } from '@freesewing/plugin-banner'
|
||||||
import { pluginAnnotations } from '@freesewing/plugin-banner'
|
import { pluginAnnotations } from '@freesewing/plugin-banner'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### store.cutlist.addCut
|
||||||
|
|
||||||
|
The `store.cutlist.addCut()` method will add a set of cutting instructions for the part
|
||||||
|
|
||||||
|
#### Signature
|
||||||
|
```js
|
||||||
|
store.cutlist.addCut(Object so)
|
||||||
|
````
|
||||||
|
|
||||||
|
Pass an object to the `store.cutlist.addCut` method with any of the following keys; any you don't provide will be filled with the defaults:
|
||||||
|
|
||||||
|
| Key | Type | Default | Description |
|
||||||
|
| :-- | :--- | :------ | :---------- |
|
||||||
|
| cut | Number\|false | 2 | the number of pieces to cut from the specified material. Pass `false` to clear all cutting instructions for the material |
|
||||||
|
| material | String | 'fabric' | the translation key of the material to cut from |
|
||||||
|
| identical | Boolean | false | should even numbers of pieces be cut in the same direction? false for mirrored |
|
||||||
|
| bias | Boolean | false | should the pieces in these cutting instructions be cut on the bias |
|
||||||
|
| ignoreOnFold | Boolean | false | should these cutting instructions ignore any cutOnFold information set by the part |
|
||||||
|
|
||||||
|
<Note>
|
||||||
|
<details>
|
||||||
|
<summary> You can use any `string` you want for your material, but here are some standard ones we have translation for </summary>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
| Key | Translation |
|
||||||
|
|:--|:--|
|
||||||
|
| fabric | Main Fabric |
|
||||||
|
| lining | Lining |
|
||||||
|
| canvas | Canvas |
|
||||||
|
| lmhCanavas | Light to Medium Hair Canvas |
|
||||||
|
| heavyCanvas | Heavyweight Hair Canvas |
|
||||||
|
| interfacing | Interfacing |
|
||||||
|
| plastic | Plastic |
|
||||||
|
| ribbing | Ribbing |
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
</Note>
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
```js
|
||||||
|
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
|
const part = {
|
||||||
|
name: 'example.front',
|
||||||
|
plugins: [pluginCutlist],
|
||||||
|
draft: ({part, store}) => {
|
||||||
|
// add instructions to cut two from main fabric
|
||||||
|
store.cutlist.addCut()
|
||||||
|
// add instructions to cut four on the biad from lining
|
||||||
|
store.cutlist.addCut({cut: 4, material: 'lining', bias: true, })
|
||||||
|
return part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also add multiple sets of cutting instructions for the same material
|
||||||
|
```js
|
||||||
|
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
|
const part = {
|
||||||
|
name: 'example.front',
|
||||||
|
plugins: [pluginCutlist],
|
||||||
|
draft: ({part, store}) => {
|
||||||
|
// add instructions to 1 from lining
|
||||||
|
store.cutlist.addCut({cut: 1, material: 'lining'})
|
||||||
|
// add instructions to cut 1 on the bias from lining
|
||||||
|
store.cutlist.addCut({cut: 1, material: 'lining', bias: true, })
|
||||||
|
return part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### store.cutlist.removeCut
|
||||||
|
|
||||||
|
The `store.cutlist.removeCut()` method will remove cutting instructions from the part
|
||||||
|
|
||||||
|
#### Signature
|
||||||
|
|
||||||
|
```js
|
||||||
|
store.cutlist.removeCut(String material)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```js
|
||||||
|
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
|
const part = {
|
||||||
|
name: 'example.front',
|
||||||
|
plugins: [pluginCutlist],
|
||||||
|
draft: ({part, store}) => {
|
||||||
|
// remove all cutting instructions for all materials
|
||||||
|
store.cutlist.removeCut()
|
||||||
|
|
||||||
|
// remove cutting instructions for just one material
|
||||||
|
store.cutlist.removeCut('fabric')
|
||||||
|
return part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### store.cutlist.setGrain
|
||||||
|
|
||||||
|
The `store.cutlist.setGrain()` method will record the angle of the grainline annotation. This method is called internally by [`plugin-grainline`](/reference/plugins/grainline) to store information for cutting layout tools. You shouldn't have to call it, but it's there if you need it.
|
||||||
|
|
||||||
|
#### Signature
|
||||||
|
|
||||||
|
```js
|
||||||
|
store.cutlist.setGrain(Number grainAngle)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```js
|
||||||
|
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
|
const part = {
|
||||||
|
name: 'example.front',
|
||||||
|
plugins: [pluginCutlist],
|
||||||
|
draft: ({part, store}) => {
|
||||||
|
// set the grainline angle
|
||||||
|
store.cutlist.setGrain(0)
|
||||||
|
return part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### store.cutlist.setCutOnFold
|
||||||
|
The `store.cutlist.setCutOnFold()` method will record the points that make up the cut on fold line. This method is called internally by [`plugin-cutonfold`](/reference/plugins/cutonfold) to store information for cutting layout tools. You shouldn't have to call it, but it's there if you need it.
|
||||||
|
|
||||||
|
#### Signature
|
||||||
|
|
||||||
|
```js
|
||||||
|
store.cutlist.setCutOnFold(Point p1, Point p2)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```js
|
||||||
|
import {pluginCutlist} from '@freesewing/plugin-cutlist'
|
||||||
|
|
||||||
|
const part = {
|
||||||
|
name: 'example.front',
|
||||||
|
plugins: [pluginCutlist],
|
||||||
|
draft: ({part, points, Point, store}) => {
|
||||||
|
// set the cut on fold line
|
||||||
|
points.p1 = new Point(0, 0)
|
||||||
|
points.p2 = new Point(0, 10)
|
||||||
|
store.cutlist.setCutOnFold(points.p1, points.p2)
|
||||||
|
return part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
The annotations plugin is part of our [plugin-bundle](/reference/plugins/bundle)
|
The annotations plugin is part of our [plugin-bundle](/reference/plugins/bundle)
|
||||||
|
|
|
@ -8,20 +8,12 @@ commonly used FreeSewing time plugins in one handy package.
|
||||||
Specifically, loading this plugin will have the same effect as loading these
|
Specifically, loading this plugin will have the same effect as loading these
|
||||||
plugins individually:
|
plugins individually:
|
||||||
|
|
||||||
- [plugin-banner](/reference/plugins/banner) : Add repeating text to your patterns
|
|
||||||
- [plugin-bartack](/reference/plugins/bartack) : Add bartacks to your patterns
|
- [plugin-annotations](/reference/plugins/annotations)
|
||||||
- [plugin-buttons](/reference/plugins/buttons) : Add buttons, buttonholes, and snaps to your patterns
|
|
||||||
- [plugin-cutonfold](/reference/plugins/cutonfold) : Add cut-on-fold indicators to your patterns
|
|
||||||
- [plugin-dimension](/reference/plugins/dimension) : Add dimensions to your (paperless) patterns
|
|
||||||
- [plugin-grainline](/reference/plugins/grainline) : Add grainline indicators to your patterns
|
|
||||||
- [plugin-logo](/reference/plugins/logo) : Add a FreeSewing logo to your patterns
|
|
||||||
- [plugin-measurements](/reference/plugins/measurements) : Make extra, calculated measurements available to your patterns
|
- [plugin-measurements](/reference/plugins/measurements) : Make extra, calculated measurements available to your patterns
|
||||||
- [plugin-mirror](/reference/plugins/mirror) : Mirror points and paths in your patterns
|
- [plugin-mirror](/reference/plugins/mirror) : Mirror points and paths in your patterns
|
||||||
- [plugin-notches](/reference/plugins/notches) : Add notches to your patterns
|
|
||||||
- [plugin-scalebox](/reference/plugins/scalebox) : Add scaleboxes to your pattern parts
|
|
||||||
- [plugin-round](/reference/plugins/round) : Create rounded corners in your patterns
|
- [plugin-round](/reference/plugins/round) : Create rounded corners in your patterns
|
||||||
- [plugin-sprinkle](/reference/plugins/sprinkle) : Add multiple snippets to your patterns
|
- [plugin-sprinkle](/reference/plugins/sprinkle) : Add multiple snippets to your patterns
|
||||||
- [plugin-title](/reference/plugins/title) : Add pretty titles to your pattern parts
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
"@freesewing/plugin-bundle": "$$ tag $$"
|
"@freesewing/plugin-bundle": "$$ tag $$"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@freesewing/plugin-cutlist": "$$ tag $$",
|
"@freesewing/plugin-annotations": "$$ tag $$",
|
||||||
"@freesewing/plugin-flip": "$$ tag $$",
|
"@freesewing/plugin-flip": "$$ tag $$",
|
||||||
"@freesewing/plugin-svgattr": "$$ tag $$",
|
"@freesewing/plugin-svgattr": "$$ tag $$",
|
||||||
"@freesewing/plugin-theme": "$$ tag $$",
|
"@freesewing/plugin-theme": "$$ tag $$",
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
import { name, version } from '../data.mjs'
|
export const cutlistStores = [
|
||||||
|
['cutlist.addCut', addCut],
|
||||||
|
['cutlist.removeCut', removeCut],
|
||||||
|
['cutlist.setGrain', setGrain],
|
||||||
|
['cutlist.setCutOnFold', setCutOnFold],
|
||||||
|
['cutlist.getCutFabrics', getCutFabrics],
|
||||||
|
]
|
||||||
|
|
||||||
export const plugin = {
|
export const cutlistHooks = {
|
||||||
name,
|
prePartDraft: [
|
||||||
version,
|
function (pattern) {
|
||||||
store: [
|
|
||||||
['cutlist.addCut', addCut],
|
|
||||||
['cutlist.removeCut', removeCut],
|
|
||||||
['cutlist.setGrain', setGrain],
|
|
||||||
['cutlist.setCutOnFold', setCutOnFold],
|
|
||||||
['cutlist.getCutFabrics', getCutFabrics],
|
|
||||||
],
|
|
||||||
hooks: {
|
|
||||||
prePartDraft: (pattern) => {
|
|
||||||
const injectedPart = pattern.config.inject[pattern.activePart]
|
const injectedPart = pattern.config.inject[pattern.activePart]
|
||||||
if (!injectedPart) return
|
if (!injectedPart) return
|
||||||
|
|
||||||
|
@ -19,13 +16,9 @@ export const plugin = {
|
||||||
const injectedCutlist = store.get(['cutlist', injectedPart], {})
|
const injectedCutlist = store.get(['cutlist', injectedPart], {})
|
||||||
store.set(['cutlist', pattern.activePart], { ...injectedCutlist })
|
store.set(['cutlist', pattern.activePart], { ...injectedCutlist })
|
||||||
},
|
},
|
||||||
},
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
// More specifically named exports
|
|
||||||
export const cutlistPlugin = plugin
|
|
||||||
export const pluginCutlist = plugin
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a set of cutting instructions for the part
|
* Add a set of cutting instructions for the part
|
||||||
* @param {Store} store the Store
|
* @param {Store} store the Store
|
|
@ -24,10 +24,8 @@ export const cutonfoldMacros = {
|
||||||
delete points.cutonfoldVia1
|
delete points.cutonfoldVia1
|
||||||
delete points.cutonfoldVia2
|
delete points.cutonfoldVia2
|
||||||
delete paths.cutonfoldCutonfold
|
delete paths.cutonfoldCutonfold
|
||||||
// setCutOnFold relies on plugin-cutlist
|
|
||||||
if (typeof store.cutlist?.setCutOnFold === 'function') {
|
store.cutlist.setCutOnFold(false) // Restore default
|
||||||
store.cutlist.setCutOnFold(false) // Restore default
|
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
so = {
|
so = {
|
||||||
|
@ -36,10 +34,11 @@ export const cutonfoldMacros = {
|
||||||
prefix: 'cutonfold',
|
prefix: 'cutonfold',
|
||||||
...so,
|
...so,
|
||||||
}
|
}
|
||||||
if (typeof store.cutlist?.setCutOnFold === 'function') {
|
|
||||||
store.cutlist.setCutOnFold(so.from, so.to)
|
// store in cutlist
|
||||||
if (so.grainline) store.cutlist.setGrain(so.from.angle(so.to))
|
store.cutlist.setCutOnFold(so.from, so.to)
|
||||||
}
|
if (so.grainline) store.cutlist.setGrain(so.from.angle(so.to))
|
||||||
|
|
||||||
if (complete) {
|
if (complete) {
|
||||||
points[so.prefix + 'From'] = so.from.shiftFractionTowards(so.to, so.margin / 100)
|
points[so.prefix + 'From'] = so.from.shiftFractionTowards(so.to, so.margin / 100)
|
||||||
points[so.prefix + 'To'] = so.to.shiftFractionTowards(so.from, so.margin / 100)
|
points[so.prefix + 'To'] = so.to.shiftFractionTowards(so.from, so.margin / 100)
|
||||||
|
|
|
@ -29,10 +29,10 @@ export const grainlineMacros = {
|
||||||
...dflts,
|
...dflts,
|
||||||
...so,
|
...so,
|
||||||
}
|
}
|
||||||
// setGrain relies on plugin-cutlist
|
|
||||||
if (typeof store.cutlist?.setGrain === 'function') {
|
// store in cutlist
|
||||||
store.cutlist.setGrain(so.from.angle(so.to))
|
store.cutlist.setGrain(so.from.angle(so.to))
|
||||||
}
|
|
||||||
if (complete) {
|
if (complete) {
|
||||||
points.grainlineFrom = so.from.shiftFractionTowards(so.to, 0.05)
|
points.grainlineFrom = so.from.shiftFractionTowards(so.to, 0.05)
|
||||||
points.grainlineTo = so.to.shiftFractionTowards(so.from, 0.05)
|
points.grainlineTo = so.to.shiftFractionTowards(so.from, 0.05)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { bannerMacros } from './banner.mjs'
|
||||||
import { bannerboxMacros } from './bannerbox.mjs'
|
import { bannerboxMacros } from './bannerbox.mjs'
|
||||||
import { bartackMacros } from './bartack.mjs'
|
import { bartackMacros } from './bartack.mjs'
|
||||||
import { crossboxMacros } from './crossbox.mjs'
|
import { crossboxMacros } from './crossbox.mjs'
|
||||||
|
import { cutlistStores, cutlistHooks } from './cutlist.mjs'
|
||||||
import { scaleboxMacros } from './scalebox.mjs'
|
import { scaleboxMacros } from './scalebox.mjs'
|
||||||
import { titleMacros } from './title.mjs'
|
import { titleMacros } from './title.mjs'
|
||||||
// Hooks and Macros
|
// Hooks and Macros
|
||||||
|
@ -31,6 +32,7 @@ export const plugin = {
|
||||||
...pleatHooks.preRender,
|
...pleatHooks.preRender,
|
||||||
...sewtogetherHooks.preRender,
|
...sewtogetherHooks.preRender,
|
||||||
],
|
],
|
||||||
|
prePartDraft: [...cutlistHooks.prePartDraft],
|
||||||
},
|
},
|
||||||
macros: {
|
macros: {
|
||||||
...bannerMacros,
|
...bannerMacros,
|
||||||
|
@ -45,6 +47,7 @@ export const plugin = {
|
||||||
...sewtogetherMacros,
|
...sewtogetherMacros,
|
||||||
...titleMacros,
|
...titleMacros,
|
||||||
},
|
},
|
||||||
|
store: [...cutlistStores],
|
||||||
}
|
}
|
||||||
|
|
||||||
export const annotationsPlugin = plugin
|
export const annotationsPlugin = plugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import chai from 'chai'
|
import chai from 'chai'
|
||||||
import { Design } from '@freesewing/core'
|
import { Design } from '@freesewing/core'
|
||||||
import { plugin } from '../src/index.mjs'
|
import { annotationsPlugin } from '../src/index.mjs'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -23,6 +23,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
expect(methods.removeCut).to.be.a('function')
|
expect(methods.removeCut).to.be.a('function')
|
||||||
expect(methods.setGrain).to.be.a('function')
|
expect(methods.setGrain).to.be.a('function')
|
||||||
expect(methods.setCutOnFold).to.be.a('function')
|
expect(methods.setCutOnFold).to.be.a('function')
|
||||||
|
expect(methods.getCutFabrics).to.be.a('function')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should handle addCut() with defaults', () => {
|
it('Should handle addCut() with defaults', () => {
|
||||||
|
@ -33,7 +34,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -55,7 +56,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -79,7 +80,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -97,7 +98,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -116,7 +117,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -132,7 +133,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -149,7 +150,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -169,7 +170,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
||||||
|
@ -193,7 +194,7 @@ describe('Cutlist Plugin Tests', () => {
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
plugins: [plugin],
|
plugins: [annotationsPlugin],
|
||||||
}
|
}
|
||||||
const Test = new Design({ parts: [part] })
|
const Test = new Design({ parts: [part] })
|
||||||
const pattern = new Test()
|
const pattern = new Test()
|
|
@ -4,7 +4,6 @@ import { measurementsPlugin } from '../../plugin-measurements/src/index.mjs'
|
||||||
import { mirrorPlugin } from '../../plugin-mirror/src/index.mjs'
|
import { mirrorPlugin } from '../../plugin-mirror/src/index.mjs'
|
||||||
import { roundPlugin } from '../../plugin-round/src/index.mjs'
|
import { roundPlugin } from '../../plugin-round/src/index.mjs'
|
||||||
import { sprinklePlugin } from '../../plugin-sprinkle/src/index.mjs'
|
import { sprinklePlugin } from '../../plugin-sprinkle/src/index.mjs'
|
||||||
import { pluginCutlist } from '../../plugin-cutlist/src/index.mjs'
|
|
||||||
import { name, version } from '../data.mjs'
|
import { name, version } from '../data.mjs'
|
||||||
|
|
||||||
const bundledPlugins = [
|
const bundledPlugins = [
|
||||||
|
@ -13,7 +12,6 @@ const bundledPlugins = [
|
||||||
mirrorPlugin,
|
mirrorPlugin,
|
||||||
roundPlugin,
|
roundPlugin,
|
||||||
sprinklePlugin,
|
sprinklePlugin,
|
||||||
pluginCutlist,
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const hooks = {}
|
const hooks = {}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Change log for: @freesewing/plugin-cutlist
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
|
@ -1,301 +0,0 @@
|
||||||

|
|
||||||
<p align='center'><a
|
|
||||||
href="https://www.npmjs.com/package/@freesewing/plugin-cutlist"
|
|
||||||
title="@freesewing/plugin-cutlist on NPM"
|
|
||||||
><img src="https://img.shields.io/npm/v/@freesewing/plugin-cutlist.svg"
|
|
||||||
alt="@freesewing/plugin-cutlist on NPM"/>
|
|
||||||
</a><a
|
|
||||||
href="https://opensource.org/licenses/MIT"
|
|
||||||
title="License: MIT"
|
|
||||||
><img src="https://img.shields.io/npm/l/@freesewing/plugin-cutlist.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%3Aplugin-cutlist"
|
|
||||||
title="Open issues tagged pkg:plugin-cutlist"
|
|
||||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:plugin-cutlist.svg?label=Issues"
|
|
||||||
alt="Open issues tagged pkg:plugin-cutlist"/>
|
|
||||||
</a><a
|
|
||||||
href="#contributors-"
|
|
||||||
title="All Contributors"
|
|
||||||
><img src="https://img.shields.io/badge/all_contributors-107-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/plugin-cutlist
|
|
||||||
|
|
||||||
A FreeSewing plugin to store data regarding a pattern's cutlist
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
> #### Note: Version 3 is a work in progress
|
|
||||||
>
|
|
||||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
|
||||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
|
||||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
|
||||||
>
|
|
||||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
|
||||||
|
|
||||||
## What am I looking at? 🤔
|
|
||||||
|
|
||||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
|
||||||
|
|
||||||
This folder holds: @freesewing/plugin-cutlist
|
|
||||||
|
|
||||||
If you're not entirely sure what to do or how to start, type this command:
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run tips
|
|
||||||
```
|
|
||||||
|
|
||||||
> If you don't want to set up a dev environment, you can run it in your browser:
|
|
||||||
>
|
|
||||||
> [](https://gitpod.io/#https://github.com/freesewing/freesewing)
|
|
||||||
>
|
|
||||||
> We recommend that you fork our repository and then
|
|
||||||
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
|
|
||||||
> to start up a browser-based dev environment of your own.
|
|
||||||
|
|
||||||
## About FreeSewing 💀
|
|
||||||
|
|
||||||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
|
||||||
|
|
||||||
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>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><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" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><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" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><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" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><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" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><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" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><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" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><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" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><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" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><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" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><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" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><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>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><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" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><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" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><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" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><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>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><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" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><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" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><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" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><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" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><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" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><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" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><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" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><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" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><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" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><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" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><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" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><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" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><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" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><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>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><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" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><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" valign="top" width="14.28%"><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="Prof. dr. Sorcha Ní Dhubhghaill"/><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>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><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" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><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" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><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" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><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" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><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" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><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" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><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" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><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" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><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" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><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" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><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" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><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" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><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" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><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" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><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" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><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" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><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" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><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" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><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" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><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" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><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" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><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" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</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!
|
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
/* This script will build the package with esbuild */
|
|
||||||
import esbuild from 'esbuild'
|
|
||||||
import pkg from './package.json' assert { type: 'json' }
|
|
||||||
|
|
||||||
// Create banner based on package info
|
|
||||||
const banner = `/**
|
|
||||||
* ${pkg.name} | v${pkg.version}
|
|
||||||
* ${pkg.description}
|
|
||||||
* (c) ${new Date().getFullYear()} ${pkg.author}
|
|
||||||
* @license ${pkg.license}
|
|
||||||
*/`
|
|
||||||
|
|
||||||
// Shared esbuild options
|
|
||||||
const options = {
|
|
||||||
banner: { js: banner },
|
|
||||||
bundle: true,
|
|
||||||
entryPoints: ['src/index.mjs'],
|
|
||||||
format: 'esm',
|
|
||||||
outfile: 'dist/index.mjs',
|
|
||||||
external: ['@freesewing'],
|
|
||||||
metafile: process.env.VERBOSE ? true : false,
|
|
||||||
minify: process.env.NO_MINIFY ? false : true,
|
|
||||||
sourcemap: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let esbuild generate the build
|
|
||||||
const build = async () => {
|
|
||||||
const result = await esbuild.build(options).catch(() => process.exit(1))
|
|
||||||
|
|
||||||
if (process.env.VERBOSE) {
|
|
||||||
const info = await esbuild.analyzeMetafile(result.metafile)
|
|
||||||
console.log(info)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
build()
|
|
|
@ -1,4 +0,0 @@
|
||||||
// This file is auto-generated | All changes you make will be overwritten.
|
|
||||||
export const name = '@freesewing/plugin-cutlist'
|
|
||||||
export const version = '3.0.0-alpha.9'
|
|
||||||
export const data = { name, version }
|
|
|
@ -1,68 +0,0 @@
|
||||||
{
|
|
||||||
"name": "@freesewing/plugin-cutlist",
|
|
||||||
"version": "3.0.0-alpha.9",
|
|
||||||
"description": "A FreeSewing plugin to store data regarding a pattern's cutlist",
|
|
||||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
|
||||||
"homepage": "https://freesewing.org/",
|
|
||||||
"repository": "github:freesewing/freesewing",
|
|
||||||
"license": "MIT",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/freesewing/freesewing/issues"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "individual",
|
|
||||||
"url": "https://freesewing.org/patrons/join"
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"freesewing",
|
|
||||||
"plugin",
|
|
||||||
"sewing pattern",
|
|
||||||
"sewing",
|
|
||||||
"design",
|
|
||||||
"parametric design",
|
|
||||||
"made to measure",
|
|
||||||
"diy",
|
|
||||||
"fashion"
|
|
||||||
],
|
|
||||||
"type": "module",
|
|
||||||
"module": "dist/index.mjs",
|
|
||||||
"exports": {
|
|
||||||
".": "./dist/index.mjs"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "node build.mjs",
|
|
||||||
"clean": "rimraf dist",
|
|
||||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
|
||||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
|
||||||
"test": "npx mocha tests/*.test.mjs",
|
|
||||||
"vbuild": "VERBOSE=1 node build.mjs",
|
|
||||||
"lab": "cd ../../sites/lab && yarn start",
|
|
||||||
"tips": "node ../../scripts/help.mjs",
|
|
||||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
|
||||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
|
||||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
|
||||||
"cibuild_step1": "node build.mjs",
|
|
||||||
"wbuild": "node build.mjs",
|
|
||||||
"wcibuild_step1": "node build.mjs"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@freesewing/core": "3.0.0-alpha.9"
|
|
||||||
},
|
|
||||||
"dependencies": {},
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "10.2.0",
|
|
||||||
"chai": "4.3.7"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"dist/*",
|
|
||||||
"README.md"
|
|
||||||
],
|
|
||||||
"publishConfig": {
|
|
||||||
"access": "public",
|
|
||||||
"tag": "next"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16.0.0",
|
|
||||||
"npm": ">=8"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
// This file is auto-generated | Any changes you make will be overwritten.
|
|
||||||
import { plugin } from '../src/index.mjs'
|
|
||||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
|
||||||
|
|
||||||
// Run shared tests
|
|
||||||
sharedPluginTests(plugin)
|
|
|
@ -3,7 +3,7 @@ import fileSaver from 'file-saver'
|
||||||
import { themePlugin } from '@freesewing/plugin-theme'
|
import { themePlugin } from '@freesewing/plugin-theme'
|
||||||
import { pluginI18n } from '@freesewing/plugin-i18n'
|
import { pluginI18n } from '@freesewing/plugin-i18n'
|
||||||
import { pagesPlugin, fabricPlugin } from '../layout/plugin-layout-part.mjs'
|
import { pagesPlugin, fabricPlugin } from '../layout/plugin-layout-part.mjs'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
import { cutLayoutPlugin } from '../layout/cut/plugin-cut-layout.mjs'
|
import { cutLayoutPlugin } from '../layout/cut/plugin-cut-layout.mjs'
|
||||||
import { fabricSettingsOrDefault } from '../layout/cut/index.mjs'
|
import { fabricSettingsOrDefault } from '../layout/cut/index.mjs'
|
||||||
import { useFabricLength } from '../layout/cut/settings.mjs'
|
import { useFabricLength } from '../layout/cut/settings.mjs'
|
||||||
|
@ -39,7 +39,7 @@ const themedPattern = (design, gist, overwrite, format, t) => {
|
||||||
// add the theme and translation to the pattern
|
// add the theme and translation to the pattern
|
||||||
pattern.use(themePlugin, { stripped: format !== 'svg', skipGrid: ['pages'] })
|
pattern.use(themePlugin, { stripped: format !== 'svg', skipGrid: ['pages'] })
|
||||||
pattern.use(pluginI18n, { t })
|
pattern.use(pluginI18n, { t })
|
||||||
pattern.use(pluginCutlist)
|
pattern.use(pluginAnnotations)
|
||||||
|
|
||||||
return pattern
|
return pattern
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { CutLayoutSettings } from './settings.mjs'
|
||||||
import { Draft } from '../draft/index.mjs'
|
import { Draft } from '../draft/index.mjs'
|
||||||
import { fabricPlugin } from '../plugin-layout-part.mjs'
|
import { fabricPlugin } from '../plugin-layout-part.mjs'
|
||||||
import { cutLayoutPlugin } from './plugin-cut-layout.mjs'
|
import { cutLayoutPlugin } from './plugin-cut-layout.mjs'
|
||||||
import { pluginCutlist } from '@freesewing/plugin-cutlist'
|
import { pluginAnnotations } from '@freesewing/plugin-annotations'
|
||||||
import { measurementAsMm } from 'shared/utils.mjs'
|
import { measurementAsMm } from 'shared/utils.mjs'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
import get from 'lodash.get'
|
import get from 'lodash.get'
|
||||||
|
@ -43,8 +43,8 @@ const useFabricDraft = (gist, design, fabricSettings) => {
|
||||||
draft.use(fabricPlugin(layoutSettings))
|
draft.use(fabricPlugin(layoutSettings))
|
||||||
// add the cutLayout plugin
|
// add the cutLayout plugin
|
||||||
draft.use(cutLayoutPlugin(fabricSettings.activeFabric, fabricSettings.grainDirection))
|
draft.use(cutLayoutPlugin(fabricSettings.activeFabric, fabricSettings.grainDirection))
|
||||||
// also, pluginCutlist and pluginFlip are needed
|
// also, pluginAnnotations and pluginFlip are needed
|
||||||
draft.use(pluginCutlist)
|
draft.use(pluginAnnotations)
|
||||||
|
|
||||||
// draft the pattern
|
// draft the pattern
|
||||||
draft.draft()
|
draft.draft()
|
||||||
|
|
|
@ -64,8 +64,7 @@ export const cutLayoutPlugin = function (material, grainAngle) {
|
||||||
part.attributes.remove('transform')
|
part.attributes.remove('transform')
|
||||||
|
|
||||||
// if they shouldn't be identical, flip every other piece
|
// if they shouldn't be identical, flip every other piece
|
||||||
const flipped = !instruction.identical && c % 2 === 1
|
if (!instruction.identical && c % 2 === 1) {
|
||||||
if (flipped) {
|
|
||||||
part.attributes.add(
|
part.attributes.add(
|
||||||
'transform',
|
'transform',
|
||||||
grainAngle === 90 ? 'scale(-1, 1)' : 'scale(1, -1)'
|
grainAngle === 90 ? 'scale(-1, 1)' : 'scale(1, -1)'
|
||||||
|
@ -75,7 +74,6 @@ export const cutLayoutPlugin = function (material, grainAngle) {
|
||||||
macro('handleFoldAndGrain', {
|
macro('handleFoldAndGrain', {
|
||||||
partCutlist,
|
partCutlist,
|
||||||
instruction,
|
instruction,
|
||||||
flipped,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// combine the transforms
|
// combine the transforms
|
||||||
|
@ -97,7 +95,7 @@ export const cutLayoutPlugin = function (material, grainAngle) {
|
||||||
macros: {
|
macros: {
|
||||||
...pluginMirror.macros,
|
...pluginMirror.macros,
|
||||||
// handle mirroring on the fold and rotating to sit along the grain or bias
|
// handle mirroring on the fold and rotating to sit along the grain or bias
|
||||||
handleFoldAndGrain: ({ partCutlist, instruction, flipped }, { points, macro }) => {
|
handleFoldAndGrain: ({ partCutlist, instruction }, { points, macro }) => {
|
||||||
// get the grain angle for the part for this set of instructions
|
// get the grain angle for the part for this set of instructions
|
||||||
const grainSpec = partCutlist.grain
|
const grainSpec = partCutlist.grain
|
||||||
? partCutlist.grain + (instruction.bias ? 45 : 0)
|
? partCutlist.grain + (instruction.bias ? 45 : 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue