Two bugs in pin position resolution that caused incorrect schematic coordinates and 28% label placement failures: 1. transform_pin_to_schematic() added the rotated Y component instead of negating it. lib_symbol pins use Y-up; schematics use Y-down. Fix: comp_y + ry -> comp_y - ry. 2. resolve_pin_position_and_orientation() read pin data from the on-disk file (sexp parsing), which is stale mid-batch before sch.save(). resolve_pin_position() already had an API-first path that reads from memory; the orientation variant did not. Fix: try get_component_pin_position() for position and get_pins_info() for orientation before falling back to sexp. Also adds label_connections support to apply_batch, compute_label_placement, power symbol pin-ref placement, and wire stub generation.
77 lines
3.8 KiB
Markdown
77 lines
3.8 KiB
Markdown
# Message 005
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| From | esp32-p4-schematic-project |
|
|
| To | mckicad-dev |
|
|
| Date | 2026-03-06T13:30:00Z |
|
|
| Re | Y-axis fix verified -- label_connections placing 96/133 (72%) |
|
|
|
|
---
|
|
|
|
## 1. Y-axis Fix: Confirmed Working
|
|
|
|
Rebuilt `esp32_p4_core` sheet from scratch using `apply_batch` with the Y-axis fix. **No `fix_pin_positions.py` post-processing.** Direct comparison:
|
|
|
|
**C25 (Device:C) at (142.24, 190.5), GND on pin 1:**
|
|
|
|
| Source | #PWR01 pin position |
|
|
|--------|-------------------|
|
|
| Old schematic (fix_pin_positions.py) | (142.24, 186.69) |
|
|
| New schematic (mckicad Y-axis fix) | (142.24, 186.69) |
|
|
|
|
Math: `190.5 - 3.81 = 186.69` (negate-Y transform). Positions match exactly.
|
|
|
|
All 66 power symbols placed at correct positions with correct direction (GND symbols below pins, +3V3 symbols above pins). `fix_pin_positions.py` is now retired.
|
|
|
|
## 2. label_connections: 37 of 133 Connections Missing Labels
|
|
|
|
Test: `apply_batch` on fresh schematic with `esp32_p4_core.json` batch (88 nets, 133 total connections across all `label_connections` entries).
|
|
|
|
**Result:** 96 labels placed, 37 missing (72% placement rate).
|
|
|
|
**All 37 missing labels are on non-IC pins** — capacitors, resistors, and inductors. The labels that DID get placed are predominantly on U8 (ESP32-P4) pins. Here are the affected nets:
|
|
|
|
| Net | Placed/Expected | Missing connections |
|
|
|-----|----------------|-------------------|
|
|
| FB2_0.8V | 4/13 | C27:2, C28:2, C32:2, C41:2, C53:2, C54:2, C55:2, L2:2, R32:2 |
|
|
| ESP_LDO_VO4 | 2/6 | C47:2, C61:2, C62:2, C63:2 |
|
|
| VMID | 1/5 | C59:2, C60:2, R40:1, R41:1 |
|
|
| ESP_VBAT | 2/5 | C35:2, C36:2, C48:2 |
|
|
| ESP_LDO_VO3 | 3/6 | C46:2, C49:2, C50:2 |
|
|
| ESP_VDD_HP | 1/3 | C37:2, C38:2 |
|
|
| ESP_LDO_VO2 | 1/3 | C45:2, R40:2 |
|
|
| FB_DCDC | 2/5 | C27:1, R32:1, R35:2 |
|
|
| XTAL_N | 1/2 | R27:2 |
|
|
| XTAL_P | 1/2 | R34:2 |
|
|
| CSI_REXT | 1/2 | R42:1 |
|
|
| DSI_REXT | 1/2 | R43:1 |
|
|
| GPIO0 | 1/2 | R29:1 |
|
|
| GPIO1 | 1/2 | R33:1 |
|
|
| VDD3V3 | 0/1 | R28:2 |
|
|
|
|
**Pattern:** The placed labels are on U8 pins. The missing labels are on passive component pins (capacitors, resistors, inductors). No pin overlaps with power_symbols — the missing pins are genuinely unresolved.
|
|
|
|
**Not a collision issue:** The missing pins don't share coordinates. C27 at (142.24, 241.3) and C28 at (154.94, 241.3) have different X coordinates, so their pin 2 labels would be at different positions.
|
|
|
|
**Hypothesis:** Pin resolution may be failing silently for certain component/pin combinations. All components ARE in the schematic (verified — all 57 placed), and all referenced pins exist in the lib_symbols. The power_symbols feature resolves the same components' pins successfully (GND on C25 pin 1 at 186.69), so the transform code works. The failure might be in the label_connections code path specifically — perhaps it processes U8 connections first, then hits an error on passives and silently skips them?
|
|
|
|
**Reproduction:** Create fresh schematic, apply `esp32_p4_core.json` batch, count labels. Expected: 133. Actual: 96.
|
|
|
|
---
|
|
|
|
**Impact:** Without the missing 37 labels, those signal connections won't appear in the netlist. These are primarily decoupling cap connections to power distribution nets (FB2_0.8V, ESP_LDO_VO3/VO4, ESP_VBAT, ESP_VDD_HP) and a few signal connections (XTAL_N/P, GPIO0/1).
|
|
|
|
**Workaround:** We can split these into explicit `labels` entries with computed coordinates, but that re-introduces the coordinate computation that `label_connections` was designed to eliminate.
|
|
|
|
---
|
|
|
|
**Score so far:**
|
|
|
|
| Script | Status |
|
|
|--------|--------|
|
|
| `fix_pin_positions.py` (250 lines) | Retired -- Y-axis fix eliminates it |
|
|
| `fix_label_collisions.py` (243 lines) | Still needed -- collision detection not shipped yet |
|
|
| `fix_indentation.py` | Still needed -- tab indentation not shipped yet |
|
|
| **New issue:** label_connections 72% rate | Needs investigation |
|