marching_cubes#

k3d.factory.marching_cubes(scalar_field, level, color=255, wireframe=False, flat_shading=True, opacity=1.0, spacings_x=[], spacings_y=[], spacings_z=[], name=None, group=None, custom_data=None, compression_level=0, **kwargs)[source]#

Create a MarchingCubes drawable.

Plot an isosurface of a scalar field obtained through Marching cubes algorithm. The default domain of the scalar field is -0.5 < x, y, z < 0.5.

If the domain should be different, the bounding box needs to be transformed using kwargs

  • marching_cubes(..., bounds=[-1, 1, -1, 1, -1, 1])

  • marching_cubes(..., xmin=-10, xmax=10, ymin=-4, ymax=4, zmin=0, zmax=20)

  • marching_cubes(..., scaling=[width, height, length])

Parameters
  • scalar_field (array_like) – 3D scalar field of values.

  • level (float) – Value at the computed isosurface.

  • color (int, optional) – Hex color of the isosurface, by default _default_color.

  • wireframe (bool, optional) – Display the mesh as wireframe, by default False.

  • flat_shading (bool, optional) – Display the mesh with flat shading, by default True.

  • opacity (float, optional) – Opacity of the mesh, by default 1.0.

  • spacings_x (list, optional) – Spacings in x axis, by default []. Should match scalar_field shape.

  • spacings_y (list, optional) – Spacings in y axis, by default []. Should match scalar_field shape.

  • spacings_z (list, optional) – Spacings in z axis, by default []. Should match scalar_field shape.

  • name (str, optional) – Object name, by default None.

  • group (str, optional) – Name of a group, by default None.

  • custom_data (dict) – A object with custom data attached to object.

  • compression_level (int, optional) – Level of data compression [-1, 9], by default 0.

  • **kwargs – For other keyword-only arguments, see process_transform_arguments.

Returns

MarchingCubes Drawable.

Return type

MarchingCubes

Examples#

Sinus cube#

# Example from https://graphics.stanford.edu/~mdfisher/MarchingCubes.html

import k3d
import numpy as np
from numpy import sin

t = np.linspace(-5, 5, 100, dtype=np.float32)
x, y, z = np.meshgrid(t, t, t, indexing='ij')

scalars = sin(x*y + x*z + y*z) + sin(x*y) + sin(y*z) + sin(x*z) - 1

plt_marching = k3d.marching_cubes(scalars, level=0.0,
                                  color=0x0e2763,
                                  opacity=0.25,
                                  xmin=0, xmax=1,
                                  ymin=0, ymax=1,
                                  zmin=0, zmax=1,
                                  compression_level=9,
                                  flat_shading=False)

plot = k3d.plot()
plot += plt_marching
plot.display()