sch_place_components
Bulk-place schematic components from libraries onto a chosen .SchDoc in one call, focusing the target sheet to prevent misplaced parts and returning placement counts.
Instructions
Place MANY schematic components from libraries in ONE call.
NOT THE WAY TO DRAW A SCHEMATIC, AND IT IS ENFORCED. Placing four
or more components onto a sheet that has two or fewer is refused:
that is a schematic being drawn by hand, and positions chosen that
way read like nothing a person would draw however correct the
netlist is. Build a DesignPlan and call design_execute_plan
instead, which places AND routes the whole sheet through a layout
engine measured against hand-drawn boards; design_layout_schematic
and design_preview_plan show you the result first without touching
the EDA. Use THIS tool to add parts to a sheet that already exists,
or when the positions came from that engine. To place coordinates
yourself anyway, pass allow_manual_layout=True.
This is the only path for library placement (there is no singular variant). Laying out a 50-part BOM is inherently a bulk operation; done one-by-one it would cost 50 LLM turns.
TARGET DOCUMENT: placement lands on the ACTIVE schematic. Right
after app_create_document the new sheet is NOT auto-focused, so
without document_path parts can silently land on a different
open sheet. Pass document_path (absolute .SchDoc path) and this
tool focuses that sheet first (app_set_active_document) before
placing, always set it when you have just created the target
sheet.
Args: allow_manual_layout: Set True to bypass the refusal described above and place your own coordinates onto an empty sheet. The default exists because this is almost never what the caller actually wants; say why in the surrounding turn. document_path: Absolute path of the .SchDoc to place onto. When given, it is focused before placement so parts can't land on the wrong sheet. When omitted, the current active document is used. placements: List of placement dicts, each with: - library_path (str, optional, empty uses an already-open library) - lib_reference (str, required), component name - x, y (int, mils), placement location - designator (str, optional), override designator - rotation (int, optional), 0 / 90 / 180 / 270 - footprint (str, optional), override current footprint
Example, place a 5-part BOM row: sch_place_components(placements=[ {"library_path": "C:\Lib\ST.SchLib", "lib_reference": "STM32F411RE", "x": 1000, "y": 2000, "designator": "U1"}, {"library_path": "C:\Lib\Res.SchLib", "lib_reference": "Res1", "x": 1500, "y": 2000, "designator": "R1"}, ... # 3 more ])
Returns: Dict with placed, failed, total counts.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| placements | Yes | ||
| document_path | No | ||
| allow_manual_layout | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||