Polyhedron

Qualified name: algan.mobs.shapes\_3d.Polyhedron

class Polyhedron(vertex_coords, faces_list, faces_config=None, graph_config=None, **kwargs)[source]

Bases: Mob

A solid built from explicit vertices and indexed polygon faces.

This is the flat-sided family of 3-D shapes. Its faces are already planar, so each is triangulated once at construction and nothing is refined per frame – the opposite of the curved Surface-backed shapes.

Parameters:
  • vertex_coords – The vertices, shape (N, 3) in world units. Any nested sequence is cast to a tensor and reshaped, so a list of [x, y, z] lists works.

  • faces_list – One entry per face, each a sequence of indices into vertex_coords naming that face’s corners in order. Faces may have any number of corners; they are triangulated for you.

  • faces_config – Style overrides applied to every face, using Manim’s names – fill_color, fill_opacity, stroke_width. Defaults to None (no overrides).

  • graph_config – Retained for Manim compatibility, where it styles the vertex-and-edge graph drawn over the solid. Defaults to None.

  • **kwargs – Passed to Mob – notably color and location.

Examples

A square pyramid from four base corners and an apex:

Example: Example1Polyhedron

../_images/Example1Polyhedron-1.png
from algan import *

Polyhedron(
    [[-0.6, -0.5, -0.6], [0.6, -0.5, -0.6], [0.6, -0.5, 0.6],
     [-0.6, -0.5, 0.6], [0, 0.7, 0]],
    [[0, 1, 2, 3], [0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4]],
    color=BLUE,
).spawn()

Scene.save_video()

Methods

extract_face_coords

get_edges

get_render_primitives

owned_subtrees

The faces this Polyhedron draws and the graph it declines to draw.

update_faces

Attributes

animation_manager

This mob's scene-owned animation manager.

basis

The Mob's orientation and scale, as a flattened 3x3 matrix of shape (*, 9).

casts_shadows

Whether this Mob's geometry blocks light on its way from a light source to another surface -- whether it casts a shadow.

children

The Mobs attached below this one, in attachment order.

closed_shell

Whether this Mob's triangles form a CLOSED shell -- every camera ray that enters the geometry crosses a second time on its way out.

draws_descendants

get_render_primitives below hands the renderer every face under one _mesh_key, and nothing else -- so the faces are this Mob's internals rather than Mobs of their own, and the vertex Dot3D``s and edge Mobs under ``self.graph (kept for Manim parity, where graph_config styles them) are geometry it owns but never puts on screen.

forward

Get the direction the Mob is facing.

lifespan

This mob's [spawn, despawn) interval on its Scene timeline (a Lifespan).

location

The Mob's position in world space, shape (*, 3).

normalized_basis

The Mob's orientation with scale divided out, shape (*, 9).

parents

The Mobs this one is attached to, in attachment order.

receives_shadows

Whether this Mob's surfaces are darkened by shadows cast onto them.

right

Get the Mob's own rightward direction.

scale_coefficient

The Mob's scale along its own right, up and forward axes, shape (*, 3).

two_sided

Whether this Mob's geometry should be lit from whichever side the ray arrives on.

up

Get the Mob's own upward direction.

x

The Mob's x coordinate in world units, shape (*, 1).

xy

The Mob's x and y coordinates in world units, shape (*, 2).

y

The Mob's y coordinate in world units, shape (*, 1).

z

The Mob's z coordinate in world units, shape (*, 1).

draws_descendants = True

get_render_primitives below hands the renderer every face under one _mesh_key, and nothing else – so the faces are this Mob’s internals rather than Mobs of their own, and the vertex Dot3D``s and edge Mobs under ``self.graph (kept for Manim parity, where graph_config styles them) are geometry it owns but never puts on screen. Both facts matter to become(): without this flag a morphed Polyhedron grew a wireframe and eight vertex beads a spawned one does not have, and drew each of its faces twice.

owned_subtrees()[source]

The faces this Polyhedron draws and the graph it declines to draw.

Both are its own construction and neither is a Mob in its own right. Anything else below it is a user’s, and stays a Scene actor – speaking for a user’s child too would make their geometry vanish from a morph.