177 lines
6.1 KiB
JavaScript
177 lines
6.1 KiB
JavaScript
export default function(part) {
|
|
let {
|
|
store,
|
|
macro,
|
|
Point,
|
|
Path,
|
|
points,
|
|
paths,
|
|
complete,
|
|
paperless,
|
|
snippets,
|
|
Snippet,
|
|
sa,
|
|
options,
|
|
measurements,
|
|
utils
|
|
} = part.shorthand()
|
|
|
|
let angle = -12
|
|
let bulge = measurements.hipsToUpperLeg * options.bulge
|
|
points.hipSide = new Point(0, 0)
|
|
points.hipCb = new Point(store.get('hipFront'), 0)
|
|
points.legSide = points.hipSide.shift(-90 - angle, measurements.hipsToUpperLeg)
|
|
points.legSideCp = points.legSide.shift(0, store.get('legFront'))
|
|
points.legInner = points.legSideCp.shift(-100, store.get('gusset') / 2)
|
|
points.crossSeam = points.legSideCp.shift(80, store.get('gusset') / 2)
|
|
points.legSideCp = points.legSide.shiftFractionTowards(points.legSideCp, 0.4)
|
|
points.seatCb = points.hipCb.shift(-90 - angle - 5, measurements.hipsToUpperLeg * 0.67)
|
|
points._tmp2 = points.crossSeam.shift(angle, 20)
|
|
points._tmp3 = utils.beamsIntersect(points.crossSeam, points._tmp2, points.hipCb, points.seatCb)
|
|
points.seatCp = points.seatCb.shiftFractionTowards(points._tmp3, 0.7)
|
|
points.crossSeamCp = points.crossSeam.shiftFractionTowards(points._tmp3, 0.7)
|
|
points.midFront = points.hipCb.shiftFractionTowards(points.seatCb, 0.6)
|
|
points.midFrontCpTop = points.hipCb.shiftFractionTowards(points.seatCb, 0.3)
|
|
points.midFrontCpBottom = points.hipCb.shiftFractionTowards(points.seatCb, 0.9)
|
|
points.midBulge = points.midFront.shift(angle * -1, bulge)
|
|
points.bulgeCpTop = points.midFrontCpTop.shift(angle * -1, bulge)
|
|
points.bulgeCpBottom = points.midFrontCpBottom.shift(angle * -1, bulge)
|
|
points.midSide = points.hipSide.shiftFractionTowards(points.legSide, 0.5)
|
|
points.hipSideCpBottom = points.hipSide.shiftFractionTowards(points.legSide, 0.2)
|
|
points.midSideCpTop = points.hipSide.shiftFractionTowards(points.legSide, 0.2)
|
|
points.midSideCpBottom = points.hipSide.shiftFractionTowards(points.legSide, 0.7)
|
|
points.legSideCpTop = points.hipSide.shiftFractionTowards(points.legSide, 0.8)
|
|
points.midSideBulge = points.midSide.shift(angle * -1, bulge * -1)
|
|
points.midSideBulgeCpTop = points.midSideCpTop.shift(angle * -1, bulge * -1)
|
|
points.midSideBulgeCpBottom = points.midSideCpBottom.shift(angle * -1, bulge * -1)
|
|
|
|
// Now reduce the legs
|
|
points.reducedLegInner = new Path()
|
|
.move(points.legSide)
|
|
.curve_(points.legSideCp, points.legInner)
|
|
.shiftFractionAlong(1 - options.legReduction)
|
|
points.reducedLegInnerCp = points.legInner.rotate(90, points.reducedLegInner)
|
|
points.reducedCrossSeam = new Path()
|
|
.move(points.crossSeam)
|
|
.curve(points.crossSeamCp, points.seatCp, points.seatCb)
|
|
.shiftFractionAlong(options.legReduction * 2)
|
|
|
|
// Lengthen legs
|
|
if (options.legBonus > 0) {
|
|
let shift = measurements.hipsToUpperLeg * options.legBonus
|
|
points.legSide = points.legSide.shift(-90, shift)
|
|
points.legSideCp = points.legSideCp.shift(-90, shift)
|
|
points.reducedLegInner = points.reducedLegInner(-90, shift)
|
|
}
|
|
|
|
// Rise
|
|
if (options.rise > 0) {
|
|
let shift = measurements.hipsToUpperLeg * options.rise
|
|
points.hipSide = points.hipSide.shift(90, shift)
|
|
points.hipCb = points.hipCb.shift(0, shift)
|
|
}
|
|
|
|
// Back rise
|
|
if (options.backRise > 0) {
|
|
let shift = measurements.hipsToUpperLeg * options.backRise
|
|
points.hipSide = points.hipSide.shift(90, shift / 2)
|
|
points.hipCbCp = new Point(points.hipCb.x / 2, points.hipCb.y)
|
|
}
|
|
console.log(points.hipSideCpBottom)
|
|
|
|
// Paths
|
|
paths.saBase = new Path() // Use full crossSeam path
|
|
.move(points.crossSeam)
|
|
.curve(points.crossSeamCp, points.seatCp, points.seatCb)
|
|
.split(points.reducedCrossSeam) // Now split it
|
|
.pop() // Return the relevant part
|
|
.curve(points.midFrontCpBottom, points.bulgeCpBottom, points.midBulge) // Continue from here
|
|
.curve(points.bulgeCpTop, points.midFrontCpTop, points.hipCb)
|
|
if (options.backRise > 0) paths.saBase.curve_(points.hipCbCp, points.hipSide)
|
|
else paths.saBase.line(points.hipSide)
|
|
paths.saBase
|
|
.curve(points.midSideCpTop, points.midSideBulgeCpTop, points.midSideBulge)
|
|
.curve(points.midSideBulgeCpBottom, points.legSideCpTop, points.legSide)
|
|
paths.saBase = new Path()
|
|
.move(points.reducedLegInner)
|
|
.line(points.reducedCrossSeam)
|
|
.join(paths.saBase)
|
|
paths.hemBase = new Path().move(points.legSide).curve_(points.legSideCp, points.reducedLegInner)
|
|
|
|
paths.saBase.render = false
|
|
paths.hemBase.render = false
|
|
|
|
paths.seam = paths.saBase.join(paths.hemBase).attr('class', 'fabric')
|
|
|
|
/** Uncomment this to see the reduced crossSeam
|
|
paths.xred = new Path()
|
|
.move(points.reducedLegInner)
|
|
.line(points.legInner)
|
|
.line(points.crossSeam)
|
|
*/
|
|
|
|
// Complete?
|
|
if (complete) {
|
|
points.logo = points.hipSide.shiftFractionTowards(points.seatCb, 0.3)
|
|
points.title = points.hipSide.shiftFractionTowards(points.seatCb, 0.7)
|
|
snippets.logo = new Snippet('logo', points.logo)
|
|
macro('title', {
|
|
at: points.title,
|
|
nr: 2,
|
|
title: 'front'
|
|
})
|
|
if (sa) {
|
|
paths.sa = paths.hemBase
|
|
.offset(3 * sa)
|
|
.join(paths.saBase.offset(sa))
|
|
.close()
|
|
.attr('class', 'fabric sa')
|
|
}
|
|
}
|
|
|
|
// Paperless?
|
|
if (paperless) {
|
|
macro('vd', {
|
|
from: points.legSide,
|
|
to: points.hipSide,
|
|
x: points.hipSide.x - sa - 15
|
|
})
|
|
macro('vd', {
|
|
from: points.reducedLegInner,
|
|
to: points.hipSide,
|
|
x: points.hipSide.x - sa - 30
|
|
})
|
|
macro('vd', {
|
|
from: points.reducedLegInner,
|
|
to: points.reducedCrossSeam,
|
|
x: points.reducedCrossSeam.x + sa + 15
|
|
})
|
|
macro('vd', {
|
|
from: points.reducedLegInner,
|
|
to: points.hipCb,
|
|
x: points.reducedCrossSeam.x + sa + 30
|
|
})
|
|
macro('hd', {
|
|
from: points.hipSide,
|
|
to: points.hipCb,
|
|
y: points.hipSide.y - sa - 15
|
|
})
|
|
macro('hd', {
|
|
from: points.hipSide,
|
|
to: points.reducedCrossSeam,
|
|
y: points.hipSide.y - sa - 30
|
|
})
|
|
macro('hd', {
|
|
from: points.legSide,
|
|
to: points.reducedLegInner,
|
|
y: points.reducedLegInner.y + 3 * sa + 15
|
|
})
|
|
macro('hd', {
|
|
from: points.legSide,
|
|
to: points.reducedCrossSeam,
|
|
y: points.reducedLegInner.y + 3 * sa + 30
|
|
})
|
|
}
|
|
|
|
return part
|
|
}
|