diff --git a/packages/examples/package.json b/packages/examples/package.json index b08246244b3..b858524ade7 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -45,7 +45,7 @@ ] }, "dependencies": { - "freesewing": "^0.8.3", + "freesewing": "^0.9.0", "@freesewing/plugin-bundle": "0.0.1" }, "devDependencies": { diff --git a/packages/examples/src/index.js b/packages/examples/src/index.js index 33791e62270..5b85eeee276 100644 --- a/packages/examples/src/index.js +++ b/packages/examples/src/index.js @@ -32,11 +32,17 @@ import pathReverse from "./path.reverse"; import pathShiftAlong from "./path.shiftalong"; import pathShiftFractionAlong from "./path.shiftfractionalong"; import pathEdge from "./path.edge"; +import pathCrossesX from "./path.crossesx"; +import pathCrossesY from "./path.crossesy"; +import pathIntersects from "./path.intersects"; +import pathDivide from "./path.divide"; import utilsLinesCross from "./utils.linescross"; import utilsBeamsCross from "./utils.beamscross"; import utilsBeamCrossesX from "./utils.beamcrossesx"; import utilsBeamCrossesY from "./utils.beamcrossesy"; +import utilsCurveCrossesLine from "./utils.curvecrossesline"; +import utilsCurveCrossesCurve from "./utils.curvecrossescurve"; import settingsSa from "./settings.sa"; import macroGrainline from "./macro.grainline"; @@ -74,11 +80,17 @@ pattern.draft = function() { this.parts.pathShiftAlong = this.draftPathShiftAlong(new pattern.Part()); this.parts.pathShiftFractionAlong = this.draftPathShiftFractionAlong(new pattern.Part()); this.parts.pathEdge = this.draftPathEdge(new pattern.Part()); + this.parts.pathCrossesX = this.draftPathCrossesX(new pattern.Part()); + this.parts.pathCrossesY = this.draftPathCrossesY(new pattern.Part()); + this.parts.pathIntersects = this.draftPathIntersects(new pattern.Part()); + this.parts.pathDivide = this.draftPathDivide(new pattern.Part()); this.parts.utilsLinesCross = this.draftUtilsLinesCross(new pattern.Part()); this.parts.utilsBeamsCross = this.draftUtilsBeamsCross(new pattern.Part()); this.parts.utilsBeamCrossesX = this.draftUtilsBeamCrossesX(new pattern.Part()); this.parts.utilsBeamCrossesY = this.draftUtilsBeamCrossesY(new pattern.Part()); + this.parts.utilsCurveCrossesLine = this.draftUtilsCurveCrossesLine(new pattern.Part()); + this.parts.utilsCurveCrossesCurve = this.draftUtilsCurveCrossesCurve(new pattern.Part()); this.parts.settingsSa = this.draftSettingsSa(new pattern.Part()); this.parts.macroGrainline = this.draftMacroGrainline(new pattern.Part()); @@ -113,11 +125,17 @@ pattern.draftPathReverse = part => pathReverse.draft(part); pattern.draftPathShiftAlong = part => pathShiftAlong.draft(part); pattern.draftPathShiftFractionAlong = part => pathShiftFractionAlong.draft(part); pattern.draftPathEdge = part => pathEdge.draft(part); +pattern.draftPathCrossesX = part => pathCrossesX.draft(part); +pattern.draftPathCrossesY = part => pathCrossesY.draft(part); +pattern.draftPathIntersects = part => pathIntersects.draft(part); +pattern.draftPathDivide = part => pathDivide.draft(part); pattern.draftUtilsLinesCross = part => utilsLinesCross.draft(part); pattern.draftUtilsBeamsCross = part => utilsBeamsCross.draft(part); pattern.draftUtilsBeamCrossesX = part => utilsBeamCrossesX.draft(part); pattern.draftUtilsBeamCrossesY = part => utilsBeamCrossesY.draft(part); +pattern.draftUtilsCurveCrossesLine = part => utilsCurveCrossesLine.draft(part); +pattern.draftUtilsCurveCrossesCurve = part => utilsCurveCrossesCurve.draft(part); pattern.draftSettingsSa = part => settingsSa.draft(part); pattern.draftMacroGrainline = part => macroGrainline.draft(part); diff --git a/packages/examples/src/path.crossesx.js b/packages/examples/src/path.crossesx.js new file mode 100644 index 00000000000..68d4b501418 --- /dev/null +++ b/packages/examples/src/path.crossesx.js @@ -0,0 +1,34 @@ +import freesewing from "freesewing"; + +var pathCrossesX = { + draft: function(part) { + // prettier-ignore + let {Point, points, Path, paths, Snippet, snippets, macro} = part.shorthand(); + + points.A = new Point(95, 50); + points.B = new Point(10, 30); + points.BCp2 = new Point(40, 20); + points.C = new Point(90, 30); + points.CCp1 = new Point(50, -30); + points.D = new Point(50, 130); + points.DCp1 = new Point(150, 30); + + points.top = new Point(60,-10); + points.bot = new Point(60,140); + paths.line = new Path() + .move(points.top) + .line(points.bot) + .attr('class', 'lining dashed'); + paths.example = new Path() + .move(points.A) + .line(points.B) + .curve(points.BCp2, points.CCp1, points.C) + .curve(points.DCp1, points.DCp1, points.D); + + for (let p of paths.example.crossesX(60)) snippets[part.getUid()] = new Snippet('x', p); + + return part; + } +}; + +export default pathCrossesX; diff --git a/packages/examples/src/path.crossesy.js b/packages/examples/src/path.crossesy.js new file mode 100644 index 00000000000..1353eb8aff9 --- /dev/null +++ b/packages/examples/src/path.crossesy.js @@ -0,0 +1,33 @@ +import freesewing from "freesewing"; + +var pathCrossesY = { + draft: function(part) { + // prettier-ignore + let {Point, points, Path, paths, Snippet, snippets, macro} = part.shorthand(); + + points.A = new Point(55, 40); + points.B = new Point(10, 70); + points.BCp2 = new Point(40, 20); + points.C = new Point(90, 60); + points.CCp1 = new Point(50, -30); + points.D = new Point(50, 80); + points.DCp1 = new Point(140, 50); + + points.top = new Point(10, 58); + points.bot = new Point(130, 58); + paths.line = new Path() + .move(points.top) + .line(points.bot) + .attr('class', 'lining dashed'); + paths.example = new Path() + .move(points.A) + .line(points.B) + .curve(points.BCp2, points.CCp1, points.C) + .curve(points.DCp1, points.DCp1, points.D); + for (let p of paths.example.crossesY(58)) snippets[part.getUid()] = new Snippet('x', p); + + return part; + } +}; + +export default pathCrossesY; diff --git a/packages/examples/src/path.divide.js b/packages/examples/src/path.divide.js new file mode 100644 index 00000000000..e81205d99f6 --- /dev/null +++ b/packages/examples/src/path.divide.js @@ -0,0 +1,33 @@ +import freesewing from "freesewing"; + +var pathDivide = { + draft: function(part) { + // prettier-ignore + let {Point, points, Path, paths, Snippet, snippets, macro} = part.shorthand(); + + points.A = new Point(55, 40); + points.B = new Point(10, 70); + points.BCp2 = new Point(40, 20); + points.C = new Point(90, 60); + points.CCp1 = new Point(50, -30); + points.D = new Point(50, 80); + points.DCp1 = new Point(140, 50); + + paths.example = new Path() + .move(points.A) + .line(points.B) + .curve(points.BCp2, points.CCp1, points.C) + .curve(points.DCp1, points.DCp1, points.D) + .close(); + + let i = 1; + for(let p of paths.example.divide()) { + paths[i] = p.attr('style', `stroke-width: 4; stroke-opacity: 0.5; stroke: hsl(${i*70}, 100%, 50%)`); + i++; + } + + return part; + } +}; + +export default pathDivide; diff --git a/packages/examples/src/path.intersects.js b/packages/examples/src/path.intersects.js new file mode 100644 index 00000000000..4aef943fea3 --- /dev/null +++ b/packages/examples/src/path.intersects.js @@ -0,0 +1,41 @@ +import freesewing from "freesewing"; + +var pathIntersects = { + draft: function(part) { + // prettier-ignore + let {Point, points, Path, paths, Snippet, snippets, macro} = part.shorthand(); + + points.A = new Point(45, 60); + points.B = new Point(10, 30); + points.BCp2 = new Point(40, 20); + points.C = new Point(90, 30); + points.CCp1 = new Point(50, -30); + points.D = new Point(50, 130); + points.DCp1 = new Point(150, 30); + + points._A = new Point(55, 40); + points._B = new Point(0, 55); + points._BCp2 = new Point(40, -20); + points._C = new Point(90, 40); + points._CCp1 = new Point(50, -30); + points._D = new Point(40, 120); + points._DCp1 = new Point(180, 40); + + paths.example1 = new Path() + .move(points.A) + .line(points.B) + .curve(points.BCp2, points.CCp1, points.C) + .curve(points.DCp1, points.DCp1, points.D); + paths.example2 = new Path() + .move(points._A) + .line(points._B) + .curve(points._BCp2, points._CCp1, points._C) + .curve(points._DCp1, points._DCp1, points._D); + + for (let p of paths.example1.intersects(paths.example2)) snippets[part.getUid()] = new Snippet('x', p); + + return part; + } +}; + +export default pathIntersects; diff --git a/packages/examples/src/utils.curvecrossescurve.js b/packages/examples/src/utils.curvecrossescurve.js new file mode 100644 index 00000000000..599fffde492 --- /dev/null +++ b/packages/examples/src/utils.curvecrossescurve.js @@ -0,0 +1,38 @@ +import freesewing from "freesewing"; + +var utilsCurveCrossesCurve = { + draft: function(part) { + // prettier-ignore + let {debug, Point, points, Path, paths, Snippet, snippets, utils} = part.shorthand(); + + points.A = new Point(10, 10); + points.Acp = new Point(310, 40); + points.B = new Point(110, 70); + points.Bcp = new Point(-210, 40); + + points.C = new Point(20, -5); + points.Ccp = new Point(60, 300); + points.D = new Point (100, 85); + points.Dcp = new Point (70, -220); + paths.curveA = new Path() + .move(points.A) + .curve(points.Acp, points.Bcp, points.B); + paths.curveB = new Path() + .move(points.C) + .curve(points.Ccp, points.Dcp, points.D); + + for (let p of utils.curveCrossesCurve( + points.A, + points.Acp, + points.Bcp, + points.B, + points.C, + points.Ccp, + points.Dcp, + points.D)) snippets[part.getUid()] = new Snippet('x', p); + + return part; + } +}; + +export default utilsCurveCrossesCurve; diff --git a/packages/examples/src/utils.curvecrossesline.js b/packages/examples/src/utils.curvecrossesline.js new file mode 100644 index 00000000000..f53c2c60914 --- /dev/null +++ b/packages/examples/src/utils.curvecrossesline.js @@ -0,0 +1,33 @@ +import freesewing from "freesewing"; + +var utilsCurveCrossesLine = { + draft: function(part) { + // prettier-ignore + let {debug, Point, points, Path, paths, Snippet, snippets, utils} = part.shorthand(); + + points.A = new Point(10, 10); + points.Acp = new Point(310, 40); + points.B = new Point(110, 70); + points.Bcp = new Point(-210, 40); + points.E = new Point(20, -5); + points.D = new Point (100, 85); + paths.curve = new Path() + .move(points.A) + .curve(points.Acp, points.Bcp, points.B); + paths.line = new Path() + .move(points.E) + .line(points.D); + + for (let p of freesewing.utils.curveCrossesLine( + points.A, + points.Acp, + points.Bcp, + points.B, + points.E, + points.D)) snippets[part.getUid()] = new Snippet('x', p); + + return part; + } +}; + +export default utilsCurveCrossesLine;