我不是程序员,AI帮我生成了一个AutoCAD插件,运行完美。

今天使用AutoCAD时,需要复制图形中一个文本数据,使的它沿着给定的X轴和Y轴距离复制,并且每复制一次,文本数据的值相应增大一个给定的值。

我不是程序员,打算使用最近很火的deepseek试一下,帮我写个CAD插件,没想到它完美给出答案。代码如下:

(defun c:copyandincrement (/ ss ent pt x-spacing y-spacing count increment i new-pt new-text ent-data justification-h justification-v text-content start-value new-ent new-ent-list)

;; 选择要复制的文本对象(支持框选)

(setq ss (ssget '((0 . "TEXT")))) ; 只选择单行文本对象

(if (not ss)

(progn

(princ "\n未选择对象或选择的对象不是单行文本。")

(exit)

)

)

;; 获取用户输入的参数

(setq x-spacing (getdist "\n输入沿X轴的复制间距: "))

(setq y-spacing (getdist "\n输入沿Y轴的复制间距: "))

(setq count (getint "\n输入复制次数: "))

(setq increment (getint "\n输入递增值: ")) ; 用户输入递增值

;; 检查复制次数是否为正数

(if (<= count 0)

(progn

(princ "\n复制次数必须为正数。")

(exit)

)

)

;; 初始化新实体列表

(setq new-ent-list '())

;; 遍历选择集中的每个文本对象

(setq i 0)

(while (< i (sslength ss))

(setq ent (ssname ss i)) ; 获取选择集中的第i个实体

(setq ent-data (entget ent)) ; 获取实体数据

;; 获取文本的对正方式(组码72和73)

(setq justification-h (cdr (assoc 72 ent-data))) ; 水平对正方式

(setq justification-v (cdr (assoc 73 ent-data))) ; 垂直对正方式

(if (not justification-h)

(setq justification-h 0) ; 默认为左对齐

)

(if (not justification-v)

(setq justification-v 0) ; 默认为基线对齐

)

;; 获取文本的插入点(组码10或11)

(setq pt (cdr (assoc 10 ent-data)))

(if (and (/= justification-h 0) (setq pt-alignment (cdr (assoc 11 ent-data))))

(setq pt pt-alignment) ; 如果对正方式不是左对齐,使用组码11作为插入点

)

;; 获取原始文本内容

(setq text-content (cdr (assoc 1 ent-data)))

;; 检查文本内容是否为纯数字

(if (not (numberp (atoi text-content)))

(progn

(princ "\n文本内容不是纯数字。跳过此对象。")

(setq i (1+ i)) ; 跳过非数字文本

(continue)

)

)

(setq start-value (atoi text-content))

;; 循环复制并递增

(setq j 1)

(while (<= j count)

;; 计算新位置

(setq new-pt (list (+ (car pt) (* j x-spacing))

(+ (cadr pt) (* j y-spacing))

(caddr pt)))

;; 创建新的实体数据(强制左对齐)

(setq new-ent-data (subst (cons 10 new-pt) (assoc 10 ent-data) ent-data))

(setq new-ent-data (subst (cons 1 (itoa (+ start-value (* j increment)))) (assoc 1 new-ent-data) new-ent-data))

(setq new-ent-data (subst (cons 72 0) (assoc 72 new-ent-data) new-ent-data)) ; 水平对正方式为左对齐

(setq new-ent-data (subst (cons 73 0) (assoc 73 new-ent-data) new-ent-data)) ; 垂直对正方式为基线

;; 创建新实体并保存到列表

(setq new-ent (entmakex new-ent-data))

(setq new-ent-list (cons (list new-ent justification-h justification-v new-pt) new-ent-list))

;; 递增计数器

(setq j (1+ j))

)

;; 递增选择集索引

(setq i (1+ i))

)

;; 复制完成后,恢复对齐方式

(foreach new-ent-item new-ent-list

(setq new-ent (car new-ent-item))

(setq justification-h (cadr new-ent-item))

(setq justification-v (caddr new-ent-item))

(setq new-pt (cadddr new-ent-item))

(setq new-ent-data (entget new-ent))

;; 更新对齐方式

(setq new-ent-data (subst (cons 72 justification-h) (assoc 72 new-ent-data) new-ent-data))

(setq new-ent-data (subst (cons 73 justification-v) (assoc 73 new-ent-data) new-ent-data))

;; 如果对齐方式不是左对齐,更新插入点(组码11)

(if (/= justification-h 0)

(setq new-ent-data (subst (cons 11 new-pt) (assoc 11 new-ent-data) new-ent-data))

)

(entmod new-ent-data)

)

(princ "\n复制完成!")

(princ)

)





详细操作步骤

1. 打开Visual LISP编辑器

  • 在AutoCAD命令行中输入VLISP,按Enter。

2. 粘贴代码

  • 在Visual LISP编辑器中,点击文件 -> 新建文件,创建一个空白文件。
  • 将修正后的代码粘贴到空白文件中。

3. 保存文件

  • 点击文件 -> 另存为,选择保存路径,输入文件名(例如copyandincrement.lsp),点击保存。

4. 加载LISP文件

  • 回到AutoCAD命令行,输入appload,按Enter。
  • 在弹出的对话框中,找到并选择copyandincrement.lsp,点击加载。

5. 运行程序

  • 在AutoCAD命令行中输入copyandincrement,按Enter。
  • 按照提示选择文本、输入间距、复制次数、递增值
原文链接:,转发请注明来源!