符号库
分类代号:C.10 本章共 3 个接口(只读)
vjmap 自带一个"常用图块/图符"库,按分类组织。二开场景里最常见的用法是:
- 前端工具条展示"符号面板",用户选一个图符,拖到图上
- 拖放后前端本地生成图元并调后端
updatemap持久化 - 导出 DWG 时把符号实例替换为 DXF BlockRef
本章只覆盖只读三接口(分类列表 / 符号列表 / 符号详情)。写操作(增 / 改 / 删分类与符号)SDK 暂不封装;如果你用 root token,可按
POST /symbol/category、PUT /symbol/:id等直接svc._request(...)调。
快速索引
| 序号 | SDK 方法 | URL |
|---|---|---|
| 61 | symbol_categories / symbolCategories |
GET /api/v1/service/symbol/categories |
| 62 | symbol_list / symbolList |
GET /api/v1/service/symbol/list/{categoryId} |
| 63 | symbol_get / symbolGet |
GET /api/v1/service/symbol/{id} |
61 · 分类列表 symbol/categories
响应(实采)
{
"data": [
{ "id": "default", "name": "默认分类", "createTime": "2026-04-10 11:29:15" },
{ "id": "user_custom", "name": "用户自定义", "createTime": "2026-04-10 11:29:15" }
],
"status": "ok"
}
Python
cats = svc.symbol_categories()["data"]
for c in cats:
print(c["id"], c["name"])
Node.js
const cats = (await svc.symbolCategories()).data;
62 · 符号列表 symbol/list/{categoryId}
按分类分页列出符号。
查询参数
| 字段 | 默认 | 说明 |
|---|---|---|
page |
1 | 分页起始(1-based) |
pageSize |
20 | 每页 |
keyword |
- | 名称模糊匹配 |
响应(实采:分类为空)
{
"data": {
"list": [],
"total": 0,
"page": 1,
"pageSize": 3
},
"status": "ok"
}
有数据时 list 元素是 SymbolMeta,不含 data:
{
"id": "symbol_abc",
"name": "消防栓",
"categoryId": "default",
"basePoint": [0, 0],
"thumbnail": "data:image/png;base64,...", // omitempty,可能缺省
"createTime": "2026-04-10 11:29:15",
"updateTime": "2026-04-10 11:29:15"
}
符号几何数据只有 symbol/{id} 详情才返回(见下)。
Python
page = svc.symbol_list("default", page=1, page_size=20, keyword="栓")
for it in page["data"]["list"]:
print(it["id"], it["name"])
Node.js
const page = await svc.symbolList('default', { page: 1, pageSize: 20 });
63 · 符号详情 symbol/{id}
响应
- 成功:
{ "status": "ok", "data": { ...SymbolMeta 各字段..., "data": "<vcad 数据,gzip 压缩后 base64>" } }——data.data要先 base64 解码再 gunzip 才是 vcad JSON - 未找到:HTTP 404 +
{ "status": "error", "message": "symbol not found" }(SDKVjmapError的e.status=404、错误体在e.body——e.message是HTTP 404 for <url>不含语义串)
Python
try:
sym = svc.symbol_get("symbol_abc")["data"]
except vjmap.VjmapError as e:
if e.status == 404:
... # 符号不存在
else:
raise
使用范式
下面是一个"前端面板"级别的整合:
def list_all_symbols():
for cat in svc.symbol_categories()["data"]:
page = 1
while True:
bundle = svc.symbol_list(cat["id"], page=page, page_size=50)["data"]
for sym in bundle.get("list", []):
yield cat, sym
if page * bundle["pageSize"] >= bundle["total"]:
break
page += 1