1
0
Fork 0

Merge branch 'freesewing:develop' into opal

This commit is contained in:
Thrunic 2024-10-12 12:22:14 -04:00 committed by GitHub
commit 7106ae792c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
1470 changed files with 39528 additions and 30372 deletions

View file

@ -6,6 +6,7 @@
*.svg *.svg
*.sh *.sh
*.md *.md
*.mdx
*.prisma *.prisma
*.css *.css
*.mustache *.mustache

3
.gitignore vendored
View file

@ -28,6 +28,9 @@ sites/*/package-lock.json
# Nx cache # Nx cache
.nx/cache .nx/cache
# Docusaurus cache
.docusaurus
# Sites prebuild artifacts # Sites prebuild artifacts
sites/*/public/locales/*/*.json sites/*/public/locales/*/*.json
!sites/sde/public/locales/*/*.json !sites/sde/public/locales/*/*.json

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -16,7 +16,7 @@ export const front = {
frontArmholeDeeper: 0, frontArmholeDeeper: 0,
armholeDepthFactor: 0.6, armholeDepthFactor: 0.6,
shoulderSlopeReduction: 0, shoulderSlopeReduction: 0,
chestEase: { pct: 8, min: 0, max: 20, ...pctBasedOn('chest'), menu: 'style' }, chestEase: { pct: 8, min: 0, max: 20, ...pctBasedOn('chest'), menu: 'fit' },
draftForHighBust: { bool: false, menu: 'fit' }, draftForHighBust: { bool: false, menu: 'fit' },
hipsEase: { pct: 8, min: 0, max: 20, menu: 'fit' }, hipsEase: { pct: 8, min: 0, max: 20, menu: 'fit' },
stretchFactor: { pct: 5, min: 0, max: 15, menu: 'fit' }, stretchFactor: { pct: 5, min: 0, max: 15, menu: 'fit' },

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -28,8 +28,11 @@ export const cup = {
bustDartCurve: 1, bustDartCurve: 1,
bustDartLength: 1, bustDartLength: 1,
waistDartLength: 1, waistDartLength: 1,
waistDartCurve: 1,
backHemSlope: 2.5, backHemSlope: 2.5,
backNeckCutout: 0.06, backNeckCutout: 0.06,
bustDartAngle: 0,
bustDartMinimumFabric: 0,
//catergory changed from Bella //catergory changed from Bella
armholeDepth: { pct: 44, min: 38, max: 46, menu: 'advanced' }, armholeDepth: { pct: 44, min: 38, max: 46, menu: 'advanced' },
frontArmholePitchDepth: { pct: 29, max: 31, min: 27, menu: 'advanced' }, frontArmholePitchDepth: { pct: 29, max: 31, min: 27, menu: 'advanced' },

View file

@ -50,6 +50,18 @@
"t": "Bust dart curve", "t": "Bust dart curve",
"d": "Controls the curvature of the bust dart" "d": "Controls the curvature of the bust dart"
}, },
"bustDartAngle": {
"t": "Bust dart angle",
"d": "The angle of the bust dart"
},
"bustDartMinimumFabric": {
"t": "Bust dart minimum fabric",
"d": "The minimum amount of side seam above and below the bust dart"
},
"waistDartCurve": {
"t": "Waist dart curve",
"d": "Controls the curvature of the waist dart"
},
"armholeDepth": { "armholeDepth": {
"t": "Armhole depth", "t": "Armhole depth",
"d": "Controls the depth of the armhole" "d": "Controls the depth of the armhole"

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -31,9 +31,12 @@ export const back = {
waistEase: { pct: 5, min: 1, max: 20, menu: 'fit' }, waistEase: { pct: 5, min: 1, max: 20, menu: 'fit' },
// Darts // Darts
backDartHeight: { pct: 46, min: 38, max: 54, menu: 'darts' }, backDartHeight: { pct: 46, min: 38, max: 54, menu: 'darts' },
bustDartCurve: { pct: 100, min: 0, max: 100, menu: 'darts' }, bustDartCurve: { pct: 100, min: -100, max: 100, menu: 'darts' },
bustDartLength: { pct: 90, min: 75, max: 100, menu: 'darts' }, bustDartLength: { pct: 90, min: 75, max: 100, menu: 'darts' },
bustDartAngle: { count: 0, min: -45, max: 45, menu: 'darts' },
bustDartMinimumFabric: { pct: 5, min: 1, max: 50, menu: 'darts' },
waistDartLength: { pct: 90, min: 75, max: 95, menu: 'darts' }, waistDartLength: { pct: 90, min: 75, max: 95, menu: 'darts' },
waistDartCurve: { pct: 100, min: -100, max: 100, menu: 'darts' },
// Armhole // Armhole
armholeDepth: { pct: 44, min: 38, max: 46, menu: 'armhole' }, armholeDepth: { pct: 44, min: 38, max: 46, menu: 'armhole' },
backArmholeCurvature: { pct: 63, min: 50, max: 85, menu: 'armhole' }, backArmholeCurvature: { pct: 63, min: 50, max: 85, menu: 'armhole' },

View file

@ -15,6 +15,7 @@ export const frontSideDart = {
macro, macro,
utils, utils,
measurements, measurements,
log,
part, part,
}) => { }) => {
// Get to work // Get to work
@ -114,12 +115,32 @@ export const frontSideDart = {
) )
// Bust dart // Bust dart
const sideSeamLength = store.get('sideSeamLength')
const minimumFabric = sideSeamLength * options.bustDartMinimumFabric
points.bustDartTop = utils.beamsIntersect( points.bustDartTop = utils.beamsIntersect(
points.armhole, points.armhole,
points.sideHem, points.sideHem,
points.bust, points.bust,
points.bust.shift(0, 100) points.bust.shift(Number(options.bustDartAngle), 100)
) )
// Ensure minimum fabric above the bust dart
if (points.bustDartTop.y < points.armhole.y + minimumFabric) {
points.bustDartTop = points.armhole.shiftTowards(points.sideHem, minimumFabric)
log.info(
part.name + ': Restricted bust dart angle to ensure minimum fabric above the bust dart.'
)
}
// Ensure minimum fabric below the bust dart
if (points.armhole.dist(points.bustDartTop) > sideSeamLength - minimumFabric) {
points.bustDartTop = points.armhole.shiftTowards(
points.sideHem,
sideSeamLength - minimumFabric
)
log.info(
part.name + ': Restricted bust dart angle to ensure minimum fabric below the bust dart.'
)
}
points.bustDartBottom = points.bustDartTop.rotate(angle * -1, points.bust) points.bustDartBottom = points.bustDartTop.rotate(angle * -1, points.bust)
points.bustDartMiddle = points.bustDartTop.shiftFractionTowards(points.bustDartBottom, 0.5) points.bustDartMiddle = points.bustDartTop.shiftFractionTowards(points.bustDartBottom, 0.5)
points.bustDartTip = points.bustDartMiddle.shiftFractionTowards( points.bustDartTip = points.bustDartMiddle.shiftFractionTowards(
@ -140,8 +161,8 @@ export const frontSideDart = {
.rotate(-5 * options.bustDartCurve, points.bust) .rotate(-5 * options.bustDartCurve, points.bust)
// Side seam length // Side seam length
let aboveDart = points.armhole.dist(points.bustDartTop) const aboveDart = points.armhole.dist(points.bustDartTop)
let belowDart = store.get('sideSeamLength') - aboveDart const belowDart = sideSeamLength - aboveDart
points.sideHemInitial = points.bustDartBottom points.sideHemInitial = points.bustDartBottom
.shift(-90, belowDart) .shift(-90, belowDart)
.shift(180, store.get('sideReduction')) .shift(180, store.get('sideReduction'))
@ -152,6 +173,16 @@ export const frontSideDart = {
let reduce = points.cfHem.dist(points.sideHemInitial) - hemLen let reduce = points.cfHem.dist(points.sideHemInitial) - hemLen
// Waist dart // Waist dart
let includeWaistDart = true
if (reduce <= 0) {
includeWaistDart = false
log.info(
'`' +
part.name +
'`: Front waist dart omitted (because the calculated dart' +
' width was 0.0 mm/inches or less).'
)
}
points.waistDartHem = new Point(points.bust.x, points.cfHem.y) points.waistDartHem = new Point(points.bust.x, points.cfHem.y)
points.waistDartLeft = points.waistDartHem.shift(180, reduce / 2) points.waistDartLeft = points.waistDartHem.shift(180, reduce / 2)
points.waistDartRight = points.waistDartHem.shift(0, reduce / 2) points.waistDartRight = points.waistDartHem.shift(0, reduce / 2)
@ -167,12 +198,28 @@ export const frontSideDart = {
90, 90,
points.waistDartHem.dist(points.bust) / 2 points.waistDartHem.dist(points.bust) / 2
) )
// Apply option-controlled curvature to waist dart
paths.seam = new Path() points.waistDartLeftMid = new Path()
.move(points.cfHem) .move(points.bust)
.line(points.waistDartLeft) .line(points.waistDartLeft)
.curve_(points.waistDartLeftCp, points.waistDartTip) .shiftFractionAlong(0.5)
._curve(points.waistDartRightCp, points.waistDartRight) points.waistDartRightMid = new Path()
.move(points.bust)
.line(points.waistDartRight)
.shiftFractionAlong(0.5)
const waistDartCpWidth =
points.waistDartLeftMid.dist(points.waistDartLeftCp) * options.waistDartCurve
points.waistDartLeftCp.x = points.waistDartLeftMid.x - waistDartCpWidth
points.waistDartRightCp.x = points.waistDartRightMid.x + waistDartCpWidth
paths.seam = new Path().move(points.cfHem)
if (includeWaistDart)
paths.seam
.line(points.waistDartLeft)
.curve_(points.waistDartLeftCp, points.waistDartTip)
._curve(points.waistDartRightCp, points.waistDartRight)
.line(points.waistDartRight)
paths.seam
.line(points.sideHem) .line(points.sideHem)
.line(points.bustDartBottom) .line(points.bustDartBottom)
._curve(points.bustDartCpBottom, points.bustDartTip) ._curve(points.bustDartCpBottom, points.bustDartTip)
@ -186,10 +233,9 @@ export const frontSideDart = {
.close() .close()
.attr('class', 'fabric') .attr('class', 'fabric')
paths.saBase = new Path() paths.saBase = new Path().move(points.cfHem)
.move(points.cfHem) if (includeWaistDart) paths.saBase.line(points.waistDartLeft).line(points.waistDartRight)
.line(points.waistDartLeft) paths.saBase
.line(points.waistDartRight)
.line(points.sideHem) .line(points.sideHem)
.line(points.bustDartBottom) .line(points.bustDartBottom)
.line(points.bustDartEdge) .line(points.bustDartEdge)
@ -248,29 +294,33 @@ export const frontSideDart = {
}) })
// Dimensions // Dimensions
macro('vd', { let dimensionOffset = 0
id: 'hCfHemToWaistDartTop', if (includeWaistDart) {
from: points.cfHem, dimensionOffset = 15
to: points.waistDartTip, macro('vd', {
x: 0 - 15, id: 'hCfHemToWaistDartTop',
}) from: points.cfHem,
to: points.waistDartTip,
x: 0 - 15,
})
}
macro('vd', { macro('vd', {
id: 'hCfHemToBustPoint', id: 'hCfHemToBustPoint',
from: points.cfHem, from: points.cfHem,
to: points.bust, to: points.bust,
x: 0 - 30, x: 0 - 15 - dimensionOffset,
}) })
macro('vd', { macro('vd', {
id: 'hCfHemToNeckCutout', id: 'hCfHemToNeckCutout',
from: points.cfHem, from: points.cfHem,
to: points.cfNeck, to: points.cfNeck,
x: 0 - 45, x: 0 - 30 - dimensionOffset,
}) })
macro('vd', { macro('vd', {
id: 'hTotal', id: 'hTotal',
from: points.cfHem, from: points.cfHem,
to: points.hps, to: points.hps,
x: 0 - 60, x: 0 - 45 - dimensionOffset,
}) })
macro('hd', { macro('hd', {
id: 'wCfToWaistDartTip', id: 'wCfToWaistDartTip',
@ -284,35 +334,39 @@ export const frontSideDart = {
to: points.bustDartTip, to: points.bustDartTip,
y: points.bust.y - 30, y: points.bust.y - 30,
}) })
macro('hd', { dimensionOffset = 0
id: 'wCfToWaistDartLeft', if (includeWaistDart) {
from: points.cfHem, dimensionOffset = 30
to: points.waistDartLeft, macro('hd', {
y: points.cfHem.y + sa + 15, id: 'wCfToWaistDartLeft',
}) from: points.cfHem,
macro('hd', { to: points.waistDartLeft,
id: 'wCfToWaistDartRight', y: points.cfHem.y + sa + 15,
from: points.cfHem, })
to: points.waistDartRight, macro('hd', {
y: points.cfHem.y + sa + 30, id: 'wCfToWaistDartRight',
}) from: points.cfHem,
to: points.waistDartRight,
y: points.cfHem.y + sa + 30,
})
}
macro('hd', { macro('hd', {
id: 'wHemTotal', id: 'wHemTotal',
from: points.cfHem, from: points.cfHem,
to: points.sideHem, to: points.sideHem,
y: points.cfHem.y + sa + 45, y: points.cfHem.y + sa + 15 + dimensionOffset,
}) })
macro('hd', { macro('hd', {
id: 'wCfHemToBustDartBottom', id: 'wCfHemToBustDartBottom',
from: points.cfHem, from: points.cfHem,
to: points.bustDartBottom, to: points.bustDartBottom,
y: points.cfHem.y + sa + 60, y: points.cfHem.y + sa + 30 + dimensionOffset,
}) })
macro('hd', { macro('hd', {
id: 'wCfHemToBustDartTop', id: 'wCfHemToBustDartTop',
from: points.cfHem, from: points.cfHem,
to: points.bustDartTop, to: points.bustDartTop,
y: points.cfHem.y + sa + 75, y: points.cfHem.y + sa + 45 + dimensionOffset,
}) })
macro('vd', { macro('vd', {
id: 'hHemRightToBustDartBottom', id: 'hHemRightToBustDartBottom',

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -5,7 +5,8 @@ function draftBentSleeve({ Path, paths, points, store, options, part }) {
let { Point, Path, points, store, options, measurements, utils } = part.shorthand() let { Point, Path, points, store, options, measurements, utils } = part.shorthand()
// Sleeve frame // Sleeve frame
points.top = new Point(0, 0) points.top = new Point(0, 0)
points.boxTopRight = points.top.shift(0, (store.get('sleevecapTarget') / 5.8) * tweak) const easedQuarterBiceps = (measurements.biceps / 4) * (1 + options.bicepsEase)
points.boxTopRight = points.top.shift(0, easedQuarterBiceps * tweak)
points.boxTopLeft = points.boxTopRight.flipX() points.boxTopLeft = points.boxTopRight.flipX()
points.boxBottom = points.top.shift( points.boxBottom = points.top.shift(
-90, -90,

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -50,18 +50,21 @@ export const front = {
waistAngle -= 180 waistAngle -= 180
} }
const flyConst = 14
store.set('flyConst',flyConst)
points.flyTop = points.pW.shift( points.flyTop = points.pW.shift(
points.pW.angle(points.pZ) - 180 + waistAngle, points.pW.angle(points.pZ) - 180 + waistAngle,
halfInch * flyWidth flyConst * flyWidth
) )
points.flyBottom = points.flyTop.shift( points.flyBottom = points.flyTop.shift(
points.pW.angle(points.pZ), points.pW.angle(points.pZ),
points.pW.dist(points.pZ) - halfInch * flyWidth points.pW.dist(points.pZ) - flyConst * flyWidth
) )
points.pZcpFB = points.pZ.shift( points.pZcpFB = points.pZ.shift(
points.pW.angle(points.pZ) - waistAngle, points.pW.angle(points.pZ) - waistAngle,
halfInch * flyWidth * cc flyConst * flyWidth * cc
) )
points.pFBcpZ = points.flyBottom.shift(points.pW.angle(points.pZ), halfInch * flyWidth * cc) points.pFBcpZ = points.flyBottom.shift(points.pW.angle(points.pZ), halfInch * flyWidth * cc)

View file

@ -6,8 +6,8 @@ export const zipperguard = {
draft: ({ Point, Path, points, paths, Snippet, snippets, sa, store, macro, part }) => { draft: ({ Point, Path, points, paths, Snippet, snippets, sa, store, macro, part }) => {
const cc = 0.551915024494 // circle constant const cc = 0.551915024494 // circle constant
const halfInch = store.get('halfInch') const flyConst = store.get('flyConst')
const flyWidth = store.get('flyWidth') * halfInch const flyWidth = store.get('flyWidth') * flyConst
const flyLength = store.get('flyLength') const flyLength = store.get('flyLength')
points.pA = new Point(0, 0) points.pA = new Point(0, 0)

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -2,15 +2,17 @@ export const ghost = {
name: 'gozer.ghost', name: 'gozer.ghost',
measurements: ['hpsToWaistBack', 'waistToFloor', 'head'], measurements: ['hpsToWaistBack', 'waistToFloor', 'head'],
draft: ({ measurements, Point, points, Snippet, snippets, sa, macro, part }) => { draft: ({ measurements, Point, points, Snippet, snippets, sa, macro, part }) => {
const eyeSize = measurements.head * 0.0416 const eyeSize = measurements.head * (1 / 24)
const eyeLine = measurements.head / 2.25
const eyeOffset = measurements.head * (1 / 12.7)
const size = const size =
measurements.hpsToWaistBack + measurements.waistToFloor + measurements.head / Math.PI measurements.hpsToWaistBack + measurements.waistToFloor + measurements.head / Math.PI
points.middle = new Point(0, 0).addCircle(size, 'fabric') points.middle = new Point(0, 0).addCircle(size, 'fabric')
points.eyeLine = points.middle.shift(270, measurements.head / Math.PI / 2) points.eyeLine = points.middle.shift(270, eyeLine)
points.eyeLeft = points.eyeLine.shift(180, measurements.head * 0.13) points.eyeLeft = points.eyeLine.shift(180, eyeOffset)
points.eyeRight = points.eyeLine.shift(0, measurements.head * 0.13) points.eyeRight = points.eyeLine.shift(0, eyeOffset)
points.left = new Point(-1 * size, 0) points.left = new Point(-1 * size, 0)
points.right = new Point(size, 0) points.right = new Point(size, 0)

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -33,6 +33,10 @@
"t": "Pocket height", "t": "Pocket height",
"d": "Controls the height of the pocket" "d": "Controls the height of the pocket"
}, },
"pocketOpening": {
"t": "Pocket opening",
"d": "Controls the opening size of the pocket"
},
"hoodHeight": { "hoodHeight": {
"t": "Hood height", "t": "Hood height",
"d": "Controls the height of the hood" "d": "Controls the height of the hood"

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -37,7 +37,7 @@ function draftHueyFront({
points.pocketTopRight = points.pocketCfTop.shift(0, points.hem.x * options.pocketWidth) points.pocketTopRight = points.pocketCfTop.shift(0, points.hem.x * options.pocketWidth)
points.pocketTip = new Point( points.pocketTip = new Point(
points.pocketTopRight.x * 1.2, points.pocketTopRight.x * 1.2,
points.pocketTopRight.y + (points.hem.y - points.pocketTopRight.y) * 0.9 points.pocketTopRight.y + (points.hem.y - points.pocketTopRight.y) * options.pocketOpening
) )
points.pocketHem = new Point( points.pocketHem = new Point(
points.pocketTopRight.x + points.pocketTopRight.dx(points.pocketTip) / 2, points.pocketTopRight.x + points.pocketTopRight.dx(points.pocketTip) / 2,
@ -134,6 +134,7 @@ export const front = {
pocket: { bool: true, menu: 'style' }, pocket: { bool: true, menu: 'style' },
pocketHeight: { pct: 30, min: 25, max: 35, menu: 'style' }, pocketHeight: { pct: 30, min: 25, max: 35, menu: 'style' },
pocketWidth: { pct: 60, min: 50, max: 70, menu: 'style' }, pocketWidth: { pct: 60, min: 50, max: 70, menu: 'style' },
pocketOpening: { pct: 90, min: 60, max: 90, menu: 'style' },
}, },
draft: draftHueyFront, draft: draftHueyFront,
} }

View file

@ -19,9 +19,9 @@
"cutCuff.t": "The cuff is not shown", "cutCuff.t": "The cuff is not shown",
"cutCuff.d": "The **Cuff** (9) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width.", "cutCuff.d": "The **Cuff** (9) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width.",
"cutHoodCenter.t": "The hood center is not shown", "cutHoodCenter.t": "The hood center is not shown",
"cutHoodCenter.d": "The **Hood center** (7) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width.", "cutHoodCenter.d": "The **Hood center** (7) is a rectangular piece of main fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width.",
"cutNeckBinding.t": "The neck binding is not shown", "cutNeckBinding.t": "The neck binding is not shown",
"cutNeckBinding.d": "The **Neck Binding** (10) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the length.", "cutNeckBinding.d": "The **Neck Binding** (10) is a rectangular piece of main fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the length.",
"cutWaistband.t": "The waistband is not shown", "cutWaistband.t": "The waistband is not shown",
"cutWaistband.d": "The **Waistband** (8) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width." "cutWaistband.d": "The **Waistband** (8) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width."
}, },

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -4,6 +4,9 @@ import { pctBasedOn } from '@freesewing/core'
export const shoulderToShoulderCorrection = 0.995 export const shoulderToShoulderCorrection = 0.995
export const bustDartCurve = 1 export const bustDartCurve = 1
export const bustDartLength = 0.9 export const bustDartLength = 0.9
export const bustDartAngle = 0
export const bustDartMinimumFabric = 0
export const waistDartCurve = 1
// Percentages // Percentages
export const bustSpanEase = { pct: 0, min: -5, max: 20, ...pctBasedOn('bustSpan'), menu: 'fit' } export const bustSpanEase = { pct: 0, min: -5, max: 20, ...pctBasedOn('bustSpan'), menu: 'fit' }
export const backHemSlope = { deg: 2.5, min: 0, max: 5, menu: 'advanced' } export const backHemSlope = { deg: 2.5, min: 0, max: 5, menu: 'advanced' }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -113,9 +113,13 @@ function sandySkirt({
if (sa) { if (sa) {
paths.hemBase = new Path() paths.hemBase = new Path()
.move(points.ex2Flipped) .move(points.ex2Flipped)
.circleSegment(angle, points.center) .curve(points.ex2cFlipped, points.ex1cFlipped, points.ex1)
.curve(points.ex1c, points.ex2c, points.ex2)
.offset(store.get('fullLength') * options.lengthBonus * options.hemWidth) .offset(store.get('fullLength') * options.lengthBonus * options.hemWidth)
paths.saBase = new Path().move(points.in2).circleSegment(-angle, points.center) paths.saBase = new Path()
.move(points.in2)
.curve(points.in2c, points.in1c, points.in1)
.curve(points.in1cFlipped, points.in2cFlipped, points.in2Flipped)
if (!options.seamlessFullCircle) if (!options.seamlessFullCircle)
paths.saBase = new Path().move(points.ex2).line(points.ex2).join(paths.saBase) paths.saBase = new Path().move(points.ex2).line(points.ex2).join(paths.saBase)

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -24,6 +24,12 @@ function simoneFbaFront({
* Once drafted, we add the FBA, which is what happens in this file * Once drafted, we add the FBA, which is what happens in this file
*/ */
/*
* Locate bust point
*/
points.bust = new Point(measurements.bustSpan / 2, points.neck.y + measurements.hpsToBust)
points.cfBust = new Point(0, points.bust.y)
/* /*
* How much room to we need to create to fit the breasts? * How much room to we need to create to fit the breasts?
* Note that: * Note that:
@ -37,18 +43,13 @@ function simoneFbaFront({
* If the FBA is negative, that means the high bust measurement is higher than the * If the FBA is negative, that means the high bust measurement is higher than the
* front bust. That's not uncommon for people who don't have much breast tissue but * front bust. That's not uncommon for people who don't have much breast tissue but
* it generates a negative dart which is confusing and incorrect. So in that case, just * it generates a negative dart which is confusing and incorrect. So in that case, just
* return the original part from simon * return the part from Simon without any adjustments.
*/ */
if (FBA < 0) { if (FBA < 0) {
log.info('No FBA required, using unaltered Simon front') log.info('No FBA required, using unaltered Simon front')
return part return part
} }
/*
* Locate bust point
*/
points.bust = new Point(measurements.bustSpan / 2, points.neck.y + measurements.hpsToBust)
/* /*
* Figure out how much do we need to open a dart to create the required FBA room * Figure out how much do we need to open a dart to create the required FBA room
*/ */

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -17,10 +17,9 @@ export const CreateShape = ({
const double = const double =
type == options.zipperLocation || (true == options.lacing && type == options.lacingLocation) type == options.zipperLocation || (true == options.lacing && type == options.lacingLocation)
const angle = (options.peplumFullness / 2) * ratio * (double ? 0.5 : 1)
macro('ringsector', { macro('ringsector', {
id: type + 'Peblum', id: type + 'Peblum',
angle: angle, angle: (options.peplumFullness / 2) * ratio * (double ? 0.5 : 1),
insideRadius: radius, insideRadius: radius,
outsideRadius: radius + width, outsideRadius: radius + width,
rotate: false, rotate: false,
@ -53,9 +52,27 @@ export const CreateShape = ({
.join( .join(
new Path() new Path()
.move(points['__macro_ringsector_' + type + 'Peblum_ex2Flipped']) .move(points['__macro_ringsector_' + type + 'Peblum_ex2Flipped'])
.circleSegment(angle, points['__macro_ringsector_' + type + 'Peblum_center']) .curve(
points['__macro_ringsector_' + type + 'Peblum_ex2cFlipped'],
points['__macro_ringsector_' + type + 'Peblum_ex1cFlipped'],
points['__macro_ringsector_' + type + 'Peblum_ex1']
)
.curve(
points['__macro_ringsector_' + type + 'Peblum_ex1c'],
points['__macro_ringsector_' + type + 'Peblum_ex2c'],
points['__macro_ringsector_' + type + 'Peblum_ex2']
)
.line(points['__macro_ringsector_' + type + 'Peblum_in2']) .line(points['__macro_ringsector_' + type + 'Peblum_in2'])
.circleSegment(-angle, points['__macro_ringsector_' + type + 'Peblum_center']) .curve(
points['__macro_ringsector_' + type + 'Peblum_in2c'],
points['__macro_ringsector_' + type + 'Peblum_in1c'],
points['__macro_ringsector_' + type + 'Peblum_in1']
)
.curve(
points['__macro_ringsector_' + type + 'Peblum_in1cFlipped'],
points['__macro_ringsector_' + type + 'Peblum_in2cFlipped'],
points['__macro_ringsector_' + type + 'Peblum_in2Flipped']
)
.offset(sa) .offset(sa)
) )
.line(points['__macro_ringsector_' + type + 'Peblum_in2Flipped']) .line(points['__macro_ringsector_' + type + 'Peblum_in2Flipped'])

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

View file

@ -1,8 +1,8 @@
import en from './en.json' assert { type: 'json' } import en from './en.json' with { type: 'json' }
import de from './de.json' assert { type: 'json' } import de from './de.json' with { type: 'json' }
import es from './es.json' assert { type: 'json' } import es from './es.json' with { type: 'json' }
import fr from './fr.json' assert { type: 'json' } import fr from './fr.json' with { type: 'json' }
import nl from './nl.json' assert { type: 'json' } import nl from './nl.json' with { type: 'json' }
import uk from './uk.json' assert { type: 'json' } import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk } export const i18n = { en, de, es, fr, nl, uk }

133
i18n/designs.mjs Normal file
View file

@ -0,0 +1,133 @@
/*
* This file is auto-generated by the reconfigure script
* Any changes will be overwritten next time the repo is reconfigured
*/
import { i18n as aaron } from '@freesewing/aaron'
import { i18n as albert } from '@freesewing/albert'
import { i18n as bee } from '@freesewing/bee'
import { i18n as bella } from '@freesewing/bella'
import { i18n as benjamin } from '@freesewing/benjamin'
import { i18n as bent } from '@freesewing/bent'
import { i18n as bibi } from '@freesewing/bibi'
import { i18n as bob } from '@freesewing/bob'
import { i18n as breanna } from '@freesewing/breanna'
import { i18n as brian } from '@freesewing/brian'
import { i18n as bruce } from '@freesewing/bruce'
import { i18n as carlita } from '@freesewing/carlita'
import { i18n as carlton } from '@freesewing/carlton'
import { i18n as cathrin } from '@freesewing/cathrin'
import { i18n as charlie } from '@freesewing/charlie'
import { i18n as cornelius } from '@freesewing/cornelius'
import { i18n as diana } from '@freesewing/diana'
import { i18n as examples } from '@freesewing/examples'
import { i18n as florence } from '@freesewing/florence'
import { i18n as florent } from '@freesewing/florent'
import { i18n as gozer } from '@freesewing/gozer'
import { i18n as hi } from '@freesewing/hi'
import { i18n as holmes } from '@freesewing/holmes'
import { i18n as hortensia } from '@freesewing/hortensia'
import { i18n as huey } from '@freesewing/huey'
import { i18n as hugo } from '@freesewing/hugo'
import { i18n as jaeger } from '@freesewing/jaeger'
import { i18n as jane } from '@freesewing/jane'
import { i18n as legend } from '@freesewing/legend'
import { i18n as lily } from '@freesewing/lily'
import { i18n as lucy } from '@freesewing/lucy'
import { i18n as lumina } from '@freesewing/lumina'
import { i18n as lumira } from '@freesewing/lumira'
import { i18n as lunetius } from '@freesewing/lunetius'
import { i18n as magde } from '@freesewing/magde'
import { i18n as noble } from '@freesewing/noble'
import { i18n as octoplushy } from '@freesewing/octoplushy'
import { i18n as onyx } from '@freesewing/onyx'
import { i18n as opal } from '@freesewing/opal'
import { i18n as otis } from '@freesewing/otis'
import { i18n as paco } from '@freesewing/paco'
import { i18n as penelope } from '@freesewing/penelope'
import { i18n as plugintest } from '@freesewing/plugintest'
import { i18n as rendertest } from '@freesewing/rendertest'
import { i18n as sandy } from '@freesewing/sandy'
import { i18n as shelly } from '@freesewing/shelly'
import { i18n as shin } from '@freesewing/shin'
import { i18n as simon } from '@freesewing/simon'
import { i18n as simone } from '@freesewing/simone'
import { i18n as skully } from '@freesewing/skully'
import { i18n as sven } from '@freesewing/sven'
import { i18n as tamiko } from '@freesewing/tamiko'
import { i18n as teagan } from '@freesewing/teagan'
import { i18n as tiberius } from '@freesewing/tiberius'
import { i18n as titan } from '@freesewing/titan'
import { i18n as trayvon } from '@freesewing/trayvon'
import { i18n as tristan } from '@freesewing/tristan'
import { i18n as uma } from '@freesewing/uma'
import { i18n as umbra } from '@freesewing/umbra'
import { i18n as wahid } from '@freesewing/wahid'
import { i18n as walburga } from '@freesewing/walburga'
import { i18n as waralee } from '@freesewing/waralee'
import { i18n as yuri } from '@freesewing/yuri'
export const designs = {
aaron: aaron.en,
albert: albert.en,
bee: bee.en,
bella: bella.en,
benjamin: benjamin.en,
bent: bent.en,
bibi: bibi.en,
bob: bob.en,
breanna: breanna.en,
brian: brian.en,
bruce: bruce.en,
carlita: carlita.en,
carlton: carlton.en,
cathrin: cathrin.en,
charlie: charlie.en,
cornelius: cornelius.en,
diana: diana.en,
examples: examples.en,
florence: florence.en,
florent: florent.en,
gozer: gozer.en,
hi: hi.en,
holmes: holmes.en,
hortensia: hortensia.en,
huey: huey.en,
hugo: hugo.en,
jaeger: jaeger.en,
jane: jane.en,
legend: legend.en,
lily: lily.en,
lucy: lucy.en,
lumina: lumina.en,
lumira: lumira.en,
lunetius: lunetius.en,
magde: magde.en,
noble: noble.en,
octoplushy: octoplushy.en,
onyx: onyx.en,
opal: opal.en,
otis: otis.en,
paco: paco.en,
penelope: penelope.en,
plugintest: plugintest.en,
rendertest: rendertest.en,
sandy: sandy.en,
shelly: shelly.en,
shin: shin.en,
simon: simon.en,
simone: simone.en,
skully: skully.en,
sven: sven.en,
tamiko: tamiko.en,
teagan: teagan.en,
tiberius: tiberius.en,
titan: titan.en,
trayvon: trayvon.en,
tristan: tristan.en,
uma: uma.en,
umbra: umbra.en,
wahid: wahid.en,
walburga: walburga.en,
waralee: waralee.en,
yuri: yuri.en,
}

39
i18n/measurements.yaml Normal file
View file

@ -0,0 +1,39 @@
measurements: Measurements
ankle: Ankle circumference
biceps: Biceps circumference
bustFront: Bust front
bustPointToUnderbust: Bust point to underbust
bustSpan: Bust span
chest: Chest circumference
crossSeam: Cross seam
crossSeamFront: Cross seam front
head: Head circumference
heel: Heel circumference
highBustFront: High bust front
highBust: High bust
hips: Hips circumference
hpsToBust: HPS to bust
hpsToWaistBack: HPS to waist back
hpsToWaistFront: HPS to waist front
inseam: Inseam
knee: Knee circumference
neck: Neck circumference
seat: Seat circumference
seatBack: Seat back
crotchDepth: Crotch depth
shoulderSlope: Shoulder slope
shoulderToElbow: Shoulder to elbow
shoulderToShoulder: Shoulder to shoulder
shoulderToWrist: Shoulder to wrist
underbust: Underbust
upperLeg: Upper leg circumference
waist: Waist circumference
waistBack: Waist back
waistToArmpit: Waist to armpit
waistToFloor: Waist to floor
waistToHips: Waist to hips
waistToKnee: Waist to knee
waistToSeat: Waist to seat
waistToUnderbust: Waist to underbust
waistToUpperLeg: Waist to upper leg
wrist: Wrist circumference

15
i18n/optiongroups.yaml Normal file
View file

@ -0,0 +1,15 @@
advanced: Advanced
backPockets: Back pockets
closure: Closure
collar: Collar
conditional: Conditional
construction: Construction
cuffs: Cuffs
darts: Darts
elastic: Elastic
fit: Fit
frontPockets: Front pockets
length: Length
pockets: Pockets
style: Style
test: Test

View file

@ -1,18 +0,0 @@
---
title: Contribute
---
Looking to contribute to FreeSewing? That's wonderful.
## Ways to contribute
There are many ways to contribute, here's some examples:
<ReadMore root='howtos/ways-to-contribute' />
## Code of Conduct
All FreeSewing contributors must respect and uphold our Code of Conduct:
<ReadMore root='guides/code-of-conduct' />

View file

@ -1,101 +0,0 @@
---
title: Design
---
If you are looking to use FreeSewing to design parametric sewing patterns,
below are the most relevant materials on this site for you:
## Before you start
Outlines the minimal prerequisites you should understand before you dive in, including:
- <DocsLink slug="guides/prerequisites" />
<ReadMore root="guides/prerequisites" />
## Pattern design best practices
In design as in code, there's often many different ways to accomplish the same
result. We have a list of best practices that we recommend you follow. Even if
in the end you make your own choices, we recommend you at least ready through
them once. They include:
- <DocsLink slug="guides/best-practices" />
<ReadMore root="guides/best-practices" />
## Design guide
We've so far been talking about *patterns* but what you're really be creating is a *design*.
What the difference is, and what goes into a design to generate a pattern is explained in our design guide:
- <DocsLink slug="guides/designs" />
<ReadMore root="guides/designs" />
## Pattern design tutorial
This is our pattern design tutorial. If you're new to designing patterns with
FreeSewing, following the tutorial is the fastest way to get started:
- <DocsLink slug="tutorials/pattern-design" />
<ReadMore root="tutorials/pattern-design" recurse />
## Plugin guide
FreeSewing can be extended with plugins. We provide a range of plugins that you can use.
However, if you'd like to write your own plugins, you should also read the guide on how they work:
- <DocsLink slug="guides/plugins" />
<ReadMore root="guides/plugins" />
## Common design challenges
This is a list of common challenges in designing parametric sewing patterns, and tips on how to tackle them:
- <DocsLink slug="howtos/design" />
<ReadMore root="howtos/design" />
## Common code challenges
While designing patterns in code has a lot of benefits, there might be times
where things that are intuitive on paper don't come naturally to you. This is
a list of common code challenges and how to tackle them:
- <DocsLink slug="howtos/code" />
<ReadMore root="howtos/code" />
## Core API
This is the reference documentation for FreeSewing's core library.
This is where you can look up every possible API call with examples:
- <DocsLink slug="reference/api" />
<ReadMore root="reference/api" />
## Macros
This is the reference documentation for macros provided by FreeSewing's own plugins:
- <DocsLink slug="reference/macros" />
<ReadMore root="reference/macros" />
## Snippets
This is the reference documentation for snippets provided by FreeSewing's own plugins:
- <DocsLink slug="reference/snippets" />
<ReadMore root="reference/snippets" />
## Plugins
This is the list of all plugins we provide:
- <DocsLink slug="reference/plugins" />
<ReadMore root="reference/plugins" />
<Note>
##### Missing something?
If you are missing something or have questions not covered here, the `#pattern-design` channel
on [discord.freesewing.org](https://discord.freesewing.org/) is the best place to ask questions.
</Note>

View file

@ -1,7 +0,0 @@
---
title: Pattern design best practices
---
Here is a list of best practices when designing patterns:
<ReadMore />

View file

@ -1,39 +0,0 @@
---
title: Construct paths counter-clockwise
order: 70
---
Construct your paths _counter-clockwise_ (anti-clockwise). You have to pick a direction anyway, and going
counter-clockwise is a bit of a convention.
This applies both to naming points (specifically the control points of curves)
and the order in which you define your points.
Obviously, the order in which you add points to your code needs to take a backseat
to the logic of your code. But typically what you're doing is constructing an outline
of (a part of) a garment.
So pick a point, and make your way around counter-clockwise.
When naming control points for curves, re-use the name of the point they are attached to
and add `Cp1` to the control point before and `Cp2` to the control point after the point if,
once again, you follow your path counter-clockwise.
For example:
```js
part.paths.seam = new Path()
.move(points.hemCenter)
.line(points.hemSide)
.line(points.waistSide)
.curve(points.waistSideCp2, points.armholeCp1, points.armhole)
```
<Tip>
##### This convention helps with `Path.offset()` too
Constructing a path counter-clockwise will also ensure that the path offset goes outwards
rather than inwards.
</Tip>

View file

@ -1,84 +0,0 @@
---
title: Respect draft settings
order: 40
---
Apart from the pattern options that you configure for your pattern,
all FreeSewing patterns have a set of [draft settings](/reference/settings) that can be tweaked
by the user.
While many of these will automatically be handled by FreeSewing, there are some
that you will need to take into account while developing your pattern. They are:
## Complete
The [`complete`](/reference/settings/complete) setting is a boolean that is either true or false.
Its goal is to determine whether we should draft a _complete_ pattern which
includes elements such as seam allowance lines, labels, and markings for
buttons and notches,
or if the pattern should include the part outlines only.
It is your job when developing your pattern to ensure that the pattern
checks the `complete` setting and includes or omits the appropriate elements
based on the setting's value.
## Paperless
The [`paperless`](/reference/settings/paperless) setting is a boolean that is either true or false.
A _paperless_ pattern is a pattern that has extra dimension markings so
users can trace or transfer the pattern onto fabric or paper without having
the need to print it.
It is your job when developing your pattern to ensure that the pattern
checks the `paperless` setting and includes or omits the dimensions
based on the setting's value.
## Seam allowance
The [`sa`](/reference/settings/sa) setting is a number that controls the seam allowance width.
Unless `sa` is zero, patterns are drafted with seam allowance lines included.
It is your job when developing your pattern to ensure that the pattern
checks the `sa` setting and includes or omits the seam allowance lines
based on the setting's value.
<Tip>
##### Use a multiple of `sa` for your hem allowance
Resist the temptation to use an absolute value for any seam allowance,
including at the hem.
Instead, always use a multiple of the `sa` value.
This will help to ensure that the seam allowances will scale to appropriate
values when the pattern is scaled up or down to giant or doll sizes.
</Tip>
## Example
To respect the `complete`, `paperless`, and `sa` draft settings, structure your parts as such:
```js
export default function(part) {
let { complete, sa, paperless } = part.shorthand()
// Your paths and points here
if (complete) {
// Your snippets, text, helplines and so on here
if (sa) {
// Your seam allowance here
}
if (paperless) {
// Your dimensions
}
}
return part
}
```

View file

@ -1,10 +0,0 @@
---
title: Re-use CSS classes
order: 30
---
While you can style your pattern however you want, try to re-use the
[CSS class names](/reference/css) that
are in use in our default `@freesewing/plugin-theme` plugin.
Doing so will ensure consistent styling for patterns.

View file

@ -1,17 +0,0 @@
---
title: Re-use measurements
order: 10
---
When designing patterns, re-use the measurements that are already in use as much as possible.
Nobody wins when every pattern requires its own set of measurements, or names
certain measurements differently.
<Tip>
###### See our measurements page for standard measurement names
The [measurements reference page](/reference/measurements/)
contains all our standard measurement names.
</Tip>

View file

@ -1,11 +0,0 @@
---
title: Re-use options
order: 20
---
The same arguments for re-using measurements are also (somewhat) true for options.
While your pattern may require some very specific
options, there's probably a bunch that are similar to other patterns. Re-use those names.
As in, `bicepsEase` exists. So don't go creating an `upperArmEase` option.

View file

@ -1,34 +0,0 @@
---
title: Use percentage options where possible
order: 50
---
When designing patterns, you should refrain from using absolute values.
That 6 cm ease you add might be fine for all scenarios you tested.
But, then somebody comes around who is twice your size or who is making clothes for a doll,
and things will go off the rails.
Don't be tempted to add absolute values to your patterns, as they don't scale.
Instead, embrace percentages as options.
By using values that are percentages of measurements, the values will scale
and continue to work as the measurements scale up or down.
<Tip>
##### Use the doll and giant tests
To check how well your pattern scales, you can
use the _doll_ and _giant_ tests by sampling the pattern for 3 measurements sets:
1. A set of measurements from an average person (the person)
2. A set of measurements 1/10th of an average person (the doll)
3. A set of measurements 3 times that of an average person (the giant)
A well-designed pattern will scale a factor 10 down or 3 up and still hold its shape.
If your pattern makes assumptions about size, these tests will show that.
FreeSewing's development environment provides these tests out of the box,
so you can see their results at the click of a button.
</Tip>

View file

@ -1,30 +0,0 @@
---
title: Use translation keys, not text
order: 60
---
Don't insert literal text in your patterns. Instead, insert a key that can then be translated.
For example, if you want to put "_Finish with bias tape_" on your pattern, don't be
tempted to do this:
```js
path.seam.attr("data-text", "Finish with bias tape");
```
That (English) string is now hard-coded in your pattern. As FreeSewing supports
translation out of the box, it would be a real shame not to make use of it.
Instead, insert a key to identify the string:
```js
path.seam.attr("data-text", "finishWithBiasTape");
```
This way, different strings for different languages can be associated with
the key, allowing translated text to be used.
You can find and browse the translations and available translation keys for each design in the design's
[i18n folder on GitHub][1].
[1]: https://github.com/freesewing/freesewing/tree/develop/designs/aaron/i18n

View file

@ -1,20 +0,0 @@
---
title: Code of Conduct
---
All FreeSewing contributors must respect and uphold our Code of Conduct:
<ReadMore />
<Note>
##### Attribution
This Code of Conduct is an almost verbatim copy of the [Contributor Covenant][homepage], version 2.0,
available at [http://contributor-covenant.org/version/2/0][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/2/0/
</Note>

View file

@ -1,17 +0,0 @@
---
title: Correction
order: 10
---
##### Community Impact
Use of inappropriate language or other behavior
deemed unprofessional or unwelcome in the community.
##### Consequence
A private, written warning from community leaders,
providing clarity around the nature of the violation and an
explanation of why the behavior was inappropriate.
A public apology may be requested.

View file

@ -1,10 +0,0 @@
---
title: Enforcement Guidelines
order: 60
---
Community leaders will follow these Community Impact Guidelines
in determining the consequences for any action they deem
in violation of FreeSewing's Code of Conduct:
<ReadMore />

View file

@ -1,15 +0,0 @@
---
title: Permanent ban
order: 40
---
##### Community Impact
Demonstrating a pattern of violation of
community standards, including sustained inappropriate behavior,
harassment of an individual, or aggression toward or
disparagement of classes of individuals.
##### Consequence
A permanent ban from any sort of public interaction within the community.

View file

@ -1,21 +0,0 @@
---
title: Temporary ban
order: 30
---
##### Community Impact
A serious violation of community standards,
including sustained inappropriate behavior.
##### Consequence
A temporary ban from any sort of interaction or
public communication with the community for a specified period
of time.
No public or private interaction with the people
involved, including unsolicited interaction with those enforcing
the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

Some files were not shown because too many files have changed in this diff Show more