export default function(part) { // prettier-ignore let {measurements, options, store, points, snippets, paths, Point, Snippet, Path, utils, complete, debug } = part.shorthand(); // Where to divide our corset into panels if (options.panels === 11) store.set('gaps', [0.15,0.275,0.4,0.6,0.75]); else store.set('gaps', [0.2,0.35,0.5,0.65,0.8]); // Absolute values for some options store.set('waistReduction', measurements.naturalWaist * options.waistReduction); debug({ type: "info", label: '✅ Waist reduction', msg: utils.units(store.get('waistReduction')) }); store.set('backOpening', measurements.underbust * options.backOpening); debug({ type: "info", label: '✅ Back opening', msg: utils.units(store.get('backOpening')) }); let len = measurements.naturalWaistToUnderbust + measurements.naturalWaistToHip; for(let option of ['backRise', 'backDrop', 'frontRise', 'frontDrop', 'hipRise']) store.set(option, len * options[option]); store.set('length', len); /** * How much should we take in the corset at waist and bust * * I assume that the hips are larger than the underbust. * Can I be sure? Maybe not, but a larger underbust than hip * measurements seems very rare to say the least. */ store.set('width', 0.5 * ( measurements.hipsCircumference - store.get('backOpening') )); store.set('waistIntake', 0.5 * ( measurements.hipsCircumference - measurements.naturalWaist + store.get('waistReduction') )); store.set('bustIntake', 0.5 * ( measurements.hipsCircumference - measurements.underbust )); // Basic box (CB = Center back, CF = Center front) let wid = store.get('width'); points.underbustCF = new Point(0,0); points.hipsCF = new Point(0, len); points.hipsCB = new Point(wid, len); points.underbustCB = new Point(wid , 0); points.topSide = points.underbustCF.shiftFractionTowards(points.underbustCB, 0.5); points.bottomSide = points.hipsCF.shiftFractionTowards(points.hipsCB, 0.5); points.waistCF = points.underbustCF.shift(-90, measurements.naturalWaistToUnderbust); points.waistCB = new Point(points.hipsCB.x, points.waistCF.y); // frontRise points.topCF = points.underbustCF.shift(90, store.get('frontRise')); points.frontRiseStart = points.underbustCF.shift(0, wid * 0.15); points.frontRiseStartCp2 = points.underbustCF.shift(0, wid * 0.11); points.topCFCp1 = points.topCF.shift(0, wid * 0.11); // frontDrop points.bottomCF = points.hipsCF.shift(-90, store.get('frontDrop')); points.bottomCFCp2 = points.bottomCF.shift(0, wid * 0.11); // hipRise points.hipRise = points.bottomSide.shift(90, store.get('hipRise')); points.hipRiseCp1 = points.hipRise.shift(180, wid * 0.3); points.hipRiseCp2 = points.hipRise.shift(0, wid * 0.2); // backDrop points.backDrop = points.hipsCB.shift(-90, store.get('backDrop')); points.backDropCp1 = points.backDrop.shift(180, wid * 0.3); // backRise points.backRise = points.underbustCB.shift(90, store.get('backRise')); points.backRiseCp1 = points.backRise.shift(180, wid * 0.4); points.topSideCp1 = points.topSide.shift(0, wid * 0.2); // Paths paths.help1 = new Path() .move(points.underbustCF) .line(points.hipsCF) .line(points.hipsCB) .line(points.underbustCB) .close(); paths.help2 = new Path() .move(points.topSide) .line(points.bottomSide) .line(points.waistCF) .line(points.waistCB); paths.help1.render = false; paths.help2.render = false; paths.outline = new Path() .move(points.bottomCF) .curve(points.bottomCFCp2, points.hipRiseCp1, points.hipRise) .curve(points.hipRiseCp2, points.backDropCp1, points.backDrop) .line(points.backRise) .curve(points.backRiseCp1, points.topSideCp1, points.topSide) .line(points.frontRiseStart) .curve(points.frontRiseStartCp2, points.topCFCp1, points.topCF) .line(points.bottomCF) .close(); return part; };