draw = scope => {
const domEl = document.createElement('div'),
draw2d = () => {
const svgWrapper = document.createElement('div')
const svg = d3.select(svgWrapper)
.style('text-align', 'center')
.append('svg')
.attr('width', canvasSize)
.attr('height', canvasSize)
.attr('viewBox', `${-canvasSize / 2} ${-canvasSize / 2} ${canvasSize} ${canvasSize}`)
const axisEl = svg
.append('g')
.attr('id', 'spiral-axis')
.classed('axis', true);
axisEl.call(spiralAxis);
chartDrawer(d3SVGDrawer(svg))
return svgWrapper
},
draw3d = () => {
const N = 100;
const gData = {
nodes: [...Array(N).keys()].map(i => ({ id: i })),
links: [...Array(N).keys()]
.filter(id => id)
.map(id => ({
source: id,
target: Math.round(Math.random() * (id-1))
}))
};
const Graph = ForceGraph3D()(canvas3DWrapper)
.width(canvasSize)
.height(canvasSize)
.graphData(gData)
const scene = Graph.scene()
chartDrawer(threeDrawer(scene))
return canvas3DWrapper
}
domEl.style = 'display: flex'
show.includes('2D') && domEl.appendChild(draw2d())
show.includes('3D') && domEl.appendChild(draw3d())
return domEl
}