196 lines
5.2 KiB
JavaScript
196 lines
5.2 KiB
JavaScript
![]() |
export default function(part) {
|
||
|
let {
|
||
|
Point,
|
||
|
points,
|
||
|
Path,
|
||
|
paths,
|
||
|
measurements,
|
||
|
options,
|
||
|
macro,
|
||
|
complete,
|
||
|
snippets,
|
||
|
Snippet,
|
||
|
sa,
|
||
|
paperless,
|
||
|
} = part.shorthand();
|
||
|
|
||
|
// define some variables
|
||
|
|
||
|
let width
|
||
|
if (options.width === 'ToElbow'){width = measurements.shoulderToElbow}
|
||
|
if (options.width === 'ToMidArm'){width = measurements.shoulderToElbow/2}
|
||
|
if (options.width === 'ToShoulder'){width = 0} // careful! takes other measurements if those are bigger to ensure that the tunica actually fits your body, use forceWidth if you know what you're doing
|
||
|
|
||
|
let hem_pos
|
||
|
if (options.length === 'ToKnee'){hem_pos = measurements.waistToKnee}
|
||
|
if (options.length === 'ToMidLeg'){hem_pos = measurements.waistToKnee/1.3}//UpperLeg}
|
||
|
if (options.length === 'ToFloor'){hem_pos = measurements.waistToFloor*0.95}
|
||
|
|
||
|
let hwidth = (measurements.shoulderToShoulder/2 + width) * options.widthBonus
|
||
|
let length = (measurements.hpsToWaistBack + hem_pos) * options.lengthBonus
|
||
|
let hhead = (measurements.head/4)*options.headRatio
|
||
|
let armhole = measurements.biceps/2*1.3*options.armholeDrop
|
||
|
let clavusPos = hhead*options.clavusPosBonus
|
||
|
let clavusWidth = options.clavusWidth*hwidth/13/options.widthBonus
|
||
|
|
||
|
// some checks, can be circumvented with forceWidth
|
||
|
if (options.forceWidth === false ){
|
||
|
if (hwidth < measurements.waist/4)
|
||
|
{hwidth = measurements.waist/4*options.widthBonus}
|
||
|
if (hwidth < measurements.hips/4)
|
||
|
{hwidth = measurements.hips/4*options.widthBonus}
|
||
|
if (hwidth < measurements.chest/4)
|
||
|
{hwidth = measurements.chest/4*options.widthBonus}
|
||
|
if (hwidth < measurements.seat/4)
|
||
|
{hwidth = measurements.seat/4*options.widthBonus}
|
||
|
}
|
||
|
|
||
|
// make points
|
||
|
points.top = new Point(0,0)
|
||
|
points.bottom = new Point(0,length)
|
||
|
points.topLeft = points.top.shift(0,-hwidth)
|
||
|
points.bottomLeft = points.bottom.shift(0,points.bottom.dx(points.topLeft))
|
||
|
points.headLeft = points.top.shift(180, hhead)
|
||
|
points.armholeLeft = points.topLeft.shift(-90,armhole)
|
||
|
|
||
|
// draw paths
|
||
|
paths.seam = new Path()
|
||
|
.move(points.top)
|
||
|
.line(points.topLeft)
|
||
|
.line(points.bottomLeft)
|
||
|
.attr('class', 'fabric')
|
||
|
|
||
|
paths.hem = new Path()
|
||
|
.move(points.bottomLeft)
|
||
|
.line(points.bottom)
|
||
|
.attr('class', 'fabric')
|
||
|
|
||
|
paths.fold = new Path()
|
||
|
.move(points.bottom)
|
||
|
.line(points.top)
|
||
|
.attr('class', 'fabric')
|
||
|
|
||
|
// clavi
|
||
|
if (options.clavi) {
|
||
|
|
||
|
// make points
|
||
|
points.clavusTopRight = points.top.shift(180, clavusPos)
|
||
|
points.clavusBottomRight = points.bottom.shift(0,points.top.dx(points.clavusTopRight))
|
||
|
points.clavusTopLeft = points.clavusTopRight.shift(180,clavusWidth)
|
||
|
points.clavusBottomLeft = points.bottom.shift(0,points.top.dx(points.clavusTopLeft))
|
||
|
|
||
|
// draw paths
|
||
|
paths.clavusRight = new Path()
|
||
|
.move(points.clavusTopRight)
|
||
|
.line(points.clavusBottomRight)
|
||
|
.attr("class", "various dashed")
|
||
|
paths.clavusLeft = new Path()
|
||
|
.move(points.clavusTopLeft)
|
||
|
.line(points.clavusBottomLeft)
|
||
|
.attr("class", "various dashed")
|
||
|
.attr("data-text", "BiasTape")
|
||
|
.attr("data-text-class", "center fill-various")
|
||
|
}
|
||
|
|
||
|
// Complete?
|
||
|
if (complete) {
|
||
|
// notches
|
||
|
snippets.hl = new Snippet('notch', points.headLeft)
|
||
|
snippets.al = new Snippet('notch', points.armholeLeft)
|
||
|
|
||
|
// cut on fold
|
||
|
macro('cutonfold', {
|
||
|
from: points.bottom,
|
||
|
to: points.top,
|
||
|
grainline: true,
|
||
|
})
|
||
|
|
||
|
// logo & title
|
||
|
points.logo = points.top.shift(45,points.bottom.dy(points.top)/3)
|
||
|
snippets.logo = new Snippet("logo", points.logo)
|
||
|
points.title = points.logo.shift(90, points.bottom.dy(points.top)/4)
|
||
|
macro("title", {
|
||
|
at: points.title,
|
||
|
nr: 1,
|
||
|
title: "tunica"
|
||
|
})
|
||
|
points.__titleNr.attr('data-text-class', 'center')
|
||
|
points.__titleName.attr('data-text-class', 'center')
|
||
|
points.__titlePattern.attr('data-text-class', 'center')
|
||
|
|
||
|
// scalebox
|
||
|
points.scalebox = points.title.shift(90, points.bottom.dy(points.top)/5)
|
||
|
macro("scalebox", { at: points.scalebox })
|
||
|
|
||
|
// seam allowance
|
||
|
if (sa) {
|
||
|
paths.sa = paths.seam.offset(sa)
|
||
|
.join(paths.hem.offset(sa * 2.5))
|
||
|
.close()
|
||
|
.attr('class', 'fabric sa')
|
||
|
}
|
||
|
|
||
|
// Paperless?
|
||
|
if (paperless) {
|
||
|
macro("vd", {
|
||
|
from: points.top,
|
||
|
to: points.bottom,
|
||
|
x: points.bottomLeft.x+10
|
||
|
});
|
||
|
|
||
|
macro("vd", {
|
||
|
from: points.armholeLeft,
|
||
|
to: points.bottomLeft,
|
||
|
x: points.armholeLeft.x - 15
|
||
|
});
|
||
|
macro("vd", {
|
||
|
from: points.topLeft,
|
||
|
to: points.armholeLeft,
|
||
|
x: points.armholeLeft.x - 15
|
||
|
});
|
||
|
|
||
|
macro("hd", {
|
||
|
from: points.topLeft,
|
||
|
to: points.top,
|
||
|
y: points.top.y + 15
|
||
|
});
|
||
|
|
||
|
macro("hd", {
|
||
|
from: points.headLeft,
|
||
|
to: points.top,
|
||
|
y: points.top.y - 15
|
||
|
});
|
||
|
macro("hd", {
|
||
|
from: points.topLeft,
|
||
|
to: points.headLeft,
|
||
|
y: points.top.y - 15
|
||
|
});
|
||
|
|
||
|
// for clavi
|
||
|
if (options.clavi){
|
||
|
macro("hd", {
|
||
|
from: points.clavusTopLeft,
|
||
|
to: points.clavusTopRight,
|
||
|
y: points.clavusTopLeft.y + 25
|
||
|
});
|
||
|
macro("hd", {
|
||
|
from: points.clavusTopRight,
|
||
|
to: points.headLeft,
|
||
|
y: points.clavusTopRight.y + 25
|
||
|
});
|
||
|
macro("hd", {
|
||
|
from: points.topLeft,
|
||
|
to: points.clavusTopLeft,
|
||
|
y: points.clavusTopLeft.y + 25
|
||
|
});
|
||
|
macro("hd", {
|
||
|
from: points.clavusTopRight,
|
||
|
to: points.top,
|
||
|
y: points.clavusTopLeft.y + 30
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return part;
|
||
|
}
|