Transform

The TransformOperations module provides batch transformation operations for schematic items.

sch = kicad.get_schematic()
transform = sch.transform

Move Operations

move(item_ids, offset)

Moves multiple items by an offset.

from kipy.geometry import Vector2

offset = Vector2.from_xy_mm(10, 0)
sch.transform.move([item1, item2, item3], offset)

move_to(item_ids, position)

Moves items to an absolute position (based on center).

pos = Vector2.from_xy_mm(100, 100)
sch.transform.move_to([item1, item2], pos)

Rotation

rotate(item_ids, angle, center=None)

Rotates items around a center point.

# Rotate 90 degrees around selection center
sch.transform.rotate([item1, item2], 90)

# Rotate around specific point
center = Vector2.from_xy_mm(50, 50)
sch.transform.rotate([item1, item2], 90, center=center)

Mirror

mirror_horizontal(item_ids, axis=None)

Mirrors items horizontally.

sch.transform.mirror_horizontal([item1, item2])

# Mirror around specific X axis
sch.transform.mirror_horizontal([item1, item2], axis_x=100)

mirror_vertical(item_ids, axis=None)

Mirrors items vertically.

sch.transform.mirror_vertical([item1, item2])

Alignment

align(item_ids, alignment)

Aligns items to each other.

# Align left edges
sch.transform.align(item_ids, "left")

# Align centers horizontally
sch.transform.align(item_ids, "center_h")

# Align top edges
sch.transform.align(item_ids, "top")

Alignment options:

  • "left" - Align left edges
  • "right" - Align right edges
  • "top" - Align top edges
  • "bottom" - Align bottom edges
  • "center_h" - Align horizontal centers
  • "center_v" - Align vertical centers

Distribution

distribute(item_ids, direction)

Distributes items evenly.

# Distribute horizontally
sch.transform.distribute(item_ids, "horizontal")

# Distribute vertically
sch.transform.distribute(item_ids, "vertical")

distribute_spacing(item_ids, direction, spacing_mm)

Distributes items with specific spacing.

# 10mm spacing between items
sch.transform.distribute_spacing(item_ids, "horizontal", 10)

Example: Arrange Components

from kipy import KiCad
from kipy.geometry import Vector2

kicad = KiCad()
sch = kicad.get_schematic()

# Place some resistors
resistors = []
for i in range(5):
    pos = Vector2.from_xy_mm(50 + i * 10, 50 + i * 5)  # Random-ish positions
    r = sch.symbols.add("Device:R", pos)
    resistors.append(r)

# Align them vertically
sch.transform.align(resistors, "center_h")

# Distribute evenly with 20mm spacing
sch.transform.distribute_spacing(resistors, "vertical", 20)

Example: Create Symbol Grid

# Get all symbols
symbols = [s.id for s in sch.symbols.get_all()]

# Move all to origin first
sch.transform.move_to(symbols, Vector2.from_xy_mm(0, 0))

# Arrange in a 4-column grid
columns = 4
spacing_x = 25
spacing_y = 20

for i, sym_id in enumerate(symbols):
    col = i % columns
    row = i // columns
    pos = Vector2.from_xy_mm(50 + col * spacing_x, 50 + row * spacing_y)
    sch.symbols.move(sym_id, pos)

Example: Rotate Around Point

# Select items around a center point
center = Vector2.from_xy_mm(100, 100)
items = [item1, item2, item3]

# Rotate 45 degrees around center
sch.transform.rotate(items, 45, center=center)

Batch Operations

All transform operations accept lists of item IDs. For complex transformations, combine multiple operations:

# Select all capacitors
caps = [s.id for s in sch.symbols.get_all() if "C" in s.reference]

# Align horizontally
sch.transform.align(caps, "center_h")

# Distribute vertically
sch.transform.distribute(caps, "vertical")

# Rotate all 90 degrees
sch.transform.rotate(caps, 90)