Skip to content

Automatic Layout System

Animora decouples geometric layout computation from visual components. Layout engines in animora.layout are pure algorithmic solvers operating on synthetic bounding boxes (LayoutItem), producing positioned output coordinates (LayoutResult).


1. Available Layout Engines

Layout Purpose Key Parameters
HorizontalLayout Left-to-right alignment spacing, alignment (top/center/bottom)
VerticalLayout Top-to-bottom stacking spacing, alignment (left/center/right)
GridLayout 2D matrix rows/columns columns, col_spacing, row_spacing
CircularLayout Radial angular distribution radius, start_angle, end_angle
TreeLayout Hierarchical tree distribution root_id, tree_hierarchy, level_height
GraphLayout Force-directed network embedding nodes, edges, algorithm (spring/circular)
FlowLayout Sequential step chain step_spacing, direction, max_per_line

2. Using Group.arrange()

Any Group of components can be automatically arranged via any layout engine:

from animora.components import Group, Shape
from animora.layout import GridLayout, CircularLayout

items = [Shape.circle(radius=0.4) for _ in range(8)]
group = Group(*items)

# 1. Arrange in a 2x4 Grid
group.arrange(GridLayout(columns=4, col_spacing=0.5, row_spacing=0.5))

# 2. Re-arrange into a Circle
group.arrange(CircularLayout(radius=2.0))