activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Xpersona Agent
EasyEDA Pro API skill for AI agents. Use when working with EasyEDA Pro EDA software, including PCB design, schematic editing, footprint/symbol management, and project operations. Supports live debugging in EasyEDA and EasyEDA extension development. Provides complete API reference (120+ classes, 62 enums, 70 interfaces), extension-development documentation, and a WebSocket bridge server to execute code in the running EasyEDA Pro client. Trigger on: "嘉立创EDA,启动!", "立创EDA,启动!", "EDA,启动!", "EasyEDA", "PCB", "schematic", "footprint", "EDA", "circuit board", "嘉立创EDA", "原理图", "PCB设计". **IMPORTANT**: 嘉立创EDA's English name is **EasyEDA**. They are the SAME product. Never use other transliterations like "EasyEDA Pro" (unless specifically versioned), "EASYEDA", "easyeda", etc. Always use "EasyEDA" for English references and "嘉立创EDA" for Chinese references.
clawhub skill install s1742kvk50chxzh6t6hetdf9y983h56r:easyeda-apiOverall rank
#62
Adoption
11.9K downloads
Trust
Unknown
Freshness
Oct 9, 2026
Freshness
Last checked Oct 9, 2026
Best For
EasyEDA API Skill is best for general automation workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
CLAWHUB, CLAWHUB, runtime-metrics, public facts pack
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
EasyEDA Pro API skill for AI agents. Use when working with EasyEDA Pro EDA software, including PCB design, schematic editing, footprint/symbol management, and project operations. Supports live debugging in EasyEDA and EasyEDA extension development. Provides complete API reference (120+ classes, 62 enums, 70 interfaces), extension-development documentation, and a WebSocket bridge server to execute code in the running EasyEDA Pro client. Trigger on: "嘉立创EDA,启动!", "立创EDA,启动!", "EDA,启动!", "EasyEDA", "PCB", "schematic", "footprint", "EDA", "circuit board", "嘉立创EDA", "原理图", "PCB设计". **IMPORTANT**: 嘉立创EDA's English name is **EasyEDA**. They are the SAME product. Never use other transliterations like "EasyEDA Pro" (unless specifically versioned), "EASYEDA", "easyeda", etc. Always use "EasyEDA" for English references and "嘉立创EDA" for Chinese references. Capability contract not published. No trust telemetry is available yet. 11.9K downloads reported by the source. Last updated 10/9/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Oct 9, 2026
Vendor
Clawhub
Artifacts
0
Benchmarks
0
Last release
1.1.24
Install & run
clawhub skill install s1742kvk50chxzh6t6hetdf9y983h56r:easyeda-apiInstall using `clawhub skill install s1742kvk50chxzh6t6hetdf9y983h56r:easyeda-api` in an isolated environment before connecting it to live workloads.
No published capability contract is available yet, so validate auth and request/response behavior manually.
Review the upstream CLAWHUB listing at https://clawhub.ai/yanranxiaoxi/easyeda-api before using production credentials.
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Vendor
Clawhub
Protocol compatibility
OpenClaw
Latest release
1.1.24
Adoption signal
11.9K downloads
Handshake status
UNKNOWN
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Extracted files
5
Examples
6
Snippets
0
Languages
Unknown
bash
npm install
bash
npm run build:docs
bash
npm run server
bash
curl http://localhost:49620/health
bash
curl -X POST http://localhost:49620/execute \
-H "Content-Type: application/json" \
-d '{"code": "return await eda.dmt_Project.getCurrentProjectInfo();"}'bash
# Check EasyEDA connection status (assuming the service is on port 49620)
curl http://localhost:49620/health
# Execute EasyEDA code
curl -X POST http://localhost:49620/execute \
-H "Content-Type: application/json" \
-d '{"code": "return await eda.dmt_Project.getCurrentProjectInfo();"}'README.md
[English](#) | [简体中文](./README.zh-Hans.md)
# EasyEDA API Skill
An EasyEDA Pro API skill package for AI coding tools such as Claude Code, OpenCode, QwenCode, and any other tool that supports the [Agent Skills](https://agentskills.io/) standard.
This skill supports both online debugging of EasyEDA Pro through AI and extension development for EasyEDA Pro.
When developing EasyEDA extensions, AI can use the extension-development documentation, API references, type information, usage examples, and bridge debugging capabilities provided by this skill to help with API lookup, code generation, and integration debugging.
If you want to analyze or modify EasyEDA document source files directly instead of operating through the API, this project also provides documentation for the source file formats.
- 📚 **Structured API documentation** — Automatically builds hierarchical indexes from reference docs for fast AI lookup
- 🧾 **Document source format specifications** — Explains project, schematic, and PCB source formats for direct source analysis and modification
- 🔌 **WebSocket Bridge** — A Node.js server that bridges AI tools and the EasyEDA client
- 🤖 **SKILL.md** — A complete skill instruction file
## Quick Start
### 1. Install dependencies
```bash
npm install
```
### 2. Build API documentation
```bash
npm run build:docs
```
This reads the raw API documentation from the `reference/` directory and generates structured docs into the `docs/` directory.
### 3. Start the WebSocket Bridge server
```bash
npm run server
```
The server automatically chooses an available port in the `49620-49629` range and waits for the EasyEDA client to connect.
### 4. Connect from EasyEDA
Install the `run-api-gateway.eext` extension in EasyEDA. Download:
- https://jlcext.com/item/oshwhub-official/run-api-gateway
After the extension is loaded, it connects to the Bridge server automatically by scanning the port range and verifying the handshake.
### 5. Use from an AI coding tool
AI coding tools such as Claude Code, OpenCode, and QwenCode automatically read `SKILL.md` for instructions, then use the HTTP API to send code to EasyEDA:
```bash
# Check EasyEDA connection status (assuming the service is on port 49620)
curl http://localhost:49620/health
# Execute EasyEDA code
curl -X POST http://localhost:49620/execute \
-H "Content-Type: application/json" \
-d '{"code": "return await eda.dmt_Project.getCurrentProjectInfo();"}'
```
## One-Command Packaging
```bash
npm run pack
```
This performs the following steps:
1. Build API documentation (`docs/`)
2. Package `SKILL.md`, documentation, and the server into `dist/easyeda-api/`
3. Generate `dist/easyeda-api.zip` for upload
If the documentation has already been built, you can skip that step:
```bash
npm run pack:fast
```
### Publish to ClawHub
```bash
npx clawhub@latest publish dist/easyeda-api/
```
Or upload the zip file at https://clawhub.ai/upload
## Architecture
```
┌──────────────┐ HTTP/WS ┌────references/_index.md
# EasyEDA Pro API 文档索引 > 此文档由构建脚本自动生成,供 AI 编程工具使用。 > 全局变量 `eda` 是 EDA 类的实例,所有 API 通过 `eda.xxx` 调用。 ## 快速导航 - [classes/](classes/) - 类文档(包含全部方法和属性) - [enums/](enums/) - 枚举文档 - [interfaces/](interfaces/) - 接口文档(包含全部属性) - [types/](types/) - 类型别名文档 ## API 访问方式 所有 API 通过全局变量 `eda` 访问,例如: - `eda.dmt_Board.createBoard()` — 文档树 / 板子管理 - `eda.pcb_PrimitiveLine.create()` — PCB 直线图元创建 - `eda.sys_WebSocket.register()` — WebSocket 连接注册 - `eda.sch_PrimitiveComponent.create()` — 原理图器件创建 --- # 类 (Classes) | 类名 | 描述 | 备注 | |------|------|------| | [DMT_Board](classes/DMT_Board.md) | Document tree / Board management class | | | [DMT_EditorControl](classes/DMT_EditorControl.md) | Document tree / Editor control class | | | [DMT_Event](classes/DMT_Event.md) | Document tree / event class | | | [DMT_Folder](classes/DMT_Folder.md) | Document tree / Folder class | | | [DMT_Panel](classes/DMT_Panel.md) | Document tree / Panel management class | | | [DMT_Pcb](classes/DMT_Pcb.md) | Document tree / PCB management class | | | [DMT_Project](classes/DMT_Project.md) | Document tree / Project management class | | | [DMT_Schematic](classes/DMT_Schematic.md) | Document tree / Schematic management class | | | [DMT_SelectControl](classes/DMT_SelectControl.md) | Document tree / selection control class | | | [DMT_Team](classes/DMT_Team.md) | Document tree / Team class | | | [DMT_Workspace](classes/DMT_Workspace.md) | Document tree / Workspace class | | | [EDA](classes/EDA.md) | EasyEDA Pro user API interface | | | [IPCB_ComplexPolygon](classes/IPCB_ComplexPolygon.md) | Complex polygon | | | [IPCB_Polygon](classes/IPCB_Polygon.md) | Single polygon | | | [IPCB_PrimitiveArc](classes/IPCB_PrimitiveArc.md) | Arc line primitive | | | [IPCB_PrimitiveAttribute](classes/IPCB_PrimitiveAttribute.md) | Property primitive | | | [IPCB_PrimitiveComponent](classes/IPCB_PrimitiveComponent.md) | Device primitive | | | [IPCB_PrimitiveComponentPad](classes/IPCB_PrimitiveComponentPad.md) | Device pad primitive | | | [IPCB_PrimitiveDimension](classes/IPCB_PrimitiveDimension.md) | Dimension primitive | | | [IPCB_PrimitiveFill](classes/IPCB_PrimitiveFill.md) | Fill primitive | | | [IPCB_PrimitiveImage](classes/IPCB_PrimitiveImage.md) | Image primitive | | | [IPCB_PrimitiveLine](classes/IPCB_PrimitiveLine.md) | Line primitive | | | [IPCB_PrimitiveObject](classes/IPCB_PrimitiveObject.md) | Binary embedded object primitive | | | [IPCB_PrimitivePad](classes/IPCB_PrimitivePad.md) | Pad primitive | | | [IPCB_PrimitivePolyline](classes/IPCB_PrimitivePolyline.md) | Polyline primitive | | | [IPCB_PrimitivePour](classes/IPCB_PrimitivePour.md) | Copper border primitive | | | [IPCB_PrimitivePoured](classes/IPCB_PrimitivePoured.md) | Copper fill primitive | | | [IPCB_PrimitiveRegion](classes/IPCB_PrimitiveRegion.md) | Region primitive | | | [IPCB_PrimitiveString](classes/IPCB_PrimitiveString.md) | Text primitive | | | [IPCB_PrimitiveVia](classes/IPCB_PrimitiveVia.md) | Via primitive |
references/_quick-reference.md
# EasyEDA API 快速参考
> 此文件提供所有类及其方法/属性的签名一览,便于 AI 快速查找。
> 详细参数和返回值请查看 docs/classes/<ClassName>.md
## 全局入口
```typescript
declare const eda: EDA;
```
EDA 类的属性即为各模块的入口,如 `eda.dmt_Board`, `eda.pcb_PrimitiveLine` 等。
---
## DMT_Board
Document tree / Board management class
```typescript
class DMT_Board
```
- **copyboard**: `function copyBoard(sourceBoardName: string): Promise<string | undefined>;`
- **createboard**: `function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;`
- **deleteboard**: `function deleteBoard(boardName: string): Promise<boolean>;`
- **getallboardsinfo**: `function getAllBoardsInfo(): Promise<Array<IDMT_BoardItem>>;`
- **getboardinfo**: `function getBoardInfo(boardName: string): Promise<IDMT_BoardItem | undefined>;`
- **getcurrentboardinfo**: `function getCurrentBoardInfo(): Promise<IDMT_BoardItem | undefined>;`
- **modifyboardname**: `function modifyBoardName(originalBoardName: string, boardName: string): Promise<boolean>;`
---
## DMT_EditorControl
Document tree / Editor control class
```typescript
class DMT_EditorControl
```
- **activatedocument**: `function activateDocument(tabId: string): Promise<boolean>;`
- **activatesplitscreen**: `function activateSplitScreen(splitScreenId: string): Promise<boolean>;`
- **closedocument**: `function closeDocument(tabId: string): Promise<boolean>;`
- **createsplitscreen**: `function createSplitScreen( splitScreenType: EDMT_EditorSplitScreenDirection, tabId: string, ): Promise<{ sourceSplitScreenId: string; newSplitScreenId: string } | undefined>;`
- **generateindicatormarkers**: `function generateIndicatorMarkers( markers: Array<IDMT_IndicatorMarkerShape>, color?: { r: number; g: number; b: number; alpha: number }, lineWidth?: number, zoom?: boolean, tabId?: string, ): Promise<boolean>;`
- **getcurrentrenderedareaimage**: `function getCurrentRenderedAreaImage(tabId?: string): Promise<Blob | undefined>;`
- **getsplitscreenidbytabid**: `function getSplitScreenIdByTabId(tabId: string): Promise<string | undefined>;`
- **getsplitscreentree**: `function getSplitScreenTree(): Promise<IDMT_EditorSplitScreenItem | undefined>;`
- **gettabsbysplitscreenid**: `function getTabsBySplitScreenId(splitScreenId: string): Promise<Array<IDMT_EditorTabItem>>;`
- **mergealldocumentfromsplitscreen**: `function mergeAllDocumentFromSplitScreen(): Promise<boolean>;`
- **movedocumenttosplitscreen**: `function moveDocumentToSplitScreen(tabId: string, splitScreenId: string): Promise<boolean>;`
- **opendocument**: `function openDocument(documentUuid: string, splitScreenId?: string): Promise<string | undefined>;`
- **openlibrarydocument**: `function openLibraryDocument( libraryUuid: string, libraryType: ELIB_LibraryType.SYMBOL | ELIB_LibraryType.FOOTPRINT, uuid: string, splitScreenId?: string, ): Promise<string | undefined>;`
- **removeindicatormarkers**: `function removeIndicatorMarkers(tabId?: string): Promise<boolean>;`
- **tilealldocumenttosplitscreen**: `functireferences/classes/DMT_Board.md
# DMT\_Board class
Document tree / Board management class
## Signature
```typescript
class DMT_Board
```
## Remarks
Operations related to board management in the currently open project
## Methods
<table><thead><tr><th>
Method
</th><th>
Modifiers
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
[copyBoard(sourceBoardName)](./DMT_Board.md)
</td><td>
</td><td>
Copy Board
</td></tr>
<tr><td>
[createBoard(schematicUuid, pcbUuid)](./DMT_Board.md)
</td><td>
</td><td>
**_(BETA)_** Create Board
</td></tr>
<tr><td>
[deleteBoard(boardName)](./DMT_Board.md)
</td><td>
</td><td>
Delete Board
</td></tr>
<tr><td>
[getAllBoardsInfo()](./DMT_Board.md)
</td><td>
</td><td>
Get all in the project board detailed properties of
</td></tr>
<tr><td>
[getBoardInfo(boardName)](./DMT_Board.md)
</td><td>
</td><td>
Get detailed properties of Board
</td></tr>
<tr><td>
[getCurrentBoardInfo()](./DMT_Board.md)
</td><td>
</td><td>
Get detailed properties of Current board
</td></tr>
<tr><td>
[modifyBoardName(originalBoardName, boardName)](./DMT_Board.md)
</td><td>
</td><td>
Modify Board name
</td></tr>
</tbody></table>
---
## 方法详情
### copyboard
# DMT\_Board.copyBoard() method
Copy Board
## Signature
```typescript
function copyBoard(sourceBoardName: string): Promise<string | undefined>;
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
sourceBoardName
</td><td>
string
</td><td>
Source board name
</td></tr>
</tbody></table>
## Returns
Promise<string \| undefined>
New board name, if it is `undefined` the copy fails
## Example
```javascript
// 1. 取第一块板子的名称作为复制源
const boards = await eda.dmt_Board.getAllBoardsInfo();
const sourceName = boards[0].name;
// 2. 复制板子,返回新板子名称
const newBoardName = await eda.dmt_Board.copyBoard(sourceName);
console.log('source:', sourceName);
console.log('copy:', newBoardName);
// 3. 删除复制的板子,保持工程整洁
const deleted = await eda.dmt_Board.deleteBoard(newBoardName);
console.log('deleted:', deleted);
```
### createboard
# DMT\_Board.createBoard() method
> This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Create Board
## Signature
```typescript
function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
schematicUuid
</td><td>
string
</td><td>
_(Optional)_ Associated schematic UUID
</td></tr>
<tr><td>
pcbUuid
</td><td>
string
</td><td>
_(Optional)_ Associated PCB UUID
</td></tr>
</tbody></table>
## Returns
Promise<string \| undefined>
Board name, if it is `undefined` creation fails
## Example
```javascript
// 1. 无参调用,由系统自动创建一对原理图/PCB 文档并关联
const boardName = await eda.dmt_Board.createBoard();
console.log('create:', boardNreferences/classes/DMT_EditorControl.md
# DMT\_EditorControl class Document tree / Editor control class ## Signature ```typescript class DMT_EditorControl ``` ## Remarks Here the editor control is based on the sheets under the currently open engineering design. Any other `documentUuid` will be considered a non-existent document page ## Methods <table><thead><tr><th> Method </th><th> Modifiers </th><th> Description </th></tr></thead> <tbody><tr><td> [activateDocument(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Activate a document </td></tr> <tr><td> [activateSplitScreen(splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Activate a split screen </td></tr> <tr><td> [closeDocument(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Close document </td></tr> <tr><td> [createSplitScreen(splitScreenType, tabId)](./DMT_EditorControl.md) </td><td> </td><td> Create Split screen </td></tr> <tr><td> [generateIndicatorMarkers(markers, color, lineWidth, zoom, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Generate indicator markers </td></tr> <tr><td> [getCurrentRenderedAreaImage(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Get the canvas rendering region image </td></tr> <tr><td> [getSplitScreenIdByTabId(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Use tab ID get split screen ID </td></tr> <tr><td> [getSplitScreenTree()](./DMT_EditorControl.md) </td><td> </td><td> Get the editor split screen property tree </td></tr> <tr><td> [getTabsBySplitScreenId(splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Get all tabs under the specified split screen ID </td></tr> <tr><td> [mergeAllDocumentFromSplitScreen()](./DMT_EditorControl.md) </td><td> </td><td> Merge all split screens </td></tr> <tr><td> [moveDocumentToSplitScreen(tabId, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Move a document to the specified split screen </td></tr> <tr><td> [openDocument(documentUuid, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Open document </td></tr> <tr><td> [openLibraryDocument(libraryUuid, libraryType, uuid, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Open library symbol, footprint document </td></tr> <tr><td> [removeIndicatorMarkers(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Remove indicator markers </td></tr> <tr><td> [tileAllDocumentToSplitScreen()](./DMT_EditorControl.md) </td><td> </td><td> Tile all documents </td></tr> <tr><td> [zoomTo(x, y, scaleRatio, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to coordinates </td></tr> <tr><td> [zoomToAllPrimitives(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to all primitives (fit all) </td></tr> <tr><td> [zoomToRegion(left, right, top, bottom, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to region </td></tr> <tr><td> [zoomToSelectedPrimitives(tabId)]
Editorial read
Docs source
CLAWHUB
Editorial quality
thin
Skill: EasyEDA API Skill Owner: yanranxiaoxi Summary: EasyEDA Pro API skill for AI agents. Use when working with EasyEDA Pro EDA software, including PCB design, schematic editing, footprint/symbol management, and project operations. Supports live debugging in EasyEDA and EasyEDA extension development. Provides complete API reference (120+ classes, 62 enums, 70 interfaces), extension-development documentation, and a W
Skill: EasyEDA API Skill
Owner: yanranxiaoxi
Summary: EasyEDA Pro API skill for AI agents. Use when working with EasyEDA Pro EDA software, including PCB design, schematic editing, footprint/symbol management, and project operations. Supports live debugging in EasyEDA and EasyEDA extension development. Provides complete API reference (120+ classes, 62 enums, 70 interfaces), extension-development documentation, and a WebSocket bridge server to execute code in the running EasyEDA Pro client. Trigger on: "嘉立创EDA,启动!", "立创EDA,启动!", "EDA,启动!", "EasyEDA", "PCB", "schematic", "footprint", "EDA", "circuit board", "嘉立创EDA", "原理图", "PCB设计". IMPORTANT: 嘉立创EDA's English name is EasyEDA. They are the SAME product. Never use other transliterations like "EasyEDA Pro" (unless specifically versioned), "EASYEDA", "easyeda", etc. Always use "EasyEDA" for English references and "嘉立创EDA" for Chinese references.
Tags: latest:1.1.24
Version history:
v1.1.24 | 2026-09-10T08:36:14.032Z | auto
v1.1.23 | 2026-08-27T10:00:30.473Z | auto
v1.1.22 | 2026-08-27T04:00:26.547Z | auto
v1.1.21 | 2026-08-25T08:07:35.410Z | auto
v1.1.20 | 2026-08-25T03:41:33.226Z | auto
v1.1.19 | 2026-08-25T02:01:18.895Z | auto
v1.1.18 | 2026-08-24T04:04:15.282Z | auto
v1.1.17 | 2026-08-21T13:23:16.972Z | auto
v1.1.16 | 2026-08-21T09:46:24.206Z | auto
v1.1.15 | 2026-08-21T08:49:21.208Z | auto
v1.1.14 | 2026-08-21T03:37:59.405Z | auto
v1.1.13 | 2026-08-20T14:24:03.193Z | auto
v1.1.12 | 2026-08-20T09:55:12.179Z | auto
v1.1.11 | 2026-08-20T03:18:03.821Z | auto
v1.1.10 | 2026-08-19T13:27:52.323Z | auto
v1.1.9 | 2026-08-19T12:05:19.958Z | auto
easyeda-api v1.1.9
v1.1.8 | 2026-08-19T10:50:31.903Z | auto
v1.1.7 | 2026-08-18T10:51:08.238Z | auto
v1.1.5 | 2026-08-18T08:07:08.835Z | auto
v1.1.4 | 2026-08-18T06:32:43.712Z | auto
v1.1.6 | 2026-08-18T04:19:50.877Z | auto
v1.1.3 | 2026-04-24T01:53:37.968Z | auto
v1.1.2 | 2026-04-24T01:38:45.219Z | auto
v1.1.1 | 2026-04-23T08:03:00.323Z | auto
v1.1.0 | 2026-04-23T02:04:43.411Z | auto
v1.0.8 | 2026-04-02T07:49:55.697Z | auto
easyeda-api 1.0.8
CLAUDE_SKILL_DIR to required environment variables in the skill metadata.v1.0.7 | 2026-04-02T07:39:21.965Z | auto
easyeda-api v1.0.7
v1.0.6 | 2026-04-02T05:59:00.812Z | auto
easyeda-api 1.0.6
v1.0.5 | 2026-04-02T01:33:51.775Z | auto
easyeda-api v1.0.5
v1.0.4 | 2026-04-01T09:39:21.914Z | auto
v1.0.3 | 2026-03-24T06:03:29.795Z | auto
EasyEDA API Skill 1.0.3 — Adds documentation and usage for EasyEDA extension development
v1.0.2 | 2026-03-20T10:03:12.953Z | auto
v1.0.1 | 2026-03-20T07:28:01.458Z | auto
v1.0.0 | 2026-03-20T05:47:45.298Z | user
Initial release: EasyEDA Pro API integration skill for AI agents.
Archive index:
Archive v1.1.24: 456 files, 711473 bytes
Files: format/index.md (7050b), format/pcb/3d.md (4645b), format/pcb/attr.md (2064b), format/pcb/common.md (9692b), format/pcb/component.md (3692b), format/pcb/dimension.md (2047b), format/pcb/index.md (1219b), format/pcb/obj.md (1436b), format/pcb/pad_via.md (4795b), format/pcb/panel.md (1598b), format/pcb/partition.md (1030b), format/pcb/primitive.md (4993b), format/pcb/rule.md (2334b), format/pcb/shape.md (12240b), format/pcb/text.md (1963b), format/project/blob.md (1349b), format/project/common.md (935b), format/project/group.md (1644b), format/project/index.md (808b), format/project/instance.md (1329b), format/project/meta.md (3551b), format/project/variant.md (611b), format/schematic/attr.md (2105b), format/schematic/common.md (1445b), format/schematic/component.md (6838b), format/schematic/index.md (940b), format/schematic/obj.md (1249b), format/schematic/pin.md (2308b), format/schematic/shape.md (6973b), format/schematic/structure.md (1553b), format/schematic/table.md (2449b), format/schematic/text.md (1295b), format/schematic/wire.md (4953b), guide/ancillary-projects.md (4311b), guide/ancillary-projects/pro-api-sdk.md (56b), guide/ancillary-projects/pro-api-types.md (92b), guide/error-handling.md (1238b), guide/extension-json.md (4928b), guide/extensions-marketplace.md (4227b), guide/how-to-start-for-ai.md (17521b), guide/how-to-start.md (16338b), guide/i18n.md (3049b), guide/index.md (951b), guide/inline-frame.md (1390b), guide/invoke-apis.md (4110b), guide/stability.md (3198b), package-lock.json (1967b), package.json (262b), README.md (4807b), README.zh-Hans.md (4454b), references/_index.md (38791b), references/_quick-reference.md (193745b), references/classes/DMT_Board.md (8459b), references/classes/DMT_EditorControl.md (33440b), references/classes/DMT_Event.md (6139b), references/classes/DMT_Folder.md (12495b), references/classes/DMT_Panel.md (9807b), references/classes/DMT_Pcb.md (10269b), references/classes/DMT_Project.md (9458b), references/classes/DMT_Schematic.md (35259b), references/classes/DMT_SelectControl.md (2512b), references/classes/DMT_Team.md (3322b), references/classes/DMT_Workspace.md (3732b), references/classes/EDA.md (12516b), references/classes/IPCB_ComplexPolygon.md (6044b), references/classes/IPCB_Polygon.md (3090b), references/classes/IPCB_PrimitiveArc.md (37653b), references/classes/IPCB_PrimitiveAttribute.md (64926b), references/classes/IPCB_PrimitiveComponent.md (52305b), references/classes/IPCB_PrimitiveComponentPad.md (8772b), references/classes/IPCB_PrimitiveDimension.md (27831b), references/classes/IPCB_PrimitiveFill.md (28795b), references/classes/IPCB_PrimitiveImage.md (31889b), references/classes/IPCB_PrimitiveLine.md (32186b), references/classes/IPCB_PrimitiveObject.md (39835b), references/classes/IPCB_PrimitivePad.md (61154b), references/classes/IPCB_PrimitivePolyline.md (26817b), references/classes/IPCB_PrimitivePour.md (42693b), references/classes/IPCB_PrimitivePoured.md (12285b), references/classes/IPCB_PrimitiveRegion.md (29858b) (+56 more)
File v1.1.24:README.md
An EasyEDA Pro API skill package for AI coding tools such as Claude Code, OpenCode, QwenCode, and any other tool that supports the Agent Skills standard.
This skill supports both online debugging of EasyEDA Pro through AI and extension development for EasyEDA Pro. When developing EasyEDA extensions, AI can use the extension-development documentation, API references, type information, usage examples, and bridge debugging capabilities provided by this skill to help with API lookup, code generation, and integration debugging. If you want to analyze or modify EasyEDA document source files directly instead of operating through the API, this project also provides documentation for the source file formats.
npm install
npm run build:docs
This reads the raw API documentation from the reference/ directory and generates structured docs into the docs/ directory.
npm run server
The server automatically chooses an available port in the 49620-49629 range and waits for the EasyEDA client to connect.
Install the run-api-gateway.eext extension in EasyEDA. Download:
After the extension is loaded, it connects to the Bridge server automatically by scanning the port range and verifying the handshake.
AI coding tools such as Claude Code, OpenCode, and QwenCode automatically read SKILL.md for instructions, then use the HTTP API to send code to EasyEDA:
# Check EasyEDA connection status (assuming the service is on port 49620)
curl http://localhost:49620/health
# Execute EasyEDA code
curl -X POST http://localhost:49620/execute \
-H "Content-Type: application/json" \
-d '{"code": "return await eda.dmt_Project.getCurrentProjectInfo();"}'
npm run pack
This performs the following steps:
docs/)SKILL.md, documentation, and the server into dist/easyeda-api/dist/easyeda-api.zip for uploadIf the documentation has already been built, you can skip that step:
npm run pack:fast
npx clawhub@latest publish dist/easyeda-api/
Or upload the zip file at https://clawhub.ai/upload
┌──────────────┐ HTTP/WS ┌────────────────┐ WebSocket ┌──────────┐
│ AI Agent │ ◄───────────► │ Bridge Server │ ◄───────────► │ EasyEDA │
│ (Skill Tool) │ Port Range │ (Node.js) │ Port Range │ (Client) │
└──────────────┘ 49620-49629 └────────────────┘ 49620-49629 └──────────┘
| Message Type | Direction | Description |
|--------------|-----------|-------------|
| execute | AI → EDA | Execute JavaScript code |
| result | EDA → AI | Return execution result |
| error | EDA → AI | Return execution error |
| handshake | Server → Client | Connection verification (includes service: "easyeda-bridge") |
| ping/pong | Bidirectional | Heartbeat |
easyeda-api-skill/
SKILL.md # AgentSkills standard skill definition
AGENTS.md # Agent prompt guide
package.json # Project configuration
reference/ # Raw API reference docs (gitignored)
docs/ # Built structured docs (gitignored)
format/ # EasyEDA document source format specs (project/schematic/pcb)
guide/ # API development guides
user-guide/ # User guides
server/index.mjs # WebSocket Bridge server
scripts/
build-docs.mjs # Documentation build script
pack.mjs # Packaging script
dist/ # Packaging output (gitignored)
easyeda-api/ # Publishable skill directory
easyeda-api.zip # Zip archive for ClawHub upload
File v1.1.24:references/_index.md
此文档由构建脚本自动生成,供 AI 编程工具使用。 全局变量
eda是 EDA 类的实例,所有 API 通过eda.xxx调用。
所有 API 通过全局变量 eda 访问,例如:
eda.dmt_Board.createBoard() — 文档树 / 板子管理eda.pcb_PrimitiveLine.create() — PCB 直线图元创建eda.sys_WebSocket.register() — WebSocket 连接注册eda.sch_PrimitiveComponent.create() — 原理图器件创建| 类名 | 描述 | 备注 | |------|------|------| | DMT_Board | Document tree / Board management class | | | DMT_EditorControl | Document tree / Editor control class | | | DMT_Event | Document tree / event class | | | DMT_Folder | Document tree / Folder class | | | DMT_Panel | Document tree / Panel management class | | | DMT_Pcb | Document tree / PCB management class | | | DMT_Project | Document tree / Project management class | | | DMT_Schematic | Document tree / Schematic management class | | | DMT_SelectControl | Document tree / selection control class | | | DMT_Team | Document tree / Team class | | | DMT_Workspace | Document tree / Workspace class | | | EDA | EasyEDA Pro user API interface | | | IPCB_ComplexPolygon | Complex polygon | | | IPCB_Polygon | Single polygon | | | IPCB_PrimitiveArc | Arc line primitive | | | IPCB_PrimitiveAttribute | Property primitive | | | IPCB_PrimitiveComponent | Device primitive | | | IPCB_PrimitiveComponentPad | Device pad primitive | | | IPCB_PrimitiveDimension | Dimension primitive | | | IPCB_PrimitiveFill | Fill primitive | | | IPCB_PrimitiveImage | Image primitive | | | IPCB_PrimitiveLine | Line primitive | | | IPCB_PrimitiveObject | Binary embedded object primitive | | | IPCB_PrimitivePad | Pad primitive | | | IPCB_PrimitivePolyline | Polyline primitive | | | IPCB_PrimitivePour | Copper border primitive | | | IPCB_PrimitivePoured | Copper fill primitive | | | IPCB_PrimitiveRegion | Region primitive | | | IPCB_PrimitiveString | Text primitive | | | IPCB_PrimitiveVia | Via primitive | | | ISCH_PrimitiveArc | Arc primitive | | | ISCH_PrimitiveAttribute | Property primitive | | | ISCH_PrimitiveBus | Bus primitive | | | ISCH_PrimitiveCbbSymbolComponent | Reuse block symbol primitive | | | ISCH_PrimitiveCircle | Circle primitive | | | ISCH_PrimitiveComponent | Device primitive | | | ISCH_PrimitiveComponentPin | Device pin primitive | | | ISCH_PrimitiveObject | Binary embedded object primitive | | | ISCH_PrimitivePin | Pin primitive | | | ISCH_PrimitivePolygon | Polygon (polyline) primitive | | | ISCH_PrimitiveRectangle | Rectangle primitive | | | ISCH_PrimitiveText | Text primitive | | | ISCH_PrimitiveWire | Wire primitive | | | LIB_3DModel | Comprehensive library / 3D model class | | | LIB_Cbb | Comprehensive library / reuse block class | | | LIB_Classification | Comprehensive library / library classification index class | | | LIB_Device | Comprehensive library / device class | | | LIB_Footprint | Comprehensive library / footprint class | | | LIB_LibrariesList | Comprehensive library / library list class | | | LIB_PanelLibrary | Comprehensive library / panel library class | | | LIB_SelectControl | Comprehensive library / selection control class | | | LIB_SimulationModel | Comprehensive library / simulation model class | | | LIB_Symbol | Comprehensive library / symbol class | | | PCB_Document | PCB & footprint / document operation class | | | PCB_Drc | PCB & footprint / design rule check (DRC) class | | | PCB_Event | PCB & footprint / event class | | | PCB_ImageTool | PCB 图片工具类 | | | PCB_Layer | PCB & footprint / layer operation class | | | PCB_ManufactureData | PCB & footprint / manufacture data class | | | PCB_MathPolygon | PCB & footprint / polygon math class | | | PCB_Net | PCB & footprint / net class | | | PCB_Primitive | PCB & footprint / primitive class | | | PCB_PrimitiveArc | PCB & footprint / arc line primitive class | | | PCB_PrimitiveAttribute | PCB & footprint / property primitive class | | | PCB_PrimitiveComponent | PCB & footprint / device primitive class | | | PCB_PrimitiveDimension | PCB & footprint / dimension primitive class | | | PCB_PrimitiveFill | PCB & footprint / fill primitive class | | | PCB_PrimitiveImage | PCB & footprint / image primitive class | | | PCB_PrimitiveLine | PCB & footprint / line primitive class | | | PCB_PrimitiveObject | PCB & footprint / binary embedded object primitive class | | | PCB_PrimitivePad | PCB & footprint / pad primitive class | | | PCB_PrimitivePolyline | PCB & footprint / polyline primitive class | | | PCB_PrimitivePour | PCB & footprint / copper border primitive class | | | PCB_PrimitivePoured | PCB & footprint / copper fill primitive class | | | PCB_PrimitiveRegion | PCB & footprint / forbidden region and constrained region primitive class | | | PCB_PrimitiveString | PCB & footprint / text primitive class | | | PCB_PrimitiveVia | PCB & footprint / via primitive class | | | PCB_RayTracerEngine | PCB & footprint / ray tracer engine class | | | PCB_SelectControl | PCB & footprint / selection control class | | | PNL_Document | Panel / document operation class | | | SCH_Document | Schematic & symbol / document operation class | | | SCH_Drc | Schematic & symbol / design rule check (DRC) class | | | SCH_Event | Schematic & symbol / event class | | | SCH_ManufactureData | Schematic & symbol / manufacture data class | | | SCH_Net | Schematic & symbol / net class | | | SCH_Netlist | Schematic & symbol / netlist class | | | SCH_Primitive | Schematic & symbol / primitive class | | | SCH_PrimitiveArc | Schematic & symbol / arc primitive class | | | SCH_PrimitiveAttribute | Schematic & symbol / property primitive class | | | SCH_PrimitiveBus | Schematic & symbol / bus primitive class | | | SCH_PrimitiveCircle | Schematic & symbol / circle primitive class | | | SCH_PrimitiveComponent | Schematic & symbol / device primitive class | | | SCH_PrimitiveObject | Schematic & symbol / binary embedded object primitive class | | | SCH_PrimitivePin | Schematic & symbol / pin primitive class | | | SCH_PrimitivePolygon | Schematic & symbol / polygon (polyline) primitive class | | | SCH_PrimitiveRectangle | Schematic & symbol / rectangle primitive class | | | SCH_PrimitiveText | Schematic & symbol / text primitive class | | | SCH_PrimitiveWire | Schematic & symbol / wire primitive class | | | SCH_SelectControl | Schematic & symbol / selection control class | | | SCH_SimulationEngine | Schematic & symbol / simulation engine class | | | SCH_Utils | Schematic & symbol / utility class | | | SYS_ClientUrl | System / external request class | | | SYS_Dialog | System / dialog class | | | SYS_Environment | System / runtime environment class | | | SYS_ExternalApi | 外部接口注入管理类 | | | SYS_FileManager | System / file manager class | | | SYS_FileSystem | System / file system interaction class | | | SYS_FontManager | System / font manager class | | | SYS_FormatConversion | System / format conversion (Chameleon) class | | | SYS_HeaderMenu | System / header menu class | | | SYS_Help | Help 渐进式披露类 | | | SYS_I18n | System / multilingual class | | | SYS_IFrame | System / iframe window class | | | SYS_LoadingAndProgressBar | System / loading and progress bar class | | | SYS_Log | System / log class | | | SYS_Math | System / math class | | | SYS_Message | System / message notification class | | | SYS_MessageBox | System / message box class | | | SYS_MessageBus | System / message bus class | | | SYS_PanelControl | System / panel control class | | | SYS_RightClickMenu | System / right-click menu class | | | SYS_Setting | System / settings class | | | SYS_ShortcutKey | System / shortcut key class | | | SYS_Storage | System / storage class | | | SYS_Timer | System / timer class | | | SYS_ToastMessage | System / toast message class | | | SYS_Tool | System / tool class | | | SYS_Unit | System / unit class | | | SYS_WebSocket | System / WebSocket class | | | SYS_Window | System / window class | |
| 枚举名 | 描述 | 备注 | |--------|------|------| | EDMT_EditorDocumentType | Editor document type | | | EDMT_EditorSplitScreenDirection | Editor split screen direction | | | EDMT_EditorTabEventType | Editor tab event type | | | EDMT_IndicatorMarkerType | Indicator marker type | | | EDMT_ItemType | Document tree project type | | | EDMT_ProjectCollaborationMode | Project collaboration mode | | | ELIB_DeviceJlcLibraryCategory | EasyEDA SMT library category | | | ELIB_LibraryType | Comprehensive library library type | | | ELIB_PreviewType | Preview view type | | | ELIB_SimulationModelType | Simulation model type | | | ELIB_SymbolType | Symbol type | | | EPCB_AutoRoutingCornerStyle | Auto routing corner style | | | EPCB_AutoRoutingExistingPrimitiveMode | How auto routing handles existing wires/vias | | | EPCB_AutoRoutingOptimization | Auto routing optimization priority | | | EPCB_DocumentCanvasUpdateCalculationActiveStatus | Canvas update calculation function status | | | EPCB_DocumentRatlineCalculatingActiveStatus | Document ratline calculation function status | | | EPCB_InactiveLayerDisplayMode | Inactive layer display mode | | | EPCB_LayerColorConfiguration | Layer color configuration | | | EPCB_LayerId | Layer ID | | | EPCB_LayerStatus | Layer status | | | EPCB_LayerType | Layer type | | | EPCB_MouseEventType | Mouse event type | | | EPCB_NetEventType | Net event type | | | EPCB_PcbPlateType | PCB plate type | | | EPCB_PdfOutputMethod | PDF output method | | | EPCB_PrimitiveArcInteractiveMode | Arc interaction mode | | | EPCB_PrimitiveDimensionType | Dimension type | | | EPCB_PrimitiveEventType | Primitive event type | | | EPCB_PrimitiveFillMode | Fill primitive fill mode | | | EPCB_PrimitivePadHeatWeldingConnectionMethod | Pad heat welding connection method | | | EPCB_PrimitivePadHoleType | Pad drilling type | | | EPCB_PrimitivePadShapeType | Pad shape type | | | EPCB_PrimitivePadType | Pad type | | | EPCB_PrimitivePourFillMethod | Copper fill method | | | EPCB_PrimitiveRegionRuleType | Region primitive region rule type | | | EPCB_PrimitiveStringAlignMode | Text alignment mode | | | EPCB_PrimitiveType | Primitive type | | | EPCB_PrimitiveViaType | Via type | | | ESCH_DynamicSimulationEnginePullEventType | Dynamic simulation engine pull event type | | | ESCH_DynamicSimulationEnginePushEventType | Dynamic simulation engine push event type | | | ESCH_ExportDocumentFileType | Export document file type | | | ESCH_MouseEventType | Mouse event type | | | ESCH_PrimitiveComponentType | Device type | | | ESCH_PrimitiveEventType | Primitive event type | | | ESCH_PrimitiveFillStyle | Fill style | | | ESCH_PrimitiveLineType | Line type | | | ESCH_PrimitivePinShape | Pin shape | | | ESCH_PrimitivePinType | Pin type | | | ESCH_PrimitiveTextAlignMode | Text alignment mode | | | ESCH_PrimitiveType | Primitive type | | | ESCH_SimulationNetlistType | Simulation netlist type | | | ESCH_SpiceSimulationEnginePullEventType | Spice simulation engine pull event type | | | ESCH_SpiceSimulationEnginePushEventType | Spice simulation engine push event type | | | ESYS_BottomPanelTab | Bottom panel tab | | | ESYS_HeaderMenuEnvironment | Header menu environment | | | ESYS_ImportProjectBoardOutlineSource | Import project board outline source | | | ESYS_ImportProjectImportOption | Import project import option | | | ESYS_ImportProjectSchematicObjectStyle | Import project schematic primitive style | | | ESYS_ImportProjectViaSolderMaskExpansion | Import project via solder mask extension | | | ESYS_LeftPanelTab | Left panel tab | | | ESYS_LogType | Log type | | | ESYS_NetlistType | Netlist type | | | ESYS_RightPanelTab | Right panel tab | | | ESYS_ShortcutKeyEffectiveEditorRange | Effective page range of the shortcut key | | | ESYS_ShortcutKeyEffectiveEditorScene | Effective scene range of the shortcut key | | | ESYS_StartPageQuickStartItem | Start page quick start item | | | ESYS_Theme | Theme | | | ESYS_ToastMessageType | Toast message type | | | ESYS_Unit | Unit | | | ESYS_WindowEventType | Window event type | | | ESYS_WindowOpenTarget | Open window context target | | | NetportDeviceName | 网络端口符号对应的器件名称 | | | SchToolBarDeviceName | 悬浮框特殊符号对应的器件名称 | |
| 接口名 | 描述 | 备注 |
|--------|------|------|
| BoardProps | 分组面板:带标题的可折叠/分组容器 | |
| BorderConfig | 边框配置 | |
| ButtonProps | 按钮组件:可点击触发的操作按钮 | |
| CellClickInfo | 单元格点击信息 | |
| CellCoord | 单元格坐标(rowKey + colKey 定位一个单元格) | |
| CheckboxEditConfig | | |
| CheckBoxProps | 复选框组件:可勾选的状态控件 | |
| CheckChangeDetail | 勾选变更详情 | |
| ClipboardCellData | 剪贴板单元格数据 | |
| ClipboardConfig | 剪贴板配置 | |
| ColorPickerProps | 颜色拾取组件:复用 Input color 类型,点击弹出内置固定色板,支持预览/应用/手输/清除/默认/关闭 | |
| ColumnDef | 列定义 | |
| ColumnEditTrigger | 编辑触发方式 | |
| ColumnGroupDef | 列分组:多级表头 | |
| ColumnResizeConfig | 列宽拖拽配置 | |
| ComponentPropsMap | Component name → Props type mapping, serving as the sole source of the createComponent generic constraint | |
| CustomHeaderConfig | 自定义表头配置(列可见性管理) | |
| DialogProps | 对话框组件:带标题栏、可拖拽缩放的组合弹窗 | |
| DragSortConfig | 拖拽排序配置 | |
| EditingConfig | 编辑配置 | |
| FilteringConfig | 筛选配置 | |
| FixedColumnConfig | 固定列配置(也可通过 ColumnDef.fixed 逐列声明) | |
| FlexItemProps | Flex 子项:Flex 布局中的单个子元素 | |
| FlexProps | 布局容器:灵活的 Flex 布局容器 | |
| GridItemProps | Grid 子项:网格中的单个子元素 | |
| GridProps | 布局容器:固定列数的网格布局容器 | |
| IconProps | 图标配置:通过 URL 或 CSS class 指定图标 | |
| IDesignPortal | Component tree operation contract. | |
| IDMT_BoardItem | Board property | |
| IDMT_BriefProjectItem | Brief project properties | |
| IDMT_EditorDocumentItem | Editor document object | |
| IDMT_EditorSplitScreenItem | Editor split screen property | |
| IDMT_EditorTabItem | Editor tab | |
| IDMT_FolderItem | Folder property | |
| IDMT_IndicatorMarkerShape | Indicator marker shape | |
| IDMT_PanelItem | Panel property | |
| IDMT_PcbItem | PCB property | |
| IDMT_ProjectItem | Project property | |
| IDMT_SchematicItem | Schematic property | |
| IDMT_SchematicPageItem | Schematic sheet property | |
| IDMT_TeamItem | Team properties | |
| IDMT_WorkspaceItem | Workspace properties | |
| ILIB_3DModelItem | 3D model property | |
| ILIB_3DModelSearchItem | Searched 3D model properties | |
| ILIB_CbbItem | Reuse block property | |
| ILIB_CbbSearchItem | Searched reuse block properties | |
| ILIB_ClassificationIndex | Classification index | |
| ILIB_DeviceAssociationItem | Device associated symbol, footprint property | |
| ILIB_DeviceExtendPropertyItem | Device extension property | |
| ILIB_DeviceItem | Device property | |
| ILIB_DevicePropertiesForSearch | Device parameters that can be used for precise search | |
| ILIB_DeviceSearchItem | Searched device properties | |
| ILIB_ExtendLibrary3DModelFunctions | External library 3D model functions | |
| ILIB_ExtendLibraryCbbFunctions | External library reuse block functions | |
| ILIB_ExtendLibraryClassificationIndex | External library classification index | |
| ILIB_ExtendLibraryDeviceFunctions | External library device functions | |
| ILIB_ExtendLibraryFootprintFunctions | External library footprint functions | |
| ILIB_ExtendLibraryFunctions | External library functions | |
| ILIB_ExtendLibraryItem | External library item | |
| ILIB_ExtendLibraryItemIndex | External library item index | |
| ILIB_ExtendLibrarySearchProperty | External library search property | |
| ILIB_ExtendLibrarySearchResult | External library search result | |
| ILIB_ExtendLibrarySearchResultDataLine | External library search result data line | |
| ILIB_ExtendLibrarySymbolFunctions | External library symbol functions | |
| ILIB_ExtendLibraryUserIndex | External library user index | |
| ILIB_FootprintItem | Footprint property | |
| ILIB_FootprintPropertiesForSearch | Footprint parameters that can be used for precise search | |
| ILIB_FootprintSearchItem | Searched footprint properties | |
| ILIB_LibraryInfo | Library information | |
| ILIB_LibraryItem | Library property | |
| ILIB_PanelLibraryItem | Panel library property | |
| ILIB_PanelLibrarySearchItem | Searched panel library properties | |
| ILIB_SimulationModelItem | Simulation model properties | |
| ILIB_SimulationModelSearchItem | Searched simulation model properties | |
| ILIB_SymbolItem | Symbol property | |
| ILIB_SymbolPropertiesForSearch | Symbol parameters that can be used for precise search | |
| ILIB_SymbolSearchItem | Searched symbol properties | |
| ImageProps | 图片组件:展示单张图片 | |
| InputEditConfig | | |
| InputProps | 输入框组件:支持下拉、搜索、清除、前后缀等多种形态 | |
| IPCB_AutoLayoutResult | Auto layout result | |
| IPCB_AutoRoutingProps | Auto routing props | |
| IPCB_AutoRoutingResult | Auto routing result | |
| IPCB_BomPropertiesTableColumns | BOM column properties and sorting rules | |
| IPCB_DifferentialPairItem | Differential pair properties | |
| IPCB_DiscretizedPoint | Discretized point | |
| IPCB_DiscretizeOptions | Discretization options | |
| IPCB_EqualLengthNetGroupItem | Equal-length net group properties | |
| IPCB_LayerItem | Layer properties | |
| IPCB_NetClassItem | Net class property | |
| IPCB_NetInfo | Net property | |
| IPCB_PadPairGroupItem | Pad pair group properties | |
| IPCB_PadPairMinWireLengthItem | Pad pair minimum wire length properties | |
| IPCB_PhysicalStackingConfiguration | Physical stacking configuration | |
| IPCB_Primitive | PCB primitive | |
| IPCB_PrimitiveAPI | PCB primitive API | |
| IPCB_PrimitivePadHeatWelding | Pad thermal relief optimization parameters | |
| IPCB_PrimitivePouredPourFill | Copper fill region | |
| IPCB_PrimitiveSolderMaskAndPasteMaskExpansion | Solder mask / paste mask expansion | |
| IPCB_SubstratePhysicalProperties | Substrate physical properties | |
| IRawNet | Raw data - net | |
| IRawPureSchematic | Raw data - pureSchematic | |
| IRawSchematic | Raw data - schematic | |
| IRawWire | Raw data - wire | |
| ISCH_DrcError | DRC error item | |
| ISCH_DrcErrorPrimitive | Primitive involved in a DRC error | |
| ISCH_ExportPngResolution | 原理图导出图片分辨率 | |
| ISCH_NetInfo | Net property | |
| ISCH_Primitive | Schematic primitive | |
| ISCH_PrimitiveAPI | Schematic primitive API | |
| ISCH_ProjectNetInfo | Project net property | |
| ISCH_WireInfo | Wire property | |
| ISYS_ExtensionExternalApiIndex | external API 扁平索引(按命名空间分组) | |
| ISYS_ExtensionRegisteredExternalApis | 扩展注入的上层接口注册表(按扩展分组) | |
| ISYS_ExternalApiHelp | 扩展注入的上层接口 Help 元数据 | |
| ISYS_ExternalApiRegistration | 扩展注入的上层接口注册条目 | |
| ISYS_FileSystemFileList | File system file path | |
| ISYS_HeaderMenus | Header menu item | |
| ISYS_HeaderMenuSub1MenuItem | Top-level secondary menu item | |
| ISYS_HeaderMenuSub2MenuItem | Top-level tertiary menu item | |
| ISYS_HeaderMenuTopMenuItem | Top-level primary menu item | |
| ISYS_HelpClassSummary | 由 help 查询返回的类摘要 | |
| ISYS_HelpData | lc-build 生成的 API jsonSchema(d.ts 的 JSON 形态) | |
| ISYS_HelpMethodDetail | Help 查询返回的方法详情 | |
| ISYS_LogLine | Log line | |
| ISYS_MathBBox | BBox (minimum bounding rectangle) | |
| ISYS_MathPoint | Discrete points | |
| ISYS_MathPolygonWithHoles | Polygon with holes | |
| ISYS_MessageBusTask | Message bus task | |
| ISYS_MultilingualLanguagesData | Multilingual data | |
| ISYS_PcbComparisonResponse | PCB comparison response | |
| ISYS_RightClickMenuItem | Right-click menu item | |
| ISYS_ShortcutKeyData | Shortcut key data | |
| ISYS_ShortcutKeyDataWithCallFn | Shortcut key data with CallFn | |
| ISYS_ShortcutKeyDataWithUserDefinedShortcutKey | Shortcut key data with userDefinedShortcutKey | |
| ISYS_WindowEventListenerRemovableObject | Window event listener can remove object | |
| KeyboardConfig | 键盘导航配置 | |
| ListChildren | 列表项:支持多级嵌套分组 | |
| ListProps | 列表组件:支持多级嵌套、图标、展开的列表 | |
| ModalProps | 模态弹窗:可拖拽、可调整大小的顶层弹窗 | |
| NumberEditConfig | | |
| RadioGroupProps | 单选组组件:一组互斥的单选选项 | |
| RadioItem | 单选组中的单个选项 | |
| RichTableProps | RichTable 组件属性 | |
| RowMetaConfig | 行元数据配置,独立于业务数据(挂在 row.rowMeta 上) | |
| ScrollerProps | 滚动组件:虚拟滚动列表,仅渲染可见行 | |
| SelectEditConfig | | |
| SelectionConfig | 选择配置 | |
| SelectListItem | 下拉选项:支持多级嵌套分组 | |
| SelectOption | 下拉选项 | |
| SelectProps | 下拉选择器:基于输入框的下拉选择控件 | |
| SliderProps | 滑杆组件:基于浏览器原生 range 输入 | |
| SlotProps | 插槽组件:为父组件提供具名内容占位 | |
| SortingConfig | 排序配置 | |
| SortState | 排序状态 | |
| StyleProps | 通用样式属性:可被布局容器等组件继承的样式集合 | |
| TextareaEditConfig | | |
| TextAreaProps | 多行文本输入组件 | |
| TextProps | 文本组件:静态文本展示 | |
| ValidationRule | 校验规则(声明式,纯数据,可序列化) | |
| VirtualScrollConfig | 虚拟滚动配置 | |
| 类型名 | 描述 | 备注 | |--------|------|------| | Align | 对齐方式 | | | CellContentType | 剪贴板单元格内容类型(决定粘贴时的解析策略) | | | ColumnDefOrGroup | 列定义(支持普通列和列分组) | | | ColumnEditConfig | 五种编辑器类型配置 | | | ColumnType | 列数据类型,默认 'text'。决定默认排序类型(sortType)和筛选匹配模式(filterMatchMode) | | | DataChangeType | 数据变更类型 | | | FilterMatchMode | 筛选匹配模式 | | | RichTableRow | 行数据:业务数据 + 行元数据(rowMeta) | | | Serializable | | | | SerializablePrimitive | 可序列化纯数据(可跨 BroadcastChannel 结构化克隆)。 编译期拒绝函数 / Date / React 元素等不可序列化值——slotProps 等跨广播字段必须用它。 | | | SortOrder | 排序方向 | | | TPCB_LayersInTheSelectable | Selectable layers | | | TPCB_LayersOfComponent | Layers of the device | | | TPCB_LayersOfCopper | Layers of copper | | | TPCB_LayersOfCustom | Custom layers | | | TPCB_LayersOfDimension | Layers of the dimension | | | TPCB_LayersOfFill | Layers of the fill | | | TPCB_LayersOfImage | Layers of complex polygon figures (SVG images, text) | | | TPCB_LayersOfInner | Inner layers | | | TPCB_LayersOfLine | Layers of the line | | | TPCB_LayersOfObject | Layers of binary embedded objects | | | TPCB_LayersOfPad | Layers of the pad | | | TPCB_LayersOfRegion | Layers of the region | | | TPCB_LayerTypesOfInnerLayer | Layer types allowed to be set for inner layers | | | TPCB_NumberOfCopperLayers | Number of copper layers | | | TPCB_PolygonSourceArray | Single polygon source array | | | TPCB_PrimitiveDimensionCoordinateSet | Dimension coordinate set | | | TPCB_PrimitivePadHole | Pad drilling | | | TPCB_PrimitivePadShape | Pad shape | | | TPCB_PrimitiveSpecialPadShape | Special pad shape | | | TSYS_LanguageKeyValuePairs | 语言数据键值对 | | | TSYS_MathPolygonGroup | Polygon group | | | TSYS_MathPolygonInput | Polygon input type | | | TSYS_PcbComparisonErrorCode | PCB comparison failure error code | | | TSYS_ShortcutKeys | Shortcut key | |
File v1.1.24:references/_quick-reference.md
此文件提供所有类及其方法/属性的签名一览,便于 AI 快速查找。 详细参数和返回值请查看 docs/classes/<ClassName>.md
declare const eda: EDA;
EDA 类的属性即为各模块的入口,如 eda.dmt_Board, eda.pcb_PrimitiveLine 等。
Document tree / Board management class
class DMT_Board
function copyBoard(sourceBoardName: string): Promise<string | undefined>;function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;function deleteBoard(boardName: string): Promise<boolean>;function getAllBoardsInfo(): Promise<Array<IDMT_BoardItem>>;function getBoardInfo(boardName: string): Promise<IDMT_BoardItem | undefined>;function getCurrentBoardInfo(): Promise<IDMT_BoardItem | undefined>;function modifyBoardName(originalBoardName: string, boardName: string): Promise<boolean>;Document tree / Editor control class
class DMT_EditorControl
function activateDocument(tabId: string): Promise<boolean>;function activateSplitScreen(splitScreenId: string): Promise<boolean>;function closeDocument(tabId: string): Promise<boolean>;function createSplitScreen( splitScreenType: EDMT_EditorSplitScreenDirection, tabId: string, ): Promise<{ sourceSplitScreenId: string; newSplitScreenId: string } | undefined>;function generateIndicatorMarkers( markers: Array<IDMT_IndicatorMarkerShape>, color?: { r: number; g: number; b: number; alpha: number }, lineWidth?: number, zoom?: boolean, tabId?: string, ): Promise<boolean>;function getCurrentRenderedAreaImage(tabId?: string): Promise<Blob | undefined>;function getSplitScreenIdByTabId(tabId: string): Promise<string | undefined>;function getSplitScreenTree(): Promise<IDMT_EditorSplitScreenItem | undefined>;function getTabsBySplitScreenId(splitScreenId: string): Promise<Array<IDMT_EditorTabItem>>;function mergeAllDocumentFromSplitScreen(): Promise<boolean>;function moveDocumentToSplitScreen(tabId: string, splitScreenId: string): Promise<boolean>;function openDocument(documentUuid: string, splitScreenId?: string): Promise<string | undefined>;function openLibraryDocument( libraryUuid: string, libraryType: ELIB_LibraryType.SYMBOL | ELIB_LibraryType.FOOTPRINT, uuid: string, splitScreenId?: string, ): Promise<string | undefined>;function removeIndicatorMarkers(tabId?: string): Promise<boolean>;function tileAllDocumentToSplitScreen(): Promise<boolean>;function zoomTo( x?: number, y?: number, scaleRatio?: number, tabId?: string, ): Promise<{ left: number; right: number; top: number; bottom: number } | false>;function zoomToAllPrimitives( tabId?: string, ): Promise<{ left: number; right: number; top: number; bottom: number } | false>;function zoomToRegion( left: number, right: number, top: number, bottom: number, tabId?: string, ): Promise<boolean>;function zoomToSelectedPrimitives( tabId?: string, ): Promise<{ left: number; right: number; top: number; bottom: number } | false>;Document tree / event class
class DMT_Event
function addEditorTabEventListener( id: string, eventType: 'all' | EDMT_EditorTabEventType, callFn: ( eventType: EDMT_EditorTabEventType, props: { documentType: EDMT_EditorDocumentType; title: string; tabId: string }, ) => void | Promise<void>, onlyOnce?: boolean, ): void;function isEventListenerAlreadyExist(id: string): boolean;function removeEventListener(id: string): boolean;Document tree / Folder class
class DMT_Folder
function createFolder( folderName: string, teamUuid: string, parentFolderUuid?: string, description?: string, ): Promise<string | undefined>;function deleteFolder(teamUuid: string, folderUuid: string): Promise<boolean>;function getAllFoldersUuid(teamUuid: string): Promise<Array<string>>;function getFolderInfo(teamUuid: string, folderUuid: string): Promise<IDMT_FolderItem | undefined>;function modifyFolderDescription( teamUuid: string, folderUuid: string, description?: string, ): Promise<boolean>;function modifyFolderName( teamUuid: string, folderUuid: string, folderName: string, ): Promise<boolean>;function moveFolderToFolder( teamUuid: string, folderUuid: string, parentFolderUuid?: string, ): Promise<boolean>;Document tree / Panel management class
class DMT_Panel
function copyPanel(panelUuid: string): Promise<string | undefined>;function createPanel(): Promise<string | undefined>;function deletePanel(panelUuid: string): Promise<boolean>;function getAllPanelsInfo(): Promise<Array<IDMT_PanelItem>>;function getCurrentPanelInfo(): Promise<IDMT_PanelItem | undefined>;function getPanelInfo(panelUuid: string): Promise<IDMT_PanelItem | undefined>;function modifyPanelName(panelUuid: string, panelName: string): Promise<boolean>;Document tree / PCB management class
class DMT_Pcb
function copyPcb(pcbUuid: string, boardName?: string): Promise<string | undefined>;function createPcb(boardName?: string): Promise<string | undefined>;function deletePcb(pcbUuid: string): Promise<boolean>;function getAllPcbsInfo(): Promise<Array<IDMT_PcbItem>>;function getCurrentPcbInfo(): Promise<IDMT_PcbItem | undefined>;function getPcbInfo(pcbUuid: string): Promise<IDMT_PcbItem | undefined>;function modifyPcbName(pcbUuid: string, pcbName: string): Promise<boolean>;Document tree / Project management class
class DMT_Project
function createProject( projectFriendlyName: string, projectName?: string, teamUuid?: string, folderUuid?: string, description?: string, collaborationMode?: EDMT_ProjectCollaborationMode, ): Promise<string | undefined>;function getAllProjectsUuid( teamUuid?: string, folderUuid?: string, workspaceUuid?: string, ): Promise<Array<string>>;function getCurrentProjectInfo(): Promise<IDMT_ProjectItem | undefined>;function getProjectInfo(projectUuid: string): Promise<IDMT_BriefProjectItem | undefined>;function moveProjectToFolder(projectUuid: string, folderUuid?: string): Promise<boolean>;function openProject(projectUuid: string): Promise<boolean>;Document tree / Schematic management class
class DMT_Schematic
function copySchematic(schematicUuid: string, boardName?: string): Promise<string | undefined>;function copySchematicPage( schematicPageUuid: string, schematicUuid?: string, ): Promise<string | undefined>;function createSchematic(boardName?: string): Promise<string | undefined>;function createSchematicPage(schematicUuid: string): Promise<string | undefined>;function deleteSchematic(schematicUuid: string): Promise<boolean>;function deleteSchematicPage(schematicPageUuid: string): Promise<boolean>;function getAllSchematicPagesInfo(): Promise<Array<IDMT_SchematicPageItem>>;function getAllSchematicsInfo(): Promise<Array<IDMT_SchematicItem>>;function getCurrentSchematicAllSchematicPagesInfo(): Promise<Array<IDMT_SchematicPageItem>>;function getCurrentSchematicInfo(): Promise<IDMT_SchematicItem | undefined>;function getCurrentSchematicPageInfo(): Promise<IDMT_SchematicPageItem | undefined>;function getSchematicInfo(schematicUuid: string): Promise<IDMT_SchematicItem | undefined>;function getSchematicPageInfo( schematicPageUuid: string, ): Promise<IDMT_SchematicPageItem | undefined>;function modifySchematicName(schematicUuid: string, schematicName: string): Promise<boolean>;function modifySchematicPageName( schematicPageUuid: string, schematicPageName: string, ): Promise<boolean>;function modifySchematicPageTitleBlock( showTitleBlock?: boolean, titleBlockData?: Record<string, { showTitle?: boolean; showValue?: boolean; value?: any }>, ): Promise<boolean>;function reorderSchematicPages( schematicUuid: string, schematicPageItemsArray: Array<IDMT_SchematicPageItem>, ): Promise<boolean>;Document tree / selection control class
class DMT_SelectControl
function getCurrentDocumentInfo(): Promise<IDMT_EditorDocumentItem | undefined>;Document tree / Team class
class DMT_Team
function getAllInvolvedTeamInfo(): Promise<Array<IDMT_TeamItem>>;function getAllTeamsInfo(): Promise<Array<IDMT_TeamItem>>;function getCurrentTeamInfo(): Promise<IDMT_TeamItem | undefined>;Document tree / Workspace class
class DMT_Workspace
function getAllWorkspacesInfo(): Promise<Array<IDMT_WorkspaceItem>>;function getCurrentWorkspaceInfo(): Promise<IDMT_WorkspaceItem | undefined>;function toggleToWorkspace(workspaceUuid?: string): Promise<boolean>;EasyEDA Pro user API interface
eda: EDA;
function dmt_Board: DMT_Board;function dmt_EditorControl: DMT_EditorControl;function dmt_Event: DMT_Event;function dmt_Folder: DMT_Folder;function dmt_Panel: DMT_Panel;function dmt_Pcb: DMT_Pcb;function dmt_Project: DMT_Project;function dmt_Schematic: DMT_Schematic;function dmt_SelectControl: DMT_SelectControl;function dmt_Team: DMT_Team;function dmt_Workspace: DMT_Workspace;function lib_3DModel: LIB_3DModel;function lib_Cbb: LIB_Cbb;function lib_Classification: LIB_Classification;function lib_Device: LIB_Device;function lib_Footprint: LIB_Footprint;function lib_LibrariesList: LIB_LibrariesList;function lib_PanelLibrary: LIB_PanelLibrary;function lib_SelectControl: LIB_SelectControl;function lib_SimulationModel: LIB_SimulationModel;function lib_Symbol: LIB_Symbol;function pcb_Document: PCB_Document;function pcb_Drc: PCB_Drc;function pcb_Event: PCB_Event;function pcb_ImageTool: PCB_ImageTool;function pcb_Layer: PCB_Layer;function pcb_ManufactureData: PCB_ManufactureData;function pcb_MathPolygon: PCB_MathPolygon;function pcb_Net: PCB_Net;function pcb_Primitive: PCB_Primitive;function pcb_PrimitiveArc: PCB_PrimitiveArc;function pcb_PrimitiveAttribute: PCB_PrimitiveAttribute;function pcb_PrimitiveComponent: PCB_PrimitiveComponent;function pcb_PrimitiveDimension: PCB_PrimitiveDimension;function pcb_PrimitiveFill: PCB_PrimitiveFill;function pcb_PrimitiveImage: PCB_PrimitiveImage;function pcb_PrimitiveLine: PCB_PrimitiveLine;function pcb_PrimitiveObject: PCB_PrimitiveObject;function pcb_PrimitivePad: PCB_PrimitivePad;function pcb_PrimitivePolyline: PCB_PrimitivePolyline;function pcb_PrimitivePour: PCB_PrimitivePour;function pcb_PrimitivePoured: PCB_PrimitivePoured;function pcb_PrimitiveRegion: PCB_PrimitiveRegion;function pcb_PrimitiveString: PCB_PrimitiveString;function pcb_PrimitiveVia: PCB_PrimitiveVia;function pcb_RayTracerEngine: PCB_RayTracerEngine;function pcb_SelectControl: PCB_SelectControl;function pnl_Document: PNL_Document;function sch_Document: SCH_Document;function sch_Drc: SCH_Drc;function sch_Event: SCH_Event;function sch_ManufactureData: SCH_ManufactureData;function sch_Net: SCH_Net;function sch_Netlist: SCH_Netlist;function sch_Primitive: SCH_Primitive;function sch_PrimitiveArc: SCH_PrimitiveArc;function sch_PrimitiveAttribute: SCH_PrimitiveAttribute;function sch_PrimitiveBus: SCH_PrimitiveBus;function sch_PrimitiveCircle: SCH_PrimitiveCircle;function sch_PrimitiveComponent: SCH_PrimitiveComponent;function sch_PrimitiveObject: SCH_PrimitiveObject;function sch_PrimitivePin: SCH_PrimitivePin;function sch_PrimitivePolygon: SCH_PrimitivePolygon;function sch_PrimitiveRectangle: SCH_PrimitiveRectangle;function sch_PrimitiveText: SCH_PrimitiveText;function sch_PrimitiveWire: SCH_PrimitiveWire;function sch_SelectControl: SCH_SelectControl;function sch_SimulationEngine: SCH_SimulationEngine;function sch_Utils: SCH_Utils;function sys_ClientUrl: SYS_ClientUrl;function sys_Dialog: SYS_Dialog;function sys_Environment: SYS_Environment;function sys_ExternalApi: SYS_ExternalApi;function sys_FileManager: SYS_FileManager;function sys_FileSystem: SYS_FileSystem;function sys_FontManager: SYS_FontManager;function sys_FormatConversion: SYS_FormatConversion;function sys_HeaderMenu: SYS_HeaderMenu;function sys_Help: SYS_Help;function sys_I18n: SYS_I18n;function sys_IFrame: SYS_IFrame;function sys_LoadingAndProgressBar: SYS_LoadingAndProgressBar;function sys_Log: SYS_Log;function sys_Math: SYS_Math;function sys_Message: SYS_Message;function sys_MessageBox: SYS_MessageBox;function sys_MessageBus: SYS_MessageBus;function sys_PanelControl: SYS_PanelControl;function sys_RightClickMenu: SYS_RightClickMenu;function sys_Setting: SYS_Setting;function sys_ShortcutKey: SYS_ShortcutKey;function sys_Storage: SYS_Storage;function sys_Timer: SYS_Timer;function sys_ToastMessage: SYS_ToastMessage;function sys_Tool: SYS_Tool;function sys_Unit: SYS_Unit;function sys_WebSocket: SYS_WebSocket;function sys_Window: SYS_Window;Complex polygon
class IPCB_ComplexPolygon
function addSource( complexPolygon: | TPCB_PolygonSourceArray | Array<TPCB_PolygonSourceArray> | IPCB_Polygon | Array<IPCB_Polygon>, ): IPCB_ComplexPolygon;function getCenter(): Promise<{ x: number; y: number }>;function getSource(): TPCB_PolygonSourceArray | Array<TPCB_PolygonSourceArray>;function getSourceStrictComplex(): Array<TPCB_PolygonSourceArray>;function toPolygon(): Array<IPCB_Polygon>;Single polygon
class IPCB_Polygon
function discretize(options?: IPCB_DiscretizeOptions): Promise<Array<IPCB_DiscretizedPoint>>;function getCenter(): Promise<{ x: number; y: number }>;function getSource(): TPCB_PolygonSourceArray;Arc line primitive
class IPCB_PrimitiveArc implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveArc>;function getAdjacentPrimitives(): Promise< Array<IPCB_PrimitiveLine | IPCB_PrimitiveVia | IPCB_PrimitiveArc> >;function getEntireTrack(includeVias: false): Promise<Array<IPCB_PrimitiveLine | IPCB_PrimitiveArc>>;function getEntireTrack( includeVias: true, ): Promise<Array<IPCB_PrimitiveLine | IPCB_PrimitiveArc | IPCB_PrimitiveVia>>;function getState_ArcAngle(): number;function getState_EndX(): number;function getState_EndY(): number;function getState_InteractiveMode(): EPCB_PrimitiveArcInteractiveMode;function getState_Layer(): TPCB_LayersOfLine;function getState_LineWidth(): number;function getState_Net(): string;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_StartX(): number;function getState_StartY(): number;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveArc>;function setState_ArcAngle(arcAngle: number): IPCB_PrimitiveArc;function setState_EndX(endX: number): IPCB_PrimitiveArc;function setState_EndY(endY: number): IPCB_PrimitiveArc;function setState_InteractiveMode( interactiveMode: EPCB_PrimitiveArcInteractiveMode, ): IPCB_PrimitiveArc;function setState_Layer(layer: TPCB_LayersOfLine): IPCB_PrimitiveArc;function setState_LineWidth(lineWidth: number): IPCB_PrimitiveArc;function setState_Net(net: string): IPCB_PrimitiveArc;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveArc;function setState_StartX(startX: number): IPCB_PrimitiveArc;function setState_StartY(startY: number): IPCB_PrimitiveArc;function toAsync(): IPCB_PrimitiveArc;function toSync(): IPCB_PrimitiveArc;Property primitive
class IPCB_PrimitiveAttribute implements IPCB_Primitive
function constructor( layer: TPCB_LayersOfImage, x: number | null, y: number | null, key: string, value: string, keyVisible: boolean, valueVisible: boolean, fontFamily: string, fontSize: number, lineWidth: number, alignMode: EPCB_PrimitiveStringAlignMode, rotation: number, reverse: boolean, expansion: number, mirror: boolean, primitiveLock: boolean, primitiveId: string, parentPrimitiveId: string, );function done(): Promise<IPCB_PrimitiveAttribute>;function getState_AlignMode(): EPCB_PrimitiveStringAlignMode;function getState_Expansion(): number;function getState_FontFamily(): string;function getState_FontSize(): number;function getState_Key(): string;function getState_KeyVisible(): boolean;function getState_Layer(): TPCB_LayersOfImage;function getState_LineWidth(): number;function getState_Mirror(): boolean;function getState_ParentPrimitiveId(): string;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_Reverse(): boolean;function getState_Rotation(): number;function getState_Value(): string;function getState_ValueVisible(): boolean;function getState_X(): number | null;function getState_Y(): number | null;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveAttribute>;function setState_AlignMode(alignMode: EPCB_PrimitiveStringAlignMode): IPCB_PrimitiveAttribute;function setState_Expansion(expansion: number): IPCB_PrimitiveAttribute;function setState_FontFamily(fontFamily: string): IPCB_PrimitiveAttribute;function setState_FontSize(fontSize: number): IPCB_PrimitiveAttribute;function setState_Key(key: string): IPCB_PrimitiveAttribute;function setState_KeyVisible(keyVisible: boolean): IPCB_PrimitiveAttribute;function setState_Layer(layer: TPCB_LayersOfImage): IPCB_PrimitiveAttribute;function setState_LineWidth(lineWidth: number): IPCB_PrimitiveAttribute;function setState_Mirror(mirror: boolean): IPCB_PrimitiveAttribute;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveAttribute;function setState_Reverse(reverse: boolean): IPCB_PrimitiveAttribute;function setState_Rotation(rotation: number): IPCB_PrimitiveAttribute;function setState_Value(value: string): IPCB_PrimitiveAttribute;function setState_ValueVisible(valueVisible: boolean): IPCB_PrimitiveAttribute;function setState_X(x: number): IPCB_PrimitiveAttribute;function setState_Y(y: number): IPCB_PrimitiveAttribute;function toAsync(): IPCB_PrimitiveAttribute;function toSync(): IPCB_PrimitiveAttribute;Device primitive
class IPCB_PrimitiveComponent implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveComponent>;function getAllPins(): Promise<Array<IPCB_PrimitiveComponentPad>>;function getState_AddIntoBom(): boolean;function getState_Component(): { libraryUuid: string; uuid: string; name?: string } | undefined;function getState_Designator(): string | undefined;function getState_Footprint(): { libraryUuid: string; uuid: string; name?: string } | undefined;function getState_Layer(): TPCB_LayersOfComponent;function getState_Manufacturer(): string | undefined;function getState_ManufacturerId(): string | undefined;function getState_Model3D(): { libraryUuid: string; uuid: string; name?: string } | undefined;function getState_Name(): string | undefined;function getState_OtherProperty(): Record<string, string | number | boolean> | undefined;function getState_Pads(): Array<{ primitiveId: string; net: string; padNumber: string }> | undefined;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_Rotation(): number;function getState_Supplier(): string | undefined;function getState_SupplierId(): string | undefined;function getState_UniqueId(): string | undefined;function getState_X(): number;function getState_Y(): number;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveComponent>;function setAttribute( key: string, value?: string | number | boolean, keyVisible?: boolean, valueVisible?: boolean, ): Promise<IPCB_PrimitiveAttribute>;function setState_AddIntoBom(addIntoBom: boolean): IPCB_PrimitiveComponent;function setState_Designator(designator: string | undefined): IPCB_PrimitiveComponent;function setState_Layer(layer: TPCB_LayersOfComponent): IPCB_PrimitiveComponent;function setState_Manufacturer(manufacturer: string | undefined): IPCB_PrimitiveComponent;function setState_ManufacturerId(manufacturerId: string | undefined): IPCB_PrimitiveComponent;function setState_Name(name: string | undefined): IPCB_PrimitiveComponent;function setState_OtherProperty( otherProperty: Record<string, string | number | boolean>, ): IPCB_PrimitiveComponent;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveComponent;function setState_Rotation(rotation: number): IPCB_PrimitiveComponent;function setState_Supplier(supplier: string | undefined): IPCB_PrimitiveComponent;function setState_SupplierId(supplierId: string | undefined): IPCB_PrimitiveComponent;function setState_UniqueId(uniqueId: string | undefined): IPCB_PrimitiveComponent;function setState_X(x: number): IPCB_PrimitiveComponent;function setState_Y(y: number): IPCB_PrimitiveComponent;function toAsync(): IPCB_PrimitiveComponent;function toSync(): IPCB_PrimitiveComponent;Device pad primitive
class IPCB_PrimitiveComponentPad extends IPCB_PrimitivePad
function done(): Promise<IPCB_PrimitiveComponentPad>;function getConnectedPrimitives( onlyCentreConnection: true, ): Promise<Array<IPCB_PrimitiveLine | IPCB_PrimitiveArc | IPCB_PrimitiveVia>>;function getConnectedPrimitives( onlyCentreConnection: false, ): Promise< Array< | IPCB_PrimitiveLine | IPCB_PrimitiveArc | IPCB_PrimitiveVia | IPCB_PrimitivePolyline | IPCB_PrimitiveFill > >;function getState_ParentComponentPrimitiveId(): string;function readonly primitiveType: EPCB_PrimitiveType.COMPONENT_PAD;function setState_ParentComponentPrimitiveId(): IPCB_PrimitiveComponentPad;Dimension primitive
class IPCB_PrimitiveDimension implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveDimension>;function getState_CoordinateSet(): TPCB_PrimitiveDimensionCoordinateSet;function getState_DimensionType(): EPCB_PrimitiveDimensionType;function getState_Layer(): TPCB_LayersOfDimension;function getState_LineWidth(): number;function getState_Precision(): number;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_TextFollow(): 0 | 1;function getState_Unit(): ESYS_Unit.MILLIMETER | ESYS_Unit.CENTIMETER | ESYS_Unit.INCH | ESYS_Unit.MIL;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveDimension>;function setState_CoordinateSet( coordinateSet: TPCB_PrimitiveDimensionCoordinateSet, ): IPCB_PrimitiveDimension;function setState_DimensionType( dimensionType: EPCB_PrimitiveDimensionType, ): IPCB_PrimitiveDimension;function setState_Layer(layer: TPCB_LayersOfDimension): IPCB_PrimitiveDimension;function setState_LineWidth(lineWidth: number): IPCB_PrimitiveDimension;function setState_Precision(precision: number): IPCB_PrimitiveDimension;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveDimension;function setState_Unit( unit: ESYS_Unit.MILLIMETER | ESYS_Unit.CENTIMETER | ESYS_Unit.INCH | ESYS_Unit.MIL, ): IPCB_PrimitiveDimension;function toAsync(): IPCB_PrimitiveDimension;function toSync(): IPCB_PrimitiveDimension;Fill primitive
class IPCB_PrimitiveFill implements IPCB_Primitive
function convertToPolyline(): Promise<IPCB_PrimitivePolyline>;function convertToPour(): Promise<IPCB_PrimitivePour>;function convertToRegion(): Promise<IPCB_PrimitiveRegion>;function done(): Promise<IPCB_PrimitiveFill>;function getState_ComplexPolygon(): IPCB_Polygon;function getState_FillMode(): EPCB_PrimitiveFillMode | undefined;function getState_Layer(): TPCB_LayersOfFill;function getState_LineWidth(): number;function getState_Net(): string | undefined;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveFill>;function setState_ComplexPolygon(complexPolygon: IPCB_Polygon): IPCB_PrimitiveFill;function setState_FillMode(fillMode: EPCB_PrimitiveFillMode): IPCB_PrimitiveFill;function setState_Layer(layer: TPCB_LayersOfFill): IPCB_PrimitiveFill;function setState_LineWidth(lineWidth: number): IPCB_PrimitiveFill;function setState_Net(net: string): IPCB_PrimitiveFill;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveFill;function toAsync(): IPCB_PrimitiveFill;function toSync(): IPCB_PrimitiveFill;Image primitive
class IPCB_PrimitiveImage implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveImage>;function getState_ComplexPolygon(): TPCB_PolygonSourceArray | Array<TPCB_PolygonSourceArray>;function getState_Height(): number;function getState_HorizonMirror(): boolean;function getState_Layer(): TPCB_LayersOfImage;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_Rotation(): number;function getState_Width(): number;function getState_X(): number;function getState_Y(): number;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveImage>;function setState_Height(height: number): IPCB_PrimitiveImage;function setState_HorizonMirror(horizonMirror: boolean): IPCB_PrimitiveImage;function setState_Layer(layer: TPCB_LayersOfImage): IPCB_PrimitiveImage;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveImage;function setState_Rotation(rotation: number): IPCB_PrimitiveImage;function setState_Width(width: number): IPCB_PrimitiveImage;function setState_X(x: number): IPCB_PrimitiveImage;function setState_Y(y: number): IPCB_PrimitiveImage;function toAsync(): IPCB_PrimitiveImage;function toSync(): IPCB_PrimitiveImage;Line primitive
class IPCB_PrimitiveLine implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveLine>;function getAdjacentPrimitives(): Promise< Array<IPCB_PrimitiveLine | IPCB_PrimitiveVia | IPCB_PrimitiveArc> >;function getEntireTrack(includeVias: false): Promise<Array<IPCB_PrimitiveLine | IPCB_PrimitiveArc>>;function getEntireTrack( includeVias: true, ): Promise<Array<IPCB_PrimitiveLine | IPCB_PrimitiveArc | IPCB_PrimitiveVia>>;function getState_EndX(): number;function getState_EndY(): number;function getState_Layer(): TPCB_LayersOfLine;function getState_LineWidth(): number;function getState_Net(): string;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_StartX(): number;function getState_StartY(): number;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveLine>;function setState_EndX(endX: number): IPCB_PrimitiveLine;function setState_EndY(endY: number): IPCB_PrimitiveLine;function setState_Layer(layer: TPCB_LayersOfLine): IPCB_PrimitiveLine;function setState_LineWidth(lineWidth: number): IPCB_PrimitiveLine;function setState_Net(net: string): IPCB_PrimitiveLine;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveLine;function setState_StartX(startX: number): IPCB_PrimitiveLine;function setState_StartY(startY: number): IPCB_PrimitiveLine;function toAsync(): IPCB_PrimitiveLine;function toSync(): IPCB_PrimitiveLine;Binary embedded object primitive
class IPCB_PrimitiveObject implements IPCB_Primitive
function done(): Promise<IPCB_PrimitiveObject>;function getState_BinaryData(): string;function getState_FileName(): string;function getState_Height(): number;function getState_Layer(): TPCB_LayersOfObject | undefined;function getState_Mirror(): boolean;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_Rotation(): number;function getState_TopLeftX(): number | undefined;function getState_TopLeftY(): number | undefined;function getState_Width(): number;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitiveObject>;function setState_BinaryData(binaryData: string): IPCB_PrimitiveObject;function setState_FileName(fileName: string): IPCB_PrimitiveObject;function setState_Height(height: number): IPCB_PrimitiveObject;function setState_Layer(layer: TPCB_LayersOfObject): IPCB_PrimitiveObject;function setState_Mirror(mirror: boolean): IPCB_PrimitiveObject;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitiveObject;function setState_Rotation(rotation: number): IPCB_PrimitiveObject;function setState_TopLeftX(topLeftX: number): IPCB_PrimitiveObject;function setState_TopLeftY(topLeftY: number): IPCB_PrimitiveObject;function setState_Width(width: number): IPCB_PrimitiveObject;function toAsync(): IPCB_PrimitiveObject;function toSync(): IPCB_PrimitiveObject;Pad primitive
class IPCB_PrimitivePad implements IPCB_Primitive
function async: boolean;function create(): Promise<IPCB_PrimitivePad>;function done(): Promise<IPCB_PrimitivePad>;function getState_HeatWelding(): IPCB_PrimitivePadHeatWelding | null;function getState_Hole(): TPCB_PrimitivePadHole | null;function getState_HoleOffsetX(): number;function getState_HoleOffsetY(): number;function getState_HoleRotation(): number;function getState_Layer(): TPCB_LayersOfPad;function getState_Metallization(): boolean;function getState_Net(): string | undefined;function getState_Pad(): TPCB_PrimitivePadShape | undefined;function getState_PadNumber(): string;function getState_PadType(): EPCB_PrimitivePadType;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function getState_Rotation(): number;function getState_SolderMaskAndPasteMaskExpansion(): IPCB_PrimitiveSolderMaskAndPasteMaskExpansion | null;function getState_SpecialPad(): TPCB_PrimitiveSpecialPadShape | undefined;function getState_X(): number;function getState_Y(): number;function heatWelding: IPCB_PrimitivePadHeatWelding | null;function hole: TPCB_PrimitivePadHole | null;function holeOffsetX: number;function holeOffsetY: number;function holeRotation: number;function isAsync(): boolean;function layer: TPCB_LayersOfPad;function metallization: boolean;function net?: string;function pad?: TPCB_PrimitivePadShape;function padNumber: string;function padType: EPCB_PrimitivePadType;function primitiveId?: string;function primitiveLock: boolean;function readonly primitiveType: EPCB_PrimitiveType;function reset(): Promise<IPCB_PrimitivePad>;function rotation: number;function setState_HeatWelding(heatWelding: IPCB_PrimitivePadHeatWelding | null): IPCB_PrimitivePad;function setState_Hole(hole: TPCB_PrimitivePadHole): IPCB_PrimitivePad;function setState_HoleOffsetX(holeOffsetX: number): IPCB_PrimitivePad;function setState_HoleOffsetY(holeOffsetY: number): IPCB_PrimitivePad;function setState_HoleRotation(holeRotation: number): IPCB_PrimitivePad;function setState_Layer(layer: TPCB_LayersOfPad): IPCB_PrimitivePad;function setState_Metallization(metallization: boolean): IPCB_PrimitivePad;function setState_Net(net?: string): IPCB_PrimitivePad;function setState_Pad(pad: TPCB_PrimitivePadShape): IPCB_PrimitivePad;function setState_PadNumber(padNumber: string): IPCB_PrimitivePad;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitivePad;function setState_Rotation(rotation: number): IPCB_PrimitivePad;function setState_SolderMaskAndPasteMaskExpansion( solderMaskAndPasteMaskExpansion: IPCB_PrimitiveSolderMaskAndPasteMaskExpansion | null, ): IPCB_PrimitivePad;function setState_SpecialPad(specialPad: TPCB_PrimitiveSpecialPadShape): IPCB_PrimitivePad;function setState_X(x: number): IPCB_PrimitivePad;function setState_Y(y: number): IPCB_PrimitivePad;function solderMaskAndPasteMaskExpansion: IPCB_PrimitiveSolderMaskAndPasteMaskExpansion | null;function specialPad?: TPCB_PrimitiveSpecialPadShape;function toAsync(): IPCB_PrimitivePad;function toSync(): IPCB_PrimitivePad;function x: number;function y: number;Polyline primitive
class IPCB_PrimitivePolyline implements IPCB_Primitive
function convertToFill(): Promise<IPCB_PrimitiveFill>;function convertToPour(): Promise<IPCB_PrimitivePour>;function convertToRegion(): Promise<IPCB_PrimitiveRegion>;function done(): Promise<IPCB_PrimitivePolyline>;function getState_Layer(): TPCB_LayersOfLine;function getState_LineWidth(): number;function getState_Net(): string;function getState_Polygon(): IPCB_Polygon;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function isAsync(): boolean;function reset(): Promise<IPCB_PrimitivePolyline>;function setState_Layer(layer: TPCB_LayersOfLine): IPCB_PrimitivePolyline;function setState_LineWidth(lineWidth: number): IPCB_PrimitivePolyline;function setState_Net(net: string): IPCB_PrimitivePolyline;function setState_Polygon(polygon: IPCB_Polygon): IPCB_PrimitivePolyline;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitivePolyline;function toAsync(): IPCB_PrimitivePolyline;function toSync(): IPCB_PrimitivePolyline;Copper border primitive
class IPCB_PrimitivePour implements IPCB_Primitive
function convertToFill(): Promise<IPCB_PrimitiveFill>;function convertToPolyline(): Promise<IPCB_PrimitivePolyline>;function convertToRegion(): Promise<IPCB_PrimitiveRegion>;function done(): Promise<IPCB_PrimitivePour>;function getCopperRegion(): Promise<IPCB_PrimitivePoured | undefined>;function getState_ComplexPolygon(): IPCB_Polygon;function getState_Layer(): TPCB_LayersOfCopper;function getState_LineWidth(): number;function getState_Net(): string;function getState_PourFillMethod(): any;function getState_PourName(): string;function getState_PourPriority(): number;function getState_PreserveSilos(): boolean;function getState_PrimitiveId(): string;function getState_PrimitiveLock(): boolean;function getState_PrimitiveType(): EPCB_PrimitiveType;function isAsync(): boolean;function rebuildCopperRegion(): Promise<IPCB_PrimitivePoured | undefined>;function reset(): Promise<IPCB_PrimitivePour>;function setState_ComplexPolygon(complexPolygon: IPCB_Polygon): IPCB_PrimitivePour;function setState_Layer(layer: TPCB_LayersOfCopper): IPCB_PrimitivePour;function setState_LineWidth(lineWidth: number): IPCB_PrimitivePour;function setState_Net(net: string): IPCB_PrimitivePour;function setState_PourFillMethod(pourFillMethod: EPCB_PrimitivePourFillMethod): IPCB_PrimitivePour;function setState_PourName(pourName: string): IPCB_PrimitivePour;function setState_PourPriority(pourPriority: number): IPCB_PrimitivePour;function setState_PreserveSilos(preserveSilos: boolean): IPCB_PrimitivePour;function setState_PrimitiveLock(primitiveLock: boolean): IPCB_PrimitivePour;function toAsync(): IPCB_PrimitivePour;function toSync(): IPCB_PrimitivePour;Copper fill primitive
class IPCB_PrimitivePoured implements IPCB_Primitive
function addSolderMaskFill( pourFillId: IPCB_PrimitivePouredPourFill['id'], ): Promise<IPCB_PrimitiveFill | undefined>;function convertToFill( pourFillId: IPCB_PrimitivePouredPourFill['id'], ): Promise<IPCB_PrimitiveFill | undefined>;function deletePourFills( pourFillIds: IPCB_PrimitivePouredPourFill['id'] | Array<IPCB_PrimitivePouredPourFill['id']>, ): Promise<boolean>;function getState_PourFills(): Array<IPCB_PrimitivePouredPourFill>;function getState_PourPrimitiveId(): string;function getState_PrimitiveId(): string;function getState_PrimitiveType(): EPCB_PrimitiveType;function reset(): Promise<IPCB_PrimitivePoured>;Region primitive
class IPCB_PrimitiveRegion imple
File v1.1.24:references/classes/DMT_Board.md
# DMT\_Board class
Document tree / Board management class
## Signature
```typescript
class DMT_Board
Operations related to board management in the currently open project
Method
</th><th>Modifiers
</th><th>Description
</th></tr></thead> <tbody><tr><td> </td><td> </td><td>Copy Board
</td></tr> <tr><td>createBoard(schematicUuid, pcbUuid)
</td><td> </td><td>(BETA) Create Board
</td></tr> <tr><td> </td><td> </td><td>Delete Board
</td></tr> <tr><td> </td><td> </td><td>Get all in the project board detailed properties of
</td></tr> <tr><td> </td><td> </td><td>Get detailed properties of Board
</td></tr> <tr><td> </td><td> </td><td>Get detailed properties of Current board
</td></tr> <tr><td>modifyBoardName(originalBoardName, boardName)
</td><td> </td><td>Modify Board name
</td></tr> </tbody></table>Copy Board
function copyBoard(sourceBoardName: string): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>sourceBoardName
</td><td>string
</td><td>Source board name
</td></tr> </tbody></table>Promise<string | undefined>
New board name, if it is undefined the copy fails
// 1. 取第一块板子的名称作为复制源
const boards = await eda.dmt_Board.getAllBoardsInfo();
const sourceName = boards[0].name;
// 2. 复制板子,返回新板子名称
const newBoardName = await eda.dmt_Board.copyBoard(sourceName);
console.log('source:', sourceName);
console.log('copy:', newBoardName);
// 3. 删除复制的板子,保持工程整洁
const deleted = await eda.dmt_Board.deleteBoard(newBoardName);
console.log('deleted:', deleted);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Create Board
function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>schematicUuid
</td><td>string
</td><td>(Optional) Associated schematic UUID
</td></tr> <tr><td>pcbUuid
</td><td>string
</td><td>(Optional) Associated PCB UUID
</td></tr> </tbody></table>Promise<string | undefined>
Board name, if it is undefined creation fails
// 1. 无参调用,由系统自动创建一对原理图/PCB 文档并关联
const boardName = await eda.dmt_Board.createBoard();
console.log('create:', boardName);
// 2. 删除新板子(其关联文档是本例新建的,删除不影响其他板子),保持工程整洁
const deleted = await eda.dmt_Board.deleteBoard(boardName);
console.log('deleted:', deleted);
Delete Board
function deleteBoard(boardName: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>boardName
</td><td>string
</td><td>Board name
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
If the specified board does not exist, the API will return false<!-- -->, indicating that the operation failed
// 1. 复制一块板子作为删除目标,避免误删工程里有用的板子
const boards = await eda.dmt_Board.getAllBoardsInfo();
const tempName = await eda.dmt_Board.copyBoard(boards[0].name);
console.log('temp board:', tempName);
// 2. 删除该板子
const deleted = await eda.dmt_Board.deleteBoard(tempName);
console.log('deleted:', deleted);
Get all in the project board detailed properties of
function getAllBoardsInfo(): Promise<Array<IDMT_BoardItem>>;
Promise<Array<IDMT_BoardItem<!-- -->>>
Array of detailed properties of all Board
// 1. 获取工程内所有板子
const boards = await eda.dmt_Board.getAllBoardsInfo();
// 2. 输出每块板子的名称与下属文档
boards.forEach((board, i) => {
console.log(`board[${i}]:`, board.name, 'schematic:', board.schematic?.uuid, 'pcb:', board.pcb?.uuid);
});
console.log('total:', boards.length);
Get detailed properties of Board
function getBoardInfo(boardName: string): Promise<IDMT_BoardItem | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>boardName
</td><td>string
</td><td>Board name
</td></tr> </tbody></table>Promise<IDMT_BoardItem | undefined>
Board detailed properties of; if it is undefined<!-- -->, the retrieval failed
// 1. 先盘点所有板子,取第一块的名称作为查询目标
const boards = await eda.dmt_Board.getAllBoardsInfo();
const targetName = boards[0].name;
// 2. 按名称查询该板子的详细属性
const board = await eda.dmt_Board.getBoardInfo(targetName);
// 3. 输出板子属性
console.log('name:', board.name);
console.log('parentProjectUuid:', board.parentProjectUuid);
console.log('schematic:', board.schematic?.uuid);
console.log('pcb:', board.pcb?.uuid);
Get detailed properties of Current board
function getCurrentBoardInfo(): Promise<IDMT_BoardItem | undefined>;
Promise<IDMT_BoardItem | undefined>
Board detailed properties of; if it is undefined<!-- -->, the retrieval failed
It will get the detailed properties of the board associated with the currently open schematic or PCB that has the last input focus
// 1. 切换到第一块板子下属的 PCB 文档(工程里可能存在不属于任何板子的 PCB,不能直接取 getAllPcbsInfo()[0])
const boards = await eda.dmt_Board.getAllBoardsInfo();
await eda.dmt_EditorControl.openDocument(boards[0].pcb.uuid);
await new Promise(r => setTimeout(r, 500));
// 2. 获取当前焦点对应的板子
const board = await eda.dmt_Board.getCurrentBoardInfo();
// 3. 输出板子属性
console.log('name:', board.name);
console.log('schematic:', board.schematic?.uuid);
console.log('pcb:', board.pcb?.uuid);
Modify Board name
function modifyBoardName(originalBoardName: string, boardName: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>originalBoardName
</td><td>string
</td><td>Original board name
</td></tr> <tr><td>boardName
</td><td>string
</td><td>New board name
</td></tr> </tbody></table>Promise<boolean>
Whether Modify Successful
// 1. 取第一块板子,记录原名称
const boards = await eda.dmt_Board.getAllBoardsInfo();
const originalName = boards[0].name;
const newName = `${originalName}_tmp`;
// 2. 改名并输出结果
const modified = await eda.dmt_Board.modifyBoardName(originalName, newName);
console.log('original:', originalName);
console.log('new:', newName);
console.log('modified:', modified);
// 3. 等待改名生效后改回原名称(改名是异步提交,紧跟的第二次改名会返回 false)
await new Promise(r => setTimeout(r, 1000));
const restored = await eda.dmt_Board.modifyBoardName(newName, originalName);
console.log('restored:', restored);
File v1.1.24:references/classes/DMT_EditorControl.md
Document tree / Editor control class
class DMT_EditorControl
Here the editor control is based on the sheets under the currently open engineering design. Any other documentUuid will be considered a non-existent document page
Method
</th><th>Modifiers
</th><th>Description
</th></tr></thead> <tbody><tr><td> </td><td> </td><td>Activate a document
</td></tr> <tr><td>activateSplitScreen(splitScreenId)
</td><td> </td><td>Activate a split screen
</td></tr> <tr><td> </td><td> </td><td>Close document
</td></tr> <tr><td>createSplitScreen(splitScreenType, tabId)
</td><td> </td><td>Create Split screen
</td></tr> <tr><td>generateIndicatorMarkers(markers, color, lineWidth, zoom, tabId)
</td><td> </td><td>(BETA) Generate indicator markers
</td></tr> <tr><td>getCurrentRenderedAreaImage(tabId)
</td><td> </td><td>(BETA) Get the canvas rendering region image
</td></tr> <tr><td>getSplitScreenIdByTabId(tabId)
</td><td> </td><td>Use tab ID get split screen ID
</td></tr> <tr><td> </td><td> </td><td>Get the editor split screen property tree
</td></tr> <tr><td>getTabsBySplitScreenId(splitScreenId)
</td><td> </td><td>Get all tabs under the specified split screen ID
</td></tr> <tr><td>mergeAllDocumentFromSplitScreen()
</td><td> </td><td>Merge all split screens
</td></tr> <tr><td>moveDocumentToSplitScreen(tabId, splitScreenId)
</td><td> </td><td>Move a document to the specified split screen
</td></tr> <tr><td>openDocument(documentUuid, splitScreenId)
</td><td> </td><td>Open document
</td></tr> <tr><td>openLibraryDocument(libraryUuid, libraryType, uuid, splitScreenId)
</td><td> </td><td>(BETA) Open library symbol, footprint document
</td></tr> <tr><td> </td><td> </td><td>(BETA) Remove indicator markers
</td></tr> <tr><td>tileAllDocumentToSplitScreen()
</td><td> </td><td>Tile all documents
</td></tr> <tr><td>zoomTo(x, y, scaleRatio, tabId)
</td><td> </td><td>(BETA) Zoom to coordinates
</td></tr> <tr><td> </td><td> </td><td>(BETA) Zoom to all primitives (fit all)
</td></tr> <tr><td>zoomToRegion(left, right, top, bottom, tabId)
</td><td> </td><td>(BETA) Zoom to region
</td></tr> <tr><td>zoomToSelectedPrimitives(tabId)
</td><td> </td><td>(BETA) Zoom to the selected primitives (fit selection)
</td></tr> </tbody></table>Activate a document
function activateDocument(tabId: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>Tab ID
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
Switch to the tab of the specified document and place the input focus in it
// 1. 先后打开原理图页与 PCB,此时焦点在最后打开的 PCB 上
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
const tabSch = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
// 2. 激活原理图标签页(真实切换回原理图画布)
const activated = await eda.dmt_EditorControl.activateDocument(tabSch);
console.log('activated:', activated);
Activate a split screen
function activateSplitScreen(splitScreenId: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>splitScreenId
</td><td>string
</td><td>Split screen ID
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
Give input focus
// 1. 归一化布局后打开两个文档,并拆出一个新分屏
await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const tabPcb = await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
const split = await eda.dmt_EditorControl.createSplitScreen('vertical', tabPcb);
// 2. 激活新分屏(输入焦点移到该分屏)
const activated = await eda.dmt_EditorControl.activateSplitScreen(split.newSplitScreenId);
console.log('activated:', activated);
// 3. 合并所有分屏,恢复单屏布局
const merged = await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
console.log('merged:', merged);
Close document
function closeDocument(tabId: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>Tab ID. Here IDMT_SchematicPageItem.uuid<!-- -->, IDMT_PcbItem.uuid<!-- -->, and IDMT_PanelItem.uuid are supported as input
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
If the document has not been saved, executing this operation will directly lose all unsaved data. After completing modification operations, first execute SCH_Document.save()<!-- -->, PCB_Document.save()<!-- -->, and PNL_Document.save() to save the data
// 1. 创建临时原理图并给它加一页(新建的原理图没有页面,需显式创建)
const schematicUuid = await eda.dmt_Schematic.createSchematic('嘉立创示例_关闭文档');
const pageUuid = await eda.dmt_Schematic.createSchematicPage(schematicUuid);
// 2. 打开该页面作为关闭目标
const tabId = await eda.dmt_EditorControl.openDocument(pageUuid);
console.log('opened tab:', tabId);
// 3. 关闭该标签页(空白文档,无未保存内容)
const closed = await eda.dmt_EditorControl.closeDocument(tabId);
console.log('closed:', closed);
// 4. 删除临时原理图,保持工程整洁
const deleted = await eda.dmt_Schematic.deleteSchematic(schematicUuid);
console.log('deleted:', deleted);
Create Split screen
function createSplitScreen(
splitScreenType: EDMT_EditorSplitScreenDirection,
tabId: string,
): Promise<{ sourceSplitScreenId: string; newSplitScreenId: string } | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>splitScreenType
</td><td>EDMT_EditorSplitScreenDirection
</td><td>Split screen type, horizontal horizontal, vertical vertical
tabId
</td><td>string
</td><td>Tab ID. This tab will be moved into the new split screen
</td></tr> </tbody></table>Promise<{ sourceSplitScreenId: string; newSplitScreenId: string } | undefined>
Split screen ID. sourceSplitScreenId represents the source split screen, and newSplitScreenId represents the new split screen
Please make sure the split screen corresponding to tabId has more than two tabs; otherwise the split screen will not be executed and undefined will be returned
// 1. 归一化布局:先合并既有分屏,保证两个标签页落在同一分屏
await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
// 2. 打开两个文档,让当前分屏持有两个标签页
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const tabPcb = await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
// 3. 把 PCB 标签页拆到一个新的水平分屏
const split = await eda.dmt_EditorControl.createSplitScreen('horizontal', tabPcb);
console.log('source split:', split?.sourceSplitScreenId);
console.log('new split:', split?.newSplitScreenId);
// 4. 回读新分屏的标签页,确认 PCB 已在其中
const tabs = await eda.dmt_EditorControl.getTabsBySplitScreenId(split.newSplitScreenId);
console.log('tabs in new split:', tabs.map(t => t.title));
// 5. 合并所有分屏,恢复单屏布局
const merged = await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
console.log('merged:', merged);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Generate indicator markers
function generateIndicatorMarkers(
markers: Array<IDMT_IndicatorMarkerShape>,
color?: { r: number; g: number; b: number; alpha: number },
lineWidth?: number,
zoom?: boolean,
tabId?: string,
): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>markers
</td><td>Array<IDMT_IndicatorMarkerShape<!-- -->>
</td><td>Array of indicator marker shape objects
</td></tr> <tr><td>color
</td><td>{ r: number; g: number; b: number; alpha: number }
</td><td>(Optional) Indicator marker color
</td></tr> <tr><td>lineWidth
</td><td>number
</td><td>(Optional) Line width
</td></tr> <tr><td>zoom
</td><td>boolean
</td><td>(Optional) Whether to locate and zoom
</td></tr> <tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<boolean>
Whether the indicator markers were generated successfully, false indicates that the canvas does not support this operation or tabId does not exist
In the indicator marker shape data, the coordinate unit span of the schematic and symbol canvases is 0.01inch, and that of the PCB and footprint canvases is mil
// 1. 打开一个原理图页,确定标记作用的画布
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 生成一组标记:点 + 圆 + 矩形(原理图画布坐标单位 0.01inch)
const generated = await eda.dmt_EditorControl.generateIndicatorMarkers(
[
{ type: 'point', x: 100, y: 100 },
{ type: 'circle', x: 250, y: 150, r: 50 },
{ type: 'rectangle', left: 350, right: 550, top: 100, bottom: 250 },
],
{ r: 255, g: 60, b: 60, alpha: 1 }, // 标记颜色
2, // 线宽
false, // 不自动缩放定位到标记
tabId,
);
console.log('generated:', generated);
// 3. 用完即清,保持画布干净
const removed = await eda.dmt_EditorControl.removeIndicatorMarkers(tabId);
console.log('removed:', removed);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Get the canvas rendering region image
function getCurrentRenderedAreaImage(tabId?: string): Promise<Blob | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be obtained
</td></tr> </tbody></table>Promise<Blob | undefined>
// 1. 打开一个原理图页,确定截图的画布
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 获取该画布当前渲染区域的图像
const image = await eda.dmt_EditorControl.getCurrentRenderedAreaImage(tabId);
// 3. 读取 Blob 的基本信息(字节数与 MIME 类型)
console.log('isBlob:', image instanceof Blob);
console.log('size:', image.size);
console.log('mimeType:', image.type);
Use tab ID get split screen ID
function getSplitScreenIdByTabId(tabId: string): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>Tab ID
</td></tr> </tbody></table>Promise<string | undefined>
Split screen ID
// 1. 打开一个原理图页,拿到它的标签页 ID
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 查询该标签页所在的分屏
const splitScreenId = await eda.dmt_EditorControl.getSplitScreenIdByTabId(tabId);
console.log('tabId:', tabId);
console.log('splitScreenId:', splitScreenId);
Get the editor split screen property tree
function getSplitScreenTree(): Promise<IDMT_EditorSplitScreenItem | undefined>;
Promise<IDMT_EditorSplitScreenItem | undefined>
The editor split screen property tree. If it is undefined<!-- -->, the data retrieval failed
// 1. 打开一个原理图页,保证分屏树里有标签页可读
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 读取分屏树
const tree = await eda.dmt_EditorControl.getSplitScreenTree();
// 3. 递归遍历,收集所有分屏 ID 与标签页标题
const splitIds = [];
const tabTitles = [];
(function walk(node) {
splitIds.push(node.id);
if (node.tabs)
tabTitles.push(...node.tabs.map(t => t.title));
(node.children || []).forEach(walk);
})(tree);
console.log('split count:', splitIds.length);
console.log('tab titles:', tabTitles);
Get all tabs under the specified split screen ID
function getTabsBySplitScreenId(splitScreenId: string): Promise<Array<IDMT_EditorTabItem>>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>splitScreenId
</td><td>string
</td><td>Split screen ID
</td></tr> </tbody></table>Promise<Array<IDMT_EditorTabItem<!-- -->>>
Tab list
If there are no direct tabs under the specified split screen (that is, it still has children under it), an empty array will be returned
// 1. 打开一个原理图页并读取分屏树,定位一个直接持有标签页的分屏
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const tree = await eda.dmt_EditorControl.getSplitScreenTree();
let leaf = null;
(function find(node) {
if (node.tabs?.length) { leaf = node; return; }
(node.children || []).forEach(find);
})(tree);
// 2. 查询该分屏下的所有标签页
const tabs = await eda.dmt_EditorControl.getTabsBySplitScreenId(leaf.id);
console.log('splitScreenId:', leaf.id);
console.log('tab count:', tabs.length);
console.log('titles:', tabs.map(t => t.title));
Merge all split screens
function mergeAllDocumentFromSplitScreen(): Promise<boolean>;
Promise<boolean>
Whether the operation is successful
Only available when child split screens exist. It will cancel all child split screens and merge all document tabs into the initial split screen
// 1. 制造"存在子分屏"的前提:归一化布局后打开两个文档并拆出一个分屏
await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const tabPcb = await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
await eda.dmt_EditorControl.createSplitScreen('vertical', tabPcb);
// 2. 合并所有分屏,标签页全部回到初始分屏
const merged = await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
console.log('merged:', merged);
// 3. 回读分屏树,确认已无子分屏
const tree = await eda.dmt_EditorControl.getSplitScreenTree();
console.log('child splits left:', tree.children?.length ?? 0);
Move a document to the specified split screen
function moveDocumentToSplitScreen(tabId: string, splitScreenId: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>Tab ID
</td></tr> <tr><td>splitScreenId
</td><td>string
</td><td> </td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
After moving the document, the editor split screen property tree may change
// 1. 归一化布局后打开两个文档,把 PCB 拆到新分屏
await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const tabPcb = await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
const split = await eda.dmt_EditorControl.createSplitScreen('vertical', tabPcb);
// 2. 把 PCB 标签页移回源分屏
const moved = await eda.dmt_EditorControl.moveDocumentToSplitScreen(tabPcb, split.sourceSplitScreenId);
console.log('moved:', moved);
// 3. 回读源分屏标签页,确认两个标签页又同处一个分屏
const tabs = await eda.dmt_EditorControl.getTabsBySplitScreenId(split.sourceSplitScreenId);
console.log('source split tabs:', tabs.map(t => t.title));
// 4. 清理:合并残余分屏,恢复单屏布局
const mergedBack = await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
console.log('mergedBack:', mergedBack);
Open document
function openDocument(documentUuid: string, splitScreenId?: string): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>documentUuid
</td><td>string
</td><td>Document UUID. Here IDMT_SchematicItem.uuid<!-- -->, IDMT_SchematicPageItem.uuid<!-- -->, IDMT_PcbItem.uuid<!-- -->, and IDMT_PanelItem.uuid are supported as input
</td></tr> <tr><td>splitScreenId
</td><td>string
</td><td>(Optional) Split screen ID, which is the IDMT_EditorSplitScreenItem.id obtained by the DMT_EditorControl.getSplitScreenTree() method
</td></tr> </tbody></table>Promise<string | undefined>
Tab ID, if it is undefined<!-- -->, then open document failed
// 1. 取工程里第一个原理图页作为打开目标
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
console.log('target:', pages[0].name);
// 2. 打开该页面,返回标签页 ID
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
console.log('tabId:', tabId);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Open library symbol, footprint document
function openLibraryDocument(
libraryUuid: string,
libraryType: ELIB_LibraryType.SYMBOL | ELIB_LibraryType.FOOTPRINT,
uuid: string,
splitScreenId?: string,
): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>libraryUuid
</td><td>string
</td><td>Library UUID, you can use LIB_LibrariesList APIs in
</td></tr> <tr><td>libraryType
</td><td>ELIB_LibraryType.SYMBOL | ELIB_LibraryType.FOOTPRINT
</td><td>Library type, support symbol and footprint
</td></tr> <tr><td>uuid
</td><td>string
</td><td>Symbol, footprint UUID
</td></tr> <tr><td>splitScreenId
</td><td>string
</td><td>(Optional) Split screen ID, which is the IDMT_EditorSplitScreenItem.id obtained by the DMT_EditorControl.getSplitScreenTree() method
</td></tr> </tbody></table>Promise<string | undefined>
Tab ID, if it is undefined<!-- -->, then open document failed
// 1. 搜索库符号,拿到其所在库 UUID 与符号 UUID
const results = await eda.lib_Symbol.search('0603');
console.log('symbol:', results[0].name);
// 2. 打开该符号的编辑画布,返回标签页 ID('2' = ELIB_LibraryType.SYMBOL)
const tabId = await eda.dmt_EditorControl.openLibraryDocument(results[0].libraryUuid, '2', results[0].uuid);
console.log('tabId:', tabId);
// 3. 看完关闭标签页
const closed = await eda.dmt_EditorControl.closeDocument(tabId);
console.log('closed:', closed);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Remove indicator markers
function removeIndicatorMarkers(tabId?: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<boolean>
Whether the indicator markers were removed successfully, false indicates that the canvas does not support this operation or tabId does not exist
This API will remove all generated indicator markers
// 1. 打开一个原理图页,并先生成一个指示标记作为清理对象
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const generated = await eda.dmt_EditorControl.generateIndicatorMarkers(
[{ type: 'circle', x: 150, y: 150, r: 60 }],
{ r: 0, g: 128, b: 255, alpha: 1 },
2,
false,
tabId,
);
console.log('generated:', generated);
// 2. 移除该画布上全部指示标记
const removed = await eda.dmt_EditorControl.removeIndicatorMarkers(tabId);
console.log('removed:', removed);
Tile all documents
function tileAllDocumentToSplitScreen(): Promise<boolean>;
Promise<boolean>
Whether the operation is successful
Only available when no child split screens exist. It will automatically create split screens for all opened document tabs
// 1. 归一化布局:先合并既有子分屏,满足"无子分屏"前提
await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
// 2. 打开两个文档,给平铺提供素材
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const pcbs = await eda.dmt_Pcb.getAllPcbsInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
await eda.dmt_EditorControl.openDocument(pcbs[0].uuid);
// 3. 平铺:每个标签页各占一个分屏
const tiled = await eda.dmt_EditorControl.tileAllDocumentToSplitScreen();
console.log('tiled:', tiled);
// 4. 合并所有分屏,恢复单屏布局
const merged = await eda.dmt_EditorControl.mergeAllDocumentFromSplitScreen();
console.log('merged:', merged);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Zoom to coordinates
function zoomTo(
x?: number,
y?: number,
scaleRatio?: number,
tabId?: string,
): Promise<{ left: number; right: number; top: number; bottom: number } | false>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>x
</td><td>number
</td><td>(Optional) Center X coordinate. If not passed in, the current X coordinate will not be changed
</td></tr> <tr><td>y
</td><td>number
</td><td>(Optional) Center Y coordinate. If not passed in, the current Y coordinate will not be changed
</td></tr> <tr><td>scaleRatio
</td><td>number
</td><td>(Optional) Zoom ratio. If not passed in, the current zoom ratio will not be changed. The unit span is 1/100<!-- -->. If 200 is passed in, it means a zoom ratio of 200%
tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<{ left: number; right: number; top: number; bottom: number } | false>
Region data after zooming. false indicates that the canvas does not support the zoom operation or the tabId does not exist
In the schematic and symbol canvases, the coordinate unit span is 0.01inch; in the PCB and footprint canvases, it is mil
// 1. 打开一个原理图页,确定缩放的画布
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 视口中心移到 (100, 100),缩放比 200%(单位跨度 1/100)
const bounds = await eda.dmt_EditorControl.zoomTo(100, 100, 200, tabId);
console.log('bounds:', bounds);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Zoom to all primitives (fit all)
function zoomToAllPrimitives(
tabId?: string,
): Promise<{ left: number; right: number; top: number; bottom: number } | false>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<{ left: number; right: number; top: number; bottom: number } | false>
Region data after zooming. false indicates that the canvas does not support the zoom operation or the tabId does not exist
In the returned data, the coordinate unit span of the schematic and symbol canvases is 0.01inch, and that of the PCB and footprint canvases is mil
// 1. 打开一个原理图页,确定缩放的画布
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 适应全部图元,返回缩放后的可视区域边界
const bounds = await eda.dmt_EditorControl.zoomToAllPrimitives(tabId);
console.log('bounds:', bounds);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Zoom to region
function zoomToRegion(
left: number,
right: number,
top: number,
bottom: number,
tabId?: string,
): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>left
</td><td>number
</td><td>First X coordinate of the rectangle
</td></tr> <tr><td>right
</td><td>number
</td><td>Second X coordinate of the rectangle
</td></tr> <tr><td>top
</td><td>number
</td><td>First Y coordinate of the rectangle
</td></tr> <tr><td>bottom
</td><td>number
</td><td>Second Y coordinate of the rectangle
</td></tr> <tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
In the schematic and symbol canvases, the coordinate unit span is 0.01inch; in the PCB and footprint canvases, it is mil
// 1. 打开一个原理图页,确定缩放的画布
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 缩放到 (0,0)-(400,300) 的矩形区域
const zoomed = await eda.dmt_EditorControl.zoomToRegion(0, 400, 0, 300, tabId);
console.log('zoomed:', zoomed);
This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Zoom to the selected primitives (fit selection)
function zoomToSelectedPrimitives(
tabId?: string,
): Promise<{ left: number; right: number; top: number; bottom: number } | false>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>tabId
</td><td>string
</td><td>(Optional) Tab ID. If not passed in, the canvas with the last input focus will be used
</td></tr> </tbody></table>Promise<{ left: number; right: number; top: number; bottom: number } | false>
Region data after zooming. false indicates that the canvas does not support the zoom operation or the tabId does not exist
In the returned data, the coordinate unit span of the schematic and symbol canvases is 0.01inch, and that of the PCB and footprint canvases is mil
// 1. 打开原理图页,创建一个文本图元作为选中目标
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
const tabId = await eda.dmt_EditorControl.openDocument(pages[0].uuid);
const text = await eda.sch_PrimitiveText.create(100, 80, '嘉立创示例_缩放目标');
// 2. 以图元 ID 建立选中状态
const selected = await eda.sch_SelectControl.doSelectPrimitives([text.getState_PrimitiveId()]);
console.log('selected:', selected);
// 3. 缩放到选中的图元,返回可视区域边界
const bounds = await eda.dmt_EditorControl.zoomToSelectedPrimitives(tabId);
console.log('bounds:', bounds);
// 4. 清理:取消选中并删除测试图元
await eda.sch_SelectControl.clearSelected();
await eda.sch_PrimitiveText.delete([text.getState_PrimitiveId()]);
console.log('cleaned');
File v1.1.24:references/classes/DMT_Event.md
Document tree / event class
class DMT_Event
Register an event callback
Method
</th><th>Modifiers
</th><th>Description
</th></tr></thead> <tbody><tr><td>addEditorTabEventListener(id, eventType, callFn, onlyOnce)
</td><td> </td><td>(BETA) Add an editor tab event listener
</td></tr> <tr><td>isEventListenerAlreadyExist(id)
</td><td> </td><td>Query whether the event listener exists
</td></tr> <tr><td> </td><td> </td><td>Remove Event listener
</td></tr> </tbody></table>This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Add an editor tab event listener
function addEditorTabEventListener(
id: string,
eventType: 'all' | EDMT_EditorTabEventType,
callFn: (
eventType: EDMT_EditorTabEventType,
props: { documentType: EDMT_EditorDocumentType; title: string; tabId: string },
) => void | Promise<void>,
onlyOnce?: boolean,
): void;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>id
</td><td>string
</td><td>Event ID, used to prevent duplicate event registration
</td></tr> <tr><td>eventType
</td><td>'all' | EDMT_EditorTabEventType
</td><td>Event type
</td></tr> <tr><td>callFn
</td><td>(eventType: EDMT_EditorTabEventType<!-- -->, props: { documentType: EDMT_EditorDocumentType<!-- -->; title: string; tabId: string }) => void | Promise<void>
</td><td>The callback function triggered when the event fires
</td></tr> <tr><td>onlyOnce
</td><td>boolean
</td><td>(Optional) Whether to listen only once
</td></tr> </tbody></table>void
Note: This API is only valid for extensions. Calling it in a standalone script environment will always throw Error
When the tab event type is close or open<!-- -->, the switch event will also be triggered
const listenerId = '嘉立创示例_tab_add';
// 1. 打开一个原理图页,保证编辑器里存在可切换的标签页
const pages = await eda.dmt_Schematic.getAllSchematicPagesInfo();
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
// 2. 注册 toggle 事件监听(回调里拿到事件类型与标签页属性)
let fired = null;
eda.dmt_Event.addEditorTabEventListener(
listenerId,
'toggle',
(eventType, props) => {
fired = { eventType, title: props?.title, tabId: props?.tabId };
}
);
// 3. 回读确认注册成功(同 id 再注册也会被防重机制忽略)
const registered = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('registered:', registered);
// 4. 切换一次标签页触发 toggle 事件,观察回调被调用
if (pages[1]) {
await eda.dmt_EditorControl.openDocument(pages[1].uuid);
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
}
else {
await eda.dmt_EditorControl.openDocument(pages[0].uuid);
}
await new Promise(r => setTimeout(r, 500));
console.log('fired:', fired ? JSON.stringify(fired) : 'null');
// 5. 清理监听,避免会话内残留
const removed = eda.dmt_Event.removeEventListener(listenerId);
console.log('removed:', removed);
Query whether the event listener exists
function isEventListenerAlreadyExist(id: string): boolean;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>id
</td><td>string
</td><td>Event ID
</td></tr> </tbody></table>boolean
Whether the event listener exists
const listenerId = '嘉立创示例_tab_exist';
// 1. 注册前查询:应为 false
const before = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('before:', before);
// 2. 注册一个监听使 id 生效
eda.dmt_Event.addEditorTabEventListener(
listenerId,
'toggle',
() => {}
);
// 3. 注册后查询:应为 true
const after = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('after:', after);
// 4. 移除后查询:应回到 false
eda.dmt_Event.removeEventListener(listenerId);
const afterRemove = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('afterRemove:', afterRemove);
Remove Event listener
function removeEventListener(id: string): boolean;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>id
</td><td>string
</td><td>Event ID
</td></tr> </tbody></table>boolean
Whether Remove Specify event listener
const listenerId = '嘉立创示例_tab_remove';
// 1. 先注册一个监听作为移除目标
eda.dmt_Event.addEditorTabEventListener(
listenerId,
'toggle',
() => {}
);
const registered = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('registered:', registered);
// 2. 移除该监听
const removed = eda.dmt_Event.removeEventListener(listenerId);
console.log('removed:', removed);
// 3. 回读确认已不存在
const existAfter = eda.dmt_Event.isEventListenerAlreadyExist(listenerId);
console.log('existAfter:', existAfter);
// 4. 重复移除同一 id:返回 false(本就未注册)
const removedAgain = eda.dmt_Event.removeEventListener(listenerId);
console.log('removedAgain:', removedAgain);
File v1.1.24:references/classes/DMT_Folder.md
Document tree / Folder class
class DMT_Folder
Method
</th><th>Modifiers
</th><th>Description
</th></tr></thead> <tbody><tr><td>createFolder(folderName, teamUuid, parentFolderUuid, description)
</td><td> </td><td>(BETA) Create Folder
</td></tr> <tr><td>deleteFolder(teamUuid, folderUuid)
</td><td> </td><td>Delete Folder
</td></tr> <tr><td> </td><td> </td><td>Get the UUIDs of all folders
</td></tr> <tr><td>getFolderInfo(teamUuid, folderUuid)
</td><td> </td><td>Get Folder detailed properties
</td></tr> <tr><td>modifyFolderDescription(teamUuid, folderUuid, description)
</td><td> </td><td>(BETA) Modify Folder description
</td></tr> <tr><td>modifyFolderName(teamUuid, folderUuid, folderName)
</td><td> </td><td>Modify Folder name
</td></tr> <tr><td>moveFolderToFolder(teamUuid, folderUuid, parentFolderUuid)
</td><td> </td><td>Move folder
</td></tr> </tbody></table>This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Create Folder
function createFolder(
folderName: string,
teamUuid: string,
parentFolderUuid?: string,
description?: string,
): Promise<string | undefined>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>folderName
</td><td>string
</td><td>Folder name
</td></tr> <tr><td>teamUuid
</td><td>string
</td><td>Team UUID
</td></tr> <tr><td>parentFolderUuid
</td><td>string
</td><td>(Optional) Parent folder UUID. If not specified, it is the root folder
</td></tr> <tr><td>description
</td><td>string
</td><td>(Optional) Folder description
</td></tr> </tbody></table>Promise<string | undefined>
Folder UUID, if it is undefined creation fails
// 1. 取当前工程所属团队,作为文件夹的归属
const projectInfo = await eda.dmt_Project.getCurrentProjectInfo();
const teamUuid = projectInfo.teamUuid;
// 2. 在团队根目录下创建测试文件夹
const folderUuid = await eda.dmt_Folder.createFolder('嘉立创示例_文件夹', teamUuid);
// 3. 等待工作区同步后回读,确认文件夹已落地
await new Promise(r => setTimeout(r, 1500));
const folderInfo = await eda.dmt_Folder.getFolderInfo(teamUuid, folderUuid);
console.log('folderUuid:', folderUuid);
console.log('name:', folderInfo?.name);
console.log('parentFolderUuid:', folderInfo?.parentFolderUuid === teamUuid ? '(团队根目录)' : folderInfo?.parentFolderUuid);
Delete Folder
function deleteFolder(teamUuid: string, folderUuid: string): Promise<boolean>;
Parameter
</th><th>Type
</th><th>Description
</th></tr></thead> <tbody><tr><td>teamUuid
</td><td>string
</td><td>Team UUID
</td></tr> <tr><td>folderUuid
</td><td>string
</td><td>Folder UUID
</td></tr> </tbody></table>Promise<boolean>
Whether the operation is successful
// 1. 取当前工程所属团队
const projectInfo = await eda.dmt_Project.getCurrentProjectInfo();
const teamUuid = projectInfo.teamUuid;
// 2. 创建专用测试文件夹(避免动到用户现有目录)
const folderUuid = await eda.dmt_Folder.createFolder('嘉立创示例_待删除', teamUuid);
await ne
Archive v1.1.23: 403 files, 667893 bytes
Files: format/index.md (7050b), format/pcb/3d.md (4645b), format/pcb/attr.md (2064b), format/pcb/common.md (9692b), format/pcb/component.md (3692b), format/pcb/dimension.md (2047b), format/pcb/index.md (1219b), format/pcb/obj.md (1436b), format/pcb/pad_via.md (4795b), format/pcb/panel.md (1598b), format/pcb/partition.md (1030b), format/pcb/primitive.md (4993b), format/pcb/rule.md (2334b), format/pcb/shape.md (12240b), format/pcb/text.md (1963b), format/project/blob.md (1349b), format/project/common.md (935b), format/project/group.md (1644b), format/project/index.md (808b), format/project/instance.md (1329b), format/project/meta.md (3551b), format/project/variant.md (611b), format/schematic/attr.md (2105b), format/schematic/common.md (1445b), format/schematic/component.md (6838b), format/schematic/index.md (940b), format/schematic/obj.md (1249b), format/schematic/pin.md (2308b), format/schematic/shape.md (6973b), format/schematic/structure.md (1553b), format/schematic/table.md (2449b), format/schematic/text.md (1295b), format/schematic/wire.md (4953b), guide/ancillary-projects.md (4311b), guide/ancillary-projects/pro-api-sdk.md (56b), guide/ancillary-projects/pro-api-types.md (92b), guide/error-handling.md (1238b), guide/extension-json.md (4928b), guide/extensions-marketplace.md (4227b), guide/how-to-start.md (15377b), guide/i18n.md (3049b), guide/index.md (951b), guide/inline-frame.md (1390b), guide/invoke-apis.md (4110b), guide/stability.md (3198b), package-lock.json (1967b), package.json (262b), README.md (4807b), README.zh-Hans.md (4454b), references/_index.md (34050b), references/_quick-reference.md (186195b), references/classes/DMT_Board.md (8459b), references/classes/DMT_EditorControl.md (33440b), references/classes/DMT_Event.md (6139b), references/classes/DMT_Folder.md (12495b), references/classes/DMT_Panel.md (9807b), references/classes/DMT_Pcb.md (10269b), references/classes/DMT_Project.md (9458b), references/classes/DMT_Schematic.md (35338b), references/classes/DMT_SelectControl.md (2512b), references/classes/DMT_Team.md (3322b), references/classes/DMT_Workspace.md (3732b), references/classes/EDA.md (12162b), references/classes/IPCB_ComplexPolygon.md (6044b), references/classes/IPCB_Polygon.md (3090b), references/classes/IPCB_PrimitiveArc.md (37653b), references/classes/IPCB_PrimitiveAttribute.md (64926b), references/classes/IPCB_PrimitiveComponent.md (52383b), references/classes/IPCB_PrimitiveComponentPad.md (8772b), references/classes/IPCB_PrimitiveDimension.md (27831b), references/classes/IPCB_PrimitiveFill.md (28795b), references/classes/IPCB_PrimitiveImage.md (31889b), references/classes/IPCB_PrimitiveLine.md (32186b), references/classes/IPCB_PrimitiveObject.md (39835b), references/classes/IPCB_PrimitivePad.md (61154b), references/classes/IPCB_PrimitivePolyline.md (26817b), references/classes/IPCB_PrimitivePour.md (42693b), references/classes/IPCB_PrimitivePoured.md (12285b), references/classes/IPCB_PrimitiveRegion.md (29858b), references/classes/IPCB_PrimitiveString.md (44413b) (+3 more)
Archive v1.1.22: 403 files, 667934 bytes
Files: format/index.md (7050b), format/pcb/3d.md (4645b), format/pcb/attr.md (2064b), format/pcb/common.md (9692b), format/pcb/component.md (3692b), format/pcb/dimension.md (2047b), format/pcb/index.md (1219b), format/pcb/obj.md (1436b), format/pcb/pad_via.md (4795b), format/pcb/panel.md (1598b), format/pcb/partition.md (1030b), format/pcb/primitive.md (4993b), format/pcb/rule.md (2334b), format/pcb/shape.md (12240b), format/pcb/text.md (1963b), format/project/blob.md (1349b), format/project/common.md (935b), format/project/group.md (1644b), format/project/index.md (808b), format/project/instance.md (1329b), format/project/meta.md (3551b), format/project/variant.md (611b), format/schematic/attr.md (2105b), format/schematic/common.md (1445b), format/schematic/component.md (6838b), format/schematic/index.md (940b), format/schematic/obj.md (1249b), format/schematic/pin.md (2308b), format/schematic/shape.md (6973b), format/schematic/structure.md (1553b), format/schematic/table.md (2449b), format/schematic/text.md (1295b), format/schematic/wire.md (4953b), guide/ancillary-projects.md (4311b), guide/ancillary-projects/pro-api-sdk.md (56b), guide/ancillary-projects/pro-api-types.md (92b), guide/error-handling.md (1238b), guide/extension-json.md (4928b), guide/extensions-marketplace.md (4227b), guide/how-to-start.md (15377b), guide/i18n.md (3049b), guide/index.md (951b), guide/inline-frame.md (1390b), guide/invoke-apis.md (4110b), guide/stability.md (3198b), package-lock.json (1967b), package.json (262b), README.md (4807b), README.zh-Hans.md (4454b), references/_index.md (34050b), references/_quick-reference.md (186195b), references/classes/DMT_Board.md (8459b), references/classes/DMT_EditorControl.md (33440b), references/classes/DMT_Event.md (6139b), refe...
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract"
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust"
Operational fit
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/snapshot",
"contractUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract",
"trustUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust"
},
"curlExamples": [
"curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/snapshot\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract\"",
"curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "CLAWHUB",
"generatedAt": "2026-10-09T03:20:04.082Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/yanranxiaoxi/skills/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/skills/easyeda-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "11.9K downloads",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.1.24",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-10T08:36:14.032Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "release",
"title": "Release 1.1.24",
"description": "- Major expansion of API documentation: 54 new files and 87 updated, including new interface reference files for extension and UI/grid development. - Added guide for AI integration: new \"how-to-start-for-ai.md\" with instructions tailored for AI agent usage. - Extended class coverage: new documentation for classes such as PCB_ImageTool, SYS_ExternalApi, and SYS_Help. - Updated and reorganized skill metadata for versioning consistency. - Removed obsolete files: deprecated type and skill card references eliminated for clarity. - Improved and updated quick reference and main index documentation for easier API lookup and navigation.",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-10T08:36:14.032Z",
"isPublic": true
}
]Sponsored
Ads related to EasyEDA API Skill and adjacent AI workflows.