Merge branch 'freesewing:develop' into opal
This commit is contained in:
commit
7106ae792c
1470 changed files with 39528 additions and 30372 deletions
|
@ -6,6 +6,7 @@
|
|||
*.svg
|
||||
*.sh
|
||||
*.md
|
||||
*.mdx
|
||||
*.prisma
|
||||
*.css
|
||||
*.mustache
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -28,6 +28,9 @@ sites/*/package-lock.json
|
|||
# Nx cache
|
||||
.nx/cache
|
||||
|
||||
# Docusaurus cache
|
||||
.docusaurus
|
||||
|
||||
# Sites prebuild artifacts
|
||||
sites/*/public/locales/*/*.json
|
||||
!sites/sde/public/locales/*/*.json
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -16,7 +16,7 @@ export const front = {
|
|||
frontArmholeDeeper: 0,
|
||||
armholeDepthFactor: 0.6,
|
||||
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' },
|
||||
hipsEase: { pct: 8, min: 0, max: 20, menu: 'fit' },
|
||||
stretchFactor: { pct: 5, min: 0, max: 15, menu: 'fit' },
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -28,8 +28,11 @@ export const cup = {
|
|||
bustDartCurve: 1,
|
||||
bustDartLength: 1,
|
||||
waistDartLength: 1,
|
||||
waistDartCurve: 1,
|
||||
backHemSlope: 2.5,
|
||||
backNeckCutout: 0.06,
|
||||
bustDartAngle: 0,
|
||||
bustDartMinimumFabric: 0,
|
||||
//catergory changed from Bella
|
||||
armholeDepth: { pct: 44, min: 38, max: 46, menu: 'advanced' },
|
||||
frontArmholePitchDepth: { pct: 29, max: 31, min: 27, menu: 'advanced' },
|
||||
|
|
|
@ -50,6 +50,18 @@
|
|||
"t": "Bust dart curve",
|
||||
"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": {
|
||||
"t": "Armhole depth",
|
||||
"d": "Controls the depth of the armhole"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -31,9 +31,12 @@ export const back = {
|
|||
waistEase: { pct: 5, min: 1, max: 20, menu: 'fit' },
|
||||
// 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' },
|
||||
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' },
|
||||
waistDartCurve: { pct: 100, min: -100, max: 100, menu: 'darts' },
|
||||
// Armhole
|
||||
armholeDepth: { pct: 44, min: 38, max: 46, menu: 'armhole' },
|
||||
backArmholeCurvature: { pct: 63, min: 50, max: 85, menu: 'armhole' },
|
||||
|
|
|
@ -15,6 +15,7 @@ export const frontSideDart = {
|
|||
macro,
|
||||
utils,
|
||||
measurements,
|
||||
log,
|
||||
part,
|
||||
}) => {
|
||||
// Get to work
|
||||
|
@ -114,12 +115,32 @@ export const frontSideDart = {
|
|||
)
|
||||
|
||||
// Bust dart
|
||||
const sideSeamLength = store.get('sideSeamLength')
|
||||
const minimumFabric = sideSeamLength * options.bustDartMinimumFabric
|
||||
points.bustDartTop = utils.beamsIntersect(
|
||||
points.armhole,
|
||||
points.sideHem,
|
||||
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.bustDartMiddle = points.bustDartTop.shiftFractionTowards(points.bustDartBottom, 0.5)
|
||||
points.bustDartTip = points.bustDartMiddle.shiftFractionTowards(
|
||||
|
@ -140,8 +161,8 @@ export const frontSideDart = {
|
|||
.rotate(-5 * options.bustDartCurve, points.bust)
|
||||
|
||||
// Side seam length
|
||||
let aboveDart = points.armhole.dist(points.bustDartTop)
|
||||
let belowDart = store.get('sideSeamLength') - aboveDart
|
||||
const aboveDart = points.armhole.dist(points.bustDartTop)
|
||||
const belowDart = sideSeamLength - aboveDart
|
||||
points.sideHemInitial = points.bustDartBottom
|
||||
.shift(-90, belowDart)
|
||||
.shift(180, store.get('sideReduction'))
|
||||
|
@ -152,6 +173,16 @@ export const frontSideDart = {
|
|||
let reduce = points.cfHem.dist(points.sideHemInitial) - hemLen
|
||||
|
||||
// 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.waistDartLeft = points.waistDartHem.shift(180, reduce / 2)
|
||||
points.waistDartRight = points.waistDartHem.shift(0, reduce / 2)
|
||||
|
@ -167,12 +198,28 @@ export const frontSideDart = {
|
|||
90,
|
||||
points.waistDartHem.dist(points.bust) / 2
|
||||
)
|
||||
|
||||
paths.seam = new Path()
|
||||
.move(points.cfHem)
|
||||
// Apply option-controlled curvature to waist dart
|
||||
points.waistDartLeftMid = new Path()
|
||||
.move(points.bust)
|
||||
.line(points.waistDartLeft)
|
||||
.curve_(points.waistDartLeftCp, points.waistDartTip)
|
||||
._curve(points.waistDartRightCp, points.waistDartRight)
|
||||
.shiftFractionAlong(0.5)
|
||||
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.bustDartBottom)
|
||||
._curve(points.bustDartCpBottom, points.bustDartTip)
|
||||
|
@ -186,10 +233,9 @@ export const frontSideDart = {
|
|||
.close()
|
||||
.attr('class', 'fabric')
|
||||
|
||||
paths.saBase = new Path()
|
||||
.move(points.cfHem)
|
||||
.line(points.waistDartLeft)
|
||||
.line(points.waistDartRight)
|
||||
paths.saBase = new Path().move(points.cfHem)
|
||||
if (includeWaistDart) paths.saBase.line(points.waistDartLeft).line(points.waistDartRight)
|
||||
paths.saBase
|
||||
.line(points.sideHem)
|
||||
.line(points.bustDartBottom)
|
||||
.line(points.bustDartEdge)
|
||||
|
@ -248,29 +294,33 @@ export const frontSideDart = {
|
|||
})
|
||||
|
||||
// Dimensions
|
||||
macro('vd', {
|
||||
id: 'hCfHemToWaistDartTop',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartTip,
|
||||
x: 0 - 15,
|
||||
})
|
||||
let dimensionOffset = 0
|
||||
if (includeWaistDart) {
|
||||
dimensionOffset = 15
|
||||
macro('vd', {
|
||||
id: 'hCfHemToWaistDartTop',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartTip,
|
||||
x: 0 - 15,
|
||||
})
|
||||
}
|
||||
macro('vd', {
|
||||
id: 'hCfHemToBustPoint',
|
||||
from: points.cfHem,
|
||||
to: points.bust,
|
||||
x: 0 - 30,
|
||||
x: 0 - 15 - dimensionOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hCfHemToNeckCutout',
|
||||
from: points.cfHem,
|
||||
to: points.cfNeck,
|
||||
x: 0 - 45,
|
||||
x: 0 - 30 - dimensionOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hTotal',
|
||||
from: points.cfHem,
|
||||
to: points.hps,
|
||||
x: 0 - 60,
|
||||
x: 0 - 45 - dimensionOffset,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfToWaistDartTip',
|
||||
|
@ -284,35 +334,39 @@ export const frontSideDart = {
|
|||
to: points.bustDartTip,
|
||||
y: points.bust.y - 30,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfToWaistDartLeft',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartLeft,
|
||||
y: points.cfHem.y + sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfToWaistDartRight',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartRight,
|
||||
y: points.cfHem.y + sa + 30,
|
||||
})
|
||||
dimensionOffset = 0
|
||||
if (includeWaistDart) {
|
||||
dimensionOffset = 30
|
||||
macro('hd', {
|
||||
id: 'wCfToWaistDartLeft',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartLeft,
|
||||
y: points.cfHem.y + sa + 15,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfToWaistDartRight',
|
||||
from: points.cfHem,
|
||||
to: points.waistDartRight,
|
||||
y: points.cfHem.y + sa + 30,
|
||||
})
|
||||
}
|
||||
macro('hd', {
|
||||
id: 'wHemTotal',
|
||||
from: points.cfHem,
|
||||
to: points.sideHem,
|
||||
y: points.cfHem.y + sa + 45,
|
||||
y: points.cfHem.y + sa + 15 + dimensionOffset,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfHemToBustDartBottom',
|
||||
from: points.cfHem,
|
||||
to: points.bustDartBottom,
|
||||
y: points.cfHem.y + sa + 60,
|
||||
y: points.cfHem.y + sa + 30 + dimensionOffset,
|
||||
})
|
||||
macro('hd', {
|
||||
id: 'wCfHemToBustDartTop',
|
||||
from: points.cfHem,
|
||||
to: points.bustDartTop,
|
||||
y: points.cfHem.y + sa + 75,
|
||||
y: points.cfHem.y + sa + 45 + dimensionOffset,
|
||||
})
|
||||
macro('vd', {
|
||||
id: 'hHemRightToBustDartBottom',
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -5,7 +5,8 @@ function draftBentSleeve({ Path, paths, points, store, options, part }) {
|
|||
let { Point, Path, points, store, options, measurements, utils } = part.shorthand()
|
||||
// Sleeve frame
|
||||
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.boxBottom = points.top.shift(
|
||||
-90,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -50,18 +50,21 @@ export const front = {
|
|||
waistAngle -= 180
|
||||
}
|
||||
|
||||
const flyConst = 14
|
||||
store.set('flyConst',flyConst)
|
||||
|
||||
points.flyTop = points.pW.shift(
|
||||
points.pW.angle(points.pZ) - 180 + waistAngle,
|
||||
halfInch * flyWidth
|
||||
flyConst * flyWidth
|
||||
)
|
||||
points.flyBottom = points.flyTop.shift(
|
||||
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.pW.angle(points.pZ) - waistAngle,
|
||||
halfInch * flyWidth * cc
|
||||
flyConst * flyWidth * cc
|
||||
)
|
||||
points.pFBcpZ = points.flyBottom.shift(points.pW.angle(points.pZ), halfInch * flyWidth * cc)
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ export const zipperguard = {
|
|||
draft: ({ Point, Path, points, paths, Snippet, snippets, sa, store, macro, part }) => {
|
||||
const cc = 0.551915024494 // circle constant
|
||||
|
||||
const halfInch = store.get('halfInch')
|
||||
const flyWidth = store.get('flyWidth') * halfInch
|
||||
const flyConst = store.get('flyConst')
|
||||
const flyWidth = store.get('flyWidth') * flyConst
|
||||
const flyLength = store.get('flyLength')
|
||||
|
||||
points.pA = new Point(0, 0)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -2,15 +2,17 @@ export const ghost = {
|
|||
name: 'gozer.ghost',
|
||||
measurements: ['hpsToWaistBack', 'waistToFloor', 'head'],
|
||||
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 =
|
||||
measurements.hpsToWaistBack + measurements.waistToFloor + measurements.head / Math.PI
|
||||
|
||||
points.middle = new Point(0, 0).addCircle(size, 'fabric')
|
||||
|
||||
points.eyeLine = points.middle.shift(270, measurements.head / Math.PI / 2)
|
||||
points.eyeLeft = points.eyeLine.shift(180, measurements.head * 0.13)
|
||||
points.eyeRight = points.eyeLine.shift(0, measurements.head * 0.13)
|
||||
points.eyeLine = points.middle.shift(270, eyeLine)
|
||||
points.eyeLeft = points.eyeLine.shift(180, eyeOffset)
|
||||
points.eyeRight = points.eyeLine.shift(0, eyeOffset)
|
||||
points.left = new Point(-1 * size, 0)
|
||||
points.right = new Point(size, 0)
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -33,6 +33,10 @@
|
|||
"t": "Pocket height",
|
||||
"d": "Controls the height of the pocket"
|
||||
},
|
||||
"pocketOpening": {
|
||||
"t": "Pocket opening",
|
||||
"d": "Controls the opening size of the pocket"
|
||||
},
|
||||
"hoodHeight": {
|
||||
"t": "Hood height",
|
||||
"d": "Controls the height of the hood"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -37,7 +37,7 @@ function draftHueyFront({
|
|||
points.pocketTopRight = points.pocketCfTop.shift(0, points.hem.x * options.pocketWidth)
|
||||
points.pocketTip = new Point(
|
||||
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.pocketTopRight.x + points.pocketTopRight.dx(points.pocketTip) / 2,
|
||||
|
@ -134,6 +134,7 @@ export const front = {
|
|||
pocket: { bool: true, menu: 'style' },
|
||||
pocketHeight: { pct: 30, min: 25, max: 35, menu: 'style' },
|
||||
pocketWidth: { pct: 60, min: 50, max: 70, menu: 'style' },
|
||||
pocketOpening: { pct: 90, min: 60, max: 90, menu: 'style' },
|
||||
},
|
||||
draft: draftHueyFront,
|
||||
}
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
"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.",
|
||||
"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.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.d": "The **Waistband** (8) is a rectangular piece of ribbing fabric {{{ w }}} wide and {{{ l }}} long, with the grainline parallel to the width."
|
||||
},
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -4,6 +4,9 @@ import { pctBasedOn } from '@freesewing/core'
|
|||
export const shoulderToShoulderCorrection = 0.995
|
||||
export const bustDartCurve = 1
|
||||
export const bustDartLength = 0.9
|
||||
export const bustDartAngle = 0
|
||||
export const bustDartMinimumFabric = 0
|
||||
export const waistDartCurve = 1
|
||||
// Percentages
|
||||
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' }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -113,9 +113,13 @@ function sandySkirt({
|
|||
if (sa) {
|
||||
paths.hemBase = new Path()
|
||||
.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)
|
||||
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)
|
||||
paths.saBase = new Path().move(points.ex2).line(points.ex2).join(paths.saBase)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -24,6 +24,12 @@ function simoneFbaFront({
|
|||
* 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?
|
||||
* Note that:
|
||||
|
@ -37,18 +43,13 @@ function simoneFbaFront({
|
|||
* 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
|
||||
* 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) {
|
||||
log.info('No FBA required, using unaltered Simon front')
|
||||
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
|
||||
*/
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -17,10 +17,9 @@ export const CreateShape = ({
|
|||
const double =
|
||||
type == options.zipperLocation || (true == options.lacing && type == options.lacingLocation)
|
||||
|
||||
const angle = (options.peplumFullness / 2) * ratio * (double ? 0.5 : 1)
|
||||
macro('ringsector', {
|
||||
id: type + 'Peblum',
|
||||
angle: angle,
|
||||
angle: (options.peplumFullness / 2) * ratio * (double ? 0.5 : 1),
|
||||
insideRadius: radius,
|
||||
outsideRadius: radius + width,
|
||||
rotate: false,
|
||||
|
@ -53,9 +52,27 @@ export const CreateShape = ({
|
|||
.join(
|
||||
new Path()
|
||||
.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'])
|
||||
.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)
|
||||
)
|
||||
.line(points['__macro_ringsector_' + type + 'Peblum_in2Flipped'])
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
import en from './en.json' with { type: 'json' }
|
||||
import de from './de.json' with { type: 'json' }
|
||||
import es from './es.json' with { type: 'json' }
|
||||
import fr from './fr.json' with { type: 'json' }
|
||||
import nl from './nl.json' with { type: 'json' }
|
||||
import uk from './uk.json' with { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
||||
|
|
133
i18n/designs.mjs
Normal file
133
i18n/designs.mjs
Normal 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
39
i18n/measurements.yaml
Normal 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
15
i18n/optiongroups.yaml
Normal 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
|
|
@ -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' />
|
||||
|
|
@ -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>
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
title: Pattern design best practices
|
||||
---
|
||||
|
||||
Here is a list of best practices when designing patterns:
|
||||
|
||||
<ReadMore />
|
|
@ -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>
|
|
@ -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
|
||||
}
|
||||
```
|
|
@ -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.
|
|
@ -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>
|
|
@ -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.
|
|
@ -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>
|
|
@ -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
|
|
@ -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>
|
|
@ -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.
|
|
@ -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 />
|
|
@ -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.
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue