Torus

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

class Torus(ring_radius=1.5, tube_radius=0.5, u_range=(0, 360), v_range=(0, 360), resolution=None, **kwargs)[source]

Bases: Surface

A torus, tessellated from a Surface.

Parameters:
  • ring_radius – Distance from the torus’s center to the center of its tube, in world units. Defaults to 1.5.

  • tube_radius – Radius of the tube itself, in world units. Defaults to 0.5.

  • u_range – Sweep around the ring, in degrees. (0, 180) gives half a ring. Defaults to (0, 360).

  • v_range – Sweep around the tube’s cross-section, in degrees. (0, 180) opens the tube along its length. Defaults to (0, 360).

  • resolution – Manim-style grid resolution as (u_patches, v_patches), or one int for both. Manim counts patches where Algan’s grid_width / grid_height count sampled vertices, so this is one less than the grid it builds – resolution=(32, 32) gives a 33x33 grid, matching Sphere, Cone and Cylinder. Defaults to None, meaning Algan sizes the grid itself from geometry_tolerance.

  • **kwargs – Passed to Surface.

Examples

A ring sized to fit the frame, and half of one:

Example: Example1Torus

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

Torus(ring_radius=1.2, tube_radius=0.35, color=BLUE).spawn()
Torus(ring_radius=1.2, tube_radius=0.35, u_range=(0, 180),
      color=YELLOW).move(UP * 0.1).spawn()

Scene.save_video()

Methods

coord_function

Map the surface's (u, v) parameters to positions in space.

func

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.

color_texture

An image painted across the surface, as an [W, H, 5] RGBA+glow tensor.

draws_descendants

Whether get_render_primitives returns geometry belonging to this Mob's DESCENDANTS as well as its own.

forward

Get the direction the Mob is facing.

geometry_tolerance

How far this surface's mesh may sit from the exact shape, in world units.

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.

render_tolerance_pixels

How far a drawn triangle may sit from the true surface, in pixels.

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.

vertices

The surface's vertex positions, shape (*, grid_width * grid_height, 3).

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).

coord_function(uv)[source]

Map the surface’s (u, v) parameters to positions in space.

This is what defines the surface’s shape, and what each 3-D shape class overrides: Sphere maps the unit square onto a sphere, Torus onto a torus, and so on. The base implementation gives a flat plane spanning [-1, 1] on both axes.

Parameters:

uv – Parameter coordinates to map, shape (*, 2), with both components in [0, 1].

Returns:

Positions relative to the surface’s location, shape (*, 3).

Return type:

torch.Tensor

two_sided = False

Whether this Mob’s geometry should be lit from whichever side the ray arrives on. True (the default) is for geometry with no meaningful outside – a 2-D shape, Text, a parametric Surface, an imported mesh whose winding nobody has checked – where a back-facing hit is shaded with its normal flipped toward the viewer, so the surface is lit from behind instead of coming out black.

The built-in solids set it False: their normals face out (see tests/unit_tests/test_normal_orientation.py), so a back-facing hit is genuinely the inside of the solid and is shaded as such. That is what stops a half-transparent solid’s far shell from being lit like a second front shell – the bright and dark “planes” through a fading Octahedron. Set it True on an instance to get the old two-sided lighting back (an open Cone you want lit inside, say); it must be set before the Mob is spawned, since the render primitive reads it once.