2019-02-17 20:42:05 +01:00
|
|
|
import { constructMainDart, shapeSideSeam, dartPath } from "./shared";
|
|
|
|
|
|
|
|
export default part => {
|
|
|
|
let {
|
|
|
|
points,
|
|
|
|
Point,
|
|
|
|
paths,
|
|
|
|
Path,
|
|
|
|
measurements,
|
|
|
|
options,
|
|
|
|
macro,
|
|
|
|
complete,
|
|
|
|
sa,
|
2019-07-02 19:27:40 +02:00
|
|
|
paperless,
|
|
|
|
snippets
|
2019-02-17 20:42:05 +01:00
|
|
|
} = part.shorthand();
|
|
|
|
|
|
|
|
// Cleanup from Brian
|
|
|
|
for (let i of Object.keys(paths)) delete paths[i];
|
|
|
|
delete snippets.armholePitchNotch;
|
|
|
|
|
|
|
|
// Back inset
|
|
|
|
let shoulderLen = points.shoulder.dist(points.neck);
|
|
|
|
let backInset = shoulderLen * options.backInset;
|
|
|
|
points.armholePitch = points.armholePitch.shift(180, backInset);
|
|
|
|
points.armholePitchCp1 = points.armholePitchCp1.shift(180, backInset);
|
|
|
|
points.armholePitchCp2 = points.armholePitchCp2.shift(180, backInset);
|
|
|
|
points.armholeHollow = points.armholeHollow.shift(180, backInset / 2);
|
|
|
|
points.armholeHollowCp2 = points.armholeHollowCp2.shift(180, backInset / 2);
|
|
|
|
points.armholeHollowCp1 = points.armholeHollowCp1.shift(180, backInset / 2);
|
|
|
|
|
|
|
|
// Shoulder inset
|
|
|
|
points.shoulder = points.shoulder.shiftTowards(
|
|
|
|
points.neck,
|
|
|
|
shoulderLen * options.shoulderInset
|
|
|
|
);
|
|
|
|
points.shoulderCp1 = points.shoulderCp1.shift(
|
|
|
|
points.shoulder.angle(points.neck),
|
|
|
|
shoulderLen * options.shoulderInset
|
|
|
|
);
|
|
|
|
|
|
|
|
paths.test = new Path()
|
|
|
|
.move(points.shoulder)
|
|
|
|
.curve(points.shoulderCp1, points.armholePitchCp2, points.armholePitch);
|
|
|
|
// Neck inset
|
|
|
|
points.neck = points.neck.shiftTowards(
|
|
|
|
points.shoulder,
|
|
|
|
shoulderLen * options.neckInset
|
|
|
|
);
|
|
|
|
points.neckCp2 = points.neck.shift(
|
|
|
|
points.shoulder.angle(points.neck) + 90,
|
|
|
|
shoulderLen * 0.1
|
|
|
|
);
|
|
|
|
|
|
|
|
// Center back dart
|
|
|
|
points.cbNeck = new Path()
|
|
|
|
.move(points.cbNeck)
|
|
|
|
._curve(points.neckCp2, points.neck)
|
|
|
|
.shiftAlong(measurements.shoulderToShoulder * options.centerBackDart);
|
|
|
|
points.cbNeckCp2 = new Point(0, points.armholePitch.y);
|
|
|
|
|
|
|
|
// Construct main dart
|
|
|
|
constructMainDart(part);
|
|
|
|
|
|
|
|
// Add dart start and end point regardless of style or front or back
|
|
|
|
points.dartStart = points.dartHemLeft;
|
|
|
|
points.dartEnd = points.dartHemRight;
|
|
|
|
|
|
|
|
// Shape side seam
|
|
|
|
shapeSideSeam(part);
|
|
|
|
|
|
|
|
// Back scye dart
|
|
|
|
points._dartWidth = points.cbNeckCp2.shiftFractionTowards(
|
|
|
|
points.armholePitch.rotate(options.backScyeDart, points.cbNeckCp2),
|
|
|
|
1.2
|
|
|
|
);
|
|
|
|
points.armholePitchTop = new Path()
|
|
|
|
.move(points.armholePitch)
|
|
|
|
.curve(points.armholePitchCp2, points.shoulderCp1, points.shoulder)
|
|
|
|
.intersects(new Path().move(points.cbNeckCp2).line(points._dartWidth))
|
|
|
|
.pop();
|
|
|
|
// Rotate back scye dart into center back
|
|
|
|
let toRotate = ["cbNeck", "neckCp2", "neck", "shoulder", "shoulderCp1"];
|
|
|
|
for (let p of toRotate) {
|
|
|
|
points[p] = points[p].rotate(options.backScyeDart, points.cbNeckCp2);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Seam line
|
|
|
|
delete paths.cutonfold;
|
|
|
|
delete paths.saBase;
|
|
|
|
delete paths.sa;
|
|
|
|
paths.saBase = new Path()
|
|
|
|
.move(points.hem)
|
|
|
|
.line(points.hips)
|
|
|
|
.curve(points.hipsCp2, points.waistCp1, points.waist)
|
|
|
|
.curve_(points.waistCp2, points.armhole)
|
|
|
|
.curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
|
|
|
|
.curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
|
|
|
|
.curve(points.armholePitchCp2, points.shoulderCp1, points.shoulder)
|
|
|
|
.line(points.neck)
|
|
|
|
.curve_(points.neckCp2, points.cbNeck)
|
|
|
|
._curve(points.cbNeckCp2, points.cbArmhole)
|
|
|
|
.line(points.cbHem);
|
|
|
|
paths.hemBase = new Path().move(points.cbHem).line(points.hem);
|
|
|
|
paths.dart = dartPath(part);
|
|
|
|
paths.seam = paths.saBase
|
|
|
|
.clone()
|
|
|
|
.line(points.dartHemLeft)
|
|
|
|
.join(paths.dart)
|
|
|
|
.line(points.hem)
|
|
|
|
.attr("class", "fabric");
|
|
|
|
paths.saBase.render = false;
|
|
|
|
paths.hemBase.render = false;
|
|
|
|
paths.hemBase.render = false;
|
|
|
|
paths.dart.render = false;
|
|
|
|
|
|
|
|
if (complete) {
|
|
|
|
if (sa) {
|
|
|
|
paths.sa = paths.saBase
|
|
|
|
.offset(sa)
|
|
|
|
.join(paths.hemBase.offset(sa * 3))
|
|
|
|
.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (paperless) {
|
|
|
|
macro("ld", {
|
|
|
|
from: points.neck,
|
|
|
|
to: points.shoulder,
|
|
|
|
d: 15 + sa
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbArmhole,
|
|
|
|
to: points.cbNeck,
|
|
|
|
y: points.cbNeck.y - 15 - sa
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbArmhole,
|
|
|
|
to: points.neck,
|
|
|
|
y: points.cbNeck.y - 30 - sa
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbArmhole,
|
|
|
|
to: points.shoulder,
|
|
|
|
y: points.cbNeck.y - 45 - sa
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbArmhole,
|
|
|
|
to: points.armholePitch,
|
|
|
|
y: points.armholePitch.y
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbArmhole,
|
|
|
|
to: points.dartTop,
|
|
|
|
y: points.dartTop.y - 15
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.armhole,
|
|
|
|
to: points.armholePitch,
|
|
|
|
x: points.armhole.x + 15 + sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.armhole,
|
|
|
|
to: points.shoulder,
|
|
|
|
x: points.armhole.x + 30 + sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.armhole,
|
|
|
|
to: points.neck,
|
|
|
|
x: points.armhole.x + 45 + sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.hem,
|
|
|
|
to: points.waist,
|
|
|
|
x: points.armhole.x + 15 + sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.hem,
|
|
|
|
to: points.armhole,
|
|
|
|
x: points.armhole.x + 30 + sa
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.dartHemRight,
|
|
|
|
to: points.hem,
|
|
|
|
y: points.hem.y + 3 * sa + 15
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbHem,
|
|
|
|
to: points.dartHemLeft,
|
|
|
|
y: points.hem.y + 3 * sa + 15
|
|
|
|
});
|
|
|
|
macro("hd", {
|
|
|
|
from: points.cbHem,
|
|
|
|
to: points.hem,
|
|
|
|
y: points.hem.y + 3 * sa + 30
|
|
|
|
});
|
|
|
|
macro("ld", {
|
|
|
|
from: points.dartWaistLeft,
|
|
|
|
to: points.dartWaistRight
|
|
|
|
});
|
|
|
|
macro("ld", {
|
|
|
|
from: points.dartHipLeft,
|
|
|
|
to: points.dartHipRight
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.cbHem,
|
|
|
|
to: points.cbArmhole,
|
|
|
|
x: points.cbHem.x - 15 - sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.cbHem,
|
|
|
|
to: points.cbNeck,
|
|
|
|
x: points.cbHem.x - 30 - sa
|
|
|
|
});
|
|
|
|
macro("vd", {
|
|
|
|
from: points.cbHem,
|
|
|
|
to: points.neck,
|
|
|
|
x: points.cbHem.x - 45 - sa
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return part;
|
|
|
|
};
|