d33d
d33d is meant for 3d visualizations. d33d allows the projection of 3d data onto the screen in the webbrowser. It is specially designed to work with d3.js.
Funding
Hello Everyone 👋,
I hope you're doing well! As you may know, I've been working on the d33d JavaScript library in my free time. The goal of this project is to make 3D data visualization easier and more accessible for developers.
Developing and maintaining an opensource project like this takes time, energy, and resources. That's why I'm reaching out for your support. If you've found value in using d33d, or appreciate the work that goes into it, consider supporting the project with a donation.
Any amount, big or small, is genuinely appreciated and will go directly into the development and improvement of this library. With your support, we can:
 Keep the library updated with the latest features
 Address bugs and issues more efficiently
 Develop new functionalities and enhancements
 Keep the documentation robust and uptodate
 Even if you can't donate at this time, sharing this with your network or giving the project a star on GitHub can go a long way!
Thank you so much for your support and for being a part of this journey with me. Let's make data visualization in 3D even better!
Best regards,
Niekes
Installing
If you use npm, npm install d33d
. You can also download the latest release. Otherwise use unpkg to get the latest release. For example:
<script src="https://unpkg.com/d33d/build/d33d.js"></script>
<! OR >
<script src="https://unpkg.com/d33d/build/d33d.min.js"></script>
For a specific version:
<script src="https://unpkg.com/d33d@version/build/d33d.js"></script>
Import
ES6:
import { _3d } from 'd33d' ;
API Reference
 d3._3d  create a new 3d function object.
 _3d.shape  set the shape.
 _3d.x  set the x accessor.
 _3d.y  set the y accessor.
 _3d.z  set the z accessor.
 _3d.scale  sets the scale for the projected points.
 _3d.rotateX  set the angle for the x rotation.
 _3d.rotateY  set the angle for the y rotation.
 _3d.rotateZ  set the angle for the z rotation.
 _3d.rotateCenter  set the the rotation center.
 _3d.sort  sort the 3d elements by the centroid.
 _3d.draw  draw the 3d elements.
Overview
d33d uses the browser's coordinate system and orthographic projection to display your data on the screen. It will calculate the centroid for all elements and the orientation for your polygons. Due to the fact that SVG isn't very 3d compatible d33d adds 3d transformations to SVG.
With d33d you can easily visualize your 3d data.
var data3D = [ [[0,1,0],[1,1,0],[1,1,0]] ];
var triangles3D = d3._3d()
.scale(100)
.origin([480, 250])
.shape('TRIANGLE');
var projectedData = triangles3D(data3D);
init(projectedData);
function init(data){
var triangles = svg.selectAll('path').data(data);
// add your logic here...
}
Constructs a new function object with the default settings.
Shapes
Depending on the shape the input data array has to be accordingly to the shape.

POINT A point is represented by the
<circle>
element. It does not have a draw function because it can be represented as a<circle>
. The input data array has to be an array of points where each point has three coordinates which can be accessed via the x, y and z accessors. 
LINE A line is represented by the
<line>
element. It does not have a draw function because it can be represented as a<line>
. The input data array has to be an array of lines where each line is defined by a start and an endpoint. 
LINE_STRIP A continuous line is represented by the
<path>
element. The input data array has to be an array of points. Every point will be connected to the next point in the input data array. 
TRIANGLE A triangle represented by the
<path>
element. The input data array has to be an array of triangles where each triangle is defined by three points in counterclockwise order. 
PLANE A plane is represented by the
<path>
element. The input data array has to be an array of planes where each plane is defined by four points in counterclockwise order.  GRID A grid is represented by x planes. The input data array has to be an array of points. The shape function aspects the amount of points per row as a second argument. d33d will construct planes out of the passed data. NOTE: A grid has to have always the same number of points per row. Otherwise the code will break.

SURFACE equivalent to
GRID
 CUBE A grid is represented by 4 planes. The input data array has to be an array of cubes where each cube is defined by 8 vertices. To get the orientation and centroid calculation right you should pass in the data like so:
Default: 'POINT'
Sets the shape to shape. If shape is not specified the current shape will be returned.
If shape is specified, sets the shape to the specified shape and returns the d33d function object. If shape is not specified, returns the current shape.
var triangles3D = d3._3d().shape('TRIANGLE');
If x is specified, sets the x accessor to the specified function or number and returns the d33d function object. If x is not specified, returns the current x accessor, which defaults to:
function x(p) {
return p[0];
}
This function will be invoked for each point in the input data array.
If y is specified, sets the y accessor to the specified function or number and returns the d33d function object. If y is not specified, returns the current y accessor, which defaults to:
function y(p) {
return p[1];
}
This function will be invoked for each point in the input data array.
If z is specified, sets the z accessor to the specified function or number and returns the d33d function object. If z is not specified, returns the current z accessor, which defaults to:
function z(p) {
return p[2];
}
This function will be invoked for each point in the input data array.
Default: 1
If scale is specified, sets the scale to the specified number and returns the d33d function object. If scale is not specified, returns the current scale.
Default: 0
If angle is specified, sets rotateX to the specified number and returns the d33d function object. If angle is not specified, returns the current angle.
Default: 0
If angle is specified, sets rotateY to the specified number and returns the d33d function object. If angle is not specified, returns the current angle.
Default: 0
If angle is specified, sets rotateZ to the specified number and returns the d33d function object. If angle is not specified, returns the current angle.
Default: [0, 0, 0]
If point is specified, sets rotateCenter to the specified point and returns the d33d function object. If rotateCenter is not specified, returns the current rotateCenter.
Sorts the elements accordingly to the z coordinate of the calculated centroid.
Constructs a string for the SVG <path>
element. Depending on the shape this function will take care how the elements get drawn. For instance, if you choose 'TRIANGLE'
d33d aspects that you want to draw a triangle with three points and each point has three coordinates. The _3d.draw method will draw a triangle with these three points. If you want to draw a plane, you have to pass in four points and so on.