1
0
Fork 0
freesewing/packages/waralee/src/pantsproto.js

190 lines
5.7 KiB
JavaScript
Raw Normal View History

2019-08-21 08:55:57 -07:00
import { CreateCrotchPoints } from "./util";
export default function(part) {
let {
options,
measurements,
Point,
Path,
points,
2019-09-16 11:48:40 -07:00
paths,
2019-08-21 08:55:57 -07:00
Snippet,
snippets,
complete,
sa,
paperless,
2019-09-16 11:48:40 -07:00
macro
2019-08-21 08:55:57 -07:00
} = part.shorthand();
let seatDepth =
measurements.seatDepth + measurements.seatDepth * options.waistRaise;
let circumference = measurements.seatCircumference;
let circumference4 = circumference / 4;
points.mWaist = new Point(0, 0);
CreateCrotchPoints(part);
2019-09-16 11:48:40 -07:00
points.mLeg = points.mHip.shift(270, measurements.inseam * (1 -options.legShortening));
2019-08-21 08:55:57 -07:00
points.fLegSide = points.mLeg.shift(
180,
options.crotchFront * circumference4
);
points.bLegSide = points.mLeg.shift(0, options.crotchBack * circumference4);
points.fWaistFront = points.fWaistSide.shift(180, circumference4);
points.fWaistFrontOverlap = points.fWaistFront.shift(
180,
options.waistOverlap * circumference4
);
points.fHipFront = points.fHipSide.shift(180, circumference4);
points.fHipFrontOverlap = points.fHipFront.shift(
180,
options.waistOverlap * circumference4
);
points.fLegFront = points.fLegSide.shift(180, circumference4);
points.fLegFrontOverlap = points.fLegFront.shift(
180,
options.waistOverlap * circumference4
);
// Calculate the distance we need to move horizontally to get to the point that will
// diagonally be the distance we're looking for (circumference/4)
let bHorDistance = Math.sqrt(
circumference4 * circumference4 -
options.backRaise * seatDepth * options.backRaise * seatDepth
);
// Create a point that is this distance from the side.
points.bWaistBack = points.mWaist
.shift(90, options.waistBand)
.shift(0, options.crotchBack * circumference4 + bHorDistance);
points.bWaistBackOverlap = points.bWaistBack.shift(
0,
options.waistOverlap * circumference4
);
points.bHipBack = points.bHipSide.shift(0, circumference4);
points.bHipBackOverlap = points.bHipBack.shift(
0,
options.waistOverlap * circumference4
);
points.bLegBack = points.bLegSide.shift(0, circumference4);
points.bLegBackOverlap = points.bLegBack.shift(
0,
options.waistOverlap * circumference4
);
points.bWaistSideTemp = points.bWaistSide.shift(0, 2); // This is a trick to make the offset() call work. Without it, the offset is crossing the cutout line.
paths.waistBack = new Path()
.move(points.bWaistBackOverlap)
.line(points.bWaistBack)
.line(points.bWaistSideTemp) // This is a trick to make the offset() call work. Without it, the offset is crossing the cutout line.
.line(points.bWaistSide)
.setRender( false );
paths.waistFront = new Path()
.move(points.fWaistSide)
.line(points.fWaistFront)
.line(points.fWaistFrontOverlap)
.setRender( false );
paths.front = new Path()
.move(points.fWaistFrontOverlap)
.line(points.fHipFrontOverlap)
.line(points.fLegFrontOverlap)
.setRender( false );
paths.back = new Path()
.move(points.bLegBackOverlap)
.line(points.bHipBackOverlap)
.line(points.bWaistBackOverlap)
.setRender( false );
paths.leg = new Path()
.move(points.fLegFrontOverlap)
.line(points.bLegBackOverlap)
.setRender( false );
paths.cutout = new Path()
.move(points.bWaistSide)
.curve(points.bWaistCrotchCP, points.bHipCrotchCP, points.mHip)
.curve(points.fHipCrotchCP, points.fWaistCrotchCP, points.fWaistSide)
.setRender( false );
paths.seam = paths.waistFront
.join(paths.front)
.join(paths.leg)
.join(paths.back)
.join(paths.waistBack)
.join(paths.cutout)
.close()
.attr("class", "fabric");
if (options.frontPocket) {
points.frontPocketTop = points.fWaistSide
.shift(
270,
options.frontPocketVerticalOffset * measurements.seatDepth +
options.waistBand * 2
)
.shift(
180,
options.frontPocketHorizontalOffset * measurements.seatCircumference
);
points.frontPocketTop2 = points.frontPocketTop.shift(340, 12);
points.frontPocketBottom = points.frontPocketTop.shift(
250,
options.frontPocketSize * measurements.seatDepth
);
points.frontPocketBottom2 = points.frontPocketBottom.shift(340, 12);
paths.frontPocket = new Path()
.move(points.frontPocketTop)
.line(points.frontPocketBottom)
.line(points.frontPocketBottom2)
.line(points.frontPocketTop2)
.close()
.attr("class", "fabric");
}
if (options.backPocket) {
points.backPocketRight = points.bWaistBack
.shiftTowards(
points.bWaistSide,
options.backPocketHorizontalOffset * measurements.seatCircumference
)
.shift(
270,
options.backPocketVerticalOffset * measurements.seatDepth +
options.waistBand * 2
);
points.backPocketLeft = points.bWaistBack
.shiftTowards(
points.bWaistSide,
options.backPocketHorizontalOffset * measurements.seatCircumference +
options.backPocketSize * measurements.seatDepth
)
.shift(
270,
options.backPocketVerticalOffset * measurements.seatDepth +
options.waistBand * 2
);
points.backPocketRight2 = points.backPocketRight.shift(
points.backPocketRight.angle(points.backPocketLeft) + 90,
12
);
points.backPocketLeft2 = points.backPocketLeft.shift(
points.backPocketLeft.angle(points.backPocketRight) - 90,
12
);
paths.backPocket = new Path()
.move(points.backPocketLeft)
.line(points.backPocketLeft2)
.line(points.backPocketRight2)
.line(points.backPocketRight)
.close()
.attr("class", "fabric");
}
part.render = false;
return part;
}