d3-3d
Version:
D3.js plugin for 3d visualization
78 lines (66 loc) • 3.31 kB
JavaScript
import { test } from 'tape';
import * as d3 from '../';
test('triangle draw', function(t){
var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
var data = [
[{x: 0, y: 0, z: 0},{x: 0, y: 1, z: 0},{x: 1, y: 0, z: 0}]
];
t.equal(triangles.draw(triangles(data)[0]), 'M0,0L0,1L1,0Z');
t.end();
});
test('access triangle coords via array', function(t){
var triangles = d3._3d();
var data = [[1,2,3],[4,5,6],[7,8,9]];
t.deepEqual(triangles(data)[0].rotated, { x: 1, y: 2, z: 3 });
t.deepEqual(triangles(data)[1].rotated, { x: 4, y: 5, z: 6 });
t.deepEqual(triangles(data)[2].rotated, { x: 7, y: 8, z: 9 });
t.end();
});
test('access triangle coords via function', function(t){
var data = [{x: 1, y: 2, z: 3}, {x: 4, y: 5, z: 6}, {x: 7, y: 8, z: 9}];
var triangles = d3._3d().x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
t.deepEqual(triangles(data)[0].rotated, { x: 1, y: 2, z: 3 });
t.deepEqual(triangles(data)[1].rotated, { x: 4, y: 5, z: 6 });
t.deepEqual(triangles(data)[2].rotated, { x: 7, y: 8, z: 9 });
t.end();
});
test('triangles are a closed path', function(t){
var triangles = d3._3d().shape('TRIANGLE');
var data = [[[0,0,0],[0,1,0],[1,0,0]]];
var path = triangles.draw(triangles(data)[0]);
var lastChar = path[path.length - 1];
t.equal(lastChar, 'Z');
t.end();
});
test('triangles are getting drawn counter-clockwise', function(t){
var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
var data1 = [
[{x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}, {x: 0, y: 1, z: 0}],
[{x: 0, y: 1, z: 0}, {x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}],
[{x: -1, y: 0, z: 0}, {x: 0, y: 1, z: 0}, {x: 1, y: 0, z: 0}],
[{x: 1, y: 0, z: 0}, {x: 0, y: 1, z: 0}, {x: -1, y: 0, z: 0}],
[{x: -1, y: 0, z: 0}, {x: 1, y: 0, z: 0}, {x: 0, y: 1, z: 0}],
[{x: 0, y: 1, z: 0}, {x: -1, y: 0, z: 0}, {x: 1, y: 0, z: 0}],
];
t.equal(triangles(data1)[0].ccw, true);
t.equal(triangles(data1)[1].ccw, true);
t.equal(triangles(data1)[2].ccw, true);
t.equal(triangles(data1)[3].ccw, false);
t.equal(triangles(data1)[4].ccw, false);
t.equal(triangles(data1)[5].ccw, false);
t.end();
});
test('triangles\' centroid calculation is correct', function(t){
var triangles = d3._3d().shape('TRIANGLE').x(function(d){ return d.x; }).y(function(d){ return d.y; }).z(function(d){ return d.z; });
var data = [
[{x: 5, y: 0, z: 0},{x: 6, y: 4, z: 0},{x: 4, y: 5, z: 0}],
[{x: 2, y: 1, z: 0},{x: 2, y: 2, z: 0},{x: 1, y: 1, z: 0}],
[{x: 1, y: 0, z: 0},{x: 1, y: 2, z: 0},{x: 2, y: 1, z: 0}],
[{x: 1, y: 0, z: 1},{x: 1, y: 2, z: 1},{x: 2, y: 1, z: 1}],
[{x: 1, y: 0, z: 2},{x: 1, y: 2, z: 2},{x: 2, y: 1, z: 2}],
];
t.deepEqual(triangles(data)[0].centroid, { x: 5, y: 3, z: 0 });
t.deepEqual(triangles(data)[1].centroid, { x: 1.6666666666666667, y: 1.3333333333333333, z: 0 });
t.deepEqual(triangles(data)[2].centroid, { x: 1.3333333333333333, y: 1, z: 0 });
t.end();
});