1 | import { test } from 'tape';
|
2 | import * as d3 from '../';
|
3 |
|
4 | test('triangle draw', function(t){
|
5 | var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
|
6 | var data = [
|
7 | [{x: 0, y: 0, z: 0},{x: 0, y: 1, z: 0},{x: 1, y: 0, z: 0}]
|
8 | ];
|
9 | t.equal(triangles.draw(triangles(data)[0]), 'M0,0L0,1L1,0Z');
|
10 | t.end();
|
11 | });
|
12 |
|
13 | test('access triangle coords via array', function(t){
|
14 | var triangles = d3._3d();
|
15 | var data = [[1,2,3],[4,5,6],[7,8,9]];
|
16 | t.deepEqual(triangles(data)[0].rotated, { x: 1, y: 2, z: 3 });
|
17 | t.deepEqual(triangles(data)[1].rotated, { x: 4, y: 5, z: 6 });
|
18 | t.deepEqual(triangles(data)[2].rotated, { x: 7, y: 8, z: 9 });
|
19 | t.end();
|
20 | });
|
21 |
|
22 | test('access triangle coords via function', function(t){
|
23 | var data = [{x: 1, y: 2, z: 3}, {x: 4, y: 5, z: 6}, {x: 7, y: 8, z: 9}];
|
24 | var triangles = d3._3d().x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
|
25 | t.deepEqual(triangles(data)[0].rotated, { x: 1, y: 2, z: 3 });
|
26 | t.deepEqual(triangles(data)[1].rotated, { x: 4, y: 5, z: 6 });
|
27 | t.deepEqual(triangles(data)[2].rotated, { x: 7, y: 8, z: 9 });
|
28 | t.end();
|
29 | });
|
30 |
|
31 | test('triangles are a closed path', function(t){
|
32 | var triangles = d3._3d().shape('TRIANGLE');
|
33 | var data = [[[0,0,0],[0,1,0],[1,0,0]]];
|
34 | var path = triangles.draw(triangles(data)[0]);
|
35 | var lastChar = path[path.length - 1];
|
36 | t.equal(lastChar, 'Z');
|
37 | t.end();
|
38 | });
|
39 |
|
40 | test('triangles are getting drawn counter-clockwise', function(t){
|
41 | var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
|
42 | var data1 = [
|
43 | [{x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}, {x: 0, y: 1, z: 0}],
|
44 | [{x: 0, y: 1, z: 0}, {x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}],
|
45 | [{x: -1, y: 0, z: 0}, {x: 0, y: 1, z: 0}, {x: 1, y: 0, z: 0}],
|
46 | [{x: 1, y: 0, z: 0}, {x: 0, y: 1, z: 0}, {x: -1, y: 0, z: 0}],
|
47 | [{x: -1, y: 0, z: 0}, {x: 1, y: 0, z: 0}, {x: 0, y: 1, z: 0}],
|
48 | [{x: 0, y: 1, z: 0}, {x: -1, y: 0, z: 0}, {x: 1, y: 0, z: 0}],
|
49 | ];
|
50 |
|
51 | t.equal(triangles(data1)[0].ccw, true);
|
52 | t.equal(triangles(data1)[1].ccw, true);
|
53 | t.equal(triangles(data1)[2].ccw, true);
|
54 | t.equal(triangles(data1)[3].ccw, false);
|
55 | t.equal(triangles(data1)[4].ccw, false);
|
56 | t.equal(triangles(data1)[5].ccw, false);
|
57 | t.end();
|
58 | });
|
59 |
|
60 | test('triangles\' centroid calculation is correct', function(t){
|
61 | var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
|
62 | var data = [
|
63 | [{x: 5, y: 0, z: 0},{x: 6, y: 4, z: 0},{x: 4, y: 5, z: 0}],
|
64 | [{x: 2, y: 1, z: 0},{x: 2, y: 2, z: 0},{x: 1, y: 1, z: 0}],
|
65 | [{x: 1, y: 0, z: 0},{x: 1, y: 2, z: 0},{x: 2, y: 1, z: 0}],
|
66 | [{x: 1, y: 0, z: 1},{x: 1, y: 2, z: 1},{x: 2, y: 1, z: 1}],
|
67 | [{x: 1, y: 0, z: 2},{x: 1, y: 2, z: 2},{x: 2, y: 1, z: 2}],
|
68 | ];
|
69 | t.deepEqual(triangles(data)[0].centroid, { x: 5, y: 3, z: 0 });
|
70 | t.deepEqual(triangles(data)[1].centroid, { x: 1.6666666666666667, y: 1.3333333333333333, z: 0 });
|
71 | t.deepEqual(triangles(data)[2].centroid, { x: 1.3333333333333333, y: 1, z: 0 });
|
72 | t.end();
|
73 | });
|
74 |
|
75 |
|
76 |
|
77 |
|