From ad37fed4fed9e1caf6d0ee636f73aa8364597f97 Mon Sep 17 00:00:00 2001 From: woutervdub Date: Thu, 4 Jan 2024 05:15:54 +0000 Subject: [PATCH] cleanup 1 --- designs/lumina/src/index.mjs | 8 +- designs/lumina/src/ipoints.mjs | 495 ---------------- designs/lumina/src/leg.mjs | 15 +- designs/lumina/src/panel.mjs | 16 +- designs/lumina/src/pocket.mjs | 62 +- designs/lumina/src/{points.mjs => shape.mjs} | 76 +-- designs/lumina/src/waistband.mjs | 6 +- designs/lumina/src/zpoints.mjs | 565 ------------------- 8 files changed, 66 insertions(+), 1177 deletions(-) delete mode 100644 designs/lumina/src/ipoints.mjs rename designs/lumina/src/{points.mjs => shape.mjs} (90%) delete mode 100644 designs/lumina/src/zpoints.mjs diff --git a/designs/lumina/src/index.mjs b/designs/lumina/src/index.mjs index 703d7037cd3..6a8ec4c0016 100644 --- a/designs/lumina/src/index.mjs +++ b/designs/lumina/src/index.mjs @@ -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'] diff --git a/designs/lumina/src/ipoints.mjs b/designs/lumina/src/ipoints.mjs deleted file mode 100644 index 68e13f61532..00000000000 --- a/designs/lumina/src/ipoints.mjs +++ /dev/null @@ -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 - }, -} diff --git a/designs/lumina/src/leg.mjs b/designs/lumina/src/leg.mjs index ee92065fb83..ff4ff6d7492 100644 --- a/designs/lumina/src/leg.mjs +++ b/designs/lumina/src/leg.mjs @@ -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 }, diff --git a/designs/lumina/src/panel.mjs b/designs/lumina/src/panel.mjs index 710c292ff7f..5652724b4f5 100644 --- a/designs/lumina/src/panel.mjs +++ b/designs/lumina/src/panel.mjs @@ -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 }, diff --git a/designs/lumina/src/pocket.mjs b/designs/lumina/src/pocket.mjs index 1cc4df1ab67..225ba6d1700 100644 --- a/designs/lumina/src/pocket.mjs +++ b/designs/lumina/src/pocket.mjs @@ -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 }, } diff --git a/designs/lumina/src/points.mjs b/designs/lumina/src/shape.mjs similarity index 90% rename from designs/lumina/src/points.mjs rename to designs/lumina/src/shape.mjs index 4086f00a188..01081437d13 100644 --- a/designs/lumina/src/points.mjs +++ b/designs/lumina/src/shape.mjs @@ -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 diff --git a/designs/lumina/src/waistband.mjs b/designs/lumina/src/waistband.mjs index 9fbc3196948..8e6c5808c22 100644 --- a/designs/lumina/src/waistband.mjs +++ b/designs/lumina/src/waistband.mjs @@ -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) diff --git a/designs/lumina/src/zpoints.mjs b/designs/lumina/src/zpoints.mjs deleted file mode 100644 index 4403db74c31..00000000000 --- a/designs/lumina/src/zpoints.mjs +++ /dev/null @@ -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