SuperAPI AI 工具集

lisp-to-dotnet

设计与创作

查看项目

更新于 10-16 05:00

技能介绍

用途:把 AutoLISP 例程迁移为面向 Design Automation(DA)的 AutoCAD .NET C# 插件。唯一目标为 DA,不生成桌面/交互式产物;每个迁移后的命令都是参数化的非交互入口,不使用对话框或命令行提示。

背景限制:Visual LISP(COM/ActiveX API,如 vlax-、vla-、vlax-invoke-method)在 DA 中不可用,因为无头 accoreconsole 缺少 COM 运行时;基础 AutoLISP(entget、ssget、entmod)可运行。迁移到 .NET 类型化 API 是这类插件实现云端自动化的路径。

环境设置:生成代码前需向用户询问三项路径并记住整个会话——AutoCAD 安装目录(推导 accoreconsole.exe 与 SDK NuGet 版本)、包含待转换 .lsp 的 LISP 工程目录、ARX SDK 根目录。生成文件须使用实际路径,不得硬编码默认值。可据 AutoCAD 年份推导 serial、nuget_version、da_engine、tfm(如 2027 对应 R26.0、26.0.0、Autodesk.AutoCAD+26_0、net10.0-windows)。

执行方式:Step 0 一并询问一次,之后不再重复追问。Auto 模式由工具直接调用 dotnet new、dotnet build、dotnet test 及 PS1 脚本;配对编程(默认)只生成命令交用户自行运行。

DCL 护栏:开始前扫描 .lsp 中的 DCL 用法(load_dialog、new_dialog、done_dialog、action_tile、start_dialog、set_tile、mode_tile、term_dialog、unload_dialog),并检查同名 .dcl 文件。检测到则立即拒绝,不生成代码;DCL 迁移不在 v1 范围内。若用户明确要求仅迁移非对话框代码,可将对话框取值转为输入记录字段,仅将 DCL 机制标记为 TODO;DCL 替身属于后续 Web UI 阶段,不是本技能产物。

DA 护栏(适用于每个 [CommandMethod]):消除 getfiled→文件对话框(零容忍)、getstring/getkword/getpoint/getdist/getreal/getint/getangle→ed.GetXxx 等交互输入,以及无过滤的实体选择提示。原交互输入一律改为方法参数或映射到 DA 参数的 JSON 文件,能力不丢失,仅输入方式改变。包规则:始终只引用 AutoCAD.NET.Core,单工程,无例外;完整 AutoCAD.NET(含 AcMgd.dll 桌面 UI 层)会使 DA 引擎崩溃。

DA 部署与测试:dotnet new acad-lisp 脚手架包含 da/APS-Common.ps1、da/Deploy-And-Test-DA.ps1、da/Reset-APSApp.ps1;activity.json 与 params.example.json 需按迁移手动编写。需设置 $env:APS_CLIENT_ID/$env:APS_CLIENT_SECRET 并使用真实种子 .dwg。DA 引用须完全限定(如 <nickname>.<activityId>+<alias>),appbundles 同理。forgeapps 昵称只设置一次,未设置时默认值等于 APS_CLIENT_ID 本身而非空;须用 Resolve-DANickname 比对。列表接口返回公共目录,需分页并用 Get-DAAllPages。用户文件路径须解析为绝对路径后再交给 .NET 文件 IO。

适用场景:含 Visual LISP COM 调用、需迁移到云端 DA 的 LISP 插件。限制:仅 DA 目标;不支持 DCL;桌面交互功能不在范围内。其余细节资料未提供。