diff --git a/packages/core/src/part.js b/packages/core/src/part.js index 027cfaa4a48..3e3297525df 100644 --- a/packages/core/src/part.js +++ b/packages/core/src/part.js @@ -318,7 +318,9 @@ Part.prototype.shorthand = function () { const absoluteOptionsProxy = { get: function (absoluteOptions, name) { if (typeof absoluteOptions[name] === 'undefined') - self.context.raise.warning(`Tried to access \`absoluteOptions.${name}\` but it is \`undefined\``) + self.context.raise.warning( + `Tried to access \`absoluteOptions.${name}\` but it is \`undefined\`` + ) return Reflect.get(...arguments) }, set: (absoluteOptions, name, value) => (self.context.settings.absoluteOptions[name] = value), diff --git a/packages/core/src/pattern.js b/packages/core/src/pattern.js index 5a98678ae44..1bf7a974a83 100644 --- a/packages/core/src/pattern.js +++ b/packages/core/src/pattern.js @@ -121,26 +121,27 @@ function snappedOption(option, pattern) { const conf = pattern.config.options[option] const abs = conf.toAbs(pattern.settings.options[option], pattern.settings) // Handle units-specific config - if ( - !Array.isArray(conf.snap) && - conf.snap.metric && - conf.snap.imperial - ) conf.snap = conf.snap[pattern.settings.units] + if (!Array.isArray(conf.snap) && conf.snap.metric && conf.snap.imperial) + conf.snap = conf.snap[pattern.settings.units] // Simple steps if (typeof conf.snap === 'number') return Math.ceil(abs / conf.snap) * conf.snap // List of snaps if (Array.isArray(conf.snap) && conf.snap.length > 1) { - for (const snap of conf.snap.sort((a, b) => a - b).map((snap, i) => { - const margin = (i < (conf.snap.length - 1)) - ? (conf.snap[Number(i) + 1] - snap) / 2 // Look forward - : (snap - conf.snap[i - 1]) / 2 // Final snap, look backward + for (const snap of conf.snap + .sort((a, b) => a - b) + .map((snap, i) => { + const margin = + i < conf.snap.length - 1 + ? (conf.snap[Number(i) + 1] - snap) / 2 // Look forward + : (snap - conf.snap[i - 1]) / 2 // Final snap, look backward - return { - min: snap - margin, - max: snap + Number(margin), - snap, - } - })) if (abs < snap.max && abs >= snap.min) return snap.snap + return { + min: snap - margin, + max: snap + Number(margin), + snap, + } + })) + if (abs < snap.max && abs >= snap.min) return snap.snap } // If we end up here, the snap config is wrong pattern.raise.warning(`Invalid snap config for option ${option}`) @@ -197,8 +198,8 @@ Pattern.prototype.draft = function () { typeof this.config.options[i].snap !== 'undefined' && this.config.options[i].toAbs instanceof Function ) { - let abs = this.config.options[i].toAbs(this.settings.options[i], this.settings) - this.settings.absoluteOptions[i] = snappedOption(i, this) + let abs = this.config.options[i].toAbs(this.settings.options[i], this.settings) + this.settings.absoluteOptions[i] = snappedOption(i, this) } } diff --git a/packages/core/src/utils.js b/packages/core/src/utils.js index b729a3696da..de6bc24ee98 100644 --- a/packages/core/src/utils.js +++ b/packages/core/src/utils.js @@ -356,7 +356,6 @@ export { Bezier } export function pctBasedOn(measurement) { return { toAbs: (val, { measurements }) => measurements[measurement] * val, - fromAbs: (val, { measurements }) => Math.round( ( 10 * val) / measurements[measurement]) / 10 + fromAbs: (val, { measurements }) => Math.round((10 * val) / measurements[measurement]) / 10, } } - diff --git a/packages/i18n/src/locales/de/app.yaml b/packages/i18n/src/locales/de/app.yaml index 4f06f41593e..066173cb0ea 100644 --- a/packages/i18n/src/locales/de/app.yaml +++ b/packages/i18n/src/locales/de/app.yaml @@ -12,7 +12,7 @@ applyThisLayout: Dieses Layout anwenden areYouSureYouWantToContinue: Bist du sicher, dass du fortfahren möchtest? askForHelp: Nach Hilfe fragen automatic: Automatisch -averagePeopleDoNotExist: "Durchschnittliche Menschen existieren nicht" +averagePeopleDoNotExist: 'Durchschnittliche Menschen existieren nicht' awesome: Großartig back: Zurück becauseThatWouldBeReallyHelpful: Weil das wirklich hilfreich wäre. @@ -72,7 +72,7 @@ drafts: Entwürfe draftSettings: Entwurfseinstellungen dragAndDropImageHere: Du kannst das Bild hier per Drag-and-Drop ablegen oder es unten manuell auswählen emailAddress: E-Mail-Adresse -emailWorksToo: "Falls du deinen Benutzername nicht weißt: deine E-Mail-Adresse funktioniert auch" +emailWorksToo: 'Falls du deinen Benutzername nicht weißt: deine E-Mail-Adresse funktioniert auch' enterEmailPickPassword: Gib deine E-Mail Adresse ein und wähle ein Passwort export: Exportieren exportTiledPDF: Exportieren als paginiertes PDF @@ -81,7 +81,7 @@ fieldRemoved: '{field} entfernt' fieldSaved: '{field} gespeichert' filterByPattern: Filtern nach Schnittmuster filterPatterns: Schnittmuster filtern -forgotLoginInstructions: "Wenn du dein Passwort nicht mehr weißt: Benutzername oder E-Mail-Adresse eingeben und den Passwort zurücksetzen Knopf drücken" +forgotLoginInstructions: 'Wenn du dein Passwort nicht mehr weißt: Benutzername oder E-Mail-Adresse eingeben und den Passwort zurücksetzen Knopf drücken' freesewing: Freesewing freesewingOnGithub: Freesewing auf GitHub github: GitHub @@ -156,7 +156,7 @@ remove: Entfernen removeThing: '{thing} entfernen' reportThisOnGithub: Melde dies auf GitHub requiredMeasurements: Erforderliche Maße -resendActivationEmailMessage: "Trage die E-Mail-Adresse ein, mit der du dich angemeldet hast, und wir senden dir eine neue Bestätigungsnachricht." +resendActivationEmailMessage: 'Trage die E-Mail-Adresse ein, mit der du dich angemeldet hast, und wir senden dir eine neue Bestätigungsnachricht.' resendActivationEmail: Aktivierungs-E-Mail erneut senden resetPassword: Passwort zurücksetzen reset: Zurücksetzen @@ -198,7 +198,7 @@ twitter: Twitter txt-footer: Freesewing wird erstellt von einer Gemeinschaft von Mitwirkenden
mit der finanziellen Unterstützung unserer Förderer/-innen txt-tier2: Unsere Kategorie mit dem demokratischsten Preis. Es ist vielleicht weniger als der Preis eines Lattes, aber deine Unterstützung bedeutet uns sehr viel. txt-tier4: Wähle diese Stufe, und wir senden dir etwas von unserem heiß begehrten Freesewing-Swag nach Hause. Egal, wo in der Welt das auch sein mag. -txt-tier8: "Wenn du uns nicht nur unterstützen möchtest, sondern Freesewing zum Gedeihen bringen willst, ist das die Stufe für dich. Außerdem: extra Swag!" +txt-tier8: 'Wenn du uns nicht nur unterstützen möchtest, sondern Freesewing zum Gedeihen bringen willst, ist das die Stufe für dich. Außerdem: extra Swag!' txt-tiers: 'FreeSewing wird durch ein freiwilliges Abonnement-Modell unterstützt' unitsInfo: Freesewing unterstützt sowohl das metrische System als auch imperiale Einheiten. Wähle einfach aus, was von beiden du hier verwenden möchtest. (Standardmäßig werden die in deinem Account konfigurierten Einheiten verwendet). updated: Aktualisiert @@ -240,8 +240,8 @@ noPattern: Du hast (noch) keine Schnittmuster. Erstelle ein neues Schnittmuster modelFirst: Beginne damit, Maße hinzuzufügen noModel: Du hast (noch) keine Maße hinzugefügt. FreeSewing kann maßgeschneiderte Schnittmuster erzeugen. Dafür benötigen wir jedoch Maße. noModel2: Das erste, was du tun solltest, ist, eine Person hinzuzufügen und das Maßband auszupacken. -noUserBrowsingTitle: "Du kannst nicht einfach alle Benutzer durchsuchen" -noUserBrowsingText: "Wir haben Tausende von ihnen. Sicher gibt es Interessanteres auf unserer Seite zu tun?" +noUserBrowsingTitle: 'Du kannst nicht einfach alle Benutzer durchsuchen' +noUserBrowsingText: 'Wir haben Tausende von ihnen. Sicher gibt es Interessanteres auf unserer Seite zu tun?' usePatternMeasurements: 'Verwende die Maße des Originalschnittmusters' createReplica: Duplikat erstellen showDetails: Details anzeigen diff --git a/packages/i18n/src/locales/de/intro.yaml b/packages/i18n/src/locales/de/intro.yaml index add1ecdc3b5..4552ad32fb2 100644 --- a/packages/i18n/src/locales/de/intro.yaml +++ b/packages/i18n/src/locales/de/intro.yaml @@ -2,11 +2,11 @@ txt-blog: Neuigkeiten, Updates und Ankündigungen des Freesewing-Teams txt-community: 'Alles wird von freiwilligen Mitwirkenden am Leben erhalten. Es existieren keine kommerziellen Absichten im Zusammenhang mit diesem Projekt.' txt-different: Was uns von anderen unterscheidet -txt-draft: "Wähle eines deiner Schnittmuster, wähle ein Modell und lege die Optionen fest. Den Rest erledigen wir." +txt-draft: 'Wähle eines deiner Schnittmuster, wähle ein Modell und lege die Optionen fest. Den Rest erledigen wir.' txt-how: So funktioniert es txt-join: Schließe dich Tausenden anderer an und erstelle einen kostenlosen Account auf freesewing.org. txt-model: Alle unsere Schnittmuster werden nach individuellen Maßen gefertigt. Nimm daher zuallererst das Maßband zur Hand. -txt-newHere: "Wenn du hier neu bist, ist unsere Demo der beste Startpunkt:" +txt-newHere: 'Wenn du hier neu bist, ist unsere Demo der beste Startpunkt:' txt-opensource: 'Unsere Plattform, unsere Schnittmuster und sogar diese Website: Unser gesamter Code ist auf GitHub zugänglich. Pull-Requests sind jederzeit herzlich willkommen!' txt-patrons: Freesewing wird durch die finanzielle Unterstützung unserer Förderer/-innen überhaupt erst ermöglicht. Scrolle nach unten, um mehr über unser Abonnementmodell zu erfahren. txt-showcase: Abgeschlossene Projekte aus der Freesewing-Community diff --git a/packages/i18n/src/locales/de/welcome.yaml b/packages/i18n/src/locales/de/welcome.yaml index 0e3b34c5924..0d26906066b 100644 --- a/packages/i18n/src/locales/de/welcome.yaml +++ b/packages/i18n/src/locales/de/welcome.yaml @@ -6,5 +6,5 @@ bio: Erzähle uns ein wenig über dich social: Lass uns wissen, wo wir dir folgen können newsletter: Teile uns deine Newsletter-Präferenz mit letUsSetupYourAccount: Lass uns deinen Account einrichten. -walkYouThrough: "Wir führen dich durch die folgenden Schritte:" +walkYouThrough: 'Wir führen dich durch die folgenden Schritte:' someOptional: Obwohl alle diese Schritte optional sind, empfehlen wir dir sie durchzugehen, um das Beste aus FreeSewing herauszuholen. diff --git a/packages/lunetius/config/index.js b/packages/lunetius/config/index.js index 5367f5c0da1..106107cb93d 100644 --- a/packages/lunetius/config/index.js +++ b/packages/lunetius/config/index.js @@ -19,31 +19,34 @@ export default { 'parametric design', 'pattern', 'sewing', - 'sewing pattern' + 'sewing pattern', ], optionGroups: { - fit: - ['headRatio','neckRatio'] - , - style: ['lengthBonus','widthBonus', - 'length',] + fit: ['headRatio', 'neckRatio'], + style: ['lengthBonus', 'widthBonus', 'length'], }, - measurements: ['waistToKnee','waistToUpperLeg','waistToFloor','hpsToWaistBack','neck','shoulderToShoulder','shoulderToElbow','waistToHips'], + measurements: [ + 'waistToKnee', + 'waistToUpperLeg', + 'waistToFloor', + 'hpsToWaistBack', + 'neck', + 'shoulderToShoulder', + 'shoulderToElbow', + 'waistToHips', + ], dependencies: {}, inject: {}, hide: [], parts: ['lacerna'], options: { - headRatio: {pct: 100, min: 80, max: 120}, - lengthBonus:{ pct: 105, min: 60, max: 130 }, - widthBonus: {pct: 100, min:50, max: 130}, - length: { - list: ['ToKnee', - 'ToBelowKnee', - 'ToHips', - 'ToUpperLeg','ToFloor'], - dflt: 'ToBelowKnee' - }, - neckRatio: {pct: 115, min: 95, max: 130}, - } + headRatio: { pct: 100, min: 80, max: 120 }, + lengthBonus: { pct: 105, min: 60, max: 130 }, + widthBonus: { pct: 100, min: 50, max: 130 }, + length: { + list: ['ToKnee', 'ToBelowKnee', 'ToHips', 'ToUpperLeg', 'ToFloor'], + dflt: 'ToBelowKnee', + }, + neckRatio: { pct: 115, min: 95, max: 130 }, + }, } diff --git a/packages/lunetius/src/box.js b/packages/lunetius/src/box.js index c8c6f4b07d8..18b3ab1e23b 100644 --- a/packages/lunetius/src/box.js +++ b/packages/lunetius/src/box.js @@ -1,17 +1,6 @@ export default function (part) { - const { - options, - Point, - Path, - points, - paths, - Snippet, - snippets, - complete, - sa, - paperless, - macro - } = part.shorthand() + const { options, Point, Path, points, paths, Snippet, snippets, complete, sa, paperless, macro } = + part.shorthand() const w = 500 * options.size points.topLeft = new Point(0, 0) @@ -47,12 +36,12 @@ export default function (part) { macro('hd', { from: points.bottomLeft, to: points.bottomRight, - y: points.bottomLeft.y + sa + 15 + y: points.bottomLeft.y + sa + 15, }) macro('vd', { from: points.bottomRight, to: points.topRight, - x: points.topRight.x + sa + 15 + x: points.topRight.x + sa + 15, }) } diff --git a/packages/lunetius/src/lacerna.js b/packages/lunetius/src/lacerna.js index b61719808f1..70c97e5de4f 100644 --- a/packages/lunetius/src/lacerna.js +++ b/packages/lunetius/src/lacerna.js @@ -1,155 +1,159 @@ -export default function(part) { - let { - Point, - points, - Path, - paths, - measurements, - options, - macro, - complete, - snippets, - Snippet, - sa, - paperless, - store - } = part.shorthand(); - +export default function (part) { + let { + Point, + points, + Path, + paths, + measurements, + options, + macro, + complete, + snippets, + Snippet, + sa, + paperless, + store, + } = part.shorthand() -// set different lengths of lacerna - let hem_pos - if (options.length === 'ToKnee'){hem_pos = measurements.waistToKnee} - if (options.length === 'ToBelowKnee'){hem_pos = 1.3*measurements.waistToKnee} - if (options.length === 'ToHips'){hem_pos = measurements.waistToHips} - if (options.length === 'ToUpperLeg'){hem_pos = measurements.waistToUpperLeg} - if (options.length === 'ToFloor'){hem_pos = measurements.waistToFloor} - // define some variables -// let hwidth = (measurements.shoulderToShoulder/2 + measurements.shoulderToElbow) * options.widthBonus - let length = (measurements.hpsToWaistBack + hem_pos) * options.lengthBonus - let hneck = (measurements.neck/2)*1.1*options.neckRatio - let width = (0.6*measurements.shoulderToShoulder + 1.8*measurements.shoulderToElbow) * options.widthBonus - let leftLength = measurements.hpsToWaistBack+measurements.waistToHips - - // make points - points.top = new Point(0,0) - points.bottom = new Point(0,length) - points.topLeft = points.top.shift(180,width) - points.bottomLeft = points.topLeft.shift(-90,points.top.dy(points.bottom)) - //points.topRight = points.topLeft.flipX() - //points.bottomRight = points.bottomLeft.flipX() + // set different lengths of lacerna + let hem_pos + if (options.length === 'ToKnee') { + hem_pos = measurements.waistToKnee + } + if (options.length === 'ToBelowKnee') { + hem_pos = 1.3 * measurements.waistToKnee + } + if (options.length === 'ToHips') { + hem_pos = measurements.waistToHips + } + if (options.length === 'ToUpperLeg') { + hem_pos = measurements.waistToUpperLeg + } + if (options.length === 'ToFloor') { + hem_pos = measurements.waistToFloor + } + // define some variables + // let hwidth = (measurements.shoulderToShoulder/2 + measurements.shoulderToElbow) * options.widthBonus + let length = (measurements.hpsToWaistBack + hem_pos) * options.lengthBonus + let hneck = (measurements.neck / 2) * 1.1 * options.neckRatio + let width = + (0.6 * measurements.shoulderToShoulder + 1.8 * measurements.shoulderToElbow) * + options.widthBonus + let leftLength = measurements.hpsToWaistBack + measurements.waistToHips - points.middleLeft = points.topLeft.shift(-90,leftLength) - - points.topShoulder = points.top.shift(180,width - 1.2*measurements.shoulderToElbow) - points.bottomShoulder = points.topShoulder.shift(-90,points.top.dy(points.bottom)) - points.bottomShoulderCp = points.bottomLeft.copy().shiftFractionTowards(points.top,0.05) - - paths.fold = new Path() - .move(points.bottom) - .line(points.top) + // make points + points.top = new Point(0, 0) + points.bottom = new Point(0, length) + points.topLeft = points.top.shift(180, width) + points.bottomLeft = points.topLeft.shift(-90, points.top.dy(points.bottom)) + //points.topRight = points.topLeft.flipX() + //points.bottomRight = points.bottomLeft.flipX() - paths.seam = new Path() - .move(points.top) - .line(points.topLeft) + points.middleLeft = points.topLeft.shift(-90, leftLength) - paths.hem = new Path() - .move(points.topLeft) - .line(points.middleLeft) - .curve_(points.bottomShoulderCp,points.bottomShoulder) - .line(points.bottom) + points.topShoulder = points.top.shift(180, width - 1.2 * measurements.shoulderToElbow) + points.bottomShoulder = points.topShoulder.shift(-90, points.top.dy(points.bottom)) + points.bottomShoulderCp = points.bottomLeft.copy().shiftFractionTowards(points.top, 0.05) - // draw other paths - - - // Complete? - - if (complete) { - snippets.shoulder = new Snippet('notch', points.topShoulder) + paths.fold = new Path().move(points.bottom).line(points.top) - // cut on fold - macro('cutonfold', { - from: points.bottom, - to: points.top, - grainline: true, - }) + paths.seam = new Path().move(points.top).line(points.topLeft) - // 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: "lacerna" - }) - points.__titleNr.attr('data-text-class', 'center') - points.__titleName.attr('data-text-class', 'center') - points.__titlePattern.attr('data-text-class', 'center') + paths.hem = new Path() + .move(points.topLeft) + .line(points.middleLeft) + .curve_(points.bottomShoulderCp, points.bottomShoulder) + .line(points.bottom) - // scalebox - points.scalebox = points.title.shift(90, points.bottom.dy(points.top)/5) - macro("scalebox", { at: points.scalebox }) + // draw other paths - // seam allowance - if (sa) { - paths.sa = paths.seam.offset(sa) - .join(paths.hem.offset(sa * 1.5)) - .close() - .attr('class', 'fabric sa') - } - - // Paperless? - if (paperless) { - macro("hd", { - from: points.topLeft, - to: points.top, - y: points.top.y - 20 - }) - macro("vd", { - from: points.top, - to: points.bottom, - x: points.top.x +10 - }) - macro("hd", { - from: points.topLeft, - to: points.topShoulder, - y: points.top.y - 10 - }) - macro("hd", { - from: points.topShoulder, - to: points.top, - y: points.top.y - 10 - }) - macro("hd", { - from: points.bottomShoulder, - to: points.bottom, - y: points.bottom.y + 10 - }) - macro("hd", { - from: points.bottomShoulder, - to: points.bottomLeft, - y: points.bottom.y + 10 - }) - macro("vd", { - from: points.topLeft, - to: points.middleLeft, - x: points.topLeft.x - 10 - }) - macro("ld", { - from: points.middleLeft, - to: points.bottomShoulder, - d: 0 - }) + // Complete? - macro("vd", { - from: points.middleLeft, - to: points.bottomLeft, - x: points.bottomLeft.x - 10 - }) + if (complete) { + snippets.shoulder = new Snippet('notch', points.topShoulder) + // 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: 'lacerna', + }) + 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 * 1.5)) + .close() + .attr('class', 'fabric sa') } - return part; + + // Paperless? + if (paperless) { + macro('hd', { + from: points.topLeft, + to: points.top, + y: points.top.y - 20, + }) + macro('vd', { + from: points.top, + to: points.bottom, + x: points.top.x + 10, + }) + macro('hd', { + from: points.topLeft, + to: points.topShoulder, + y: points.top.y - 10, + }) + macro('hd', { + from: points.topShoulder, + to: points.top, + y: points.top.y - 10, + }) + macro('hd', { + from: points.bottomShoulder, + to: points.bottom, + y: points.bottom.y + 10, + }) + macro('hd', { + from: points.bottomShoulder, + to: points.bottomLeft, + y: points.bottom.y + 10, + }) + macro('vd', { + from: points.topLeft, + to: points.middleLeft, + x: points.topLeft.x - 10, + }) + macro('ld', { + from: points.middleLeft, + to: points.bottomShoulder, + d: 0, + }) + + macro('vd', { + from: points.middleLeft, + to: points.bottomLeft, + x: points.bottomLeft.x - 10, + }) + } + } + return part } diff --git a/packages/paco/config/index.js b/packages/paco/config/index.js index 8818cc01111..b6f550b980e 100644 --- a/packages/paco/config/index.js +++ b/packages/paco/config/index.js @@ -98,12 +98,14 @@ export default { // Elastic waistbandWidth: { pct: 3, min: 1, max: 6, snap: 5 }, ankleElastic: { - pct: 5, min: 1, max: 13, + pct: 5, + min: 1, + max: 13, snap: { - metric: [ 5, 10, 12, 20, 25, 30, 40, 50, 80 ], - imperial: [ 6.35, 9.525, 12.7, 15.24, 19.05, 25.4, 30.48, 50.8, 76.2], + metric: [5, 10, 12, 20, 25, 30, 40, 50, 80], + imperial: [6.35, 9.525, 12.7, 15.24, 19.05, 25.4, 30.48, 50.8, 76.2], }, - ...pctBasedOn('waistToFloor') + ...pctBasedOn('waistToFloor'), }, heelEase: { pct: 5, min: 0, max: 50 }, diff --git a/packages/paco/src/back.js b/packages/paco/src/back.js index ca082f546d5..7adb574c9db 100644 --- a/packages/paco/src/back.js +++ b/packages/paco/src/back.js @@ -42,8 +42,19 @@ export default function (part) { } // Shorthand call - let { store, sa, points, Path, paths, options, measurements, complete, paperless, macro, absoluteOptions } = - part.shorthand() + let { + store, + sa, + points, + Path, + paths, + options, + measurements, + complete, + paperless, + macro, + absoluteOptions, + } = part.shorthand() // Adapt bottom leg width based on heel & heel ease let quarterHeel = (measurements.heel * (1 + options.heelEase) * options.legBalance) / 2 diff --git a/packages/snapseries/src/index.js b/packages/snapseries/src/index.js index 0064d3beb93..1ad64fedad3 100644 --- a/packages/snapseries/src/index.js +++ b/packages/snapseries/src/index.js @@ -1,5 +1,7 @@ // Common width for elastics export const elastics = { metric: [3.5, 5, 10, 12, 20, 25, 30, 40, 50, 60, 80, 100, 120], - imperial: [3.175, 6.35, 9.525, 12.7, 15.875, 19.05, 25.4, 31.75, 38.1, 44.45, 50.8, 76.2, 101.6, 127], + imperial: [ + 3.175, 6.35, 9.525, 12.7, 15.875, 19.05, 25.4, 31.75, 38.1, 44.45, 50.8, 76.2, 101.6, 127, + ], } diff --git a/packages/tiberius/config/index.js b/packages/tiberius/config/index.js index ae14dc2d07a..4e9bb6768eb 100644 --- a/packages/tiberius/config/index.js +++ b/packages/tiberius/config/index.js @@ -10,66 +10,63 @@ export default { department: 'tops', type: 'pattern', difficulty: 1, - tags: [ - 'freesewing', - 'design', - 'diy', - 'fashion', - 'made to measure', - 'parametric design', - 'pattern', - 'sewing', - 'sewing pattern', + tags: [ + 'freesewing', + 'design', + 'diy', + 'fashion', + 'made to measure', + 'parametric design', + 'pattern', + 'sewing', + 'sewing pattern', ], optionGroups: { - fit: - ['headRatio','armholeDrop'] - , - style: ['lengthBonus','widthBonus', - {clavi: ['clavi','clavusPosBonus','clavusWidth', ]}, - 'length', - 'width', - ], - advanced: ['forceWidth'] - - }, - measurements: [ - 'head', - 'shoulderToElbow', - 'shoulderToShoulder', - 'biceps', - 'hpsToWaistBack', - 'waistToKnee', - 'waist', - 'chest', - 'seat', - 'hips', - 'waistToFloor', - 'waistToUpperLeg' + fit: ['headRatio', 'armholeDrop'], + style: [ + 'lengthBonus', + 'widthBonus', + { clavi: ['clavi', 'clavusPosBonus', 'clavusWidth'] }, + 'length', + 'width', ], + advanced: ['forceWidth'], + }, + measurements: [ + 'head', + 'shoulderToElbow', + 'shoulderToShoulder', + 'biceps', + 'hpsToWaistBack', + 'waistToKnee', + 'waist', + 'chest', + 'seat', + 'hips', + 'waistToFloor', + 'waistToUpperLeg', + ], dependencies: {}, inject: {}, - hide: [], - parts: ['tunica', - ], + hide: [], + parts: ['tunica'], options: { - headRatio: {pct: 100, min: 80, max: 120}, - armholeDrop: { pct: 110, min: 100, max: 150 }, - lengthBonus:{ pct: 90, min: 60, max: 130 }, - widthBonus: {pct: 100, min:50, max: 130}, - clavi: {bool: false}, - clavusPosBonus: {pct: 105, min: 90, max: 130}, - clavusWidth: {pct: 100, min: 50, max: 150}, - length: { - list: ['ToKnee', - 'ToMidLeg','ToFloor'], - dflt: 'ToKnee' - }, - width: { - list: ['ToElbow', 'ToShoulder', 'ToMidArm'], - dflt: 'ToMidArm' - }, - // advanced - forceWidth: {bool: false} + headRatio: { pct: 100, min: 80, max: 120 }, + armholeDrop: { pct: 110, min: 100, max: 150 }, + lengthBonus: { pct: 90, min: 60, max: 130 }, + widthBonus: { pct: 100, min: 50, max: 130 }, + clavi: { bool: false }, + clavusPosBonus: { pct: 105, min: 90, max: 130 }, + clavusWidth: { pct: 100, min: 50, max: 150 }, + length: { + list: ['ToKnee', 'ToMidLeg', 'ToFloor'], + dflt: 'ToKnee', + }, + width: { + list: ['ToElbow', 'ToShoulder', 'ToMidArm'], + dflt: 'ToMidArm', + }, + // advanced + forceWidth: { bool: false }, }, } diff --git a/packages/tiberius/src/box.js b/packages/tiberius/src/box.js index c8c6f4b07d8..18b3ab1e23b 100644 --- a/packages/tiberius/src/box.js +++ b/packages/tiberius/src/box.js @@ -1,17 +1,6 @@ export default function (part) { - const { - options, - Point, - Path, - points, - paths, - Snippet, - snippets, - complete, - sa, - paperless, - macro - } = part.shorthand() + const { options, Point, Path, points, paths, Snippet, snippets, complete, sa, paperless, macro } = + part.shorthand() const w = 500 * options.size points.topLeft = new Point(0, 0) @@ -47,12 +36,12 @@ export default function (part) { macro('hd', { from: points.bottomLeft, to: points.bottomRight, - y: points.bottomLeft.y + sa + 15 + y: points.bottomLeft.y + sa + 15, }) macro('vd', { from: points.bottomRight, to: points.topRight, - x: points.topRight.x + sa + 15 + x: points.topRight.x + sa + 15, }) } diff --git a/packages/tiberius/src/index.js b/packages/tiberius/src/index.js index 0bcf19753c6..6542dbf7fae 100644 --- a/packages/tiberius/src/index.js +++ b/packages/tiberius/src/index.js @@ -8,5 +8,4 @@ const Pattern = new freesewing.Design(config, plugins) Pattern.prototype.draftTunica = draftTunica - export default Pattern diff --git a/packages/tiberius/src/tunica.js b/packages/tiberius/src/tunica.js index 96050ede7ec..9245cbc835e 100644 --- a/packages/tiberius/src/tunica.js +++ b/packages/tiberius/src/tunica.js @@ -1,195 +1,205 @@ -export default function(part) { - let { - Point, - points, - Path, - paths, - measurements, - options, - macro, - complete, - snippets, - Snippet, - sa, - paperless, - } = part.shorthand(); - - // define some variables +export default function (part) { + let { + Point, + points, + Path, + paths, + measurements, + options, + macro, + complete, + snippets, + Snippet, + sa, + paperless, + } = part.shorthand() - 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 + // define some variables - 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 + 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 - // 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} + 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.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) + 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.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') + 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') + } - // 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)) + // Complete? + if (complete) { + // notches + snippets.hl = new Snippet('notch', points.headLeft) + snippets.al = new Snippet('notch', points.armholeLeft) - // 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") + // 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') } - - // 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, - }) + // Paperless? + if (paperless) { + macro('vd', { + from: points.top, + to: points.bottom, + x: points.bottomLeft.x + 10, + }) - // 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') + 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, + }) - // scalebox - points.scalebox = points.title.shift(90, points.bottom.dy(points.top)/5) - macro("scalebox", { at: points.scalebox }) + macro('hd', { + from: points.topLeft, + to: points.top, + y: points.top.y + 15, + }) - // 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 - }); + 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 - }); - } - } + // 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; + } + return part } diff --git a/packages/walburga/config/index.js b/packages/walburga/config/index.js index c3420cb604f..4c344a033a4 100644 --- a/packages/walburga/config/index.js +++ b/packages/walburga/config/index.js @@ -10,65 +10,63 @@ export default { department: 'tops', type: 'pattern', difficulty: 1, - tags: [ - 'freesewing', - 'design', - 'diy', - 'fashion', - 'made to measure', - 'parametric design', - 'pattern', - 'sewing', - 'sewing pattern', + tags: [ + 'freesewing', + 'design', + 'diy', + 'fashion', + 'made to measure', + 'parametric design', + 'pattern', + 'sewing', + 'sewing pattern', ], optionGroups: { - fit: - ['headRatio'] - , - style: ['lengthBonus','widthBonus', - 'length', - 'neckoRatio', - // 'width', - 'hipLengthBonus', - 'neckline' - ], - }, - measurements: [ - 'head', - 'neck', -// 'shoulderToElbow', - 'shoulderToShoulder', -// 'biceps', - 'hpsToWaistBack', - 'waistToKnee', - 'waistToHips', -// 'waist', -// 'chest', -// 'seat', -// 'hips', - 'waistToFloor', - 'waistToUpperLeg' + fit: ['headRatio'], + style: [ + 'lengthBonus', + 'widthBonus', + 'length', + 'neckoRatio', + // 'width', + 'hipLengthBonus', + 'neckline', ], - dependencies: {front: 'base', - back: 'base'}, - inject: { - front: 'base', - back: 'base' - }, - hide: ['base',], + }, + measurements: [ + 'head', + 'neck', + // 'shoulderToElbow', + 'shoulderToShoulder', + // 'biceps', + 'hpsToWaistBack', + 'waistToKnee', + 'waistToHips', + // 'waist', + // 'chest', + // 'seat', + // 'hips', + 'waistToFloor', + 'waistToUpperLeg', + ], + dependencies: { front: 'base', back: 'base' }, + inject: { + front: 'base', + back: 'base', + }, + hide: ['base'], options: { - headRatio: {pct: 100, min: 80, max: 120}, - lengthBonus:{ pct: 85, min: 60, max: 130 }, - widthBonus: {pct: 95, min:50, max: 130}, - length: { - list: ['ToKnee', - 'ToMidLeg','ToFloor'], - dflt: 'ToKnee' - }, - neckline: {bool: true}, - neckoRatio: {pct: 100, min:10, max:190}, - hipLengthBonus: {pct:95, min:80, max:120 } - // advanced -// forceWidth: {bool: false} + headRatio: { pct: 100, min: 80, max: 120 }, + lengthBonus: { pct: 85, min: 60, max: 130 }, + widthBonus: { pct: 95, min: 50, max: 130 }, + length: { + list: ['ToKnee', 'ToMidLeg', 'ToFloor'], + dflt: 'ToKnee', + }, + neckline: { bool: true }, + neckoRatio: { pct: 100, min: 10, max: 190 }, + hipLengthBonus: { pct: 95, min: 80, max: 120 }, + // advanced + // forceWidth: {bool: false} }, } diff --git a/packages/walburga/src/back.js b/packages/walburga/src/back.js index 934a24a23cd..5d0b5d5a3c4 100644 --- a/packages/walburga/src/back.js +++ b/packages/walburga/src/back.js @@ -1,40 +1,37 @@ -export default function(part) { - let { - Point, - points, - Path, - paths, - measurements, - options, - macro, - complete, - snippets, - Snippet, - sa, - paperless, - } = part.shorthand(); +export default function (part) { + let { + Point, + points, + Path, + paths, + measurements, + options, + macro, + complete, + snippets, + Snippet, + sa, + paperless, + } = part.shorthand() - // Complete? - if (complete) { + // Complete? + if (complete) { + // logo & title + points.logo = points.top.shift(45, points.bottom.dy(points.top) / 5) + 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: 2, + title: 'back', + }) + points.__titleNr.attr('data-text-class', 'center') + points.__titleName.attr('data-text-class', 'center') + points.__titlePattern.attr('data-text-class', 'center') - - // logo & title - points.logo = points.top.shift(45,points.bottom.dy(points.top)/5) - 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: 2, - title: "back" - }) - 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 }) - - } - return part; + // scalebox + points.scalebox = points.title.shift(90, points.bottom.dy(points.top) / 5) + macro('scalebox', { at: points.scalebox }) + } + return part } diff --git a/packages/walburga/src/base.js b/packages/walburga/src/base.js index 3fb84ce1bcf..6884dfe3e99 100644 --- a/packages/walburga/src/base.js +++ b/packages/walburga/src/base.js @@ -1,201 +1,189 @@ -export default function(part) { - let { - Point, - points, - Path, - paths, - measurements, - options, - macro, - complete, - snippets, - Snippet, - sa, - paperless, - store, - utils - } = part.shorthand(); - - // define some variables +export default function (part) { + let { + Point, + points, + Path, + paths, + measurements, + options, + macro, + complete, + snippets, + Snippet, + sa, + paperless, + store, + utils, + } = part.shorthand() -// 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 + // define some variables - 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 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 hiplength = (measurements.hpsToWaistBack + measurements.waistToHips)*options.hipLengthBonus - let hwidth = (measurements.shoulderToShoulder/2) * options.widthBonus - let length = (measurements.hpsToWaistBack + hem_pos) * options.lengthBonus - let hhead = (measurements.head/4)*options.headRatio + 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 goldenRatio = 1.618033 + let hiplength = (measurements.hpsToWaistBack + measurements.waistToHips) * options.hipLengthBonus + let hwidth = (measurements.shoulderToShoulder / 2) * options.widthBonus + let length = (measurements.hpsToWaistBack + hem_pos) * options.lengthBonus + let hhead = (measurements.head / 4) * options.headRatio - - store.set('hhead',hhead) - store.set('goldenRatio',goldenRatio) + let goldenRatio = 1.618033 - //let armhole = measurements.biceps/2*1.3*options.armholeDrop - - // 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) - points.bottomMiddle = points.bottom.shiftFractionTowards(points.bottomLeft,.5) - points.hips = points.top.shift(-90,hiplength) - points.hipsLeft = points.hips.shift(0,points.bottom.dx(points.bottomLeft)) + store.set('hhead', hhead) + store.set('goldenRatio', goldenRatio) + //let armhole = measurements.biceps/2*1.3*options.armholeDrop - points.triangle = points.bottom.shift(90,points.bottomLeft.dx(points.bottom)/goldenRatio) // golderatio proportinal to width -// points.triangle = points.hips.shift(-90,points.hips.dy(points.bottom)/goldenRatio) // with GoldenRation between vertical lengths - points.triangleLeft = points.triangle.shift(0,points.bottom.dx(points.bottomLeft)) + // 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) + points.bottomMiddle = points.bottom.shiftFractionTowards(points.bottomLeft, 0.5) + points.hips = points.top.shift(-90, hiplength) + points.hipsLeft = points.hips.shift(0, points.bottom.dx(points.bottomLeft)) + points.triangle = points.bottom.shift(90, points.bottomLeft.dx(points.bottom) / goldenRatio) // golderatio proportinal to width + // points.triangle = points.hips.shift(-90,points.hips.dy(points.bottom)/goldenRatio) // with GoldenRation between vertical lengths + points.triangleLeft = points.triangle.shift(0, points.bottom.dx(points.bottomLeft)) + + // draw paths + paths.seam = new Path() + .move(points.top) + .line(points.topLeft) + .line(points.triangleLeft) + .line(points.bottomMiddle) + .line(points.triangle) + // .line(points.bottomLeft) + .attr('class', 'fabric') - - // draw paths - paths.seam = new Path() - .move(points.top) - .line(points.topLeft) - .line(points.triangleLeft) - .line(points.bottomMiddle) - .line(points.triangle) -// .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.triangle) - .line(points.top) - .attr('class', 'fabric') + // .move(points.bottomLeft) + // .line(points.bottom) + // .attr('class', 'fabric') - - // Complete? - if (complete) { - // notches - if (options.neckline === false){ - snippets.hl = new Snippet('notch', points.headLeft) - } - - // cut on fold - - macro('cutonfold', { - from: points.triangle, - to: points.top, - grainline: true, - }) + paths.fold = new Path().move(points.triangle).line(points.top).attr('class', 'fabric') - // logo & title - points.logo = points.top.shift(45,points.bottom.dy(points.top)/5) - 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: "wappenrock-front" - }) - 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') - -// make sa correct for corners - points.samod = points.triangle.shiftFractionTowards(points.top,-0.1) - paths.samod = new Path() - .move(points.triangle) - .line(points.samod) - .setRender(false) - - let sasplit = paths.samod.intersects(paths.sa) - points.sasplit = sasplit[0] - - let sahalves = paths.sa.split(points.sasplit) - paths.sa = sahalves[0] - .close() - .attr('class', 'fabric sa') - - -// paths.saadd = new Path() -// .move(points.sasplit) -// .line(points.top) - - } - - // Paperless? - if (paperless) { - macro("vd", { - from: points.top, - to: points.bottom, - x: points.bottom.x+10 - }); - macro("vd", { - from: points.triangleLeft, - to: points.bottomLeft, - x: points.bottomLeft.x-10 - }); - - macro("vd", { - from: points.topLeft, - to: points.triangleLeft, - x: points.bottomLeft.x-10 - }); - - - 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 - }); - macro("hd", { - from: points.triangleLeft, - to: points.bottomMiddle, - y: points.triangleLeft.y - }); - macro("vd", { - from: points.hipsLeft, - to: points.triangleLeft, - x: points.triangleLeft.x + 5 - }); - macro("ld", { - from: points.triangleLeft, - to: points.bottomMiddle, - d: -10 - }); - } + // Complete? + if (complete) { + // notches + if (options.neckline === false) { + snippets.hl = new Snippet('notch', points.headLeft) } - return part; + + // cut on fold + + macro('cutonfold', { + from: points.triangle, + to: points.top, + grainline: true, + }) + + // logo & title + points.logo = points.top.shift(45, points.bottom.dy(points.top) / 5) + 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: 'wappenrock-front', + }) + 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') + + // make sa correct for corners + points.samod = points.triangle.shiftFractionTowards(points.top, -0.1) + paths.samod = new Path().move(points.triangle).line(points.samod).setRender(false) + + let sasplit = paths.samod.intersects(paths.sa) + points.sasplit = sasplit[0] + + let sahalves = paths.sa.split(points.sasplit) + paths.sa = sahalves[0].close().attr('class', 'fabric sa') + + // paths.saadd = new Path() + // .move(points.sasplit) + // .line(points.top) + } + + // Paperless? + if (paperless) { + macro('vd', { + from: points.top, + to: points.bottom, + x: points.bottom.x + 10, + }) + macro('vd', { + from: points.triangleLeft, + to: points.bottomLeft, + x: points.bottomLeft.x - 10, + }) + + macro('vd', { + from: points.topLeft, + to: points.triangleLeft, + x: points.bottomLeft.x - 10, + }) + + 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, + }) + macro('hd', { + from: points.triangleLeft, + to: points.bottomMiddle, + y: points.triangleLeft.y, + }) + macro('vd', { + from: points.hipsLeft, + to: points.triangleLeft, + x: points.triangleLeft.x + 5, + }) + macro('ld', { + from: points.triangleLeft, + to: points.bottomMiddle, + d: -10, + }) + } + } + return part } diff --git a/packages/walburga/src/front.js b/packages/walburga/src/front.js index 2bf0ad42fd2..c7afbf06b1e 100644 --- a/packages/walburga/src/front.js +++ b/packages/walburga/src/front.js @@ -1,62 +1,55 @@ -export default function(part) { - let { - Point, - points, - Path, - paths, - measurements, - options, - macro, - complete, - snippets, - Snippet, - sa, - paperless, - store - } = part.shorthand(); +export default function (part) { + let { + Point, + points, + Path, + paths, + measurements, + options, + macro, + complete, + snippets, + Snippet, + sa, + paperless, + store, + } = part.shorthand() + let head = store.get('hhead') * 2 + let goldenRatio = store.get('goldenRatio') + let ratio = goldenRatio * options.neckoRatio - let head = store.get('hhead')*2 - let goldenRatio = store.get('goldenRatio') - let ratio = goldenRatio*options.neckoRatio - - - if (options.neckline === true){ - + if (options.neckline === true) { // calculate neck opening let neckotop - let neckomid// = hhead - neckotop -// let necko = neckotop + neckomid + let neckomid // = hhead - neckotop + // let necko = neckotop + neckomid // actual formula for triangle, from golden Ratio, measurement and Pythagoras - neckotop = (1/4)*(-(ratio**2)*head+Math.sqrt(4*(head**2)*(ratio**2)+(head**2)*(ratio**4))) + neckotop = + (1 / 4) * + (-(ratio ** 2) * head + Math.sqrt(4 * head ** 2 * ratio ** 2 + head ** 2 * ratio ** 4)) - neckomid = (2*neckotop)/ratio - -// points.anchor = new Point(100, 50) -// .attr("data-text", neckotop) -// .attr("data-text", head) -// .attr("data-text", goldenRatio) -// .attr("data-text-class", "center"); + neckomid = (2 * neckotop) / ratio - // checks to ensure that neck opening does not become too small - if (neckotop < measurements.neck/4) - {neckotop = measurements.neck/4, - neckomid = (2*measurements.neck/4)/goldenRatio + // points.anchor = new Point(100, 50) + // .attr("data-text", neckotop) + // .attr("data-text", head) + // .attr("data-text", goldenRatio) + // .attr("data-text-class", "center"); + + // checks to ensure that neck opening does not become too small + if (neckotop < measurements.neck / 4) { + ;(neckotop = measurements.neck / 4), (neckomid = (2 * measurements.neck) / 4 / goldenRatio) } - if (neckomid < measurements.neck/4) - {neckomid = measurements.neck/4, - neckotop = ((measurements.neck/4)*goldenRatio)/2 + if (neckomid < measurements.neck / 4) { + ;(neckomid = measurements.neck / 4), (neckotop = ((measurements.neck / 4) * goldenRatio) / 2) } + points.neckotop = points.top.shift(0, -neckotop) + points.neckomid = points.top.shift(-90, neckomid) - points.neckotop = points.top.shift(0,-neckotop) - points.neckomid = points.top.shift(-90,neckomid) - - - paths.neck = new Path() - .move(points.neckomid) - .line(points.neckotop) + paths.neck = new Path().move(points.neckomid).line(points.neckotop) let halvesseam = paths.seam.split(points.neckotop) paths.half = halvesseam[0] @@ -64,101 +57,89 @@ export default function(part) { delete paths.seam paths.seam = paths.neck.join(halvesseam[1]) - + let halvesmid = paths.fold.split(points.neckomid) paths.half = halvesmid[1] delete paths.half delete paths.fold paths.fold = halvesmid[0] + } + // Complete? + if (complete) { + // cut on fold + + if (options.neckline === true) { + delete paths.cutonfold // delete inherited path from base + macro('cutonfold', { + from: points.triangle, + to: points.neckomid, + grainline: true, + }) } - - // Complete? - if (complete) { + // logo & title + points.logo = points.top.shift(45, points.bottom.dy(points.top) / 5) + 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: 'front', + }) + points.__titleNr.attr('data-text-class', 'center') + points.__titleName.attr('data-text-class', 'center') + points.__titlePattern.attr('data-text-class', 'center') - // cut on fold + // scalebox + points.scalebox = points.title.shift(90, points.bottom.dy(points.top) / 5) + macro('scalebox', { at: points.scalebox }) - if (options.neckline === true){ - delete paths.cutonfold // delete inherited path from base - macro('cutonfold', { - from: points.triangle, - to: points.neckomid, - grainline: true, - }) - } - - // logo & title - points.logo = points.top.shift(45,points.bottom.dy(points.top)/5) - 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: "front" - }) - points.__titleNr.attr('data-text-class', 'center') - points.__titleName.attr('data-text-class', 'center') - points.__titlePattern.attr('data-text-class', 'center') + if (sa) { + if (options.neckline === true) { + delete paths.sa + paths.sa = paths.seam + .offset(sa) + // .join(paths.hem.offset(sa * 2.5)) + .close() + .attr('class', 'fabric sa') - // scalebox - points.scalebox = points.title.shift(90, points.bottom.dy(points.top)/5) - macro("scalebox", { at: points.scalebox }) + paths.samod = new Path().move(points.bottom).line(points.top).setRender(false) - if (sa) { - if (options.neckline === true){ + let sasplit = paths.samod.intersects(paths.sa) + points.sasplit2 = sasplit[0] - - delete paths.sa - paths.sa = paths.seam.offset(sa) -// .join(paths.hem.offset(sa * 2.5)) - .close() - .attr('class', 'fabric sa') + //for (let p of sasplit){ + // let sahalves = paths.sa.split(p) + //paths.sa = sahalves[0] + //} - paths.samod = new Path() - .move(points.bottom) - .line(points.top) - .setRender(false) - - let sasplit = paths.samod.intersects(paths.sa) - points.sasplit2 = sasplit[0] - - //for (let p of sasplit){ - // let sahalves = paths.sa.split(p) - //paths.sa = sahalves[0] - //} - - let sahalves = paths.sa.split(points.sasplit) - paths.sa = sahalves[0] - let sahalves2 = paths.sa.split(points.sasplit2) - paths.sa = sahalves2[1] - .close() - .attr('class', 'fabric sa') - - - - } - } - - // Paperless? - if (paperless) { - macro("ld", { - from: points.neckotop, - to: points.neckomid, - d: 0 - }); - macro("hd", { - from: points.top, - to: points.neckotop, - d: 5 - }); - macro("vd", { - from: points.top, - to: points.neckomid, - d: 5 - }); - } + let sahalves = paths.sa.split(points.sasplit) + paths.sa = sahalves[0] + let sahalves2 = paths.sa.split(points.sasplit2) + paths.sa = sahalves2[1].close().attr('class', 'fabric sa') + } } - - return part; + + // Paperless? + if (paperless) { + macro('ld', { + from: points.neckotop, + to: points.neckomid, + d: 0, + }) + macro('hd', { + from: points.top, + to: points.neckotop, + d: 5, + }) + macro('vd', { + from: points.top, + to: points.neckomid, + d: 5, + }) + } + } + + return part } diff --git a/packages/walburga/src/index.js b/packages/walburga/src/index.js index 0b2ef9b7a45..ab5035ffc8f 100644 --- a/packages/walburga/src/index.js +++ b/packages/walburga/src/index.js @@ -12,5 +12,4 @@ Pattern.prototype.draftBase = draftBase Pattern.prototype.draftFront = draftFront Pattern.prototype.draftBack = draftBack - export default Pattern