Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
553 changes: 553 additions & 0 deletions packages/maker.js/test/data/problem1-curve.json
Original file line number Diff line number Diff line change
@@ -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
]
}
57 changes: 57 additions & 0 deletions packages/maker.js/test/distort.js
Original file line number Diff line number Diff line change
@@ -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);
});
});
});
});