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:
SurfaceA 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’sgrid_width/grid_heightcount sampled vertices, so this is one less than the grid it builds –resolution=(32, 32)gives a 33x33 grid, matchingSphere,ConeandCylinder. Defaults toNone, meaning Algan sizes the grid itself fromgeometry_tolerance.**kwargs – Passed to
Surface.
Examples
A ring sized to fit the frame, and half of one:
Example: Example1Torus ¶
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
Map the surface's
(u, v)parameters to positions in space.funcAttributes
animation_managerThis mob's scene-owned animation manager.
basisThe Mob's orientation and scale, as a flattened 3x3 matrix of shape
(*, 9).casts_shadowsWhether this Mob's geometry blocks light on its way from a light source to another surface -- whether it casts a shadow.
childrenThe Mobs attached below this one, in attachment order.
closed_shellWhether this Mob's triangles form a CLOSED shell -- every camera ray that enters the geometry crosses a second time on its way out.
color_textureAn image painted across the surface, as an
[W, H, 5]RGBA+glow tensor.draws_descendantsWhether
get_render_primitivesreturns geometry belonging to this Mob's DESCENDANTS as well as its own.forwardGet the direction the Mob is facing.
geometry_toleranceHow far this surface's mesh may sit from the exact shape, in world units.
lifespanThis mob's [spawn, despawn) interval on its Scene timeline (a
Lifespan).locationThe Mob's position in world space, shape
(*, 3).normalized_basisThe Mob's orientation with scale divided out, shape
(*, 9).parentsThe Mobs this one is attached to, in attachment order.
receives_shadowsWhether this Mob's surfaces are darkened by shadows cast onto them.
render_tolerance_pixelsHow far a drawn triangle may sit from the true surface, in pixels.
rightGet the Mob's own rightward direction.
scale_coefficientThe Mob's scale along its own right, up and forward axes, shape
(*, 3).Whether this Mob's geometry should be lit from whichever side the ray arrives on.
upGet the Mob's own upward direction.
verticesThe surface's vertex positions, shape
(*, grid_width * grid_height, 3).xThe Mob's x coordinate in world units, shape
(*, 1).xyThe Mob's x and y coordinates in world units, shape
(*, 2).yThe Mob's y coordinate in world units, shape
(*, 1).zThe 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:
Spheremaps the unit square onto a sphere,Torusonto 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 parametricSurface, 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 (seetests/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 itTrueon an instance to get the old two-sided lighting back (an openConeyou want lit inside, say); it must be set before the Mob is spawned, since the render primitive reads it once.