跳转到内容

@tool() 装饰器

将类注册为 LinkCAD 工具,使其显示在应用程序菜单中,并带有自动生成的选项对话框。

签名

@tool(
name: str,
menu: str = "Tools/Python",
tooltip: str = "",
shortcut: str = "",
icon: str = "",
requires_drawing: bool = True,
)
class MyTool(Tool):
...

参数

参数类型默认值说明
namestrrequired菜单中的显示名称
menustr"Tools/Python"菜单路径(使用 / 表示子菜单)
tooltipstr""悬停时显示的工具提示
shortcutstr""键盘快捷键(例如 "Ctrl+Shift+M"
iconstr""图标文件路径(PNG,24×24)
requires_drawingboolTrue工具是否需要打开的图纸

Tool 基类

所有工具插件都必须扩展 Tool 并实现 run()

class Tool:
def run(self, drawing) -> None:
"""Override to implement the tool logic."""
...

drawing 参数提供对当前图纸的访问。如果 requires_drawing=False,它可能为 None

ToolInfo

装饰器会创建一个附加到类上的 ToolInfo 命名元组:

字段说明
name工具显示名称
menu菜单路径
tooltip工具提示文本
shortcut键盘快捷键
icon图标路径
requires_drawing是否需要图纸

菜单路径

menu 参数定义工具在 LinkCAD 菜单中的显示位置:

"Tools/Python" → Tools → Python → <tool name>
"Tools/Analysis" → Tools → Analysis → <tool name>
"Tools/Drawing/Custom" → Tools → Drawing → Custom → <tool name>

完整示例

from linkcad.plugin import tool, Tool, Option
@tool(
name="Shape Counter",
menu="Tools/Analysis",
tooltip="Count shapes per layer",
shortcut="Ctrl+Shift+C",
requires_drawing=True,
)
class ShapeCounter(Tool):
include_refs = Option.boolean("Include cell references", default=False)
def run(self, drawing) -> None:
total = 0
for layer_name, shapes in drawing.shapes_by_layer():
count = sum(1 for _ in shapes)
total += count
print(f"{layer_name}: {count}")
print(f"Total: {total}")