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)