1
0
Fork 0

cleanup 1

This commit is contained in:
woutervdub 2024-01-04 05:15:54 +00:00
parent d9158efb29
commit ad37fed4fe
8 changed files with 66 additions and 1177 deletions

View file

@ -4,9 +4,7 @@ import { Design } from '@freesewing/core'
import { i18n } from '../i18n/index.mjs'
import { data } from '../data.mjs'
// Parts
import { points } from './points.mjs'
import { ipoints } from './ipoints.mjs'
import { zpoints } from './zpoints.mjs'
import { shape } from './shape.mjs'
import { panel } from './panel.mjs'
import { leg } from './leg.mjs'
import { pocket } from './pocket.mjs'
@ -15,11 +13,11 @@ import { waistband } from './waistband.mjs'
// Create new design
const Lumina = new Design({
data,
parts: [/*zpoints, ipoints,*/ points, panel, leg, waistband, pocket],
parts: [shape, panel, leg, waistband, pocket],
})
// Named exports
export { i18n, Lumina, /*zpoints, ipoints,*/ points, panel, leg, waistband, pocket }
export { i18n, Lumina, shape, panel, leg, waistband, pocket }
// const classes = ['lining','canvas','mark','contrast','note','interfacing','various']

View file

@ -1,495 +0,0 @@
export const ipoints = {
name: 'lumina.ipoints',
measurements: [
'waist',
'waistBack',
'hips',
'seat',
'seatBack',
'inseam',
'waistToSeat',
'waistToUpperLeg',
'waistToKnee',
'waistToHips',
'waistToFloor',
'knee',
'ankle',
'crossSeam',
'crossSeamFront',
'heel',
'upperLeg',
],
options: {
ease: { pct: -20, min: -35, max: 10, menu: 'fit' },
crossSeamAngle: 35,
crotchToKnee: 0.4,
waistToKneeCP: 0.4,
kneeToWaistLength: 400,
crotchPointsCP: 2,
},
draft: ({
measurements,
options,
Point,
Path,
points,
paths,
Snippet,
snippets,
utils,
log,
complete,
sa,
paperless,
macro,
part,
}) => {
return part.hide()
const ControlPoints = (p1, p2, p3, t) => {
let a = Math.abs(p2.angle(p1) - p2.angle(p3)) / 2
console.log({ t: t, ap2_1: p2.angle(p1), ap2_3: p2.angle(p3), a: a })
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)
console.log({ t: t, ap2_t1: p2.angle(t1), ap2_t3: p2.angle(t3), a: a })
return {
cp1: p2.shift(p2.angle(p1) + a - 90, p2.dist(p1) / 3),
cp3: p2.shift(p2.angle(p3) - a + 90, p2.dist(p3) / 3),
}
}
const CreateControlPoints = (names) => {
for (var i = 1; i < names.length - 1; i++) {
var cp = ControlPoints(points[names[i - 1]], points[names[i]], points[names[i + 1]])
points[names[i] + 'Cp1'] = cp.cp1
points[names[i] + 'Cp2'] = cp.cp3
}
}
const CreatePath = (pathName, names) => {
console.log({ i: 1, n: names[1], p2: points[names[1] + 'Cp2'], p3: points[names[1]] })
paths[pathName] = new Path()
.move(points[names[0]])
._curve(points[names[1] + 'Cp1'], points[names[1]])
console.log({ s: 0, l: paths[pathName].length() })
for (var i = 2; i < names.length - 1; i++) {
console.log({
i: i,
n: names[i],
p1: points[names[i - 1] + 'Cp1'],
p2: points[names[i] + 'Cp2'],
p3: points[names[i]],
})
paths[pathName].curve(
points[names[i - 1] + 'Cp2'],
points[names[i] + 'Cp1'],
points[names[i]]
)
console.log({
s: i - 1,
l: new Path()
.move(points[names[i - 1]])
.curve(points[names[i - 1] + 'Cp2'], points[names[i] + 'Cp1'], points[names[i]])
.length(),
})
}
console.log({ i: i, n: names[i], p2: points[names[i] + 'Cp2'], p3: points[names[i]] })
paths[pathName].curve_(points[names[i - 1] + 'Cp2'], points[names[i]])
}
const CreateWaistPoint = (m, options, points, utils, front) => {
const kneeTemp = points.upperleg.shiftFractionTowards(points.knee, options.crotchToKnee)
const angle =
90 +
(front
? options.crossSeamAngle * (m.waistBack / m.waist)
: -1 * options.crossSeamAngle * (1 - m.waistBack / m.waist))
const crossSeam = front ? m.crossSeamFront : m.crossSeam - m.crossSeamFront
var kneeToWaist = m.waistToKnee
var ratio = 1
var waist = kneeTemp.shift(angle, kneeToWaist * ratio)
const crossSeamCp = points.upperleg.shiftFractionTowards(
utils.beamIntersectsY(kneeTemp, waist, 0),
options.crotchPointsCP
)
console.log({ f: front, a: angle })
var waistCp
var diff,
iter = 0
do {
waist = kneeTemp.shift(angle, kneeToWaist * ratio * (ratio < 1 ? 1.05 : 0.95))
// waistCp = waist.shiftFractionTowards(kneeTemp, options.waistToKneeCP)
waistCp = waist.shiftFractionTowards(points.knee, options.waistToKneeCP)
const crossSeamPath = new Path().move(points.upperleg).curve(crossSeamCp, waistCp, waist)
diff = crossSeam - crossSeamPath.length()
ratio = crossSeam / crossSeamPath.length()
// console.log({ i: iter, d: diff, r: ratio })
} while (++iter < 100 && (diff > 1 || diff < -1))
if (iter >= 100) {
console.log('Too many iterations trying to make it fit!')
// log.error('Too many iterations trying to make it fit!')
}
if (front) {
points.waistFront = waist.clone()
points.waistFrontCp = waistCp.clone()
points.crossSeamFrontCp = crossSeamCp.clone()
} else {
points.waistBack = waist.clone()
points.waistBackCp = waistCp.clone()
points.crossSeamBackCp = crossSeamCp.clone()
}
}
const m = measurements
const crotchOffset = m.waistToFloor - m.inseam
const waistFrontBackRatio = m.waistBack / m.waist
const sideRatio = 3 / 5
const ease = options.ease + 1
m['waistToAnkle'] = m.waistToFloor - m.heel / Math.PI
console.log({ m: JSON.parse(JSON.stringify(m)) })
console.log({ wfr: waistFrontBackRatio })
// points.origin = new Point(0, 0)
// points.knee = points.origin.shift(270, m.inseam - (m.waistToFloor - m.waistToKnee))
// points.ankle = points.origin.shift(270, m.inseam - (m.ankle / Math.PI))
// points.waist = points.origin.shift(90, m.waistToFloor - m.inseam)
points.upperlegFront = points.upperlegBack = points.upperleg = new Point(0, 0)
points.kneeFront =
points.kneeBack =
points.knee =
points.upperleg.shift(270, m.waistToKnee - crotchOffset)
points.ankleFront =
points.ankleBack =
points.ankle =
points.upperleg.shift(270, m.inseam - m.heel / Math.PI)
points.floorFront = points.floorBack = points.floor = points.upperleg.shift(270, m.inseam)
// points.waistTemp = points.upperleg.shiftFractionTowards(points.knee,options.crotchToKnee).shift(90 + options.crossSeamAngle*(m.waistBack/m.waist), options.kneeToWaistLength)
// paths.waistTemp = new Path()
// .move(points.upperleg.shiftFractionTowards(points.knee,options.crotchToKnee))
// .line(points.waistTemp)
// points.upperlegFrontCp = utils.beamIntersectsY(points.kneeTemp,points.waistTempFront,0)
// points.upperlegBackCp = utils.beamIntersectsY(points.kneeTemp,points.waistTempBack,0)
CreateWaistPoint(m, options, points, utils, true)
CreateWaistPoint(m, options, points, utils, false)
// paths.waistTempCp = new Path()
// .move(points.upperleg)
// .line(points.crossSeamFrontCp)
console.log({ pionts: JSON.parse(JSON.stringify(points)) })
paths.middle = new Path().move(points.upperleg).line(points.floor)
paths.crossSeamFront = new Path()
.move(points.upperleg)
.curve(points.crossSeamFrontCp, points.waistFrontCp, points.waistFront)
paths.crossSeamBack = new Path()
.move(points.upperleg)
.curve(points.crossSeamBackCp, points.waistBackCp, points.waistBack)
let csFront = paths.crossSeamFront.length()
let csBack = paths.crossSeamBack.length()
console.log({ csf: m.crossSeamFront, csFront: csFront })
const waistAngle = utils.rad2deg(
Math.asin((points.waistBack.y - points.waistFront.y) / (m.waist / 2))
)
console.log({
r: m.crossSeamFront / m.waistToUpperLeg,
S: m.waistToSeat * (m.crossSeamFront / m.waistToUpperLeg),
H: m.waistToHips * (m.crossSeamFront / m.waistToUpperLeg),
})
points.seatFront = paths.crossSeamFront
.reverse()
.shiftAlong(m.waistToSeat /* * (m.crossSeamFront / m.waistToUpperLeg) */)
.addCircle(6)
points.hipsFront = paths.crossSeamFront
.reverse()
.shiftAlong(m.waistToHips /* * (m.crossSeamFront / m.waistToUpperLeg) */)
.addCircle(10)
points.seatBack = paths.crossSeamBack
.reverse()
.shiftAlong(m.waistToSeat /* * (m.waistToSeat / m.waistToUpperLeg) */)
.addCircle(6)
points.hipsBack = paths.crossSeamBack
.reverse()
.shiftAlong(m.waistToHips /* * (m.waistToSeat / m.waistToUpperLeg) */)
.addCircle(10)
points.waistFrontSeam = points.waistFront.shift(
180 + waistAngle,
((m.waist - m.waistBack) * ease) / 2
)
points.waistBackSeam = points.waistBack.shift(waistAngle, (m.waistBack * ease) / 2)
points.seatFrontSeam = points.seatFront.shift(
180 + waistAngle,
((m.seat - m.seatBack) * ease) / 2
)
points.seatBackSeam = points.seatBack.shift(waistAngle, (m.seatBack * ease) / 2)
points.upperlegFrontSeam = points.upperleg.shift(180 + waistAngle, (m.upperLeg * ease) / 2)
points.upperlegBackSeam = points.upperleg.shift(waistAngle, (m.upperLeg * ease) / 2)
points.kneeFrontSeam = points.knee.shift(180, (m.knee * ease) / 2)
points.kneeBackSeam = points.knee.shift(0, (m.knee * ease) / 2)
points.ankleFrontSeam = points.ankle.shift(180, (m.ankle * ease) / 2)
points.ankleBackSeam = points.ankle.shift(0, (m.ankle * ease) / 2)
const sideFixed = points.waistFrontSeam.dist(
points.waistFront.shiftFractionTowards(points.waistFrontSeam, sideRatio)
)
paths.front = new Path()
.move(points.ankleFrontSeam)
.line(points.kneeFrontSeam)
.line(points.upperlegFrontSeam)
.line(points.seatFrontSeam)
.line(points.waistFrontSeam)
paths.back = new Path()
.move(points.ankleBackSeam)
.line(points.kneeBackSeam)
.line(points.upperlegBackSeam)
.line(points.seatBackSeam)
.line(points.waistBackSeam)
const ShiftPathPoints = (path, ratio, names) => {
if (names.length < 2) return
for (var i = names.length - 2; i >= 0; i--) {
console.log({ n1: names[i].toLowerCase() + path, n2: names[i + 1].toLowerCase() + path })
console.log({
p1: points[names[i].toLowerCase() + path],
p2: points[names[i + 1].toLowerCase() + path],
})
console.log({
lb: points[names[i].toLowerCase() + path].dist(points[names[i + 1].toLowerCase() + path]),
})
points[names[i].toLowerCase() + path] = points[
names[i].toLowerCase() + path
].shiftFractionTowards(points[names[i + 1].toLowerCase() + path], ratio)
console.log({
la: points[names[i].toLowerCase() + path].dist(points[names[i + 1].toLowerCase() + path]),
})
}
}
const shiftRatio =
1 - (m.waistToFloor - points.floorFront.dist(points.ankleFront)) / paths.front.length()
console.log({ shiftRatio: shiftRatio })
ShiftPathPoints('FrontSeam', shiftRatio, [
'Waist',
/*'Hips',*/ 'Seat',
'UpperLeg',
'Knee',
'Ankle',
])
// points.waistFrontSplit = points.waistFront.shiftFractionTowards(points.waistFrontSeam, sideRatio)
points.waistFrontSplit = points.waistFrontSeam.shiftTowards(points.waistFront, sideFixed)
// points.waistBackSplit = points.waistBack.shiftFractionTowards(points.waistBackSeam, sideRatio)
points.waistBackSplit = points.waistBackSeam.shiftTowards(points.waistBack, sideFixed)
points.seatFrontSplit = points.seatFrontSeam.shiftTowards(points.seatFront, sideFixed)
points.seatBackSplit = points.seatBackSeam.shiftTowards(points.seatBack, sideFixed)
// points.upperlegFrontSplit = points.upperleg.shiftFractionTowards(points.upperlegFront, sideRatio)
points.upperlegFrontSplit = points.upperlegFrontSeam.shiftTowards(points.upperleg, sideFixed)
// points.upperlegBackSplit = points.upperleg.shiftFractionTowards(points.upperlegBack, sideRatio)
points.upperlegBackSplit = points.upperlegBackSeam.shiftTowards(points.upperleg, sideFixed)
points.kneeFrontSplit = points.knee.shiftFractionTowards(points.kneeFrontSeam, sideRatio)
// points.kneeFrontSplit = points.kneeFront.shiftTowards(points.knee, sideFixed)
points.kneeBackSplit = points.knee.shiftFractionTowards(points.kneeBackSeam, sideRatio)
// points.kneeBackSplit = points.kneeBack.shiftTowards(points.knee, sideFixed)
points.ankleFrontSplit = points.ankle.shiftFractionTowards(points.ankleFrontSeam, sideRatio)
// points.ankleFrontSplit = points.ankleFront.shiftTowards(points.ankle, sideFixed)
points.ankleBackSplit = points.ankle.shiftFractionTowards(points.ankleBackSeam, sideRatio)
// points.ankleBackSplit = points.ankleBack.shiftTowards(points.ankle, sideFixed)
points.seatFrontSplit = utils
.beamsIntersect(
points.seatFront,
points.seatFrontSeam,
points.waistFrontSplit,
points.upperlegFrontSplit
)
.addCircle(8)
CreateControlPoints([
'waistFrontSplit',
'seatFrontSplit',
'upperlegFrontSplit',
'kneeFrontSplit',
'ankleFrontSplit',
])
CreatePath('frontSplit', [
'waistFrontSplit',
'seatFrontSplit',
'upperlegFrontSplit',
'kneeFrontSplit',
'ankleFrontSplit',
])
CreateControlPoints([
'waistBackSplit',
// 'seatBackSplit',
'upperlegBackSplit',
'kneeBackSplit',
'ankleBackSplit',
])
CreatePath('BackSplit', [
'waistBackSplit',
// 'seatBackSplit',
'upperlegBackSplit',
'kneeBackSplit',
'ankleBackSplit',
])
points.seatBackSplit = utils
.beamIntersectsCurve(
points.seatBack,
points.seatBackSeam,
points.waistBackSplit,
points.waistBackSplit,
points.upperlegBackSplitCp1,
points.upperlegBackSplit
)
.addCircle(8)
var cp = ControlPoints(points.waistFrontSplit, points.upperlegFrontSplit, points.kneeFrontSplit)
points.upperlegFrontCp1 = cp.cp1
points.upperlegFrontCp2 = cp.cp3
cp = ControlPoints(points.waistBackSplit, points.upperlegBackSplit, points.kneeBackSplit)
points.upperlegBackCp1 = cp.cp1
points.upperlegBackCp2 = cp.cp3
cp = ControlPoints(points.upperlegFrontSplit, points.kneeFrontSplit, points.ankleFrontSplit)
points.kneeFrontCp1 = cp.cp1
points.kneeFrontCp2 = cp.cp3
cp = ControlPoints(points.upperlegBackSplit, points.kneeBackSplit, points.ankleBackSplit)
points.kneeBackCp1 = cp.cp1
points.kneeBackCp2 = cp.cp3
console.log({ pins: JSON.parse(JSON.stringify(points)) })
paths.frontZ = paths.front.reverse()
points.seatZ = paths.frontZ.shiftAlong(m.waistToSeat).addCircle(4)
points.hipsZ = paths.frontZ.shiftAlong(m.waistToHips).addCircle(4)
points.upperlegZ = paths.frontZ.shiftAlong(m.waistToUpperLeg).addCircle(4)
points.kneeZ = paths.frontZ.shiftAlong(m.waistToKnee).addCircle(4)
points.ankleZ = paths.frontZ
.shiftAlong(m.waistToFloor - points.floor.dist(points.ankle))
.addCircle(4)
paths.backZ = paths.back.reverse()
points.seatZback = paths.backZ.shiftAlong(m.waistToSeat).addCircle(4)
points.hipsZback = paths.backZ.shiftAlong(m.waistToHips).addCircle(4)
points.upperlegZback = paths.backZ.shiftAlong(m.waistToUpperLeg).addCircle(4)
points.kneeZback = paths.backZ.shiftAlong(m.waistToKnee).addCircle(4)
points.ankleZback = paths.backZ
.shiftAlong(m.waistToFloor - points.floor.dist(points.ankle))
.addCircle(4)
console.log({
pf: paths.frontZ.length(),
pb: paths.backZ.length(),
m: m.waistToFloor - points.floor.dist(points.ankle),
})
console.log({ pahts: JSON.parse(JSON.stringify(paths)) })
points.kneeFrontSplit.addCircle(2).addCircle(4).addCircle(6).addCircle(8)
// console.log({kfs:paths.frontSplit.split(points.seatFrontSplit)})
// console.log({kfs:paths.frontSplit.split(points.upperlegFrontSplit)})
console.log('--------------------------------')
console.log({ kfs: paths.frontSplit.split(points.kneeFrontSplit) })
// console.log({kfs:paths.frontSplit.split(points.upperlegFrontSplit)})
points.sideWaist = new Point(200, 0)
console.log({ p: points.sideWaist })
points.sideWaistFront = points.sideWaist
.shift(180 - waistAngle, points.waistFrontSplit.dist(points.waistFrontSeam))
.addCircle(10)
points.sideWaistBack = points.sideWaist.shift(
-1 * waistAngle,
points.waistBackSplit.dist(points.waistBackSeam)
)
const mp = ['Waist', /*'Hips',*/ 'Seat', 'UpperLeg', 'Knee', 'Ankle']
// var pathLength = [0]
for (var i = 1; i < mp.length; i++) {
// console.log({ n: 'waistTo' + mp[i], m: m['waistTo' + mp[i]], pl: pathLength[i-1] })
// console.log({T:paths.frontSplit.split(points[mp[i].toLowerCase() + 'FrontSplit'])[0].length()})
points['side' + mp[i]] = points.sideWaist.shift(270, m['waistTo' + mp[i]]).addCircle(3)
console.log({
n1: 'side' + mp[i],
n2: mp[i].toLowerCase() + 'FrontSplit',
n3: mp[i].toLowerCase() + 'FrontSeam',
n4: mp[i - 1].toLowerCase() + 'Front',
n5: 'side' + mp[i - 1] + 'Front',
})
console.log({
p1: points['side' + mp[i]],
p2: points[mp[i].toLowerCase() + 'FrontSplit'],
p3: points[mp[i].toLowerCase() + 'FrontSeam'],
p4: points[mp[i - 1].toLowerCase() + 'Front'],
p5: points['side' + mp[i - 1] + 'Front'],
})
// console.log({split:paths.frontSplit.split(points[mp[i].toLowerCase() + 'FrontSplit'])})
// pathLength.push(paths.frontSplit.split(points[mp[i].toLowerCase() + 'FrontSplit'])[0].length())
points['side' + mp[i]].addCircle(
points[mp[i].toLowerCase() + 'FrontSplit'].dist(points[mp[i].toLowerCase() + 'FrontSeam'])
)
points['side' + mp[i]].addCircle(10)
points['side' + mp[i]].addCircle(12)
points['side' + mp[i]].addCircle(14)
points['side' + mp[i - 1] + 'Front'].addCircle(
points[mp[i].toLowerCase() + 'FrontSplit'].dist(
points[mp[i - 1].toLowerCase() + 'FrontSplit']
)
)
points['side' + mp[i - 1] + 'Front'].addCircle(2)
points['side' + mp[i - 1] + 'Front'].addCircle(4)
points['side' + mp[i - 1] + 'Front'].addCircle(6)
points['side' + mp[i - 1] + 'Front'].addCircle(8)
// console.log({l1:points[mp[i].toLowerCase() + 'FrontSplit'].dist(points[mp[i].toLowerCase() + 'FrontSeam']),l2:pathLength[i]-pathLength[i-1],pl:pathLength})
var ci = utils.circlesIntersect(
points['side' + mp[i]],
points[mp[i].toLowerCase() + 'FrontSplit'].dist(points[mp[i].toLowerCase() + 'FrontSeam']),
points['side' + mp[i - 1] + 'Front'],
points[mp[i].toLowerCase() + 'FrontSplit'].dist(
points[mp[i - 1].toLowerCase() + 'FrontSplit']
)
// pathLength[i]-pathLength[i-1]
)
console.log({ ci: ci })
if (false !== ci) {
points['side' + mp[i] + 'Front'] = ci[0].addCircle(7)
// points['ci' +mp[i] + '1' ] = ci[1].addCircle(7)
// points['side' + mp[i] +'Front'].addCircle(pathLength)
}
}
paths.splitFront = new Path()
.move(points.waistFrontSplit)
._curve(points.upperlegFrontCp1, points.upperlegFrontSplit)
.curve(points.upperlegFrontCp2, points.kneeFrontCp1, points.kneeFrontSplit)
.curve_(points.kneeFrontCp2, points.ankleFrontSplit)
paths.splitBack = new Path()
.move(points.waistBackSplit)
._curve(points.upperlegBackCp1, points.upperlegBackSplit)
.curve(points.upperlegBackCp2, points.kneeBackCp1, points.kneeBackSplit)
.curve_(points.kneeBackCp2, points.ankleBackSplit)
console.log({ pahts: JSON.parse(JSON.stringify(paths)) })
console.log({ pins: JSON.parse(JSON.stringify(points)) })
console.log({
Split: paths.frontSplit.length(),
M: m.waistToFloor - points.floorFront.dist(points.ankleFront),
})
return part
},
}

View file

@ -1,8 +1,8 @@
import { points } from './points.mjs'
import { shape } from './shape.mjs'
export const leg = {
name: 'lumina.leg',
from: points,
from: shape,
draft: ({ sa, Point, points, Path, paths, Snippet, snippets, options, macro, store, part }) => {
paths.front = paths.front.reverse().unhide().addText('front', 'note center').setClass('hidden')
paths.frontSplit.unhide().addText('front', 'note center').setClass('hidden')
@ -23,10 +23,6 @@ export const leg = {
.join(paths.frontSplit)
.close()
// paths.backSplit.addClass('lining').unhide()
// paths.back.addClass('note').unhide()
// paths.front.addClass('mark').unhide()
// paths.frontSplit.addClass('contrast').unhide()
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
snippets.middle = new Snippet('notch', points.frontUpperLeg)
@ -36,10 +32,9 @@ export const leg = {
snippets.front3 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.6))
snippets.front4 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.8))
snippets.back0 = new Snippet('notch', paths.back.shiftFractionAlong(0.5))
snippets.back1 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.2))
snippets.back2 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.4))
snippets.back3 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.6))
snippets.back4 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.8))
snippets.back1 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.25))
snippets.back2 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.5))
snippets.back3 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.75))
return part
},

View file

@ -1,8 +1,8 @@
import { points } from './points.mjs'
import { shape } from './shape.mjs'
export const panel = {
name: 'lumina.panel',
from: points,
from: shape,
draft: ({ sa, Point, points, Path, paths, Snippet, snippets, options, macro, store, part }) => {
paths.panelWaistband = new Path()
.move(points.backPanelWaistband)
@ -35,15 +35,9 @@ export const panel = {
snippets.front2 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.4))
snippets.front3 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.6))
snippets.front4 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.8))
snippets.back1 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.2))
snippets.back2 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.4))
snippets.back3 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.6))
snippets.back4 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.8))
store.set('pocket', {
paths: paths,
points: points,
})
snippets.back1 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.25))
snippets.back2 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.5))
snippets.back3 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.75))
return part
},

View file

@ -1,19 +1,17 @@
import { pctBasedOn } from '@freesewing/core'
import { panel } from './panel.mjs'
import { points } from './points.mjs'
import { shape } from './shape.mjs'
export const pocket = {
name: 'lumina.pocket',
// from: panel,
// after: panel,
// hide: hidePresets.HIDE_TREE,
from: points,
after: panel,
from: shape,
options: {
pocket: { bool: true, menu: 'style' },
pocketdepth: {
pct: 80,
min: 0,
max: 100,
pct: 90,
min: 20,
max: 120,
...pctBasedOn('waistToSeat'),
// eslint-disable-next-line no-unused-vars
menu: (settings, mergedOptions) => (mergedOptions?.pocket ? 'style' : false),
@ -41,12 +39,6 @@ export const pocket = {
return part.hide()
}
console.log({ s: JSON.parse(JSON.stringify(store)) })
console.log({
points: JSON.parse(JSON.stringify(points)),
paths: JSON.parse(JSON.stringify(paths)),
})
const pocketDepth = measurements.waistToSeat * options.pocketdepth
paths.pocketWaistband = new Path()
@ -61,17 +53,27 @@ export const pocket = {
.line(points.backPocketHem)
.addText('bottom', 'note center')
.setClass('hidden')
paths.frontPocket = paths.frontPanel
.split(points.frontPocketHem)[0]
.unhide()
.addText('front', 'note center')
.setClass('hidden')
paths.backPocket = paths.backPanel
.split(points.backPocketHem)[0]
.unhide()
.reverse()
.addText('back', 'note center')
.setClass('hidden')
const frontPocketSplit = paths.frontPanel.split(points.frontPocketHem)
if (frontPocketSplit) {
paths.frontPocket = frontPocketSplit[0]
.unhide()
.addText('front', 'note center')
.setClass('hidden')
} else {
log.info('lumina:couldNotCreatePocket')
return part.hide()
}
const backPocketSplit = paths.backPanel.split(points.backPocketHem)
if (backPocketSplit) {
paths.backPocket = backPocketSplit[0]
.unhide()
.reverse()
.addText('back', 'note center')
.setClass('hidden')
} else {
log.info('lumina:couldNotCreatePocket')
return part.hide()
}
paths.seam = new Path()
.move(points.frontPocketHem)
@ -83,6 +85,16 @@ export const pocket = {
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
for (var i = 1; i < 4; i++) {
if (paths.frontPanel.length() * (0.2 * i) < pocketDepth) {
snippets['front' + i] = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.2 * i))
}
if (paths.backPanel.length() * (0.25 * i) < pocketDepth) {
snippets['back' + i] = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.25 * i))
}
}
return part
},
}

View file

@ -153,9 +153,6 @@ const createSidePoints = ({
? measurement - fixedSidePanel
: width
: width
// const reduction = ratio == 0 ? measurement : width
console.log({ i: i, p: prefix + postfix + names[i], f: fixedSidePanel })
console.log({ m: measurement, w: width, mw: measurement - width, rf: ratioFixed })
if (i == 0) {
points[prefix + postfix + names[i]] = points[prefix + names[i]].shift(
prefix == 'front' ? 180 : 0,
@ -205,8 +202,8 @@ const smoothPoints = (points, prefix, postfix, names, smoothness) => {
}
}
export const points = {
name: 'lumina.points',
export const shape = {
name: 'lumina.shape',
measurements: [
'waist',
'waistBack',
@ -413,35 +410,17 @@ export const points = {
.move(points.backWaist)
.curve(points.backWaistCp, points.backHipsCp2, points.backHips)
.curve(points.backHipsCp1, points.backCrossSeamCp, points.middleCrossSeam)
smoothPoints(
points,
'front',
'Side',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
options.smoothing
)
smoothPoints(
points,
'front',
'Split',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
options.smoothing
)
smoothPoints(
points,
'back',
'Side',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
options.smoothing
)
smoothPoints(
points,
'back',
'Split',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
options.smoothing
)
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split'].forEach((type) => {
smoothPoints(
points,
prefix,
type,
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
options.smoothing
)
})
})
paths.middle = new Path().move(points.middleWaist).line(points.middleFloor).setHidden()
;['front', 'back'].forEach((prefix) => {
@ -466,9 +445,6 @@ export const points = {
])
})
})
// store.set('frontSplitLength',paths.frontSplit.length())
// store.set('backSplitLength',paths.backSplit.length())
;['front', 'back'].forEach((prefix) => {
;['Waist', 'Waistband', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
points[prefix + 'Panel' + name] = points['middle' + name].shift(
@ -497,6 +473,7 @@ export const points = {
})
const frontSplitlength = paths.frontSplit.length()
while (Math.abs(frontSplitlength - paths.frontPanel.length()) > 1) {
;['front', 'back'].forEach((prefix) => {
const diff = paths[prefix + 'Split'].length() / paths[prefix + 'Panel'].length()
@ -542,11 +519,6 @@ export const points = {
})
})
}
// ;['back'].forEach((prefix) => {
// ;['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
// points[prefix + 'Split' + name]
// })
// })
lowerWaist(paths, Path, points, waistLowering, 'middle', 'Waist')
;['front', 'back'].forEach((prefix) => {
@ -561,24 +533,6 @@ export const points = {
})
lowerWaist(paths, Path, points, waistbandSize, prefix, 'Waistband')
})
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split', 'Panel'].forEach((type) => {
;['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
points[prefix + type + name]
})
points[prefix + type + 'Waistband']
})
points[prefix + 'Waist']
points[prefix + 'Waistband']
})
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split', 'Panel'].forEach((type) => {
;['Seat', 'UpperLeg', 'Knee'].forEach((name) => {
points[prefix + type + name + 'Cp1']
points[prefix + type + name + 'Cp2']
})
})
})
store.set(
'waistLength',
@ -631,5 +585,3 @@ export const points = {
return part.hide()
},
}
//http://localhost:8000/new/luminous#view=%22inspect%22&settings=%7B%22measurements%22%3A%7B%22waist%22%3A960%2C%22waistBack%22%3A440%2C%22hips%22%3A884%2C%22seat%22%3A980%2C%22seatBack%22%3A490%2C%22inseam%22%3A790%2C%22waistToSeat%22%3A230%2C%22waistToUpperLeg%22%3A280%2C%22waistToKnee%22%3A610%2C%22waistToHips%22%3A120%2C%22waistToFloor%22%3A1090%2C%22knee%22%3A415%2C%22ankle%22%3A230%2C%22crossSeam%22%3A800%2C%22crossSeamFront%22%3A380%2C%22heel%22%3A300%2C%22upperLeg%22%3A640%7D%7D

View file

@ -1,9 +1,8 @@
import { cbqc } from '@freesewing/core'
import { points } from './points.mjs'
import { shape } from './shape.mjs'
export const waistband = {
name: 'lumina.waistband',
after: points,
after: shape,
draft: ({
store,
sa,
@ -110,7 +109,6 @@ export const waistband = {
.join(paths.waist.reverse())
.line(points.waistbandBack)
.join(paths.waistband)
.reverse()
.hide()
paths.seam = new Path().move(points.waistbandFront).line(points.waistFront).join(paths.seamSA)

View file

@ -1,565 +0,0 @@
export const zpoints = {
name: 'lumina.zpoints',
measurements: [
'waist',
'waistBack',
'hips',
'seat',
'seatBack',
'inseam',
'waistToSeat',
'waistToUpperLeg',
'waistToKnee',
'waistToHips',
'waistToFloor',
'knee',
'ankle',
'crossSeam',
'crossSeamFront',
'heel',
'upperLeg',
],
options: {
ease: { pct: -20, min: -35, max: 10, menu: 'fit' },
length: { pct: 100, min: 10, max: 100, menu: 'fit' },
crossSeamAngle: 35,
crotchToKnee: 0.4,
waistToKneeCP: 0.4,
kneeToWaistLength: 400,
crotchPointsCP: 2,
},
draft: ({
measurements,
options,
Point,
Path,
points,
paths,
Snippet,
snippets,
utils,
log,
complete,
sa,
paperless,
macro,
part,
}) => {
const ControlPoints = (p1, p2, p3, t) => {
let a = 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: p2.shift(p2.angle(p1) + a - 90, p2.dist(p1) / 3),
cp3: p2.shift(p2.angle(p3) - a + 90, p2.dist(p3) / 3),
}
}
const CreateControlPoints = (names) => {
for (var i = 1; i < names.length - 1; i++) {
var cp = ControlPoints(points[names[i - 1]], points[names[i]], points[names[i + 1]])
points[names[i] + 'Cp1'] = cp.cp1
points[names[i] + 'Cp2'] = cp.cp3
}
}
const CreatePath = (pathName, names) => {
paths[pathName] = new Path()
.move(points[names[0]])
._curve(points[names[1] + 'Cp1'], points[names[1]])
for (var i = 2; i < names.length - 1; i++) {
paths[pathName].curve(
points[names[i - 1] + 'Cp2'],
points[names[i] + 'Cp1'],
points[names[i]]
)
}
paths[pathName].curve_(points[names[i - 1] + 'Cp2'], points[names[i]])
return paths[pathName]
}
const CreateWaistPoint = (front) => {
// console.log({
// crossSeamAngle: options.crossSeamAngle,
// crotchPointsCP: options.crotchPointsCP,
// })
const kneeTemp = points.insideCrossSeam.shiftFractionTowards(
points.insideKnee,
options.crotchToKnee
)
const angle =
90 +
(front
? options.crossSeamAngle * (m.waistBack / m.waist)
: -1 * options.crossSeamAngle * (1 - m.waistBack / m.waist))
const crossSeam = front ? m.crossSeamFront : m.crossSeam - m.crossSeamFront
var kneeToWaist = m.waistToKnee
var ratio = 1
var waist = kneeTemp.shift(angle, kneeToWaist * ratio)
const crossSeamCp = points.insideCrossSeam.shiftFractionTowards(
utils.beamIntersectsY(kneeTemp, waist, points.insideCrossSeam.y),
options.crotchPointsCP
)
// console.log({ f: front, a: angle })
var waistCp
var diff,
iter = 0
do {
waist = kneeTemp.shift(angle, kneeToWaist * ratio * (ratio < 1 ? 1.05 : 0.95))
// waistCp = waist.shiftFractionTowards(kneeTemp, options.waistToKneeCP)
waistCp = waist.shiftFractionTowards(points.insideKnee, options.waistToKneeCP)
const crossSeamPath = new Path()
.move(points.insideCrossSeam)
.curve(crossSeamCp, waistCp, waist)
diff = crossSeam - crossSeamPath.length()
ratio = crossSeam / crossSeamPath.length()
// console.log({ i: iter, d: diff, r: ratio })
} while (++iter < 100 && (diff > 1 || diff < -1))
if (iter >= 100) {
console.log('Too many iterations trying to make it fit!')
// log.error('Too many iterations trying to make it fit!')
}
if (front) {
points.frontWaist = waist.clone()
points.frontWaistCp = waistCp.clone()
points.frontCrossSeamCp = crossSeamCp.clone()
} else {
points.backWaist = waist.clone()
points.backWaistCp = waistCp.clone()
points.backCrossSeamCp = crossSeamCp.clone()
}
}
const CreateSidePoints = (
prefix,
postfix,
names,
ratio,
ratioFixed,
ease,
distanceCompentation
) => {
// console.log('-----' + prefix + postfix + '----')
var measurement,
width,
lastGood = 0
for (var i = 0; i < names.length; i++) {
var distance =
m['waistTo' + names[i - 1]] -
(m['waistTo' + names[i]] === undefined ? 0 : m['waistTo' + names[i]])
switch (names[i]) {
case 'UpperLeg':
measurement = m['upperLeg']
const intersect = utils.beamIntersectsCurve(
points[prefix + names[i]],
points[prefix + names[i]].shift(prefix == 'front' ? 180 : 0, ratioFixed * 3),
points.insideCrossSeam,
points[prefix + 'CrossSeamCp'],
points[prefix + 'WaistCp'],
points[prefix + 'Waist']
)
// console.log({ intersect: intersect })
measurement += intersect.dist(points[prefix + names[i]])
break
case 'Waist':
measurement = prefix == 'front' ? m.waist - m.waistBack : m.waistBack
case 'Seat':
measurement = prefix == 'front' ? m.seat - m.seatBack : m.seatBack
distance *= distanceCompentation
break
default:
measurement = m[names[i].toLowerCase()]
}
measurement /= 2
measurement *= ease
width = measurement * ratio
if (i == 0) {
points[prefix + postfix + names[i]] = points[prefix + names[i]].shift(
prefix == 'front' ? 180 : 0,
measurement - width < ratioFixed ? width : measurement - ratioFixed
) //.addCircle(3).addCircle(6).addCircle(9)
points[prefix + names[i]] //.addCircle(width < ratioFixed ? width : ratioFixed)
} else {
var ci = utils.circlesIntersect(
points[prefix + names[i]],
measurement - width < ratioFixed ? width : measurement - ratioFixed,
points[prefix + postfix + names[lastGood]],
distance
)
if (false !== ci) {
points[prefix + postfix + names[i]] = ci[prefix == 'front' ? 0 : 1] //.addCircle(2).addCircle(4).addCircle(6)
lastGood = i
} else {
// break
points[prefix + postfix + names[i]] = points[prefix + postfix + names[lastGood]].clone()
points[prefix + postfix + names[lastGood]] //.addCircle(distance)
// points[prefix +names[i]].addCircle(width < ratioFixed ? width : ratioFixed)
points[prefix + names[i]] //.addCircle(measurement - width < ratioFixed ? width : measurement - ratioFixed)
}
}
}
}
const SmoothPoints = (prefix, postfix, names) => {
var adjust
for (var i = 0; i < names.length - 2; i++) {
adjust = false
if (prefix == 'front') {
adjust =
points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) >
points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 2]])
} else {
adjust =
points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 1]]) <
points[prefix + postfix + names[i]].angle(points[prefix + postfix + names[i + 2]])
}
if (adjust) {
points[prefix + postfix + names[i + 1]] = points[
prefix + postfix + names[i]
].shiftTowards(
points[prefix + postfix + names[i + 2]],
points[prefix + postfix + names[i]].dist(points[prefix + postfix + names[i + 1]])
)
}
}
}
const m = measurements
const crotchOffset = m.waistToFloor - m.inseam
const waistFrontBackRatio = m.waistBack / m.waist
const sideRatio = 3 / 5
const ease = options.ease + 1
const waistToAnkle = m.waistToFloor - m.heel / Math.PI
m['waistToAnkle'] = m.waistToFloor - m.heel / Math.PI
const sideFixed = (((m.waist - m.waistBack) * ease) / 2) * sideRatio
points.insideWaist = new Point(0, 0)
points.insideHips = points.insideWaist.shift(270, m.waistToHips)
points.insideSeat = points.insideWaist.shift(270, m.waistToSeat)
points.frontCrossSeam =
points.backCrossSeam =
points.insideCrossSeam =
points.insideWaist.shift(270, crotchOffset)
points.frontUpperLeg =
points.backUpperLeg =
points.insideUpperLeg =
points.insideWaist.shift(270, m.waistToUpperLeg)
points.frontKnee =
points.backKnee =
points.insideKnee =
points.insideWaist.shift(270, m.waistToKnee)
points.frontAnkle =
points.backAnkle =
points.insideAnkle =
points.insideWaist.shift(270, waistToAnkle)
points.frontFloor =
points.backFloor =
points.insideFloor =
points.insideWaist.shift(270, m.waistToFloor)
CreateWaistPoint(true)
CreateWaistPoint(false)
console.log({ pionts: JSON.parse(JSON.stringify(points)) })
const crossSeamFront = new Path()
.move(points.frontWaist)
.curve(points.frontWaistCp, points.frontCrossSeamCp, points.insideCrossSeam)
const crossSeamBack = new Path()
.move(points.backWaist)
.curve(points.backWaistCp, points.backCrossSeamCp, points.insideCrossSeam)
points.frontSeat = crossSeamFront.shiftAlong(
m.waistToSeat * (m.crossSeamFront / m.waistToUpperLeg) * 0.8
)
// .addCircle(6)
points.frontHips = crossSeamFront.shiftAlong(
m.waistToHips * (m.crossSeamFront / m.waistToUpperLeg)
)
// .addCircle(10)
points.backSeat = crossSeamBack.shiftAlong(m.waistToSeat * (m.waistToSeat / m.waistToUpperLeg))
// .addCircle(6)
points.backHips = crossSeamBack.shiftAlong(m.waistToHips * (m.waistToSeat / m.waistToUpperLeg))
// .addCircle(10)
CreateSidePoints(
'front',
'Side',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
0,
0.1,
ease,
1
)
CreateSidePoints(
'back',
'Side',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
0,
0.1,
ease,
1
)
CreateSidePoints(
'front',
'Split',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
sideRatio,
sideFixed,
ease,
(points.frontAnkle.dist(points.frontCrossSeam) + crossSeamFront.length()) /
(m.waistToFloor - m.heel / Math.PI)
)
CreateSidePoints(
'back',
'Split',
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
sideRatio,
sideFixed,
ease,
(points.frontAnkle.dist(points.frontCrossSeam) + crossSeamFront.length()) /
(m.waistToFloor - m.heel / Math.PI)
)
points.backHipsCp1 = points.backWaistCp.clone()
points.backWaistCp = points.backWaist.shift(
points.backWaist.angle(points.backSplitWaist) - 90,
points.backWaist.dist(points.backHips) / 3
)
points.backHipsCp2 = points.backSeat.shiftOutwards(
points.backHips,
points.backWaist.dist(points.backHips) / 4
)
points.frontHipsCp1 = points.frontWaistCp.clone()
points.frontWaistCp = points.frontWaist.shift(
points.frontWaist.angle(points.frontSplitWaist) + 90,
points.frontWaist.dist(points.frontHips) / 3
)
points.frontHipsCp2 = points.frontSeat.shiftOutwards(
points.frontHips,
points.frontWaist.dist(points.frontHips) / 4
)
paths.crossSeamFront = new Path()
.move(points.insideCrossSeam)
.curve(points.frontCrossSeamCp, points.frontHipsCp1, points.frontHips)
.curve(points.frontHipsCp2, points.frontWaistCp, points.frontWaist)
.hide()
paths.crossSeamBack = new Path()
.move(points.insideCrossSeam)
.curve(points.backCrossSeamCp, points.backHipsCp1, points.backHips)
.curve(points.backHipsCp2, points.backWaistCp, points.backWaist)
.hide()
SmoothPoints('front', 'Side', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
SmoothPoints('front', 'Split', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
SmoothPoints('back', 'Side', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
SmoothPoints('back', 'Split', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
console.log({ pins: JSON.parse(JSON.stringify(points)) })
paths.middle = new Path().move(points.insideUpperLeg).line(points.insideFloor).hide()
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split'].forEach((type) => {
CreateControlPoints([
prefix + type + 'Waist',
prefix + type + 'Seat',
prefix + type + 'UpperLeg',
prefix + type + 'Knee',
prefix + type + 'Ankle',
])
})
})
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split'].forEach((type) => {
CreatePath(prefix + type, [
prefix + type + 'Waist',
prefix + type + 'Seat',
prefix + type + 'UpperLeg',
prefix + type + 'Knee',
prefix + type + 'Ankle',
]).hide()
})
})
if (1 == 2) {
;['front', 'back'].forEach((prefix) => {
;['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
var measurement
switch (name) {
case 'UpperLeg':
measurement = m.upperLeg
case 'Waist':
measurement = prefix == 'front' ? m.waist - m.waistBack : m.waistBack
break
case 'Seat':
measurement = prefix == 'front' ? m.seat - m.seatBack : m.seatBack
break
default:
measurement = m[name.toLowerCase()]
}
points[prefix + 'Panel' + name] = points['inside' + name].shift(
prefix == 'front' ? 180 : 0,
measurement / 2 - points[prefix + name].dist(points[prefix + 'Split' + name])
) //.addCircle(4)
})
})
SmoothPoints('front', 'Panel', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
SmoothPoints('back', 'Panel', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
paths.frontPanel = new Path()
.move(points.frontPanelAnkle)
.line(points.frontPanelKnee)
.line(points.frontPanelUpperLeg)
.line(points.frontPanelSeat)
.line(points.frontPanelWaist)
paths.backPanel = new Path()
.move(points.backPanelAnkle)
.line(points.backPanelKnee)
.line(points.backPanelUpperLeg)
.line(points.backPanelSeat)
.line(points.backPanelWaist)
}
if (1 == 1) {
;['front', 'back'].forEach((prefix) => {
;['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
points[prefix + 'Panel' + name] = points['inside' + name].shift(
prefix == 'front' ? 180 : 0,
points[prefix + 'Side' + name].dist(points[prefix + 'Split' + name])
) //.addCircle(4)
})
})
// SmoothPoints('front', 'Panel', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
// SmoothPoints('back', 'Panel', ['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'])
;['front', 'back'].forEach((prefix) => {
CreateControlPoints([
prefix + 'Panel' + 'Waist',
prefix + 'Panel' + 'Seat',
prefix + 'Panel' + 'UpperLeg',
prefix + 'Panel' + 'Knee',
prefix + 'Panel' + 'Ankle',
])
})
;['front', 'back'].forEach((prefix) => {
CreatePath(prefix + 'Panel', [
prefix + 'Panel' + 'Waist',
prefix + 'Panel' + 'Seat',
prefix + 'Panel' + 'UpperLeg',
prefix + 'Panel' + 'Knee',
prefix + 'Panel' + 'Ankle',
]).hide()
})
console.log({
fsl: paths.frontSplit.length(),
fpl: paths.frontPanel.length(),
bsl: paths.backSplit.length(),
bpl: paths.backPanel.length(),
})
;['front', 'back'].forEach((prefix) => {
const diff = paths[prefix + 'Split'].length() / paths[prefix + 'Panel'].length()
const names = ['Waist', 'Seat', 'UpperLeg', 'Knee', 'Ankle']
for (var i = 0; i < names.length - 1; i++) {
points[prefix + 'Panel' + names[i]] = points[
prefix + 'Panel' + names[i + 1]
].shiftFractionTowards(points[prefix + 'Panel' + names[i]], diff)
}
})
;['front', 'back'].forEach((prefix) => {
CreateControlPoints([
prefix + 'Panel' + 'Waist',
prefix + 'Panel' + 'Seat',
prefix + 'Panel' + 'UpperLeg',
prefix + 'Panel' + 'Knee',
prefix + 'Panel' + 'Ankle',
])
})
;['front', 'back'].forEach((prefix) => {
CreatePath(prefix + 'Panel', [
prefix + 'Panel' + 'Waist',
prefix + 'Panel' + 'Seat',
prefix + 'Panel' + 'UpperLeg',
prefix + 'Panel' + 'Knee',
prefix + 'Panel' + 'Ankle',
]).hide()
})
}
console.log({
fsl: paths.frontSplit.length(),
fpl: paths.frontPanel.length(),
bsl: paths.backSplit.length(),
bpl: paths.backPanel.length(),
})
if (options.length < 1) {
const length = (1 - options.length) * (m.inseam - (m.waistToFloor - waistToAnkle))
console.log({ wtf: m.waistToFloor, i: m.inseam, l: length })
// console.log({i:m.inseam,wa:waistToAnkle,iw:(m.inseam/waistToAnkle),r:lengthRatio})
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split', 'Panel'].forEach((type) => {
console.log({ n: prefix + type, l: paths[prefix + type].length() })
points[prefix + type + 'Hem'] = paths[prefix + type].reverse().shiftAlong(length)
paths[prefix + type] = paths[prefix + type].split(points[prefix + type + 'Hem'])[0] //.hide()
})
})
} else {
;['front', 'back'].forEach((prefix) => {
;['Side', 'Split', 'Panel'].forEach((type) => {
points[prefix + type + 'Hem'] = points[prefix + type + 'Ankle']
})
})
}
// ;['front', 'back'].forEach((prefix) => {
// ;['Side'].forEach((type) => {
// paths[prefix + type] = new Path()
// .move(points[prefix + type + 'Ankle'])
// .line(points[prefix + type + 'Knee'])
// .line(points[prefix + type + 'UpperLeg'])
// .line(points[prefix + type + 'Seat'])
// .line(points[prefix + type + 'Waist'])
// })
// })
// ;['front', 'back'].forEach((prefix) => {
// ;['Split'].forEach((type) => {
// paths[prefix + type +'2'] = new Path()
// .move(points[prefix + type + 'Ankle'])
// .line(points[prefix + type + 'Knee'])
// .line(points[prefix + type + 'UpperLeg'])
// .line(points[prefix + type + 'Waist'])
// })
// })
// paths.frontSplit.addClass('dotted note')
// paths.backSplit.addClass('dotted note')
// paths.frontSplit2.addClass('dashed lining')
// paths.backSplit2.addClass('dashed lining')
// console.log({d1: points.frontKnee.dist(points.frontUpperLeg),d2: points.frontSplitKnee.dist(points.frontSplitUpperLeg)})
console.log({ pahts: JSON.parse(JSON.stringify(paths)) })
console.log({ pihts: JSON.parse(JSON.stringify(points)) })
// paths.frontSide = new Path()
// .move(points.frontSideAnkle)
// .line(points.frontSideKnee)
// .line(points.frontSideUpperLeg)
// .line(points.frontSideSeat)
// .line(points.frontSideWaist)
return part //.hide()
},
}
//http://localhost:8000/new/luminous#view=%22inspect%22&settings=%7B%22measurements%22%3A%7B%22waist%22%3A960%2C%22waistBack%22%3A440%2C%22hips%22%3A884%2C%22seat%22%3A980%2C%22seatBack%22%3A490%2C%22inseam%22%3A790%2C%22waistToSeat%22%3A230%2C%22waistToUpperLeg%22%3A280%2C%22waistToKnee%22%3A610%2C%22waistToHips%22%3A120%2C%22waistToFloor%22%3A1090%2C%22knee%22%3A415%2C%22ankle%22%3A230%2C%22crossSeam%22%3A800%2C%22crossSeamFront%22%3A380%2C%22heel%22%3A300%2C%22upperLeg%22%3A640%7D%7D