cleanup 1
This commit is contained in:
parent
d9158efb29
commit
ad37fed4fe
8 changed files with 66 additions and 1177 deletions
|
@ -4,9 +4,7 @@ import { Design } from '@freesewing/core'
|
||||||
import { i18n } from '../i18n/index.mjs'
|
import { i18n } from '../i18n/index.mjs'
|
||||||
import { data } from '../data.mjs'
|
import { data } from '../data.mjs'
|
||||||
// Parts
|
// Parts
|
||||||
import { points } from './points.mjs'
|
import { shape } from './shape.mjs'
|
||||||
import { ipoints } from './ipoints.mjs'
|
|
||||||
import { zpoints } from './zpoints.mjs'
|
|
||||||
import { panel } from './panel.mjs'
|
import { panel } from './panel.mjs'
|
||||||
import { leg } from './leg.mjs'
|
import { leg } from './leg.mjs'
|
||||||
import { pocket } from './pocket.mjs'
|
import { pocket } from './pocket.mjs'
|
||||||
|
@ -15,11 +13,11 @@ import { waistband } from './waistband.mjs'
|
||||||
// Create new design
|
// Create new design
|
||||||
const Lumina = new Design({
|
const Lumina = new Design({
|
||||||
data,
|
data,
|
||||||
parts: [/*zpoints, ipoints,*/ points, panel, leg, waistband, pocket],
|
parts: [shape, panel, leg, waistband, pocket],
|
||||||
})
|
})
|
||||||
|
|
||||||
// Named exports
|
// 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']
|
// const classes = ['lining','canvas','mark','contrast','note','interfacing','various']
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { points } from './points.mjs'
|
import { shape } from './shape.mjs'
|
||||||
|
|
||||||
export const leg = {
|
export const leg = {
|
||||||
name: 'lumina.leg',
|
name: 'lumina.leg',
|
||||||
from: points,
|
from: shape,
|
||||||
draft: ({ sa, Point, points, Path, paths, Snippet, snippets, options, macro, store, part }) => {
|
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.front = paths.front.reverse().unhide().addText('front', 'note center').setClass('hidden')
|
||||||
paths.frontSplit.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)
|
.join(paths.frontSplit)
|
||||||
.close()
|
.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')
|
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
||||||
|
|
||||||
snippets.middle = new Snippet('notch', points.frontUpperLeg)
|
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.front3 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.6))
|
||||||
snippets.front4 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.8))
|
snippets.front4 = new Snippet('notch', paths.frontSplit.shiftFractionAlong(0.8))
|
||||||
snippets.back0 = new Snippet('notch', paths.back.shiftFractionAlong(0.5))
|
snippets.back0 = new Snippet('notch', paths.back.shiftFractionAlong(0.5))
|
||||||
snippets.back1 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.2))
|
snippets.back1 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.25))
|
||||||
snippets.back2 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.4))
|
snippets.back2 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.5))
|
||||||
snippets.back3 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.6))
|
snippets.back3 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.75))
|
||||||
snippets.back4 = new Snippet('notch', paths.backSplit.shiftFractionAlong(0.8))
|
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { points } from './points.mjs'
|
import { shape } from './shape.mjs'
|
||||||
|
|
||||||
export const panel = {
|
export const panel = {
|
||||||
name: 'lumina.panel',
|
name: 'lumina.panel',
|
||||||
from: points,
|
from: shape,
|
||||||
draft: ({ sa, Point, points, Path, paths, Snippet, snippets, options, macro, store, part }) => {
|
draft: ({ sa, Point, points, Path, paths, Snippet, snippets, options, macro, store, part }) => {
|
||||||
paths.panelWaistband = new Path()
|
paths.panelWaistband = new Path()
|
||||||
.move(points.backPanelWaistband)
|
.move(points.backPanelWaistband)
|
||||||
|
@ -35,15 +35,9 @@ export const panel = {
|
||||||
snippets.front2 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.4))
|
snippets.front2 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.4))
|
||||||
snippets.front3 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.6))
|
snippets.front3 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.6))
|
||||||
snippets.front4 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.8))
|
snippets.front4 = new Snippet('notch', paths.frontPanel.shiftFractionAlong(0.8))
|
||||||
snippets.back1 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.2))
|
snippets.back1 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.25))
|
||||||
snippets.back2 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.4))
|
snippets.back2 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.5))
|
||||||
snippets.back3 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.6))
|
snippets.back3 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.75))
|
||||||
snippets.back4 = new Snippet('notch', paths.backPanel.shiftFractionAlong(0.8))
|
|
||||||
|
|
||||||
store.set('pocket', {
|
|
||||||
paths: paths,
|
|
||||||
points: points,
|
|
||||||
})
|
|
||||||
|
|
||||||
return part
|
return part
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
import { pctBasedOn } from '@freesewing/core'
|
import { pctBasedOn } from '@freesewing/core'
|
||||||
import { panel } from './panel.mjs'
|
import { panel } from './panel.mjs'
|
||||||
import { points } from './points.mjs'
|
import { shape } from './shape.mjs'
|
||||||
|
|
||||||
export const pocket = {
|
export const pocket = {
|
||||||
name: 'lumina.pocket',
|
name: 'lumina.pocket',
|
||||||
// from: panel,
|
after: panel,
|
||||||
// after: panel,
|
from: shape,
|
||||||
// hide: hidePresets.HIDE_TREE,
|
|
||||||
from: points,
|
|
||||||
options: {
|
options: {
|
||||||
pocket: { bool: true, menu: 'style' },
|
pocket: { bool: true, menu: 'style' },
|
||||||
pocketdepth: {
|
pocketdepth: {
|
||||||
pct: 80,
|
pct: 90,
|
||||||
min: 0,
|
min: 20,
|
||||||
max: 100,
|
max: 120,
|
||||||
...pctBasedOn('waistToSeat'),
|
...pctBasedOn('waistToSeat'),
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
menu: (settings, mergedOptions) => (mergedOptions?.pocket ? 'style' : false),
|
menu: (settings, mergedOptions) => (mergedOptions?.pocket ? 'style' : false),
|
||||||
|
@ -41,12 +39,6 @@ export const pocket = {
|
||||||
return part.hide()
|
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
|
const pocketDepth = measurements.waistToSeat * options.pocketdepth
|
||||||
|
|
||||||
paths.pocketWaistband = new Path()
|
paths.pocketWaistband = new Path()
|
||||||
|
@ -61,17 +53,27 @@ export const pocket = {
|
||||||
.line(points.backPocketHem)
|
.line(points.backPocketHem)
|
||||||
.addText('bottom', 'note center')
|
.addText('bottom', 'note center')
|
||||||
.setClass('hidden')
|
.setClass('hidden')
|
||||||
paths.frontPocket = paths.frontPanel
|
const frontPocketSplit = paths.frontPanel.split(points.frontPocketHem)
|
||||||
.split(points.frontPocketHem)[0]
|
if (frontPocketSplit) {
|
||||||
.unhide()
|
paths.frontPocket = frontPocketSplit[0]
|
||||||
.addText('front', 'note center')
|
.unhide()
|
||||||
.setClass('hidden')
|
.addText('front', 'note center')
|
||||||
paths.backPocket = paths.backPanel
|
.setClass('hidden')
|
||||||
.split(points.backPocketHem)[0]
|
} else {
|
||||||
.unhide()
|
log.info('lumina:couldNotCreatePocket')
|
||||||
.reverse()
|
return part.hide()
|
||||||
.addText('back', 'note center')
|
}
|
||||||
.setClass('hidden')
|
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()
|
paths.seam = new Path()
|
||||||
.move(points.frontPocketHem)
|
.move(points.frontPocketHem)
|
||||||
|
@ -83,6 +85,16 @@ export const pocket = {
|
||||||
|
|
||||||
if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa')
|
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
|
return part
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,9 +153,6 @@ const createSidePoints = ({
|
||||||
? measurement - fixedSidePanel
|
? measurement - fixedSidePanel
|
||||||
: width
|
: width
|
||||||
: 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) {
|
if (i == 0) {
|
||||||
points[prefix + postfix + names[i]] = points[prefix + names[i]].shift(
|
points[prefix + postfix + names[i]] = points[prefix + names[i]].shift(
|
||||||
prefix == 'front' ? 180 : 0,
|
prefix == 'front' ? 180 : 0,
|
||||||
|
@ -205,8 +202,8 @@ const smoothPoints = (points, prefix, postfix, names, smoothness) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const points = {
|
export const shape = {
|
||||||
name: 'lumina.points',
|
name: 'lumina.shape',
|
||||||
measurements: [
|
measurements: [
|
||||||
'waist',
|
'waist',
|
||||||
'waistBack',
|
'waistBack',
|
||||||
|
@ -413,35 +410,17 @@ export const points = {
|
||||||
.move(points.backWaist)
|
.move(points.backWaist)
|
||||||
.curve(points.backWaistCp, points.backHipsCp2, points.backHips)
|
.curve(points.backWaistCp, points.backHipsCp2, points.backHips)
|
||||||
.curve(points.backHipsCp1, points.backCrossSeamCp, points.middleCrossSeam)
|
.curve(points.backHipsCp1, points.backCrossSeamCp, points.middleCrossSeam)
|
||||||
|
;['front', 'back'].forEach((prefix) => {
|
||||||
smoothPoints(
|
;['Side', 'Split'].forEach((type) => {
|
||||||
points,
|
smoothPoints(
|
||||||
'front',
|
points,
|
||||||
'Side',
|
prefix,
|
||||||
['Ankle', 'Knee', 'UpperLeg', 'Seat', 'Waist'],
|
type,
|
||||||
options.smoothing
|
['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
|
|
||||||
)
|
|
||||||
|
|
||||||
paths.middle = new Path().move(points.middleWaist).line(points.middleFloor).setHidden()
|
paths.middle = new Path().move(points.middleWaist).line(points.middleFloor).setHidden()
|
||||||
;['front', 'back'].forEach((prefix) => {
|
;['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) => {
|
;['front', 'back'].forEach((prefix) => {
|
||||||
;['Waist', 'Waistband', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
|
;['Waist', 'Waistband', 'Seat', 'UpperLeg', 'Knee', 'Ankle'].forEach((name) => {
|
||||||
points[prefix + 'Panel' + name] = points['middle' + name].shift(
|
points[prefix + 'Panel' + name] = points['middle' + name].shift(
|
||||||
|
@ -497,6 +473,7 @@ export const points = {
|
||||||
})
|
})
|
||||||
|
|
||||||
const frontSplitlength = paths.frontSplit.length()
|
const frontSplitlength = paths.frontSplit.length()
|
||||||
|
|
||||||
while (Math.abs(frontSplitlength - paths.frontPanel.length()) > 1) {
|
while (Math.abs(frontSplitlength - paths.frontPanel.length()) > 1) {
|
||||||
;['front', 'back'].forEach((prefix) => {
|
;['front', 'back'].forEach((prefix) => {
|
||||||
const diff = paths[prefix + 'Split'].length() / paths[prefix + 'Panel'].length()
|
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')
|
lowerWaist(paths, Path, points, waistLowering, 'middle', 'Waist')
|
||||||
;['front', 'back'].forEach((prefix) => {
|
;['front', 'back'].forEach((prefix) => {
|
||||||
|
@ -561,24 +533,6 @@ export const points = {
|
||||||
})
|
})
|
||||||
lowerWaist(paths, Path, points, waistbandSize, prefix, 'Waistband')
|
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(
|
store.set(
|
||||||
'waistLength',
|
'waistLength',
|
||||||
|
@ -631,5 +585,3 @@ export const points = {
|
||||||
return part.hide()
|
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
|
|
|
@ -1,9 +1,8 @@
|
||||||
import { cbqc } from '@freesewing/core'
|
import { shape } from './shape.mjs'
|
||||||
import { points } from './points.mjs'
|
|
||||||
|
|
||||||
export const waistband = {
|
export const waistband = {
|
||||||
name: 'lumina.waistband',
|
name: 'lumina.waistband',
|
||||||
after: points,
|
after: shape,
|
||||||
draft: ({
|
draft: ({
|
||||||
store,
|
store,
|
||||||
sa,
|
sa,
|
||||||
|
@ -110,7 +109,6 @@ export const waistband = {
|
||||||
.join(paths.waist.reverse())
|
.join(paths.waist.reverse())
|
||||||
.line(points.waistbandBack)
|
.line(points.waistbandBack)
|
||||||
.join(paths.waistband)
|
.join(paths.waistband)
|
||||||
.reverse()
|
|
||||||
.hide()
|
.hide()
|
||||||
|
|
||||||
paths.seam = new Path().move(points.waistbandFront).line(points.waistFront).join(paths.seamSA)
|
paths.seam = new Path().move(points.waistbandFront).line(points.waistFront).join(paths.seamSA)
|
||||||
|
|
|
@ -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
|
|
Loading…
Add table
Add a link
Reference in a new issue