Cone

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

class Cone(radius=1, height=1, direction=tensor([0., 1., 0.]), v_range=(0, 360), closed=False, resolution=None, *args, **kwargs)[source]

Bases: Surface

A circular cone, tessellated from a Surface.

The cone is open at its base by default; closed caps it with a flat disc added as a child – a lit triangle mesh carrying the cone’s own mesh identity, so the rim is an interior edge of one surface. The uncapped disc is always built and available as base_circle.

Parameters:
  • radius – Radius of the base, in world units. Defaults to 1.

  • height – Distance from base to tip along direction, in world units. Defaults to 1.

  • direction – Direction the tip points, shape (*, 3); it need not be normalized. Defaults to UP (the +y axis), the same default as Cylinder’s axis.

  • closed – Whether to cap the base with a filled circle. Defaults to False: the cone is open, so the camera can see inside it. The disc samples its rim more finely than the cone samples its rings – it has to, since a flat disc’s boundary cannot be refined at render time the way the curved side’s is – so a capped cone carries more triangles than the side alone suggests.

  • v_range – Angular sweep around the axis, in degrees. (0, 180) gives a half cone. Defaults to (0, 360) (the full cone).

  • resolution – Manim-style grid resolution as (u_patches, v_patches), or one int for both; each value becomes grid_width/grid_height plus one, since Manim counts patches and Algan counts vertices. Defaults to None, meaning Algan sizes the grid itself from geometry_tolerance.

  • *args – Passed to Surface – notably color, and color_texture for the two-tone styling Manim spells checkerboard_colors: color_texture=get_checkerboard((BLUE, BLUE_E)).

  • **kwargs – Passed to Surface – notably color, and color_texture for the two-tone styling Manim spells checkerboard_colors: color_texture=get_checkerboard((BLUE, BLUE_E)).

Examples

A capped cone pointing up the screen:

Example: Example1Cone

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

Cone(radius=0.6, height=1.2, direction=UP, closed=True).spawn()

Scene.save_video()

Methods

coord_function

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

get_direction

get_end

get_start

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.