Manim-Agent / primitives /layout.py
github-actions[bot]
[API] Cuong2004/Manim-Agent @ 1d7c417 (run 25583057312)
9bed109
from __future__ import annotations
from collections.abc import Sequence
from manim import DOWN, RIGHT, SMALL_BUFF, WHITE, SurroundingRectangle, VGroup
from manim.mobject.mobject import Mobject
def stack_horizontal(*mobjects: Mobject | Sequence[Mobject], buff: float = 0.35) -> VGroup:
"""Arrange mobjects left-to-right. Supports both *args and a single list/tuple."""
if len(mobjects) == 1 and isinstance(mobjects[0], (list, tuple)):
objs = mobjects[0]
else:
objs = mobjects
group = VGroup(*objs)
group.arrange(RIGHT, buff=buff)
return group
def stack_vertical(*mobjects: Mobject | Sequence[Mobject], buff: float = 0.35) -> VGroup:
"""Arrange mobjects top-to-bottom. Supports both *args and a single list/tuple."""
if len(mobjects) == 1 and isinstance(mobjects[0], (list, tuple)):
objs = mobjects[0]
else:
objs = mobjects
group = VGroup(*objs)
group.arrange(DOWN, buff=buff)
return group
def center_mobject(mobject: Mobject) -> Mobject:
"""Center about origin (mutates and returns the same instance)."""
mobject.center()
return mobject
def surround_with_frame(
mobject: Mobject,
buff: float = SMALL_BUFF,
color: str = WHITE,
) -> SurroundingRectangle:
"""Rectangle frame around a mobject."""
return SurroundingRectangle(mobject, buff=buff, color=color)
def scale_to_width(mobject: Mobject, width: float) -> Mobject:
"""Uniformly scale to target width (mutates and returns the same instance)."""
mobject.scale_to_fit_width(float(width))
return mobject