跳转到内容

设置与要求

Python 版本

LinkCAD 11 随附嵌入式 Python 3.12 解释器。不需要单独安装 Python。

插件位置

将 Python 插件文件(.py)放入以下目录之一:

  • 用户插件%APPDATA%\LinkCAD\plugins\
  • 系统插件<LinkCAD install dir>\plugins\

LinkCAD 会在启动时扫描这些目录,并注册找到的所有插件。

访问控制台

从菜单打开交互式 Python 控制台:

  • View → Python Console (Ctrl+Shift+P)

该控制台提供对 linkcad 包和当前已加载图纸的完整访问。

控制台和脚本编辑器都定义了一个名为 drawing 的全局变量,它始终指向 LinkCAD 中当前打开的图纸;未加载任何文件时为 None。该图纸由应用程序拥有——可以读取和修改,但绝不要对它调用 destroy()

if drawing is not None:
print(drawing.name, len(drawing.cells), "cells")

你自己创建的图纸必须释放,否则解释器会在退出时崩溃。请将其用作上下文管理器:

from linkcad.v1.db import Drawing
with Drawing("scratch") as dwg:
...

脚本编辑器

LinkCAD 包含内置脚本编辑器:

  • View → Python Script Editor (Ctrl+Shift+E)
  • 使用 F5 运行当前脚本
  • 使用 Ctrl+ 运行所选文本

包结构

linkcadlinkcad.v1 只发布 API 的模块,除此之外别无他物:

模块用途
linkcad.v1.plugin插件框架——装饰器、选项、基类
linkcad.v1.db图纸数据库——单元、图层、形状、事务
linkcad.v1.geom几何基元——点、向量、变换、边界
linkcad.v1.edit几何任务——合并、展平、对齐到网格、连接、分解
linkcad.v1.env选项与日志——持久设置、事件日志
linkcad.v1.conv文件格式转换——加载和保存图纸
linkcad.v1.libgraph布尔几何——并集、交集、差集
linkcad.v1.controller高层转换流程控制器

名称存在于定义它的模块里,因此请先取模块,再取模块中的名称:

from linkcad import db, geom # or: from linkcad.v1 import db, geom
from linkcad.v1.db import Drawing, Cell, Layer
from linkcad.v1.geom import Point, Vector

顶层没有任何名称:from linkcad import Drawing 不可用,from linkcad.v1 import Drawing 同样不可用。

这是刻意为之,而非疏漏。各模块的内容会互相冲突。FillRuledbeditlibgraph 中是三个不同的枚举;HolesModeeditlibgraph 之间并不相同;CellContextFormatInfo 各自指向两个互不相关的类型。扁平命名空间只能各挑一个——而且是按导入顺序挑选,这不是任何人能预测的规则。

模块列表由包目录发现,而不是写死在某处,因此永远不会落后。它取代的那份手工列表只列出十二个类,遗漏了 ArcEllipseDonutNurbsTextRefShapeObjectProperty、全部枚举,以及整个 linkcad.geom

API 版本管理

请优先使用 linkcad.v1.* 子模块。每个子模块都会完整镜像对应顶层模块的公开命名空间,因此对象完全相同;使用 v1 可将脚本固定到稳定的 API 表面,使其在 LinkCAD Python API 演进后仍能继续工作。

import linkcad
print(linkcad.API_VERSION) # "v1"
print(linkcad.__version__) # e.g. "11.0.27" — read from the loaded LinkCAD build

__version__ 不是包内的字面量:它来自 linkcad.env.program_version(),因此始终是实际加载的二进制文件的版本。

编辑器支持

该包附带类型存根,并以 py.typedPEP 561)标记,因此编辑器或类型检查器无需你做任何配置即可理解 linkcad.*

  • cell.drawing. 的补全,给出真实的成员列表
  • 签名提示——cell.add_polygon(layer, vertices) 会显示两个参数及其类型
  • cell.shapes() 当作方法调用、在应传 Layer 处传了 str、以及未处理 drawing.cell(name) 可能返回的 None,都会出现红色波浪线

存根在构建时由已构建的模块生成,而不是提交到仓库,因此不会与它们所描述的绑定产生偏差。只要把编辑器指向 LinkCAD 附带的解释器,或把其 site-packages 目录加入项目路径,以上功能都无需额外设置即可使用。

安装其他包

你可以在 LinkCAD Python 环境中使用 pip 安装其他 Python 包:

import subprocess
subprocess.check_call(["pip", "install", "numpy"])