diff --git a/README.md b/README.md index 988d78b452d..8f942de98db 100644 --- a/README.md +++ b/README.md @@ -67,8 +67,6 @@ cd freesewing yarn kickstart ``` -If you don't want to set up a dev environment, you can [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freesewing/freesewing), though we recommend that you fork this repo and then put `gitpod.io/# Prior to version 2, FreeSewing was not a JavaScript project. +> As such, that history is out of scope for this change log. + diff --git a/designs/noble/README.md b/designs/noble/README.md new file mode 100644 index 00000000000..dd69653c960 --- /dev/null +++ b/designs/noble/README.md @@ -0,0 +1,260 @@ +![FreeSewing](https://static.freesewing.org/banner.png) +

@freesewing/noble on NPM + License: MIT + Code quality on DeepScan + Open issues tagged pkg:noble + All Contributors +

Follow @freesewing_org on Twitter + Chat with us on Discord + Become a FreeSewing Patron + Follow @freesewing_org on Twitter +

+ +# @freesewing/noble + +FIXME: A FreeSewing pattern that needs a description + + + +## What am I looking at? πŸ€” + +This repository is our *monorepo* +holding [all our NPM packages](https://freesewing.dev/reference/packages/). + +This folder holds: @freesewing/noble + +If you're not entirely sure what to do or how to start, type this command: + +``` +npm run tips +``` + +## About FreeSewing πŸ’€ + +Where the world of makers and developers collide, that's where you'll find FreeSewing. + +If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate +our sewing patterns adapted to your measurements. + +If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/). +Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox +for parametric design of sewing patterns. But we also provide a range +of [plugins](https://freesewing.dev/reference/plugins/) that further extend the +functionality of the platform. + +If you have NodeJS installed, you can try it right now by running: + +```bash +npx create-freesewing-pattern +``` + +Or, consult our getting started guides +for [Linux](https://freesewing.dev/tutorials/getting-started-linux/), +[MacOS](https://freesewing.dev/tutorials/getting-started-mac/), +or [Windows](https://freesewing.dev/tutorials/getting-started-windows/). + +We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that +walks you through your first parametric design, +and [a friendly community](https://freesewing.org/community/where/) with +people who can help you when you get stuck. + +## Support FreeSewing: Become a patron πŸ₯° + +FreeSewing is an open source project run by a community, +and financially supported by our patrons. + +If you feel what we do is worthwhile, and you can spend a few coind without +hardship, then you should [join us and become a patron](https://freesewing.org/community/join). + +## Links πŸ‘©β€πŸ’» + + - πŸ’» Makers website: [freesewing.org](https://freesewing.org) + - πŸ’» Developers website: [freesewing.dev](https://freesewing.dev) + - πŸ’¬ Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/) + - βœ… Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/) + - 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org) + - πŸ“· Instagram: [@freesewing_org](https://instagram.com/freesewing_org) + +## License: MIT πŸ€“ + +Β© [Joost De Cock](https://github.com/joostdecock). +See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details. + +## Where to get help 🀯 + +Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions, +share your feedback, or just hang out. + +If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new). + + + +## Contributors ✨ + +Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Adam Tomkins

πŸ“–

Alexandre Ignjatovic

πŸ’»

AlfaLyr

πŸ’» πŸ”Œ 🎨

Andrew James

πŸ“–

Anneke

πŸ“– 🌍

Annie Kao

πŸ“–

Anternative

πŸ“–

Anthony

πŸ’¬

Cameron Dubas

πŸ“–

Carsten Biebricher

πŸ“–

Cathy Zoller

πŸ“–

Chantal Lapointe

🌍

Damien PIQUET

πŸ’»

Darigov Research

πŸ“– πŸ€”

Elena FdR

πŸ“– πŸ“

Emmanuel Nyachoke

πŸ’» πŸ“–

Enoch Riese

πŸ’»

EvEkSwed

🌍

Fantastik-Maman

🌍

Forrest O.

πŸ“–

FrΓ©dΓ©ric

🌍

Glenn Matthews

πŸ“–

Igor Couto

πŸ›

Ikko Ashimine

πŸ“–

Irapeke

🌍

Jacek Sawoszczuk

πŸ“–

Jason Williams

πŸ“–

Jeremy Jackson

πŸ’»

Joebidido

🌍

Joost De Cock

🚧

Josh Essman

πŸ“–

Kake

πŸ“–

Kapunahele Wong

πŸ“–

Karen

πŸ“– πŸ“‹

Katie McGinley

πŸ“–

Kieran Klaassen

πŸ’»

Kittycatou

🌍

Kris

πŸ“–

Kristin Ruben

πŸ’»

Loudepeuter

🌍

Lucian

πŸ“‹

Marcus

🌍

Martin Tribo

πŸ“–

Nadege Michel

⚠️ πŸ“–

Natalia

πŸ’» 🎨 πŸ“

Nathan Yergler

πŸ“–

Nick Dower

πŸ“– πŸ’» πŸ›

Patrick Forringer

πŸ”Œ

Paul

πŸ“– πŸ“ 🌍

Phillip Thelen

πŸ’»

Pixieish

πŸ“–

Prof. dr. Sorcha NΓ­ Dhubhghaill

πŸ“–

Quentin FELIX

πŸ’» 🎨

Rik Hekker

πŸ›

Sam Livingston-Gray

πŸ“–

Sanne

πŸ’» πŸ“–

Sara Latorre

🌍

SeaZeeZee

πŸ“– πŸ’»

Slylele

πŸ“– 🌍

Soazillon

🌍

SoneaTheBest

🌍

Stefan Sydow

🌍 πŸ“– πŸ’»

TrΓ­ona

πŸ“–

Unmutual

πŸ“–

Wouter van Wageningen

πŸ’» 🎨 πŸ”§

amysews

πŸ“–

beautifulsummermoon

🌍

berce

πŸ“–

biou

πŸ’»

bobgeorgethe3rd

πŸ’» πŸ“– 🎨

brmlyklr

πŸ“–

chri5b

πŸ’» ⚠️

dingcycle

🌍

drowned-in-books

πŸ’¬

econo202

πŸ“–

ericamattos

🌍

fightingrabbit

πŸ’»

gaylyndie

πŸ“–

grimlokason

πŸ’»

hellgy

🎨

jackseye

πŸ“–

marckiesel

🌍

mesil

πŸ›

starfetch

πŸ’» πŸ“– 🌍 🎨

ttimearl

πŸ–‹

tuesgloomsday

πŸ“–

valadaptive

πŸ’»

viocky

🌍

woolishboy

πŸ’»

yc

🌍
+ + + + + + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! + diff --git a/designs/noble/build.js b/designs/noble/build.js new file mode 100644 index 00000000000..c77d47c1637 --- /dev/null +++ b/designs/noble/build.js @@ -0,0 +1,55 @@ +/* This script will build the package with esbuild */ +const esbuild = require('esbuild') +const pkg = require('./package.json') + +// Create banner based on package info +const banner = `/** + * ${pkg.name} | v${pkg.version} + * ${pkg.description} + * (c) ${new Date().getFullYear()} ${pkg.author} + * @license ${pkg.license} + */` + +// Shared esbuild options +const options = { + banner: { js: banner }, + bundle: true, + entryPoints: ['src/index.js'], + external: ["@freesewing"], + metafile: process.env.VERBOSE ? true : false, + minify: process.env.NO_MINIFY ? false : true, + sourcemap: true, +} + +// Different formats +const formats = { + cjs: "dist/index.js", + esm: "dist/index.mjs", +} + +// Let esbuild generate different formats +let result +(async () => { + for (const [format, outfile] of Object.entries(formats)) { + result = await esbuild + .build({ ...options, outfile, format }) + .catch(() => process.exit(1)) + } + + if (process.env.VERBOSE) { + const info = await esbuild.analyzeMetafile(result.metafile) + console.log(info) + } + + // Also build a version that has all dependencies bundled + // This makes it easy to run tests + await esbuild + .build({ + ...options, + outfile: 'tests/dist/index.mjs', + format: 'esm', + external: [], + }) + .catch(() => process.exit(1)) + +})() diff --git a/designs/noble/config.js b/designs/noble/config.js new file mode 100644 index 00000000000..01444f8de8b --- /dev/null +++ b/designs/noble/config.js @@ -0,0 +1,23 @@ +import { version } from './package.json' + +export default { + name: 'noble', + version, + design: '', + code: '', + department: '', + type: '', + difficulty: 3, + tags: [ ], + optionGroups: { + fit: ['size'], + }, + measurements: [], + dependencies: {}, + inject: {}, + hide: [], + parts: ['box'], + options: { + size: { pct: 50, min: 10, max: 100 }, + }, +} diff --git a/designs/noble/config/index.js b/designs/noble/config/index.js new file mode 100644 index 00000000000..772736d11e5 --- /dev/null +++ b/designs/noble/config/index.js @@ -0,0 +1,110 @@ +import { version } from '../package.json' +import Bella from '@freesewing/bella' + +const config = { + ...Bella.config, + name: 'noble', + version, + design: 'Noble Incognito', + code: 'Wouter van Wageningen', + department: 'tops', + type: 'block', + difficulty: 3, + optionGroups: { + type: ['dartPosition'], + fit: ['chestEase', 'waistEase', 'bustSpanEase'], + darts: ['backDartHeight', 'waistDartLength', 'shoulderDartPosition','upperDartLength','dartOutsideCP','armholeDartPosition'], + armhole: [ + 'armholeDepth', + 'backArmholeSlant', + 'backArmholeCurvature', + 'frontArmholePitchDepth', + 'backArmholePitchDepth', + ], + advanced: ['backNeckCutout', 'backHemSlope', 'frontShoulderWidth', 'highBustWidth', 'shoulderToShoulderEase'], + }, + measurements: [ + 'chest', + 'waist', + 'waistBack', + 'neck', + 'hpsToWaistFront', + 'hpsToWaistBack', + 'shoulderToShoulder', + 'shoulderSlope', + // ], + // optionalMeasurements: [ + 'highBust', + 'underbust', + 'bustSpan', + 'hpsToBust', + ], + hide: ['bellaFrontSideDart', 'bellaBack', 'backPoints', 'frontPoints',], + inject: { + ...Bella.config.inject, + backPoints: 'bellaBack', + backInside: 'backPoints', + backOutside: 'backPoints', + frontPoints: 'bellaFrontSideDart', + frontInside: 'frontPoints', + frontOutside: 'frontPoints', + }, + dependencies: { + // The inheritance makes this a bit messy + bellaFrontSideDart: 'bellaBack', + backPoints: 'bellaBack', + backInside: 'backPoints', + backOutside: 'backPoints', + frontPoints: 'bellaBack', + frontInside: 'frontPoints', + frontOutside: 'frontPoints', + }, + parts: [ + 'backPoints', + 'backInside', + 'backOutside', + 'frontPoints', + 'frontInside', + 'frontOutside', + ], + options: { + // Constants + acrossBackFactor: 0.925, + shoulderSlopeBack: 1.23, + neckWidthBack: 0.197, + neckWidthFront: 0.17, + shoulderToShoulderCorrection: 0.995, + backDartLocation: 0.145, + backCenterWaistReduction: 0.35, + collarFactor: 0.19, + + // Percentages + backNeckCutout: { pct: 6, min: 3, max: 9 }, + waistEase: { pct: 5, min: 1, max: 20 }, + chestEase: { pct: 11, min: 5, max: 20 }, + bustSpanEase: { pct: 0, min: -5, max: 20 }, + shoulderToShoulderEase: { pct: -0.5, min: -1, max: 5 }, + backDartHeight: { pct: 46, min: 38, max: 54 }, + armholeDepth: { pct: 44, min: 38, max: 46 }, + backHemSlope: { deg: 2.5, min: 0, max: 5 }, + backArmholeSlant: { deg: 5, min: 1, max: 9 }, + backArmholeCurvature: { pct: 63, min: 50, max: 85 }, + frontArmholeCurvature: { pct: 63, min: 50, max: 85 }, + fullChestEaseReduction: { pct: 4, min: 0, max: 8 }, + frontShoulderWidth: { pct: 95, max: 98, min: 92 }, + frontArmholePitchDepth: { pct: 29, max: 31, min: 27 }, + backArmholePitchDepth: { pct: 35, max: 40, min: 30 }, + highBustWidth: { pct: 86, max: 92, min: 80 }, + bustDartLength: { pct: 90, min: 75, max: 100 }, + waistDartLength: { pct: 90, min: 75, max: 95 }, + bustDartCurve: { pct: 100, min: 0, max: 100 }, + shoulderDartPosition: { pct: 50, min: 10, max: 90 }, + upperDartLength: { pct: 90, min: 80, max: 95 }, + armholeDartPosition: { pct: 50, min: 10, max: 90 }, + dartOutsideCP: { pct: 0, min: -200, max: 200 }, + dartPosition: { dflt: 'shoulder', list: ['shoulder','armhole'] }, + } + +} + +export default config diff --git a/designs/noble/package.json b/designs/noble/package.json new file mode 100644 index 00000000000..a26c6d83d31 --- /dev/null +++ b/designs/noble/package.json @@ -0,0 +1,65 @@ +{ + "name": "@freesewing/noble", + "version": "2.21.0-rc.0", + "description": "FIXME: A FreeSewing pattern that needs a description", + "author": "Joost De Cock (https://github.com/joostdecock)", + "homepage": "https://freesewing.org/", + "repository": "github:freesewing/freesewing", + "license": "MIT", + "bugs": { + "url": "https://github.com/freesewing/freesewing/issues" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "keywords": [ + "freesewing", + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "pattern", + "sewing", + "sewing pattern" + ], + "main": "dist/index.js", + "module": "dist/index.mjs", + "scripts": { + "build": "node build.js", + "clean": "rimraf dist", + "mbuild": "NO_MINIFY=1 node build.js", + "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -", + "test": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register", + "vbuild": "VERBOSE=1 node build.js", + "lab": "cd ../../sites/lab && yarn start", + "tips": "node ../../scripts/help.mjs", + "prettier": "npx prettier --write 'src/*.js' 'config/*.js'", + "testci": "BABEL_ENV=production npx mocha tests/*.test.mjs --require @babel/register --reporter ../../tests/reporters/terse.js", + "cibuild_step5": "node build.js" + }, + "peerDependencies": { + "@freesewing/core": "^2.21.0-rc.0", + "@freesewing/plugin-bundle": "^2.21.0-rc.0", + "@freesewing/config-helpers": "^2.21.0-rc.0" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "^9.1.1", + "chai": "^4.2.0" + }, + "files": [ + "dist/*", + "README.md", + "package.json" + ], + "publishConfig": { + "access": "public", + "tag": "next" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6" + } +} diff --git a/designs/noble/src/backInside.js b/designs/noble/src/backInside.js new file mode 100644 index 00000000000..6a40428d159 --- /dev/null +++ b/designs/noble/src/backInside.js @@ -0,0 +1,67 @@ +export default function (part) { + let { + utils, + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + measurements, + complete, + paperless, + macro, + } = part.shorthand() + + // delete points.armholePitch + // delete points.armholePitchCp1 + // delete points.armholePitchCp2 + // delete points.armholeCpTarget + // delete points.armholeCp2 + // delete points.armhole + // delete points.bustSide + // delete points.waistSide + // delete points.waistSideCp2 + // delete points.dartBottomRight + // delete points.dartBottomCenter + // delete points.dartRightCp + // delete points.bustDartRight + + // Hide Bella paths + for (let key of Object.keys(paths)) paths[key].render = false + for (let i in snippets) delete snippets[i] + //removing macros not required from Bella + + console.log( 'Noble back inside' ) + + paths.insideSeam = new Path() + .move(points.cbNeck) + .curve_(points.cbNeckCp2, points.waistCenter) + .line(points.dartBottomLeft) + .curve(points.dartLeftCp, points.shoulderDartCpDown, points.dartTip) + .curve(points.shoulderDartCpUp, points.shoulderDart, points.shoulderDart) + .line(points.hps) + ._curve(points.cbNeckCp1, points.cbNeck) + .close() + .attr('class', 'fabric') + + if (complete) { + // points.titleAnchor = points.waistDartRight.shiftFractionTowards( points.armhole, .5 ) + macro('title', { + at: points.titleAnchor, + nr: 3, + title: 'Inside Back', + }) + macro("grainline", { + from: points.grainlineFrom, + to: points.grainlineTo, + }) + + if (sa) paths.sa = paths.insideSeam.offset(sa).attr('class', 'fabric sa') + } + + return part +} diff --git a/designs/noble/src/backOutside.js b/designs/noble/src/backOutside.js new file mode 100644 index 00000000000..c2152763ca4 --- /dev/null +++ b/designs/noble/src/backOutside.js @@ -0,0 +1,56 @@ +export default function (part) { + let { + utils, + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + measurements, + complete, + paperless, + macro, + } = part.shorthand() + + + + console.log( 'Noble back outside' ) + + console.log( {part:part}) + paths.outsideSeam = new Path() + .move(points.dartBottomRight) + .line(points.waistSide) + .curve_(points.waistSideCp2, points.armhole) + .curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch) + .curve_(points.armholePitchCp2, points.shoulder) + .line(points.shoulderDart) + .curve(points.shoulderDart, points.shoulderDartCpUp, points.dartTip) + .curve(points.shoulderDartCpDown, points.dartRightCp, points.dartBottomRight) + .close() + .attr('class', 'fabric') + + if (complete) { + points.titleAnchor = points.dartBottomRight.shiftFractionTowards( points.waistSide, .35 ).shiftFractionTowards( points.shoulder, .35 ) + macro('title', { + at: points.titleAnchor, + nr: 4, + title: 'Outside Back', + }) + points.grainlineFrom.x = points.shoulderDart.x + points.grainlineTo.x = points.shoulderDart.x + + macro("grainline", { + from: points.grainlineFrom, + to: points.grainlineTo, + }) + + if (sa) paths.sa = paths.outsideSeam.offset(sa).attr('class', 'fabric sa') + + } + + return part +} diff --git a/designs/noble/src/backPoints.js b/designs/noble/src/backPoints.js new file mode 100644 index 00000000000..78bd67fbe49 --- /dev/null +++ b/designs/noble/src/backPoints.js @@ -0,0 +1,94 @@ +export default function (part) { + let { + points, + Path, + paths, + options, + snippets, + } = part.shorthand() + + // Hide Bella paths + for (let key of Object.keys(paths)) paths[key].render = false + for (let i in snippets) delete snippets[i] + //removing macros not required from Bella +// delete points.titleAnchor + delete points.__titleNr + delete points.__titleName + delete points.__titlePattern + delete points.scaleboxAnchor + delete points.__scaleboxImperialBottomLeft + delete points.__scaleboxMetricBottomLeft + delete points.__scaleboxImperialTopLeft + delete points.__scaleboxMetricTopLeft + delete points.__scaleboxImperialTopRight + delete points.__scaleboxMetricTopRight + delete points.__scaleboxImperialBottomRight + delete points.__scaleboxMetricBottomRight + delete points.__scaleboxLead + delete points.__scaleboxTitle + delete points.__scaleboxText + delete points.__scaleboxLink + delete points.__scaleboxImperial + delete points.__scaleboxMetric +// delete points.cbNeck +// delete points.cbWaist + delete points.bustDartLeft + delete points.bustDartLeftCp +// delete points.bustCenter +// delete points.waistCenter +// delete points.cbArmhole +// delete points.cbNeckCp2 +// delete points.cbNeckCp1 +// delete points.dartLeftCp +// delete points.dartBottomLeft +// delete points.dartBottomCenter + + console.log('backPoints'); + + points.shoulderDart = points.hps.shiftFractionTowards( points.shoulder, options.shoulderDartPosition ) + + let aUp = points.dartTip.angle( points.shoulderDart ) + let aDown = points.dartBottomRight.angle( points.dartTip ) + let aDiff = Math.abs( aUp - aDown ) + + // let dartCpAdjustment = Math.abs( options.shoulderDartPosition -.5) +.05 + let dartCpAdjustment = aDiff /50 + console.log({dartCpAdjustment: dartCpAdjustment }); + + // points.shoulderDartCpUp = points.shoulderDart.shiftFractionTowards( points.dartTip, options.upperDartLength) + points.shoulderDartCpUp = points.shoulderDart.shiftFractionTowards( points.dartTip, 1 - dartCpAdjustment) + // points.shoulderDartCpDown = points.shoulderDart.shiftFractionTowards( points.dartTip, 1 +(1-options.upperDartLength) ) + points.shoulderDartCpDown = points.shoulderDart.shiftFractionTowards( points.dartTip, 1 +dartCpAdjustment ) + + let iLength = (new Path() + .move(points.dartBottomLeft) + .curve(points.dartLeftCp, points.shoulderDartCpDown, points.dartTip) + .curve(points.shoulderDartCpUp, points.shoulderDart, points.shoulderDart)).length(); + + let iteration = 0 + let diff = 0 + let angle = 0 + do { + console.log({angle: points.waistSide.angle( points.dartBottomRight ) }) + + angle = diff*( oLength > iLength ? -.1 : .1 ) + + points.dartBottomRight = points.dartBottomRight.rotate( angle, points.waistSide ) + + let oLength = (new Path() + .move(points.shoulderDart) + .curve(points.shoulderDart, points.shoulderDartCpUp, points.dartTip) + .curve(points.shoulderDartCpDown, points.dartRightCp, points.dartBottomRight)).length(); + + console.log({diff:diff, oLength: oLength, iLength: iLength}) + + diff = oLength -iLength + iteration ++ + + } while( diff < -.5 || diff > .5 && iteration < 100 ) + if( iteration >= 100 ) { + raise.error('Something is not quite right here!') + } + + return part +} \ No newline at end of file diff --git a/designs/noble/src/frontInside.js b/designs/noble/src/frontInside.js new file mode 100644 index 00000000000..23760abe833 --- /dev/null +++ b/designs/noble/src/frontInside.js @@ -0,0 +1,154 @@ +export default function (part) { + let { + utils, + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + measurements, + complete, + paperless, + macro, + } = part.shorthand() + + console.log( 'Noble front inside' ) + + delete points.waistDartHem + delete points.waistDartRight + delete points.waistDartRightCp + delete points.waistDartCpBottom + delete points.bustDartBottom + delete points.bustDartCpBottom + delete points.bustDartTip + delete points.bustDartTop + delete points.shoulderDartTipCpDownOutside + delete points.ex + delete points.bustB + delete points.shoulder + delete points.shoulderDartShoulder + delete points.shoulderDartOutside + delete points.pitchMax + delete points.armholeCpTarget + delete points.armholePitch + delete points.armholePitchCp1 + delete points.armholePitchCp2 + delete points.armhole + delete points.armholeCp2 + delete points.bustDartCpTop + delete points.bustSide + delete points.bustDartMiddle + delete points.bustDartEdge + // delete points.bustDartCpBottom + // delete points.bustDartTop + // delete points.bustDartMiddle + + console.log({part: part}) + + if( options.dartPosition == 'shoulder' ) { + paths.insideSeam = new Path() + .move(points.cfHem) + .line(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip) + .line(points.shoulderDartInside) + .line(points.hps) + .curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck) + + paths.seam = paths.insideSeam.join( new Path().move(points.cfNeck).line(points.cfHem)) + .close() + .attr('class', 'fabric') + } else { + paths.insideSeam = new Path() + .move(points.cfHem) + .line(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.armholeDartTipCpDownInside, points.armholeDartTipInside) + .curve(points.waistCircleInsideCp1, points.armholeCircleInsideCp1, points.armholeDartInside) + .join(paths.armholeInside) + .line(points.hps) + .curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck) + + paths.seam = paths.insideSeam.join( new Path().move(points.cfNeck).line(points.cfHem)) + .close() + .attr('class', 'fabric') + + } + + if (complete) { + points.titleAnchor = new Point(points.hpsCp2.x *.75, points.cfNeckCp1.y *1.5) + macro('title', { + at: points.titleAnchor, + nr: 1, + title: 'Inside Front', + }) + points.scaleboxAnchor = points.titleAnchor.shift(-90, 90).shift(0,10) + macro('scalebox', { at: points.scaleboxAnchor, rotate: 270 }) + + macro('cutonfold', { + from: points.cfNeck, + to: points.cfHem, + grainline: true, + }) + if (sa) { + paths.sa = paths.insideSeam.offset(sa).line(points.cfNeck).attr('class', 'fabric sa') + paths.sa = paths.sa.move(points.cfHem).line(paths.sa.start()) + } + if (paperless) { + macro('vd', { + from: points.cfHem, + to: points.waistDartTip, + x: 0 - 15, + }) + macro('vd', { + from: points.cfHem, + to: points.shoulderDartTip, + x: 0 - 30, + }) + macro('vd', { + from: points.cfHem, + to: points.cfNeck, + x: 0 - 45, + }) + macro('vd', { + from: points.cfHem, + to: points.hps, + x: 0 - 60, + }) + macro('vd', { + from: points.hps, + to: points.shoulderDartInside, + x: points.cfNeck.x -15, + }) + macro('hd', { + from: points.cfBust, + to: points.shoulderDartTip, + y: points.shoulderDartTip.y - 15, + }) + macro('hd', { + from: points.cfNeck, + to: points.shoulderDartInside, + y: points.hps.y - 30, + }) + macro('hd', { + from: points.cfHem, + to: points.waistDartLeft, + y: points.cfHem.y + sa + 15, + }) + macro('hd', { + from: points.cfHem, + to: points.waistDartTip, + y: points.cfHem.y + sa + 30, + }) + macro('hd', { + from: points.cfNeck, + to: points.hps, + y: points.hps.y - sa - 15, + }) + } + } + + return part +} diff --git a/designs/noble/src/frontOutside.js b/designs/noble/src/frontOutside.js new file mode 100644 index 00000000000..59837f59f97 --- /dev/null +++ b/designs/noble/src/frontOutside.js @@ -0,0 +1,171 @@ +export default function (part) { + let { + utils, + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + measurements, + complete, + paperless, + macro, + } = part.shorthand() + + console.log('Noble front outside') + + delete points.bustDartTop + delete points.bustSide + delete points.bustDartMiddle + delete points.bustDartBottom + delete points.bustDartCpBottom + delete points.bustB + delete points.bustDartEdge + + console.log({ part: part }) + + if( options.dartPosition == 'shoulder' ) { + paths.seam = new Path() + .move(points.waistDartRight) + .line(points.sideHem) + .line(points.armhole) + .curve(points.armholeCp2, points.armholePitchCp1, points.armholePitch) + .curve_(points.armholePitchCp2, points.shoulder) + .line(points.shoulderDartOutside) + // .curve(points.shoulderDartTipCpDownOutside, points.waistDartRightCp, points.waistDartRight) + .curve(points.shoulderDartTipCpDownOutside, points.waistUpDartRightCpUp, points.waistUpDartRight) + .curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight) + .close() + .attr('class', 'fabric') + } else { + paths.seam = new Path() + .move(points.waistDartRight) + .line(points.sideHem) + .line(points.armhole) + .curve(points.armholeCp2, points.armholeOutsidePitchCp1, points.armholeOutsidePitch) + .curve(points.armholeOutsidePitchCp2, points.armholeDartOutsideCp1, points.armholeDartOutside) + .curve(points.armholeCircleOutsideCp1, points.waistCircleOutsideCp1, points.waistUpDartRight) + .curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight) + .close() + .attr('class', 'fabric') + } + + if (complete) { + points.titleAnchor = points.waistDartRight + .shiftFractionTowards(points.armhole, 0.5) + .shiftFractionTowards(points.shoulderDartOutside, 0.2) + macro('title', { + at: points.titleAnchor, + nr: 2, + title: 'Outside Front', + }) + // points.scaleboxAnchor = points.titleAnchor.shift(-90, 70) + // macro('scalebox', { at: points.scaleboxAnchor }) + + // points.grainTemp = points.waistDartRight.shiftFractionTowards( points.sideHemInitial, .2 ) + // points.grainBottom = points.waistDartRight.rotate(270,points.grainTemp) + // points.grainTop = points.grainTemp.shiftOutwards(points.grainBottom, 200) + points.grainTop = points.armhole.shift(225, 20) + points.grainBottom = points.sideHemInitial.shift(135, 20) + + macro('grainline', { + from: points.grainBottom, + to: points.grainTop, + }) + + if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') + } + +/* + paths.tempSeam = new Path() + .move(points.shoulderDartOutside) + // .curve(points.shoulderDartTipCpDownOutside, points.waistDartRightCp, points.waistDartRight) + // .curve(points.shoulderDartTipCpDownOutside, points.bustA, points.waistDartRight) + .curve(points.shoulderDartTipCpDownOutside, points.bustAcp, points.waistDartRight) + .attr('class', 'lining dashed') + + paths.shoulderTempDart = new Path() + .move(points.shoulderDartOutside) + ._curve(points.shoulderDartCpBottom, points.shoulderDartTip) + .curve_(points.shoulderDartCpTop, points.shoulderDartInside) + .attr('class', 'lining') + + paths.insideSeam = new Path() + .move(points.cfHem) + .line(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip) + .line(points.shoulderDartInside) + .line(points.hps) + .curve(points.hpsCp2, points.cfNeckCp1, points.cfNeck) + + paths.seam2 = paths.insideSeam + .join(new Path().move(points.cfNeck).line(points.cfHem)) + .close() + .attr('class', 'fabric') + + if (complete) { + if (sa) { + paths.sa = paths.insideSeam.offset(sa).line(points.cfNeck).attr('class', 'fabric sa') + paths.sa = paths.sa.move(points.cfHem).line(paths.sa.start()) + } + if (paperless) { + macro('vd', { + from: points.cfHem, + to: points.waistDartTip, + x: 0 - 15, + }) + macro('vd', { + from: points.cfHem, + to: points.shoulderDartTip, + x: 0 - 30, + }) + macro('vd', { + from: points.cfHem, + to: points.cfNeck, + x: 0 - 45, + }) + macro('vd', { + from: points.cfHem, + to: points.hps, + x: 0 - 60, + }) + macro('vd', { + from: points.hps, + to: points.shoulderDartInside, + x: points.cfNeck.x - 15, + }) + macro('hd', { + from: points.cfBust, + to: points.shoulderDartTip, + y: points.shoulderDartTip.y - 15, + }) + macro('hd', { + from: points.cfNeck, + to: points.shoulderDartInside, + y: points.hps.y - 30, + }) + macro('hd', { + from: points.cfHem, + to: points.waistDartLeft, + y: points.cfHem.y + sa + 15, + }) + macro('hd', { + from: points.cfHem, + to: points.waistDartTip, + y: points.cfHem.y + sa + 30, + }) + macro('hd', { + from: points.cfNeck, + to: points.hps, + y: points.hps.y - sa - 15, + }) + } + + } + */ + return part +} diff --git a/designs/noble/src/frontPoints.js b/designs/noble/src/frontPoints.js new file mode 100644 index 00000000000..d99e722fe1c --- /dev/null +++ b/designs/noble/src/frontPoints.js @@ -0,0 +1,412 @@ +export default function (part) { + let { + utils, + store, + sa, + Point, + points, + Path, + paths, + Snippet, + snippets, + options, + measurements, + complete, + paperless, + macro, + } = part.shorthand() + + const bCircle = 0.552284749831 + + console.log('frontPoints') + + // Hide Bella paths + for (let key of Object.keys(paths)) paths[key].render = false + for (let i in snippets) delete snippets[i] + //removing macros not required from Bella + delete points.titleAnchor + delete points.__titleNr + delete points.__titleName + delete points.__titlePattern + delete points.scaleboxAnchor + delete points.__scaleboxImperialBottomLeft + delete points.__scaleboxMetricBottomLeft + delete points.__scaleboxImperialTopLeft + delete points.__scaleboxMetricTopLeft + delete points.__scaleboxImperialTopRight + delete points.__scaleboxMetricTopRight + delete points.__scaleboxImperialBottomRight + delete points.__scaleboxMetricBottomRight + delete points.__scaleboxLead + delete points.__scaleboxTitle + delete points.__scaleboxText + delete points.__scaleboxLink + delete points.__scaleboxImperial + delete points.__scaleboxMetric + + console.log('Noble front') + console.log({ highBust: measurements.highBust }) + console.log({ chest: measurements.chest }) + console.log({ underbust: measurements.underbust }) + console.log({ waist: measurements.waist }) + console.log({ waistBack: measurements.waistBack }) + console.log({ bustSpan: measurements.bustSpan }) + console.log({ neck: measurements.neck }) + console.log({ hpsToBust: measurements.hpsToBust }) + console.log({ hpsToWaistFront: measurements.hpsToWaistFront }) + console.log({ hpsToWaistBack: measurements.hpsToWaistBack }) + console.log({ shoulderToShoulder: measurements.shoulderToShoulder }) + console.log({ shoulderSlope: measurements.shoulderSlope }) + + // if( options.dartPosition == 'shoulder' ) { + // } + points.shoulderDartInside = points.hps.shiftFractionTowards( + points.shoulder, + options.shoulderDartPosition + ) + points.orgShoulder = points.shoulder.clone() + points.orgArmhole = points.armhole.clone() + points.orgArmholeCp2 = points.armholeCp2.clone() + points.orgArmholePitch = points.armholePitch.clone() + points.orgArmholePitchCp1 = points.armholePitchCp1.clone() + points.orgArmholePitchCp2 = points.armholePitchCp2.clone() + let armholePath = new Path() + .move(points.shoulder) + ._curve(points.armholePitchCp2, points.armholePitch) + .curve(points.armholePitchCp1, points.armholeCp2, points.armhole) + + points.armholeDartInside = armholePath.shiftFractionAlong(options.armholeDartPosition) + points.armholeDartOutside = points.armholeDartInside.clone() + + // paths.armholeTemp = armholePath.clone().setRender(true).attr('class', 'lining') + console.log({ armholeDartInside: points.armholeDartInside }) + let armholePaths = armholePath.split(points.armholeDartInside) + + let armholePathInside = armholePaths[0].clone().setRender(false) + let armholePathOutside = armholePaths[1].clone().setRender(false) + let armholeDartAngle = + armholePathInside.reverse().shiftAlong(1).angle(armholePathOutside.shiftAlong(1)) - 90 + + points.armholeDartArmhole = points.armholeDartInside.shiftFractionTowards( + points.armholeDartOutside, + 0.5 + ) + points.armholeDartTip = points.armholeDartArmhole.shiftFractionTowards( + points.bust, + options.upperDartLength + ) + + console.log({ armholeDartAngle: armholeDartAngle }) + console.log({ dist: points.armholeDartInside.dist(points.armholeDartTip) }) + console.log({ bCircle: bCircle * points.armholeDartInside.dist(points.armholeDartTip) }) + points.armholeCircleInsideCp1 = points.armholeDartInside.shift( + armholeDartAngle, + bCircle * points.armholeDartInside.dist(points.armholeDartTip) + ) + points.armholeCircleOutsideCp1 = points.armholeCircleInsideCp1.clone() + + console.log({ armholePathInside: armholePathInside }) + console.log({ armholePathOutside: armholePathOutside }) + points.shoulderCp1 = armholePathInside.ops[1].cp1.clone() + points.armholeInsidePitch = armholePathInside.ops[1].to.clone() + points.armholeInsidePitchCp2 = armholePathInside.ops[1].cp2.clone() + if (armholePathInside.ops.length == 2) { + points.armholeInsidePitchCp1 = points.armholeDartInside.clone() + points.armholeDartInsideCp2 = points.armholeDartInside.clone() + } else { + points.armholeInsidePitchCp1 = armholePathInside.ops[2].cp1.clone() + points.armholeDartInsideCp2 = armholePathInside.ops[2].cp2.clone() + } + points.armholeDartOutsideCp1 = armholePathOutside.ops[1].cp1.clone() + points.armholeOutsidePitch = armholePathOutside.ops[1].to.clone() + points.armholeOutsidePitchCp2 = armholePathOutside.ops[1].cp2.clone() + if (armholePathOutside.ops.length == 2) { + points.armholeOutsidePitchCp1 = points.armhole.clone() + points.armholeCp2 = points.armhole.clone() + } else { + points.armholeOutsidePitchCp1 = armholePathOutside.ops[2].cp1.clone() + points.armholeCp2 = armholePathOutside.ops[2].cp2.clone() + } + + console.log({ shoulder: points.shoulder }) + console.log({ shoulderCp1: points.shoulderCp1 }) + console.log({ armholeInsidePitchCp2: points.armholeInsidePitchCp2 }) + console.log({ armholeInsidePitch: points.armholeInsidePitch }) + console.log({ armholeInsidePitchCp1: points.armholeInsidePitchCp1 }) + console.log({ armholeDartInsideCp2: points.armholeDartInsideCp2 }) + console.log({ armholeDartInside: points.armholeDartInside }) + console.log({ armholeDartOutside: points.armholeDartOutside }) + console.log({ armholeDartOutsideCp1: points.armholeDartOutsideCp1 }) + console.log({ armholeOutsidePitchCp2: points.armholeOutsidePitchCp2 }) + console.log({ armholeOutsidePitch: points.armholeOutsidePitch }) + console.log({ armholeOutsidePitchCp1: points.armholeOutsidePitchCp1 }) + console.log({ armholeCp2: points.armholeCp2 }) + console.log({ armhole: points.armhole }) + + // paths.armholeInside = new Path() + // .move(points.shoulder) + // .curve(points.shoulderCp1, points.armholeInsidePitchCp2, points.armholeInsidePitch) + // .curve(points.armholeInsidePitchCp1, points.armholeDartInsideCp2, points.armholeDartInside) + // .setRender(true) + // .attr('class', 'lining') + paths.armholeInside = new Path() + .move(points.armholeDartInside) + .curve(points.armholeDartInsideCp2, points.armholeInsidePitchCp1, points.armholeInsidePitch) + .curve(points.armholeInsidePitchCp2, points.shoulderCp1, points.shoulder) + .setRender(false) + .attr('class', 'lining') + + let rotateAngle = + points.shoulderDartInside.angle(points.bustA) - points.bustDartTop.angle(points.bustA) + if (rotateAngle < 0) { + rotateAngle += 360 + } + if (rotateAngle > 360) { + rotateAngle -= 360 + } + + points.shoulderDartCpTop = points.bustDartCpTop.rotate(rotateAngle, points.bustA) + points.shoulderDartCpBottom = points.bustDartCpBottom.rotate(rotateAngle, points.bustA) + + rotateAngle = + points.armholeDartInside.angle(points.bustA) - points.bustDartTop.angle(points.bustA) + if (rotateAngle < 0) { + rotateAngle += 360 + } + if (rotateAngle > 360) { + rotateAngle -= 360 + } + + points.armholeDartCpTop = points.bustDartCpTop.rotate(rotateAngle, points.bustA) + points.armholeDartCpBottom = points.bustDartCpBottom.rotate(rotateAngle, points.bustA) + + let spreadAngle = + /*360 -*/ points.bustA.angle(points.bustDartBottom) - points.bustA.angle(points.bustDartTop) + console.log({ spreadAngle: spreadAngle }) + + points.shoulderDartOutside = points.shoulderDartInside.rotate(spreadAngle, points.bustA) + points.shoulderDartShoulder = points.shoulderDartInside.shiftFractionTowards( + points.shoulderDartOutside, + 0.5 + ) + + points.shoulderDartTip = points.shoulderDartShoulder.shiftFractionTowards( + points.bust, + options.upperDartLength + ) + let dartRatio = + new Path().move(points.waistDartHem).line(points.waistDartTip).length() / + new Path().move(points.shoulderDartShoulder).line(points.shoulderDartTip).length() + console.log({ dartRatio: dartRatio }) + + points.shoulder = points.shoulder.rotate(spreadAngle, points.bustA) + points.armhole = points.armhole.rotate(spreadAngle, points.bustA) + points.armholeCp2 = points.armholeCp2.rotate(spreadAngle, points.bustA) + points.armholePitch = points.armholePitch.rotate(spreadAngle, points.bustA) + points.armholePitchCp1 = points.armholePitchCp1.rotate(spreadAngle, points.bustA) + points.armholePitchCp2 = points.armholePitchCp2.rotate(spreadAngle, points.bustA) + points.armholeCircleOutsideCp1 = points.armholeCircleOutsideCp1.rotate(spreadAngle, points.bustA) + points.armholeDartOutside = points.armholeDartOutside.rotate(spreadAngle, points.bustA) + points.armholeDartOutsideCp1 = points.armholeDartOutsideCp1.rotate(spreadAngle, points.bustA) + points.armholeOutsidePitchCp2 = points.armholeOutsidePitchCp2.rotate(spreadAngle, points.bustA) + points.armholeOutsidePitch = points.armholeOutsidePitch.rotate(spreadAngle, points.bustA) + points.armholeOutsidePitchCp1 = points.armholeOutsidePitchCp1.rotate(spreadAngle, points.bustA) + //points.armholeCp2, points.armhole ) + console.log({ shoulder: points.shoulder }) + console.log({ shoulderDartOutside: points.shoulderDartOutside }) + console.log({ shoulderbust: points.bust }) + console.log({ upperDartLength: options.upperDartLength }) + console.log({ waistDartLength: options.waistDartLength }) + + paths.armholeOutside = new Path() + .move(points.armholeDartOutside) + .curve(points.armholeDartOutsideCp1, points.armholeOutsidePitchCp2, points.armholeOutsidePitch) + .curve(points.armholeOutsidePitchCp1, points.armholeCp2, points.armhole) + .setRender(false) + .attr('class', 'lining') + paths.armholeTempDart = new Path() + .move(points.armholeDartOutside) + ._curve(points.armholeDartCpBottom, points.armholeDartTip) + .curve_(points.armholeDartCpTop, points.armholeDartInside) + .setRender(false) + .attr('class', 'lining') + + points.shoulderDartTipCpDownOutside = points.shoulderDartOutside.shiftFractionTowards( + points.bust, + 1 + (1 - options.upperDartLength) + (1 - options.waistDartLength) * dartRatio + ) + // points.shoulderDartTipCpDownOutside = points.shoulderDartTipCpDownOutside.rotate( options.dartOutsideCP *10, points.shoulderDartOutside ) + + console.log({ shoulderDartInside: points.shoulderDartInside }) + // points.shoulderDartTipCpDownInside = points.shoulderDartInside.shiftFractionTowards( + // points.bust, + // 1 +(1-options.upperDartLength) +((1 -options.waistDartLength) *dartRatio) + // ) + points.shoulderDartTipCpDownInside = points.shoulderDartInside.shiftFractionTowards( + points.shoulderDartTip, + 1 + (1 - options.upperDartLength) + (1 - options.waistDartLength) * dartRatio + ) + points.armholeDartTipCpDownInside = points.armholeDartTip.shiftFractionTowards( + // points.waistDartHem, + points.waistDartLeft, + 1 - options.upperDartLength + (1 - options.waistDartLength) * dartRatio + ) + console.log({ shoulderDartTipCpDownInside: points.shoulderDartTipCpDownInside }) + console.log({ shoulderDartTipCpDownOutside: points.shoulderDartTipCpDownOutside }) + console.log({ shoulderDartTip: points.shoulderDartTip }) + console.log({ waistDartLeftCp: points.waistDartLeftCp }) + console.log({ waistDartLeft: points.waistDartLeft }) + + points.bustAcp = points.waistDartRight.shiftOutwards(points.bustA, 10) + + paths.shoulderInsideSeam = new Path() + .move(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip) + .line(points.shoulderDartInside) + .setRender(false) + + paths.armholeInsideSeam = new Path() + .move(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.armholeDartTipCpDownInside, points.armholeDartTip) + // .line(points.armholeDartInside) + .setRender(false) + .attr('class', 'lining') + console.log({ armholeInsideSeam: paths.armholeInsideSeam }) + + paths.sOutsideSeam = new Path() + .move(points.waistDartRight) + .curve(points.bustAcp, points.shoulderDartTipCpDownOutside, points.shoulderDartOutside) + .setRender(false) + + points.waistDartRightCp = points.bustAcp.clone() + + let shoulderInsideSeam = new Path() + .move(points.waistDartLeft) + .curve(points.waistDartLeftCp, points.shoulderDartTipCpDownInside, points.shoulderDartTip) + .line(points.shoulderDartInside) + .setRender(false) + console.log({ shoulderInsideSeam: shoulderInsideSeam }) + console.log({ waistDartLeft: points.waistDartLeft }) + console.log({ bustA: points.bustA }) + console.log({ dist: points.waistDartLeft.dist(points.bustA) * 0.5 }) + points.waistUpDartLeft = paths.armholeInsideSeam.shiftAlong( + points.waistDartLeft.dist(points.armholeDartTip) * 0.5 + ) + console.log({ waistUpDartLeft: points.waistUpDartLeft }) + points.waistCircleInsideCp1 = points.waistUpDartLeft.shiftTowards( + points.waistDartLeft, + -0.5 * bCircle * points.armholeDartOutside.dist(points.armholeDartTip) + ) + console.log({ waistCircleInsideCp1: points.waistCircleInsideCp1 }) + points.shoulderDartTipCpDownOutside = points.shoulderDartTipCpDownOutside + .rotate(-2.5, points.shoulderDartOutside) + .shiftFractionTowards(points.shoulderDartOutside, 0.2) + + let lInside = shoulderInsideSeam.length() + console.log({ lInside: lInside }) + let iteration = 1 + let diff = 0 + // points.bustAcp = points.bustA.clone() + do { + points.waistDartRight = points.waistDartRight.rotate(diff * 0.1, points.sideHemInitial) + + let outsideSeam = new Path() + .move(points.waistDartRight) + .curve(points.bustAcp, points.shoulderDartTipCpDownOutside, points.shoulderDartOutside) + + points.waistUpDartRight = outsideSeam.shiftAlong( + points.waistDartRight.dist(points.waistDartRightCp) * 0.5 + ) + points.waistUpDartRightCpDown = points.waistUpDartRight.shiftFractionTowards( + points.waistDartRight, + 0.25 + ) + // points.waistUpDartRightCpUp = points.waistUpDartRight.shiftFractionTowards( points.waistDartRight, -.25 ) + points.waistUpDartRightCpUp = points.waistUpDartRight.shiftFractionTowards( + points.waistDartRight, + -0.6 + ) + points.waistCpUp = points.waistDartRight + .shiftTowards( + points.sideHemInitial, + points.waistDartRight.dist(points.waistUpDartRight) * 0.25 + ) + .rotate(90, points.waistDartRight) + points.waistCircleInsideCp1 = points.armholeDartTip.shiftTowards( + points.armholeDartTipCpDownInside, + -0.5 * bCircle * points.armholeDartInside.dist(points.armholeDartTip) + ) + + outsideSeam = new Path() + .move(points.waistDartRight) + .curve(points.waistCpUp, points.waistUpDartRightCpDown, points.waistUpDartRight) + .curve( + points.waistUpDartRightCpUp, + points.shoulderDartTipCpDownOutside, + points.shoulderDartOutside + ) + + console.log({ + step: iteration, + diff: diff, + insideSeam: lInside, + outsideSeam: outsideSeam.length(), + sOutside: paths.sOutsideSeam.length(), + }) + + diff = shoulderInsideSeam.length() - outsideSeam.length() + iteration++ + } while ((diff > 1 || diff < -1) && iteration < 200) + if (iteration >= 200) { + raise.error('Something is not quite right here!') + } + points.waistDartRightCp = points.bustAcp.clone() + + console.log({ shoulderDartTipCpDownInside: points.shoulderDartTipCpDownInside }) + points.armholeDartTipInside = points.armholeDartTip.clone() + + points.waistCircleOutsideCp1 = points.waistUpDartRight.shiftTowards( + points.waistDartRight, + -1 * bCircle * points.armholeDartOutside.dist(points.armholeDartTip) + ) + + diff = 0 + iteration = 0 + do { + let dist = points.armholeDartTipInside.dist(points.armholeDartTipCpDownInside) + console.log({xDartTip: points.armholeDartTipInside.x,yDartTip: points.armholeDartTipInside.y,xCircle:points.waistCircleOutsideCp1.x,yCircle:points.waistCircleOutsideCp1.y, first: points.armholeDartTipInside.x > points.waistCircleOutsideCp1}) + if( points.armholeDartTipInside.x > points.waistCircleOutsideCp1 ) { + points.armholeDartTipInside.x = points.armholeDartTipInside.x -.5 + points.armholeDartTipInside.y = points.armholeDartTipInside.y +.5 + } else { + points.waistCircleOutsideCp1 = points.waistCircleOutsideCp1.shiftTowards( points.waistUpDartRight, diff > 0 ? 1 :-1 ) + } + points.armholeDartTipCpDownInside = points.waistCircleInsideCp1.shiftOutwards(points.armholeDartTipInside, dist) + + // points.waistCircleOutsideCp1 = points.waistUpDartRight.shiftTowards( + // points.waistDartRight, + // -1 * bCircle * points.armholeDartOutside.dist(points.armholeDartTip) + // ) + paths.armholeTempCircleOutside = new Path() + .move(points.armholeDartOutside) + .curve(points.armholeCircleOutsideCp1, points.waistCircleOutsideCp1, points.waistUpDartRight) + .curve(points.waistUpDartRightCpDown, points.waistCpUp, points.waistDartRight) + .setRender(false) + .attr('class', 'lining') + paths.armholeTempCircleInside = new Path() + .move(points.armholeDartInside) + .curve(points.armholeCircleInsideCp1, points.waistCircleInsideCp1, points.armholeDartTipInside) + .curve(points.armholeDartTipCpDownInside, points.waistDartLeftCp, points.waistDartLeft) + .setRender(false) + .attr('class', 'lining') + + diff = paths.armholeTempCircleOutside.length() - paths.armholeTempCircleInside.length() + iteration ++ + console.log({ i: iteration, diff: diff, armholeTempCircleOutside: paths.armholeTempCircleOutside.length(),armholeTempCircleInside: paths.armholeTempCircleInside.length() }) + } while( (diff < -1 || diff > 1) && iteration < 200 ) + if (iteration >= 200) { + // raise.error('Something is not quite right here!') + } + + return part +} diff --git a/designs/noble/src/index.js b/designs/noble/src/index.js new file mode 100644 index 00000000000..fce32484fdb --- /dev/null +++ b/designs/noble/src/index.js @@ -0,0 +1,42 @@ +import freesewing from '@freesewing/core' +import Bella from '@freesewing/bella' +import plugins from '@freesewing/plugin-bundle' +import config from '../config' +// Parts +import draftBackPoints from './backPoints' +import draftBackInside from './backInside' +import draftBackOutside from './backOutside' +import draftFrontPoints from './frontPoints' +import draftFrontInside from './frontInside' +import draftFrontOutside from './frontOutside' + +// Create design +const Pattern = new freesewing.Design(config, plugins) + +// console.log( 'bella back') +// measurements.highBust = (measurements.highBust == undefined || measurements.highBust == 0 ) ? measurements.chest *1.035 : measurements.highBust +// measurements.bustSpan = (measurements.bustSpan == undefined || measurements.bustSpan == 0 ) ? measurements.waistBack *.47 : measurements.bustSpan +// measurements.underbust = (measurements.underbust == undefined || measurements.underbust == 0 ) ? (measurements.chest +measurements.waist) *.5 : measurements.underbust +// measurements.hpsToBust = (measurements.hpsToBust == undefined || measurements.hpsToBust == 0 ) ? measurements.hpsToWaistFront *.59 : measurements.hpsToBust + +// // Get to work +// console.log({ hpsToBust : measurements.hpsToBust} ) + +// Attach draft methods to prototype +Pattern.prototype.draftBellaBack = function (part) { + return new Bella(this.settings).draftBack(part) +} +Pattern.prototype.draftBellaFrontSideDart = function (part) { + return new Bella(this.settings).draftFrontSideDart(part) +} + +// Pattern.prototype.draftFrontSideDart = (part) => draftFrontSideDart(part) + +Pattern.prototype.draftBackPoints = (part) => draftBackPoints(part) +Pattern.prototype.draftBackInside = (part) => draftBackInside(part) +Pattern.prototype.draftBackOutside = (part) => draftBackOutside(part) +Pattern.prototype.draftFrontPoints = (part) => draftFrontPoints(part) +Pattern.prototype.draftFrontInside = (part) => draftFrontInside(part) +Pattern.prototype.draftFrontOutside = (part) => draftFrontOutside(part) + +export default Pattern