Personal Site
← 返回博客

AutoCAD LISP 自动化开发入门:提升绘图效率的利器

3 min readCAD 二次开发
AutoCADLISP自动化二次开发CAD

什么是 AutoLISP

AutoLISP 是 AutoCAD 内置的编程语言,基于 LISP 语法,专为 CAD 自动化设计。它可以让你用几行代码完成重复性工作,比如批量修改图层属性、自动生成标注、快速创建常用图形等。

对于每天需要处理大量 CAD 图纸的工程师来说,掌握 AutoLISP 可以将效率提升数倍。

LISP 基础语法

AutoLISP 使用前缀表达式,所有运算符和函数名放在括号的最前面:

;; 基本运算
(+ 1 2)          ; 返回 3
(* 5 10)         ; 返回 50

;; 定义变量
(setq radius 100)
(setq pi_val 3.14159)
(setq circumference (* 2 pi_val radius))

;; 定义函数
(defun c:hello ()
  (princ "\n你好,AutoCAD!")
  (princ)
)

c: 开头的函数可以在 AutoCAD 命令行直接调用,输入 hello 即可执行。

实用示例:批量修改图层颜色

在实际工作中,经常需要统一修改图层属性。以下函数可以将指定图层的颜色批量修改:

(defun c:change-layer-color (/ layer-name new-color layer-obj)
  (setq layer-name (getstring "\n请输入图层名称: "))
  (setq new-color (getint "\n请输入新的颜色号 (1-255): "))
  (if (tblsearch "LAYER" layer-name)
    (progn
      (setq layer-obj (tblobjname "LAYER" layer-name))
      (setq layer-obj (entget layer-obj))
      (setq layer-obj (subst (cons 62 new-color)
                              (assoc 62 layer-obj)
                              layer-obj))
      (entmod layer-obj)
      (princ (strcat "\n图层 " layer-name " 颜色已修改为 "
                     (itoa new-color)))
    )
    (princ (strcat "\n未找到图层: " layer-name))
  )
  (princ)
)

实用示例:自动绘制矩形标注框

为图纸添加统一的标注框是常见需求:

(defun c:title-block (/ pt width height)
  (setq pt (getpoint "\n选择左下角点: "))
  (setq width 420.0)   ; A3 图幅宽度
  (setq height 297.0)  ; A3 图幅高度
  (command "RECTANGLE" pt
    (list (+ (car pt) width)
          (+ (cadr pt) height)))
  (princ "\nA3 标注框绘制完成。")
  (princ)
)

如何加载和运行

  1. 将代码保存为 .lsp 文件(如 my-tools.lsp
  2. 在 AutoCAD 命令行输入 (load "my-tools.lsp")
  3. 输入函数名即可运行(如 title-block

如需每次启动 AutoCAD 时自动加载,可将 .lsp 文件路径添加到 acad.lsp 或通过 APPLOAD 命令设置启动组。

进阶方向

掌握 AutoLISP 基础后,可以继续探索 Visual LISP(提供 IDE 和调试工具)、DCL 对话框开发,以及 ActiveX/COM 接口实现更复杂的自动化场景。