Ipyvolume and pythreejs demos are below. These require separately installing these widgets. Ipyleaflet will be forthcoming, see #6903. We hope these APIs will be included upstream in the original widget repositories.
There is an alpha Groovy API for ipyvolume. For this to work, the widget JS needs to be installed:
conda install -c conda-forge ipyvolume
%classpath add mvn com.github.twosigma ipyvolume master-SNAPSHOT
import ipyvolume.PyLab;
int size = 32;
int radius = 12;
float[][][] data = new float[size][size][size];
for (int x = 0; x<size; x++){
for (int y = 0; y<size; y++){
for (int z = 0; z<size; z++){
if (Math.pow(x - size/2, 2) + Math.pow(y - size/2, 2) + Math.pow(z - size/2, 2) <= Math.pow(radius, 2)){
data[x][y][z] = 1.0f;
}
}
}
}
figure = PyLab.volShow(data)
%classpath add mvn com.github.twosigma pythreejs master-SNAPSHOT
import pythreejs.*
f = "function f(origu,origv) {\n" +
" // scale u and v to the ranges I want: [0, 2*pi]\n" +
" var u = 2*Math.PI*origu;\n" +
" var v = 2*Math.PI*origv;\n" +
" \n" +
" var x = Math.sin(u);\n" +
" var y = Math.cos(v);\n" +
" var z = Math.cos(u+v);\n" +
" \n" +
" return new THREE.Vector3(x,y,z)\n" +
"}"
surf_g = new ParametricGeometry(func: f, slices: 16, stacks: 16);
surf = new Mesh(geometry: surf_g, material: new MeshLambertMaterial(color: 'green', side: 'FrontSide'))
surf2 = new Mesh(geometry: surf_g, material: new MeshLambertMaterial(color: 'yellow', side: 'BackSide'))
c = new PerspectiveCamera(position: [5, 5, 3], up: [0, 0, 1],
children: [new DirectionalLight(color: 'white',
position: [3, 5, 1],
intensity: 0.6d)])
scene = new Scene(children: [surf, surf2, c, new AmbientLight(intensity: 0.5d)])
renderer = new Renderer(camera: c, scene: scene, controls: [new OrbitControls(controlling: c)], _width: 400, _height: 400)