deepseek编写图层合并代码
尝试用deepseek编写一个lisp插件,居然一次成功了,很惊喜,分享一下向deepseek提的问题是:用autolisp编写一个图层合并的插件,1、选中要合并图层的图元,获得图元图层1。2,选中合并到图层的图元,获得合并到的图层2。3、全选图层1图元,如果图层锁定,则解锁后再选中。4、将选中图元的图层设置为图层2。5、删除图层1。
deepseek提供的代码虽然有些冗余的步骤,但整体逻辑清晰,测试后也暂时没发现bug,代码如下:
(defun c:MergeLayers (/ *error* ent1 ent2 layer1 layer2 ss doc layers layer1_vla wasLocked currentLayer)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq layers (vla-get-layers doc))
;; 错误处理函数
(defun *error* (msg)
(if wasLocked
(vla-put-lock layer1_vla :vlax-true)
)
(princ (strcat "\n错误: " msg))
)
;; 步骤1:选择源图层图元
(if (not (setq ent1 (car (entsel "\n选择要合并的源图层图元: "))))
(progn
(princ "\n未选择源图层图元。")
(exit)
)
)
(setq layer1 (cdr (assoc 8 (entget ent1))))
;; 步骤2:选择目标图层图元
(if (not (setq ent2 (car (entsel "\n选择目标图层图元: "))))
(progn
(princ "\n未选择目标图层图元。")
(exit)
)
)
(setq layer2 (cdr (assoc 8 (entget ent2))))
;; 检查是否相同图层
(if (= layer1 layer2)
(progn
(princ "\n源图层与目标图层相同,无需合并。")
(exit)
)
)
;; 检查源图层是否存在
(if (not (tblsearch "LAYER" layer1))
(progn
(princ (strcat "\n图层 " layer1 " 不存在。"))
(exit)
)
)
;; 检查目标图层是否存在,若不存在则创建
(if (not (tblsearch "LAYER" layer2))
(vla-add layers layer2)
)
;; 步骤3:解锁源图层(如果锁定)
(setq layer1_vla (vla-item layers layer1))
(setq wasLocked (vla-get-lock layer1_vla))
(if wasLocked
(vla-put-lock layer1_vla :vlax-false)
)
;; 检查当前图层是否为源图层
(setq currentLayer (getvar "CLAYER"))
(if (= currentLayer layer1)
(progn
(princ "\n无法删除当前图层,请先切换当前图层。")
(exit)
)
)
;; 获取所有源图层图元
(setq ss (ssget "_X" (list (cons 8 layer1))))
(if (not ss)
(progn
(princ (strcat "\n图层 " layer1 " 中没有图元。"))
(exit)
)
)
;; 步骤4:修改图元到目标图层
(command "_.chprop" ss "" "_layer" layer2 "")
;; 步骤5:删除源图层
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list layer1_vla)))
(princ (strcat "\n无法删除图层 " layer1 "(可能仍被其他对象引用)。"))
(princ (strcat "\n成功删除图层 " layer1 "。"))
)
;; 步骤6:重新锁定原图层(由于图层已删除,此步骤自动跳过)
(princ "\n操作完成。")
(princ)
)
写得很规范,还不错。比layerm好用多了。 这个deepseek确实比之前一批的ai在代码编写上更丝滑。之前的chatgpt稍微要求多几个,写出来的几乎没有成功运行过 这样合并图层,有些乱来的图纸合并不了的。
不过这插件也算可以了。 自贡黄明儒 发表于 2025-2-11 13:12
写得很规范,还不错。比layerm好用多了。
layerm是什么命令?
gzcsun 发表于 2025-2-11 20:49
layerm是什么命令?
Express的一个命令,图层合并。很强大的,可以用command调用。 hubeiwdlue 发表于 2025-2-11 21:51
Express的一个命令,图层合并。很强大的,可以用command调用。
是laymrg吧,图层合并 好资料谢谢分享
页:
[1]