From 5d5057e8bcdd237bb63a3f115f1aff64a6a31b83 Mon Sep 17 00:00:00 2001 From: Konrad Feiler Date: Fri, 6 Mar 2020 15:59:30 +0100 Subject: [PATCH 1/2] distort test and problem curve as data json --- .../maker.js/test/data/problem1-curve.json | 553 ++++++++++++++++++ packages/maker.js/test/distort.js | 57 ++ 2 files changed, 610 insertions(+) create mode 100644 packages/maker.js/test/data/problem1-curve.json create mode 100644 packages/maker.js/test/distort.js diff --git a/packages/maker.js/test/data/problem1-curve.json b/packages/maker.js/test/data/problem1-curve.json new file mode 100644 index 000000000..bfffcbded --- /dev/null +++ b/packages/maker.js/test/data/problem1-curve.json @@ -0,0 +1,553 @@ +{ + "models": { + "p_1": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 49.19340000912696, + -23.76643519775553 + ], + "controls": [ + [ + 47.54589150912696, + -25.69649809775553 + ], + [ + 45.552802009126964, + -27.30229669775553 + ] + ], + "end": [ + 43.31640000912696, + -28.50143519775553 + ] + }, + "accuracy": 0.07590843534674546, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 33.67472055622203, + -10.519634308631232 + ], + "radius": 20.403606194938142, + "startAngle": 298.199807985429, + "endAngle": 319.5158087684108, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_2": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 43.31640000912695, + -28.501435197755505 + ], + "controls": [ + [ + 38.86204880912695, + -30.889806897755506 + ], + [ + 33.76550680912695, + -31.805471597755503 + ] + ], + "end": [ + 28.75835610912695, + -31.116990397755504 + ] + }, + "accuracy": 0.1503768023646056, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 32.015786530778335, + -7.425626328142378 + ], + "radius": 23.914296654835947, + "startAngle": 270.0002010368226, + "endAngle": 298.1997126557931, + "bezierData": { + "startT": 0, + "endT": 0.7834851 + } + }, + "arc_1": { + "type": "arc", + "origin": [ + 32.01587116747963, + -7.430719116331623 + ], + "radius": 23.90920386009164, + "startAngle": 266.59658772087886, + "endAngle": 269.99999825709114, + "bezierData": { + "startT": 0.7834851, + "endT": 0.877811 + } + }, + "arc_2": { + "type": "arc", + "origin": [ + 32.016413171354486, + -7.422937174440527 + ], + "radius": 23.917004325217437, + "startAngle": 262.17062743761306, + "endAngle": 266.59639830838796, + "bezierData": { + "startT": 0.877811, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + }, + "Curve_2": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 28.75835610912695, + -31.116990397755504 + ], + "controls": [ + [ + 23.751205409126946, + -30.428509197755503 + ], + [ + 19.09093420912695, + -28.171286697755505 + ] + ], + "end": [ + 15.44650000912695, + -24.669335197755505 + ] + }, + "accuracy": 0.15037680217373628, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 32.015885214648, + -7.425797209967456 + ], + "radius": 23.914098990645908, + "startAngle": 226.14219619655233, + "endAngle": 262.1709471254455, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_3": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 15.446500009127085, + -24.66933519775545 + ], + "controls": [ + [ + 11.831097509127083, + -20.791131597755452 + ], + [ + 9.265507009127091, + -16.05423049775545 + ] + ], + "end": [ + 7.992700009127091, + -10.907235197755451 + ] + }, + "accuracy": 0.15820534172941836, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 38.2298715843712, + -3.429847071353315 + ], + "radius": 31.147999553859297, + "startAngle": 193.89008039829696, + "endAngle": 222.9914578935746, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_4": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 16.30270000912701, + -23.831135197755675 + ], + "controls": [ + [ + 12.82781940912701, + -20.019453797755673 + ], + [ + 10.018650609127022, + -15.650570997755672 + ] + ], + "end": [ + 7.992700009127006, + -10.907235197755675 + ] + }, + "accuracy": 0.1543732242958933, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 50.301433893291865, + 7.163465810814486 + ], + "radius": 46.00629519323109, + "startAngle": 203.12806187572835, + "endAngle": 222.3535484582318, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_5": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 42.75040000912695, + -27.44593519775557 + ], + "controls": [ + [ + 38.52464510912695, + -29.71173109775557 + ], + [ + 33.69030420912695, + -30.58229949775557 + ] + ], + "end": [ + 28.939596209126954, + -29.93298559775557 + ] + }, + "accuracy": 0.14266247815269273, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 32.01573131323138, + -7.425576418841636 + ], + "radius": 22.71668720670064, + "startAngle": 270.0002092356444, + "endAngle": 298.19965880971256, + "bezierData": { + "startT": 0, + "endT": 0.7844887 + } + }, + "arc_1": { + "type": "arc", + "origin": [ + 32.015814774636404, + -7.4303683107135825 + ], + "radius": 22.711895111528666, + "startAngle": 266.5876290269404, + "endAngle": 269.9999987299335, + "bezierData": { + "startT": 0.7844887, + "endT": 0.8791814 + } + }, + "arc_2": { + "type": "arc", + "origin": [ + 32.01633294214731, + -7.422931796790259 + ], + "radius": 22.71934931206007, + "startAngle": 262.2168829757096, + "endAngle": 266.58744086010756, + "bezierData": { + "startT": 0.8791814, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + }, + "Curve_2": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 28.939596209126954, + -29.93298559775557 + ], + "controls": [ + [ + 24.18888810912695, + -29.28367159775557 + ], + [ + 19.765462509126948, + -27.147776797755572 + ] + ], + "end": [ + 16.30270000912695, + -23.83113519775557 + ] + }, + "accuracy": 0.14266247891400313, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 32.01582642274163, + -7.425736889849418 + ], + "radius": 22.716501419160014, + "startAngle": 226.23474280731844, + "endAngle": 262.2171906281835, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_6": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 49.46580000912701, + -21.451735197755667 + ], + "controls": [ + [ + 47.73377880912701, + -23.95356119775567 + ], + [ + 45.43210080912701, + -26.008050697755667 + ] + ], + "end": [ + 42.750400009127006, + -27.445935197755666 + ] + }, + "accuracy": 0.09085994852574675, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 33.674739706033876, + -10.519538918025617 + ], + "radius": 19.206001692035418, + "startAngle": 298.19949060405645, + "endAngle": 325.3050334634886, + "bezierData": { + "startT": 0, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + }, + "p_7": { + "models": { + "Curve_1": { + "type": "BezierCurve", + "seed": { + "type": "bezier-seed", + "origin": [ + 49.193400009127075, + -23.76643519775547 + ], + "controls": [ + [ + 49.06490120912708, + -22.98460039775547 + ], + [ + 49.15930860912708, + -22.182379197755473 + ] + ], + "end": [ + 49.46580000912708, + -21.45173519775547 + ] + }, + "accuracy": 0.02361418469417214, + "paths": { + "arc_0": { + "type": "arc", + "origin": [ + 53.35361902736453, + -23.082653333089993 + ], + "radius": 4.216038415165353, + "startAngle": 182.1997915841359, + "endAngle": 189.33379485323778, + "bezierData": { + "startT": 0, + "endT": 0.221679 + } + }, + "arc_1": { + "type": "arc", + "origin": [ + 53.35334392246139, + -23.082673843422867 + ], + "radius": 4.215762774729025, + "startAngle": 180.0000394116183, + "endAngle": 182.19965655170333, + "bezierData": { + "startT": 0.221679, + "endT": 0.2902806 + } + }, + "arc_2": { + "type": "arc", + "origin": [ + 53.35374210119602, + -23.082660484148075 + ], + "radius": 4.216160808402082, + "startAngle": 157.24278314562974, + "endAngle": 180.00022095459184, + "bezierData": { + "startT": 0.2902806, + "endT": 1 + } + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] + } + }, + "origin": [ + 0, + 0 + ] +} \ No newline at end of file diff --git a/packages/maker.js/test/distort.js b/packages/maker.js/test/distort.js new file mode 100644 index 000000000..ea6f552b1 --- /dev/null +++ b/packages/maker.js/test/distort.js @@ -0,0 +1,57 @@ +var assert = require('assert'); +var makerjs = require('../dist/index.js') +var model = require(`./data/problem1-curve.json`); + +describe('Distort', function () { + var scales = [ + [0.1, 0.5], + [1, 1], + [1.5, 0.5], + [10, 10] + ]; + + var accuracy = 0.00001; + var chainOptions = { + pointMatchingDistance: 0.01, + shallow: false, + unifyBeziers: false + }; + + var originalMeasurements = makerjs.measure.modelExtents(model); + var chains = makerjs.model.findChains(model, chainOptions); + var originalChainCount = chains && chains.length; + var originalChainLinkCount = chains && chains.length > 0 ? chains[0].links.length : 0; + var isOriginalEndless = chains && chains.length > 0 && chains[0].endless; + + scales.forEach(function(scale) { + describe("by " + scale[0] + " x " + scale[1], function () { + + var scaled = makerjs.model.distort(model, scale[0], scale[1], 0.05); + + var scaledMeasurements = makerjs.measure.modelExtents(scaled); + it('should have the correctly scaled width', function () { + assert.ok(Math.abs(scaledMeasurements.width - scale[0] * originalMeasurements.width) < accuracy); + }); + + it('should have the correctly scaled height', function () { + assert.ok(Math.abs(scaledMeasurements.height - scale[1] * originalMeasurements.height) < accuracy); + }); + + var scaledChains = makerjs.model.findChains(scaled, chainOptions); + it('should have one linked chain, same as the original', function () { + var chainCount = scaledChains && scaledChains.length; + assert.equal(chainCount, originalChainCount); + }); + + it('should have the same chain link count', function () { + var chainLinkCount = scaledChains && scaledChains.length > 0 ? scaledChains[1].links.length : 0; + assert.equal(chainLinkCount, originalChainLinkCount); + }); + + it('should be endless if the original chain was endless', function () { + var isScaledEndless = chains && chains.length > 0 && chains[0].endless; + assert.equal(isOriginalEndless, isScaledEndless); + }); + }); + }); +}); From b4c8cc959c59603d970e17293a700788886dd14c Mon Sep 17 00:00:00 2001 From: Dan Marshall Date: Fri, 6 Mar 2020 09:28:30 -0800 Subject: [PATCH 2/2] formatting --- packages/maker.js/test/distort.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/maker.js/test/distort.js b/packages/maker.js/test/distort.js index ea6f552b1..6801cbf6e 100644 --- a/packages/maker.js/test/distort.js +++ b/packages/maker.js/test/distort.js @@ -23,7 +23,7 @@ describe('Distort', function () { var originalChainLinkCount = chains && chains.length > 0 ? chains[0].links.length : 0; var isOriginalEndless = chains && chains.length > 0 && chains[0].endless; - scales.forEach(function(scale) { + scales.forEach(function (scale) { describe("by " + scale[0] + " x " + scale[1], function () { var scaled = makerjs.model.distort(model, scale[0], scale[1], 0.05); @@ -51,7 +51,7 @@ describe('Distort', function () { it('should be endless if the original chain was endless', function () { var isScaledEndless = chains && chains.length > 0 && chains[0].endless; assert.equal(isOriginalEndless, isScaledEndless); - }); + }); }); }); });