From a2ba2ec92336ade42bbbe2b6cd85f24fe95d2fac Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Tue, 19 Feb 2019 18:38:22 +0100 Subject: [PATCH] sparkles: Added missing utils examples --- packages/examples/config/index.js | 5 +- packages/examples/index.html | 4 +- packages/examples/src/index.js | 6 +++ .../examples/src/utils_curveintersectsx.js | 45 +++++++++++++++++ .../examples/src/utils_curveintersectsy.js | 45 +++++++++++++++++ packages/examples/src/utils_splitcurve.js | 50 +++++++++++++++++++ 6 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 packages/examples/src/utils_curveintersectsx.js create mode 100644 packages/examples/src/utils_curveintersectsy.js create mode 100644 packages/examples/src/utils_splitcurve.js diff --git a/packages/examples/config/index.js b/packages/examples/config/index.js index ad497ac0797..27d02ddc827 100644 --- a/packages/examples/config/index.js +++ b/packages/examples/config/index.js @@ -67,6 +67,9 @@ export default { "utils_pointoncurve", "utils_circlesintersect", "utils_beamintersectscircle", - "utils_lineintersectscircle" + "utils_lineintersectscircle", + "utils_curveintersectsy", + "utils_curveintersectsx", + "utils_splitcurve" ] }; diff --git a/packages/examples/index.html b/packages/examples/index.html index 9afcceb83ea..39a93f165c6 100644 --- a/packages/examples/index.html +++ b/packages/examples/index.html @@ -19,11 +19,11 @@ var pattern = new freesewing.patterns.examples(); pattern.use(freesewing.plugins.debug) .use(freesewing.plugins.theme) - //.use(freesewing.plugins.designer) + .use(freesewing.plugins.designer) .use(freesewing.plugins.validate) ; - //pattern.settings.only = ['snippet_clone']; + pattern.settings.only = ['utils_splitcurve']; pattern.draft(); document.getElementById("svg").innerHTML = pattern.render(); diff --git a/packages/examples/src/index.js b/packages/examples/src/index.js index ef8c8c278e2..3848d3e8fa3 100644 --- a/packages/examples/src/index.js +++ b/packages/examples/src/index.js @@ -60,6 +60,9 @@ import draftUtils_pointoncurve from "./utils_pointoncurve"; import draftUtils_circlesintersect from "./utils_circlesintersect"; import draftUtils_beamintersectscircle from "./utils_beamintersectscircle"; import draftUtils_lineintersectscircle from "./utils_lineintersectscircle"; +import draftUtils_curveintersectsx from "./utils_curveintersectsx"; +import draftUtils_curveintersectsy from "./utils_curveintersectsy"; +import draftUtils_splitcurve from "./utils_splitcurve"; import draftSettings_sa from "./settings_sa"; @@ -139,5 +142,8 @@ Examples.prototype.draftUtils_pointoncurve = draftUtils_pointoncurve; Examples.prototype.draftUtils_circlesintersect = draftUtils_circlesintersect; Examples.prototype.draftUtils_beamintersectscircle = draftUtils_beamintersectscircle; Examples.prototype.draftUtils_lineintersectscircle = draftUtils_lineintersectscircle; +Examples.prototype.draftUtils_curveintersectsx = draftUtils_curveintersectsx; +Examples.prototype.draftUtils_curveintersectsy = draftUtils_curveintersectsy; +Examples.prototype.draftUtils_splitcurve = draftUtils_splitcurve; export default Examples; diff --git a/packages/examples/src/utils_curveintersectsx.js b/packages/examples/src/utils_curveintersectsx.js new file mode 100644 index 00000000000..b071c246e46 --- /dev/null +++ b/packages/examples/src/utils_curveintersectsx.js @@ -0,0 +1,45 @@ +export default part => { + let { + Point, + points, + Path, + paths, + utils, + snippets, + Snippet + } = part.shorthand(); + + points.start = new Point(10, 15); + points.cp1 = new Point(80, 10); + points.cp2 = new Point(-50, 80); + points.end = new Point(110, 70); + + paths.curve = new Path() + .move(points.start) + .curve(points.cp1, points.cp2, points.end); + + for (let x of [30, 40]) { + points["from" + x] = new Point(x, 10); + points["to" + x] = new Point(x, 80); + paths["line" + x] = new Path() + .move(points["from" + x]) + .line(points["to" + x]) + .attr("class", "lining dashed"); + } + + snippets.i40 = new Snippet( + "notch", + utils.curveIntersectsX(points.start, points.cp1, points.cp2, points.end, 40) + ); + + for (let p of utils.curveIntersectsX( + points.start, + points.cp1, + points.cp2, + points.end, + 30 + )) + snippets[p.y] = new Snippet("notch", p); + + return part; +}; diff --git a/packages/examples/src/utils_curveintersectsy.js b/packages/examples/src/utils_curveintersectsy.js new file mode 100644 index 00000000000..505d8fdf8a9 --- /dev/null +++ b/packages/examples/src/utils_curveintersectsy.js @@ -0,0 +1,45 @@ +export default part => { + let { + Point, + points, + Path, + paths, + utils, + snippets, + Snippet + } = part.shorthand(); + + points.start = new Point(10, 45); + points.cp1 = new Point(50, 10); + points.cp2 = new Point(0, 80); + points.end = new Point(110, 70); + + paths.curve = new Path() + .move(points.start) + .curve(points.cp1, points.cp2, points.end); + + for (let y of [40, 50]) { + points["from" + y] = new Point(10, y); + points["to" + y] = new Point(110, y); + paths["line" + y] = new Path() + .move(points["from" + y]) + .line(points["to" + y]) + .attr("class", "lining dashed"); + } + + snippets.i50 = new Snippet( + "notch", + utils.curveIntersectsY(points.start, points.cp1, points.cp2, points.end, 50) + ); + + for (let p of utils.curveIntersectsY( + points.start, + points.cp1, + points.cp2, + points.end, + 40 + )) + snippets[p.x] = new Snippet("notch", p); + + return part; +}; diff --git a/packages/examples/src/utils_splitcurve.js b/packages/examples/src/utils_splitcurve.js new file mode 100644 index 00000000000..d97768d58a3 --- /dev/null +++ b/packages/examples/src/utils_splitcurve.js @@ -0,0 +1,50 @@ +export default part => { + let { + Point, + points, + Path, + paths, + utils, + snippets, + Snippet + } = part.shorthand(); + + points.from = new Point(40, 10); + points.to = new Point(40, 80); + paths.line = new Path() + .move(points.from) + .line(points.to) + .attr("class", "lining dashed"); + + points.start = new Point(10, 15); + points.cp1 = new Point(80, 10); + points.cp2 = new Point(-50, 80); + points.end = new Point(110, 70); + + points.i40 = utils.curveIntersectsX( + points.start, + points.cp1, + points.cp2, + points.end, + 40 + ); + + let parts = utils.splitCurve( + points.start, + points.cp1, + points.cp2, + points.end, + points.i40 + ); + + let colors = ["lining", "interfacing"]; + for (let p of parts) { + let color = colors.pop(); + paths[color] = new Path() + .move(p.start) + .curve(p.cp1, p.cp2, p.end) + .attr("class", "stroke-xl " + color); + } + + return part; +};