Source code for plato.draw.pythreejs.Spheres

import itertools

import numpy as np

from ... import draw
from ...geometry import fibonacciPositions
from ... import mesh
from .internal import ThreeJSPrimitive
from ..internal import ShapeAttribute, ShapeDecorator

[docs]@ShapeDecorator class Spheres(draw.Spheres, ThreeJSPrimitive): __doc__ = draw.Spheres.__doc__ _ATTRIBUTES = draw.Spheres._ATTRIBUTES + list( itertools.starmap(ShapeAttribute, [ ('vertex_count', np.int32, 64, 0, False, 'Number of vertices used to render sphere') ])) def update_arrays(self): if not self._dirty_attributes: return vertices = fibonacciPositions(self.vertex_count) (vertices, indices) = mesh.convexHull(vertices) (positions, colors, diameters, images) = mesh.unfoldProperties( [self.positions, self.colors, self.diameters], [vertices]) images *= diameters # these are incorrect normals, but this looks to be the most # straightforward way to have the normals get serialized normals = images.copy() self._finalize_primitive_arrays( positions, None, colors, images, normals, indices)