1
0
Fork 0

cleanup and introducing a bug

This commit is contained in:
woutervdub 2023-11-28 06:31:40 +00:00
parent 738ca1b89d
commit 4c794e1d86
4 changed files with 217 additions and 422 deletions

View file

@ -10,6 +10,8 @@ export const gusset = {
backInsertTopCpAngle: 0,
backInsertGussetCp: 0.2,
frontBulgeLift: 1.75,
frontBulgeForwardPercentage: 0.125,
frontBulgeMiddleShift: 0.65,
buttLift: {
pct: 30,
min: 0,
@ -39,10 +41,10 @@ export const gusset = {
paths,
Snippet,
snippets,
complete,
options,
macro,
utils,
log,
part,
}) => {
const waistLowering = store.get('waistLowering')
@ -56,12 +58,6 @@ export const gusset = {
(options.cyclingChamois ? 0.0125 : options.frontBulgeSize) * measurements.crossSeamFront
const backInsertGussetCpAngle = options.cyclingChamois ? 0 : 90 * options.buttLift
const RotatePoints = ({ center, angle, pointsArray }) => {
pointsArray.forEach((pointName) => {
points[pointName] = points[pointName].rotate(angle, center)
})
}
points.backInsertCenterTop = new Point(0, 0)
points.backInsertOutsideGusset = points.backInsertCenterTop
.shift(
@ -69,7 +65,7 @@ export const gusset = {
measurements.crossSeamBack - measurements.waistToHips - waistLowering - backGussetLength
)
.shift(0, gussetWidth)
points.backInsertCenterGusset = new Point(0, points.backInsertOutsideGusset.y).addCircle(10)
points.backInsertCenterGusset = new Point(0, points.backInsertOutsideGusset.y)
points.backInsertCenterSeat = points.backInsertCenterTop.shift(
270,
@ -113,71 +109,50 @@ export const gusset = {
points.backInsertCenterBottom = points.backInsertOutsideBottom.shift(180, gussetWidth)
if (frontBulge) {
const frontLength = store.get('frontLength')
const bulgeSplitForward = measurements.crossSeamFront * options.frontBulgeForwardPercentage
const frontLength = store.get('frontLength') - bulgeSplitForward
const rotateAngle = utils.rad2deg(Math.acos(frontLength / (frontLength + frontBulgeSize))) / 2
console.log({ frontBulgeSize: frontBulgeSize })
console.log({ frontLength: frontLength })
const rotateAngle = utils.rad2deg(Math.acos(frontLength / (frontLength + frontBulgeSize)))
const frontCircleCircumference = frontLength * (180 / rotateAngle)
const frontCircleRadius = frontCircleCircumference / Math.PI
const frontOutsideCircumference = (frontCircleRadius + gussetWidth) * Math.PI
const frontOutsideSector = frontOutsideCircumference / (180 / rotateAngle)
console.log({
rotateAngle: rotateAngle,
frontCircleCircumference: frontCircleCircumference,
frontCircleRadius: frontCircleRadius,
frontOutsideCircumference: frontOutsideCircumference,
frontOutsideSector: frontOutsideSector,
frontLength: frontLength,
frontBulgeSize: frontBulgeSize,
frontBulge: frontLength + frontBulgeSize,
})
points.frontOutsideSplit = points.backInsertOutsideBottom.shift(270, bulgeSplitForward)
points.frontCenterSplit = points.frontOutsideSplit.shift(180, gussetWidth)
points.frontOutside = points.frontOutsideSplit.shift(270 + rotateAngle, frontLength)
points.frontOutside = points.backInsertOutsideBottom.shift(270 + rotateAngle, frontLength)
const thisCbqc = cbqc * (rotateAngle / 45)
points.backInsertOutsideBottomCp1 = points.backInsertOutsideBottom
.shift(270, thisCbqc * frontLength)
.addCircle(4)
.addCircle(6)
const thisCbqc = cbqc * 0.75 //(rotateAngle / 22.5)
points.frontOutsideSplitCp1 = points.frontOutsideSplit.shift(270, thisCbqc * frontLength)
var diff = 0
var iter = 0
do {
points.frontOutside = points.frontOutside
.shiftTowards(points.backInsertOutsideBottom, diff)
.addCircle(10)
points.frontOutsideCp = points.frontOutside
.shift(90 + rotateAngle * 2, thisCbqc * frontLength)
.addCircle(8)
points.frontOutside = points.frontOutside.shiftTowards(points.frontOutsideSplit, diff)
points.frontOutsideCp = points.frontOutside.shift(
90 + rotateAngle * 2,
thisCbqc * frontLength
)
paths.frontOutside = new Path()
.move(points.frontOutside)
// .line(points.frontOutside)
.curve(
points.frontOutsideCp,
points.backInsertOutsideBottomCp1,
points.backInsertOutsideBottom
)
.curve(points.frontOutsideCp, points.frontOutsideSplitCp1, points.frontOutsideSplit)
.hide()
diff = paths.frontOutside.length() - frontLength
console.log({ i: iter, d: diff })
} while (iter++ < 100 && (diff > 1 || diff < -1))
if (iter >= 100) {
log.info('couldNotFitFrontOutside')
}
points.frontOutsideHips = paths.frontOutside.shiftAlong(
measurements.waistToHips - waistLowering - waistbandSize
)
const frontCenterAngle = points.frontOutside.angle(points.frontOutsideHips) - 90
console.log({ frontCenterAngle: frontCenterAngle })
points.frontCenter = points.frontOutside
.shift(180 + frontCenterAngle, gussetWidth)
.addCircle(5)
.addCircle(10)
points.frontCenterHips = points.frontOutsideHips
.shift(180 + frontCenterAngle, gussetWidth)
.addCircle(5)
.addCircle(10)
points.frontCenterOutside = points.frontOutside.shift(180 + frontCenterAngle, gussetWidth)
// .addCircle(5)
// .addCircle(10)
points.frontCenterHips = points.frontOutsideHips.shift(180 + frontCenterAngle, gussetWidth)
// .addCircle(5)
// .addCircle(10)
points.backInsertCenterBottom.addCircle(4)
points.backInsertCenterBottom
//.addCircle(4)
const gussetCpLength = points.backInsertCenterGusset.dist(points.backInsertCenterBottom)
@ -186,53 +161,62 @@ export const gusset = {
gussetCpLength * 1
// gussetCpLength * options.frontBulgeLift
)
points.frontCenterSplitCp = points.frontCenterSplit.shift(
270,
gussetCpLength * 1
// gussetCpLength * options.frontBulgeLift
) //.addCircle(10)
points.frontCenterHipsCp9 = paths.frontOutside.shiftAlong(gussetCpLength).addCircle(20)
// points.frontCenterHipsCp9 = paths.frontOutside.shiftAlong(gussetCpLength).addCircle(20)
points.frontCenterHipsCp = paths.frontOutside
.shiftAlong(gussetCpLength)
.shift(180 + frontCenterAngle, gussetWidth)
// points.frontCenterHipsCp = points.frontCenterHips.shift(
// frontCenterAngle,
// gussetCpLength * (1 / options.frontBulgeLift)
// )
points.frontCenterMiddle = points.frontCenterHipsCp
.shift(
90 + frontCenterAngle,
points.frontCenterHipsCp.dist(points.backInsertCenterBottomCp) / 2
)
.addCircle(6)
points.frontCenterMiddle = points.frontCenterHipsCp.shift(
90 + frontCenterAngle,
points.frontCenterHipsCp.dist(points.frontCenterSplitCp) * options.frontBulgeMiddleShift
)
points.frontCenterMiddle = points.frontCenterHipsCp.shiftFractionTowards(
points.frontCenterSplitCp,
options.frontBulgeMiddleShift
)
// .addCircle(3)
// .addCircle(6)
// .addCircle(9)
var diff = 0
var iter = 0
do {
points.frontCenterMiddle = points.frontCenterMiddle.shift(
180 + frontCenterAngle * 0.5,
diff
points['frontCenterMiddle' + iter] = points.frontCenterMiddle.clone()
points.frontCenterMiddle = points.frontCenterMiddle.shift(frontCenterAngle * 0.5, diff)
// .addCircle(3)
// .addCircle(6)
// .addCircle(9)
points.frontCenterMiddleCp1 = points.frontCenterMiddle.shift(
90 + frontCenterAngle * 0.6,
gussetCpLength * (1 - options.frontBulgeMiddleShift)
)
points.frontCenterMiddleCp1 = points.frontCenterMiddle
.shift(90 + frontCenterAngle * 0.6, gussetCpLength * 0.8)
.addCircle(3)
// .addCircle(3)
// points.frontCenterMiddleCp1.x = 0
points.frontCenterMiddleCp2 = points.frontCenterMiddle
.shift(270 + frontCenterAngle * 0.6, gussetCpLength * 0.9)
.addCircle(3)
.addCircle(6)
.addCircle(9)
points.frontCenterMiddleCp2 = points.frontCenterMiddle.shift(
270 + frontCenterAngle * 0.6,
gussetCpLength * 0.9
)
// .addCircle(3)
// .addCircle(6)
// .addCircle(9)
const frontGussetPath = new Path()
.move(points.frontCenter)
.move(points.frontCenterOutside)
.line(points.frontCenterHips)
.curve(points.frontCenterHipsCp, points.frontCenterMiddleCp2, points.frontCenterMiddle)
.curve(
points.frontCenterMiddleCp1,
points.backInsertCenterBottomCp,
points.backInsertCenterBottom
)
paths.frontCenterGussetPath = frontGussetPath.clone().addClass('note')
.curve(points.frontCenterMiddleCp1, points.frontCenterSplitCp, points.frontCenterSplit)
paths['frontCenterGussetPath' + iter] = frontGussetPath.clone().addClass('note')
console.log({ frontGussetPath: frontGussetPath })
diff = frontLength + frontBulgeSize - frontGussetPath.length()
diff = frontGussetPath.length() - (frontLength + frontBulgeSize)
console.log({
i: iter,
@ -240,63 +224,30 @@ export const gusset = {
fl: frontLength + frontBulgeSize,
pl: frontGussetPath.length(),
})
} while (iter++ < 1 && (diff > 1 || diff < -1))
} while (iter++ < 20 && (diff > 1 || diff < -1))
if (iter >= 20) {
log.info('couldNotFitFrontGussetPath')
}
const frontGussetAngle = points.frontCenterMiddle.angle(points.backInsertCenterBottom)
console.log({ frontGussetAngle: frontGussetAngle })
paths.frontBulge = new Path()
.move(points.backInsertCenterBottom)
.curve(
points.backInsertCenterBottomCp,
points.frontCenterMiddleCp1,
points.frontCenterMiddle
)
.move(points.frontCenterSplit)
.curve(points.frontCenterSplitCp, points.frontCenterMiddleCp1, points.frontCenterMiddle)
.curve(points.frontCenterMiddleCp2, points.frontCenterHipsCp, points.frontCenterHips)
.hide()
// snippets.front = new Snippet('notch', paths.frontBulge.shiftFractionAlong(0.5))
paths.front = new Path()
.move(points.backInsertCenterBottom)
.move(points.frontCenterSplit)
.join(paths.frontBulge)
.line(points.frontCenter)
.line(points.frontCenterOutside)
.join(paths.frontOutside)
.line(points.backInsertOutsideBottom)
.hide()
paths.backGusset = new Path()
.move(points.backInsertOutsideGusset)
.curve(
points.backInsertOutsideGussetCp1,
points.backInsertCenterTopCp1,
points.backInsertCenterTop
)
macro('mirror', {
clone: true,
mirror: [new Point(0, 1000), new Point(0, -1000)],
points: [
'backInsertCenterTop',
'backInsertCenterBottom',
'backInsertCenterTop',
'backInsertOutsideGusset',
'frontOutside',
'backInsertOutsideBottom',
],
paths: ['front', 'frontBulge', 'backGusset', 'backInsertCircle', 'frontOutside'],
prefix: 'mirror',
})
console.log({ Gpoints: JSON.parse(JSON.stringify(points)) })
console.log({ Gpaths: JSON.parse(JSON.stringify(paths)) })
paths.seam = new Path()
.move(points.backInsertCenterBottom)
.join(paths.front)
.line(points.backInsertOutsideGusset)
.join(paths.backGusset)
.join(paths.mirrorBackGusset.reverse())
.line(points.mirrorBackInsertOutsideBottom)
.join(paths.mirrorFront.reverse())
.close()
points.frontCenter = points.frontCenterSplit.clone()
} else {
const frontGussetAngle = store.get('frontGussetAngle')
const frontGussetLength = store.get('frontGussetLength')
@ -311,134 +262,76 @@ export const gusset = {
)
paths.front = new Path()
.move(points.backInsertCenterBottom)
.line(points.frontCenter)
// .move(points.backInsertCenterBottom)
// .line(points.frontCenter)
.move(points.frontCenter)
.curve(
points.frontCenterCp,
points.backInsertOutsideBottomCp,
points.backInsertOutsideBottom
)
.hide()
paths.backGusset = new Path()
.move(points.backInsertOutsideGusset)
.curve(
points.backInsertOutsideGussetCp1,
points.backInsertCenterTopCp1,
points.backInsertCenterTop
)
paths.seam = new Path()
.move(points.backInsertCenterTop)
.line(points.backInsertCenterBottom)
.join(paths.front)
.line(points.backInsertOutsideGusset)
.join(paths.backGusset)
.close()
}
paths.backGusset = new Path()
.move(points.backInsertOutsideGusset)
.curve(
points.backInsertOutsideGussetCp1,
points.backInsertCenterTopCp1,
points.backInsertCenterTop
)
.hide()
paths.seamSA = new Path()
.move(points.frontCenter)
.join(paths.front)
.line(points.backInsertOutsideGusset)
.join(paths.backGusset)
.hide()
paths.seam = new Path()
.move(points.backInsertCenterTop)
.line(points.frontCenter)
.join(paths.seamSA)
.close()
if (sa) {
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
if (frontBulge) {
const pathSA = paths.seamSA.offset(sa)
paths.saOffset = pathSA.split(pathSA.intersectsX(0)[0])[1].hide()
} else {
paths.saOffset = paths.seamSA.offset(sa).hide()
}
paths.sa = new Path()
.move(points.frontCenter)
.line(points.frontCenter.shift(270, sa))
.move(paths.saOffset.start())
.join(paths.saOffset)
.line(points.backInsertCenterTop.shift(90, sa))
.line(points.backInsertCenterTop)
.attr('class', 'fabric sa')
}
snippets.circle5 = new Snippet('notch', points.backInsertOutsideBottom)
snippets.middle = new Snippet('notch', points.backInsertOutsideBottom)
snippets.circle4 = new Snippet('notch', points.backInsertOutsideGusset)
snippets.circle3 = new Snippet('notch', paths.backGusset.shiftFractionAlong(0.25))
snippets.circle2 = new Snippet('notch', paths.backGusset.shiftFractionAlong(0.5))
snippets.circle1 = new Snippet('notch', paths.backGusset.shiftFractionAlong(0.75))
snippets.circle0 = new Snippet('notch', points.backInsertCenterTop)
console.log({ Gpoints: JSON.parse(JSON.stringify(points)) })
console.log({ Gpaths: JSON.parse(JSON.stringify(paths)) })
console.log({ Gstore: JSON.parse(JSON.stringify(store)) })
console.log({ Gmeasurements: JSON.parse(JSON.stringify(measurements)) })
macro('cutonfold', {
from: points.backInsertCenterTop,
to: points.frontCenter,
})
store.cutlist.addCut({ cut: 2, from: 'fabric' })
return part
},
}
// if (frontBulge) {
// const frontLength = store.get('frontLength')
// points.frontCenter = points.backInsertCenterBottom.shift(
// 270,
// measurements.crossSeamFront - waistLowering - waistbandSize
// )
// points.frontOutside = points.frontCenter.shift(0, gussetWidth)
// points.frontOutsideHips = points.frontOutside.shift(
// 90,
// measurements.waistToHips - waistLowering - waistbandSize
// )
// const gussetCpLength = points.backInsertOutsideGusset.dist(points.backInsertOutsideBottom)
// points.backInsertOutsideBottomCp = points.backInsertOutsideBottom.shift(
// 270,
// gussetCpLength * options.frontBulgeLift
// )
// points.frontOutsideHipsCp = points.frontOutsideHips.shift(
// 90,
// gussetCpLength * (1 / options.frontBulgeLift)
// )
// points.frontOutsideMiddle = points.frontOutsideHipsCp.shift(
// 90,
// points.frontOutsideHipsCp.dist(points.backInsertOutsideBottomCp) / 2
// )
// var diff = 0
// var iter = 0
// do {
// points.frontOutsideMiddle = points.frontOutsideMiddle.shift(0, diff)
// points.frontOutsideMiddleCp1 = points.frontOutsideMiddle.shift(90, gussetCpLength)
// points.frontOutsideMiddleCp2 = points.frontOutsideMiddle.shift(270, gussetCpLength)
// const frontGussetPath = new Path()
// .move(points.frontOutside)
// .line(points.frontOutsideHips)
// .curve(points.frontOutsideHipsCp, points.frontOutsideMiddleCp2, points.frontOutsideMiddle)
// .curve(
// points.frontOutsideMiddleCp1,
// points.backInsertOutsideBottomCp,
// points.backInsertOutsideBottom
// )
// diff = frontLength + frontBulgeSize - frontGussetPath.length()
// } while (iter++ < 3 && (diff > 1 || diff < -1))
// paths.frontBulge = new Path()
// .move(points.frontOutsideHips)
// .curve(points.frontOutsideHipsCp, points.frontOutsideMiddleCp2, points.frontOutsideMiddle)
// .curve(
// points.frontOutsideMiddleCp1,
// points.backInsertOutsideBottomCp,
// points.backInsertOutsideBottom
// )
// .hide()
// snippets.front = new Snippet('notch', paths.frontBulge.shiftFractionAlong(0.5))
// paths.front = new Path()
// .move(points.backInsertCenterBottom)
// .line(points.frontCenter)
// .line(points.frontOutside)
// .line(points.frontOutsideHips)
// .join(paths.frontBulge)
// .hide()
// } else {
// const frontGussetAngle = store.get('frontGussetAngle')
// const frontGussetLength = store.get('frontGussetLength')
// points.frontCenter = points.backInsertCenterBottom.shift(270, frontGussetLength)
// points.frontCenterCp = points.frontCenter.shift(
// 90 - frontGussetAngle / 2,
// frontGussetLength / 3
// )
// points.backInsertOutsideBottomCp = points.backInsertOutsideBottom.shift(
// 270,
// frontGussetLength / 3
// )
// paths.front = new Path()
// .move(points.backInsertCenterBottom)
// .line(points.frontCenter)
// .curve(
// points.frontCenterCp,
// points.backInsertOutsideBottomCp,
// points.backInsertOutsideBottom
// )
// .hide()
// }

View file

@ -1,27 +1,9 @@
import { pctBasedOn } from '@freesewing/core'
import { shape } from './shape.mjs'
export const leg = {
name: 'lumira.leg',
from: shape,
draft: ({
measurements,
store,
sa,
Point,
points,
Path,
paths,
Snippet,
snippets,
complete,
options,
macro,
utils,
part,
}) => {
// paths.center = new Path().move(points.centerWaist).line(points.centerAnkle)
draft: ({ store, sa, points, Path, paths, Snippet, snippets, options, macro, part }) => {
if (options.frontBulge || options.cyclingChamois) {
snippets.front = new Snippet('notch', paths.front.shiftFractionAlong(0.5))
}
@ -53,13 +35,39 @@ export const leg = {
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
}
macro('grainline', {
from: points.centerHips,
to: points.centerKnee,
})
store.cutlist.addCut({ cut: 2, from: 'fabric' })
points.gridAnchor = points.centerWaistband.clone()
points.logo = points.centerUpperLeg.shiftFractionTowards(points.frontWaistband, 0.6)
snippets.logo = new Snippet('logo', points.logo)
points.title = points.centerKnee.shiftFractionTowards(points.frontWaistband, 0.5)
macro('title', {
at: points.title,
nr: 1,
title: 'leg',
align: 'center',
})
points.scalebox = points.centerSeat
.shiftFractionTowards(points.frontWaistband, 0.5)
.shiftFractionTowards(points.title, 0.5)
macro('scalebox', {
at: points.scalebox,
})
snippets.circle1 = new Snippet('notch', paths.backCircle.shiftFractionAlong(0.25))
snippets.circle2 = new Snippet('notch', paths.backCircle.shiftFractionAlong(0.5))
snippets.circle3 = new Snippet('notch', paths.backCircle.shiftFractionAlong(0.75))
snippets.circle4 = new Snippet('notch', points.backCircleGusset)
snippets.circle5 = new Snippet('notch', points.frontGusset)
console.log({ w: measurements.waist / 2, len: points.backWaist.dist(points.frontWaist) })
snippets.circle4 = new Snippet('notch', points.backHips)
snippets.circle5 = new Snippet('notch', points.backCircleGusset)
snippets.circle6 = new Snippet('notch', points.frontGusset)
return part
},

View file

@ -24,6 +24,7 @@ export const shape = {
options: {
// Constants
gussetCompensation: 1.03,
// Booleans
frontBulge: {
bool: false,
@ -37,7 +38,7 @@ export const shape = {
ease: { pct: -10, min: -30, max: 0, menu: 'fit' },
waistLowering: { pct: 35, min: 0, max: 60, menu: 'style' },
gussetWidth: {
pct: 10,
pct: 16,
min: 1,
max: 30,
...pctBasedOn('crossSeamFront'),
@ -70,23 +71,7 @@ export const shape = {
menu: (settings, mergedOptions) => (mergedOptions?.waistband ? 'style' : false),
},
},
draft: ({
measurements,
store,
sa,
Point,
points,
Path,
paths,
Snippet,
snippets,
complete,
options,
macro,
utils,
part,
}) => {
let a
draft: ({ measurements, store, Point, points, Path, paths, options, utils, part }) => {
const cpDistanceDivider = 3.5
const waistLowering = measurements.waistToHips * options.waistLowering
const waistReduction = options.waistband ? measurements.waist * options.waistReduction : 0
@ -109,11 +94,6 @@ export const shape = {
store.set('frontGussetLength', frontGussetLength)
const ReduceWaist = (pathName, pointName, distance) => {
console.log({ pathName: pathName, distance: distance, l: paths[pathName] })
console.log({ paths: JSON.parse(JSON.stringify(paths)) })
console.log({ points: JSON.parse(JSON.stringify(points)) })
console.log({ pn: pathName + 'Waist', p: points[pathName + 'Waist'] })
const newPoint = paths[pathName].shiftAlong(distance)
if (newPoint.sitsRoughlyOn(points[pathName + 'Waist'])) {
return
@ -127,37 +107,41 @@ export const shape = {
}
paths[pathName] = pTemp[1].hide()
}
const ControlPoints = (p1, p2, p3) => {
var angle
if (p1 === undefined) {
a = p2.angle(p3) + 180
angle = p2.angle(p3) + 180
} else if (p3 === undefined) {
a = p2.angle(p1)
angle = p2.angle(p1)
} else {
a = Math.abs(p2.angle(p1) - p2.angle(p3)) / 2
angle = Math.abs(p2.angle(p1) - p2.angle(p3)) / 2
}
// const t1 = p2.shift(p2.angle(p1) + a - 90, p2.dist(p1) / 3)
// const t3 = p2.shift(p2.angle(p3) - a + 90, p2.dist(p3) / 3)
return {
cp1:
p1 !== undefined
? p2.shift(p2.angle(p1) + a - 90, p2.dist(p1) / cpDistanceDivider)
: null,
cp3:
p3 !== undefined
? p2.shift(p2.angle(p3) - a + 90, p2.dist(p3) / cpDistanceDivider)
? p2.shift(p2.angle(p3) - angle + 90, p2.dist(p3) / cpDistanceDivider)
: null,
cp2:
p1 !== undefined
? p2.shift(p2.angle(p1) + angle - 90, p2.dist(p1) / cpDistanceDivider)
: null,
}
}
const CreateControlPoints = (names) => {
for (var i = 0; i < names.length; i++) {
var cp = ControlPoints(points[names[i - 1]], points[names[i]], points[names[i + 1]])
if (cp.cp1) points[names[i] + 'Cp2'] = cp.cp1
if (cp.cp3) points[names[i] + 'Cp1'] = cp.cp3
if (cp.cp1) points[names[i] + 'Cp1'] = cp.cp1
if (cp.cp2) points[names[i] + 'Cp2'] = cp.cp2
}
}
const ExtendPath = (path, length = 100) => {
return new Path()
.move(path.shiftAlong(1).shiftOutwards(path.start(), length))
.line(path.start())
.join(path)
.line(path.reverse().shiftAlong(1).shiftOutwards(path.end(), length))
}
const waistBackFrontRatio = measurements.waistBack / measurements.waistFront
const seatBackFrontRatio = measurements.seatBack / measurements.seatFront
const crossSeamBackFrontRatio = measurements.crossSeamBack / measurements.crossSeamFront
const waistToInseam = measurements.waistToFloor - measurements.inseam
@ -221,28 +205,9 @@ export const shape = {
measurements.seatFront * 0.5 * ease
)
// AdjustUpperLegPoints('front')
// AdjustUpperLegPoints('back')
CreateControlPoints(['frontWaist', 'frontSeat', 'frontUpperLeg'])
CreateControlPoints(['backWaist', 'backSeat', 'backUpperLeg'])
// paths.front = new Path()
// .move(points.frontAnkle)
// .line(points.frontKnee)
// .line(points.frontUpperLeg)
// paths.back = new Path().move(points.backAnkle).line(points.backKnee).line(points.backUpperLeg)
// paths.frontCrotch1 = new Path()
// .move(points.frontWaist)
// .curve(points.frontWaist, points.frontSeatCp2, points.frontSeat)
// .curve(points.frontSeatCp1, points.frontUpperLegCp2, points.frontUpperLeg)
// paths.backCrotch1 = new Path()
// .move(points.backWaist)
// .curve(points.backWaist, points.backSeatCp2, points.backSeat)
// .curve(points.backSeatCp1, points.backUpperLegCp2, points.backUpperLeg)
points.frontUpperLeg1 = points.centerUpperLeg.shift(0, (measurements.upperLeg / 2) * ease)
points.backUpperLeg1 = points.centerUpperLeg.shift(180, (measurements.upperLeg / 2) * ease)
points.frontUpperLegCp2 = points.frontUpperLeg.shiftFractionTowards(points.centerUpperLeg, 0.5)
points.frontUpperLegCp2Temp = points.frontUpperLeg.shiftFractionTowards(
points.centerUpperLeg,
@ -252,40 +217,26 @@ export const shape = {
paths.center = new Path().move(points.centerWaist).line(points.centerAnkle).hide()
// paths.frontT = new Path()
// .move(points.frontWaist)
// ._curve(points.frontUpperLegCp2, points.frontUpperLeg1)
// paths.backT = new Path()
// .move(points.backWaist)
// ._curve(points.backUpperLegCp2, points.backUpperLeg1)
paths.frontTemp = new Path()
.move(points.frontWaist)
._curve(points.frontUpperLegCp2Temp, points.frontUpperLeg1)
.hide()
// .addClass('note')
paths.front = new Path()
.move(points.frontWaist)
._curve(points.frontUpperLegCp2, points.frontUpperLeg1)
._curve(points.frontUpperLegCp2, points.frontUpperLeg)
.hide()
paths.back = new Path()
.move(points.backWaist)
._curve(points.backUpperLegCp2, points.backUpperLeg1)
._curve(points.backUpperLegCp2, points.backUpperLeg)
.hide()
// paths.front2 = paths.front.clone().unhide()
;['center', 'front', 'back'].forEach((prefix) => {
ReduceWaist(prefix, 'Waist', waistLowering)
})
points.frontHips = paths.front.shiftAlong(measurements.waistToHips - waistLowering)
points.backHips = paths.back.shiftAlong(measurements.waistToHips - waistLowering)
paths.frontTop = paths.front.split(points.frontHips)[0].hide()
paths.backTop = paths.back.split(points.backHips)[0].hide()
;['center', 'front', 'back'].forEach((prefix) => {
// points[prefix +'Waist'].addCircle(3)
points[prefix + 'Waistband'] = points[prefix + 'Waist'].clone()
ReduceWaist(prefix, 'Waistband', waistbandSize)
// points[prefix +'Waistband'].addCircle(6)
})
points.frontWaistbandCp = paths.frontTop.shiftAlong(waistbandSize / 2)
@ -302,23 +253,19 @@ export const shape = {
._curve(points.backWaistbandCp, points.backWaistband)
.hide()
// paths.back.unhide()
points.frontGusset = points.frontUpperLeg.shiftTowards(points.frontKnee, gussetWidth)
points.backGusset = points.backUpperLeg.shiftTowards(points.backKnee, gussetWidth)
points.frontGusset = points.frontUpperLeg1.shiftTowards(points.frontKnee, gussetWidth)
points.backGusset = points.backUpperLeg1.shiftTowards(points.backKnee, gussetWidth)
points.frontGussetJoin = paths.front.reverse().shiftAlong(frontGussetLength) //.addCircle(3).addCircle(5)
points.frontGussetJoin = paths.front.reverse().shiftAlong(frontGussetLength)
if (frontBulge) {
// paths.frontBulge = paths.front.offset(gussetWidth)
// .addClass('note')
// const frontBulgeSize = options.frontBulgeSize *measurements.crossSeamFront
paths.front = ExtendPath(paths.front.offset(gussetWidth)).hide()
paths.front = paths.front.offset(gussetWidth).hide()
points.frontWaistband = paths.front.intersects(
new Path().move(points.frontWaistband).line(points.centerWaistband)
)[0]
if (false == points.frontWaistband.sitsRoughlyOn(paths.front.ops[0].to)) {
if (false == points.frontWaistband.sitsRoughlyOn(paths.front.start())) {
console.log({
pf: paths.front,
p: points.frontWaistband,
@ -326,10 +273,15 @@ export const shape = {
})
paths.front = paths.front.split(points.frontWaistband)[1].hide()
}
//////
// something goes wrong here
//////
points.frontGusset = paths.front.intersects(
new Path().move(points.frontUpperLeg1).line(points.frontKnee)
new Path().move(points.frontUpperLeg).line(points.frontKnee)
)[0]
if (false == points.frontGusset.sitsRoughlyOn(paths.front.reverse().ops[0].to)) {
if (false == points.frontGusset.sitsRoughlyOn(paths.front.end())) {
console.log({
pf: paths.front,
p: points.frontWaistband,
@ -337,37 +289,8 @@ export const shape = {
})
paths.front = paths.front.split(points.frontGusset)[0].hide()
}
// points.frontGussetCp = points.frontUpperLegCp2.clone()
// points.frontWaist = points.frontWaist.shiftTowards(points.backWaist, gussetWidth)
// points.frontWaistband = points.frontWaistband.shiftTowards(points.backWaistband, gussetWidth)
// console.log({
// frontGussetCp: points.frontGussetCp,
// frontWaistband: points.frontWaistband,
// frontGusset: points.frontGusset,
// })
// var iter = 0
// var diff = 0
// do {
// points.frontGussetCp = points.frontGussetCp.shift(0, diff)
// paths.front = new Path()
// .move(points.frontWaistband)
// ._curve(points.frontGussetCp, points.frontGusset)
// .hide()
// diff = paths.front.length() - ((measurements.crossSeamFront *options.gussetCompensation) - waistLowering - waistbandSize)
// console.log({
// i: iter,
// d: diff,
// fl: paths.front.length(),
// csf: measurements.crossSeamFront - waistLowering,
// p: paths.front,
// })
// } while (iter++ < 50 && (diff > 1 || diff < -1))
} else {
points.frontGussetCp = points.frontGusset.shiftFractionTowards(points.centerUpperLeg, 0.1) //.addCircle(3)
points.frontGussetCp = points.frontGusset.shiftFractionTowards(points.centerUpperLeg, 0.1)
if (points.frontGussetCp.x < points.frontGussetJoin.x) {
points.frontGussetCp.x = points.frontGussetJoin.x
}
@ -382,7 +305,7 @@ export const shape = {
const pFrontGussetPoint = pFrontGusset.shiftAlong(1)
const pFront = new Path()
.move(points.frontWaist)
._curve(points.frontUpperLegCp2, points.frontUpperLeg1)
._curve(points.frontUpperLegCp2, points.frontUpperLeg)
.hide()
const pFrontPoint = pFront.shiftAlong(1)
if (
@ -391,9 +314,9 @@ export const shape = {
points.frontGussetJoinCp = points.frontGussetJoin.shift(
pFrontPoint.angle(points.frontGussetJoin),
frontGussetLength - gussetWidth
) //.addCircle(10)
)
} else {
points.frontGussetJoinCp = points.frontGussetJoin.clone() //.addCircle(18).addCircle(12)
points.frontGussetJoinCp = points.frontGussetJoin.clone()
}
paths.frontGusset = new Path()
@ -407,21 +330,12 @@ export const shape = {
)
store.set('frontGussetAngle', frontGussetAngle * 2)
paths.frontTempGusset = paths.front.offset(gussetWidth).hide()
paths.front = paths.front.split(points.frontGussetJoin)[0].join(paths.frontGusset).hide()
}
store.set('frontLength', paths.front.length())
;['front', 'back'].forEach((prefix) => {
CreateControlPoints([prefix + 'UpperLeg', prefix + 'Knee', prefix + 'Ankle'])
})
// paths.frontTemp2 = paths.front.clone().addClass('lining').unhide()
console.log({
fc: measurements.crossSeamFront,
pl: paths.front.length() + waistLowering + waistbandSize,
plt: paths.frontTemp.length(),
})
paths.backTempGusset = paths.back.offset(-1 * gussetWidth).hide()
@ -436,6 +350,8 @@ export const shape = {
.line(points.frontAnkle)
.hide()
store.set('waistLength', paths.waist.length())
const backHips = paths.back.shiftFractionAlong(0.99)
const backHipsAngle = points.backHips.angle(backHips) + 90
@ -446,13 +362,11 @@ export const shape = {
backHipsAngle,
measurements.hips * 0.25 * 0.5 * ease * backGussetWidth
)
// .addCircle(9)
points.backCircleUpperLegCp1 = points.backUpperLegToHips.shift(
0,
measurements.upperLeg * 0.25 * ease * backGussetWidth
)
// .addCircle(5)
paths.back = paths.back.split(points.backHips)[0].hide()
@ -464,11 +378,6 @@ export const shape = {
points.backCircleGusset = paths.backTempCircle.intersects(paths.backTempGusset)[1]
const pathBackGusset = paths.backTempGusset.split(points.backCircleGusset)
console.log({
pathBackGusset: pathBackGusset,
t0: undefined === pathBackGusset[0].ops,
t1: undefined === pathBackGusset[1].ops,
})
if (undefined !== pathBackGusset[1].ops) {
paths.backGusset = paths.backTempGusset.split(points.backCircleGusset)[1].hide()
} else {
@ -479,20 +388,10 @@ export const shape = {
store.set('backGussetLength', paths.backGusset.length())
store.set('backCircleLength', paths.backCircle.length())
points.backCircleIntersect = paths.backCircle.intersects(
new Path().move(points.backSeat).line(points.centerSeat)
)[0]
// .addCircle(10)
console.log({
dist: points.backCircleIntersect.dist(points.centerSeat),
pct:
points.backCircleIntersect.dist(points.centerSeat) /
points.backSeat.dist(points.centerSeat),
})
console.log({ points: JSON.parse(JSON.stringify(points)) })
console.log({ paths: JSON.parse(JSON.stringify(paths)) })
console.log({ store: JSON.parse(JSON.stringify(store)) })
console.log({ measurements: JSON.parse(JSON.stringify(measurements)) })
// console.log({ points: JSON.parse(JSON.stringify(points)) })
// console.log({ paths: JSON.parse(JSON.stringify(paths)) })
// console.log({ store: JSON.parse(JSON.stringify(store)) })
// console.log({ measurements: JSON.parse(JSON.stringify(measurements)) })
return part
},

View file

@ -24,11 +24,12 @@ export const waistband = {
return part.hide()
}
const gussetWidth = store.get('gussetWidth')
const waistLength = store.get('waistLength')
const waistbandSize = store.get('waistbandSize')
const gussetWidth = options.frontBulge ? store.get('gussetWidth') : 0
const topLength = points.backWaist.dist(points.frontWaist) + gussetWidth
const bottomLength = points.backWaistband.dist(points.frontWaistband) + gussetWidth
const bottomLength = waistLength + gussetWidth
const magic1 = 0.35
points.topFront = new Point(Math.min(topLength, bottomLength) / 2, 0)
@ -103,20 +104,14 @@ export const waistband = {
.line(points.topFront)
.close()
// paths.seam = new Path()
// .move(points.frontWaist)
// .line(points.centerWaist)
// .line(points.backWaist)
// .join(paths.backTop)
// .line(points.centerWaistband)
// .line(points.frontWaistband)
// .join(paths.frontTop.reverse())
// .close()
if (sa) {
paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
}
macro('cutonfold', {
from: points.bottomFront,
to: points.topFront,
})
if (gussetWidth > 0) {
snippets.gusset = new Snippet('notch', paths.bottom.shiftAlong(gussetWidth))
}