# Easyeda Draw Strategies

> Post-drawing optimization strategies for EasyEDA Pro schematics. Invoke after all modules are drawn to apply consolidation and cleanup optimizations.

- Skill: `kukucaicndy/easyeda-draw-strategies` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kukucaicndy/easyeda-draw-strategies`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kukucaicndy/easyeda-draw-strategies/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kukucaicndy (https://skillmd.com/u/kukucaicndy)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kukucaicndy/easyeda-draw-strategies

---


# 绘制后优化策略

所有模块绘制完成后，调用此策略集进行一次系统性优化。

> 本策略集是 [SOP 原则九](../sop/skill.md#原则九绘制完成后必须执行策略集优化) 的详细展开。
> 绘制时的操作规范请参考 [SOP 原则一~八](../sop/skill.md#核心绘制原则-must-follow)。

---

## 策略总览

| # | 策略 | 场景 | 操作 |
|---|------|------|------|
| 1 | 同名电源/地合并 | 连续同名引脚各自拉线 | 竖线短接 → 共 1 个 NetFlag |
| 2 | NetFlag 终点对齐 | NetFlag 与导线分离 | 移动 NetFlag 到导线终点 |
| 3 | 冗余导线合并 | 同网络平行裸引出导线 | 评估合并 |
| 4 | NC 标注 | 未分配功能引脚 | `mark-nc` |
| 5 | 信号标注规范 | 用了 NetPort/文本标注 | `replace-netports` |
| 6 | 导线网络名检查 | 空网络名导线 | `check-wire-nets` |
| 7 | 重复标签清理 | 同一坐标多标签 | `check-duplicates --clean` |
| 8 | DRC 检查 | 最终验证 | `drc` / `drc --show-ui` |

策略 1~4 为布局优化，策略 5~8 为合规检查。

---

## 策略应用时机

```
所有模块绘制完成 → check-all 通过 → 应用本策略集(按序) → 再次 check-all → DRC
```

---

## 策略 1: 同名电源/地合并

**场景**：同一芯片侧面上有多个连续的、同名的电源或地引脚。

**优化方法**：
1. 在所有连续同名引脚之间画竖线段短接
2. 从其中一个引脚引出 1 根水平导线
3. 在水平导线末端放 1 个 NetFlag（覆盖所有）
4. 删除其余引脚各自独立的导线和 NetFlag

**规则**：
- 只有**连续排列**（中间无其他信号引脚）的同名引脚才合并
- 左/右侧各独立处理，不跨侧合并
- VCC 和 GND 分开处理

**示例**：PIN3=GND (y=470), PIN4=GND (y=450) — 连续排列
```
优化前:                              优化后:
│ GND ──导线── NetFlag(GND)          │ GND ──┐
│ GND ──导线── NetFlag(GND)          │ GND ──┤ 竖线短接 ── 导线 ── NetFlag(GND)
```

---

## 策略 2: NetFlag 终点对齐与距离检查

**场景**：电源/地引脚延伸导线后放置了 NetFlag。

**摆放规则**（关键）：
- **左侧引脚**：文字左对齐，尽量靠近导线末端，但**远离 PIN 脚编号**
- **右侧引脚**：文字右对齐，同上
- **上侧引脚**：文字上对齐，同上
- **下侧引脚**：文字下对齐，同上

**检查方法**：
- 检查 NetFlag 是否与同网络导线在同一端点 (±3 单位内)
- 检查 NetFlag BBox 是否与引脚编号/导线重叠
- 若 NetFlag 文字会覆盖引脚编号，需调整位置

**修复方法**：
- 若 NetFlag 与导线端点距离 > 10 单位：调整坐标到导线端点附近
- 若 NetFlag 与引脚编号重叠：旋转 180° 或调整 y 坐标使其反向展开
- 若文字仍重叠：缩短导线长度，将标签中心推离编号区域

---

## 策略 3: 冗余导线合并

**场景**：同一网络的多条导线在同侧平行排列，远端形成相同网络。

**优化方法**：
- 若多条同网络导线在同方向且相邻，评估是否可合并为一根
- 仅合并**未进入模块内部连接**的裸引出导线
- 已连接到模块内部器件（开关、二极管等）的导线不合并

---

## 策略 4: 未使用引脚 NC 标注

**场景**：IC 引脚未分配功能。

**操作**：
```bash
# 单个引脚
./scripts/draw_cli.py mark-nc U1 14

# 批量
./scripts/draw_cli.py mark-nc U1 14,16
```

**原理**：调用 `sch_PrimitiveComponent.setState_NoConnected(true)`，EasyEDA 显示标准 NC 叉号，DRC 识别为"有意不连接"。禁止用 `sch_PrimitiveText.create("NC")` 替代。

---

## 策略 5: 信号标注规范检查

**场景**：页面中误用了 NetPort 或文本标注作为信号标签。

**操作**：
```bash
# 一键替换 NetPort → 延伸导线
./scripts/draw_cli.py replace-netports
# 指定延伸长度
./scripts/draw_cli.py replace-netports --length 80
```

**规则**：信号引脚仅用延伸导线（导线网络名 = 信号名），电源/地引脚用延伸导线 + NetFlag。

---

## 策略 6: 导线网络名完整性检查

**场景**：导线创建时未指定网络名，导致电气连接未建立。

**检查**：
```bash
./scripts/draw_cli.py check-wire-nets
```

**修复**：对空网络名的导线，删除后重画并指定网络名。

---

## 策略 7: 重复标签清理

**场景**：同一坐标放置了多个标签或 NetFlag。

**检查 & 修复**：
```bash
# 检测
./scripts/draw_cli.py check-duplicates

# 自动清理
./scripts/draw_cli.py check-duplicates --clean
```

---

## 策略 8: DRC 最终检查

**场景**：所有优化完成后，最终设计规则检查。

**操作**：
```bash
# 聚合统计
./scripts/draw_cli.py drc

# 不通过时查看逐项详情
./scripts/draw_cli.py drc --show-ui
```

DRC 不通过 = 不能投板。

---

## 策略执行顺序

```
策略 1 (同名合并) → 策略 2 (NetFlag 对齐) → 策略 3 (冗余合并) → 策略 4 (NC 标注)
→ 策略 5 (信号规范) → 策略 6 (导线网络名) → 策略 7 (重复标签) → 策略 8 (DRC)
                ↓ 每个策略后执行 check-overlap
```

- 策略 1~4 每次执行后：`check-overlap`
- 策略 5~8 可合并为一键：`check-all`

---

## 检查命令速查

```bash
# 策略 1~4 每次执行后
./scripts/draw_cli.py check-overlap

# 策略 5~8 可合并
./scripts/draw_cli.py replace-netports      # 策略 5
./scripts/draw_cli.py check-wire-nets       # 策略 6
./scripts/draw_cli.py check-duplicates      # 策略 7
./scripts/draw_cli.py drc                   # 策略 8

# 一键全量检查（含策略 6+7）
./scripts/draw_cli.py check-all

# DRC 不通过时
./scripts/draw_cli.py drc --show-ui
```

