AutoCAD LISP多段线绘制自动化 自动指定图层与自定义线型咨询
AutoCAD LISP 多段线自动指定图层与线型实现方案
- 核心逻辑无需修改原有绘制逻辑,仅需在多段线生成后修改实体属性即可,也可选择提前切换全局绘图配置,两种需求都提供对应实现参考
- 所有自定义名称可根据你的实际使用需求修改
完整代码示例
(defun c:你原有命令名 (/ *error* acadObj doc plineObj targetLayer customLinetype oldLayer oldLinetype) ;; 内置错误处理 (defun *error* (msg) (if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\n执行错误: " msg)) ) (princ) ) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))) ;; ========== 配置部分 按你的需求修改 ========== ;; 目标图层,可改成固定值如 "MY_PL_LAYER" 不需要用户手动输入 (setq targetLayer (getstring "\n请输入多段线目标图层名: ")) ;; 自定义线型,替换为你自己的线型名称 (setq customLinetype "MY_CUSTOM_LT") ;; ============================================ ;; 校验图层是否存在,不存在自动创建,不需要可删除本段 (if (not (tblsearch "LAYER" targetLayer)) (vla-Add (vla-get-Layers doc) targetLayer) ) ;; 校验线型是否已加载,未加载提示退出 (if (not (tblsearch "LTYPE" customLinetype)) (progn (alert (strcat "自定义线型 " customLinetype " 未加载,请先加载后重试")) (exit) ) ) ;; 保存原有全局图层、线型配置,绘制完成后恢复,不影响后续操作 (setq oldLayer (getvar "CLAYER") oldLinetype (getvar "CELTYPE")) (setvar "CLAYER" targetLayer) (setvar "CELTYPE" customLinetype) ;; ============================================ ;; 这里替换为你原有自定义函数里的多段线绘制逻辑 ;; 以下为示例绘制逻辑,可删除 (setq pt1 (getpoint "\n指定多段线起点: ")) (setq pt2 (getpoint pt1 "\n指定下一点: ")) (command "_.PLINE" pt1 pt2 "") ;; ============================================ ;; 恢复原有全局配置 (setvar "CLAYER" oldLayer) (setvar "CELTYPE" oldLinetype) (princ "\n多段线绘制完成,已自动匹配图层与线型") (princ) )
修改说明
- 将代码中
你原有命令名替换为你现有自定义函数的命令触发名 - 配置部分的
targetLayer可设置为固定图层名字符串,不需要用户每次输入 - 配置部分的
customLinetype替换为你自己的自定义线型的准确名称 - 把你原有绘制多段线的逻辑替换到代码标注的对应位置即可生效
内容的提问来源于stack exchange,提问作者Ozsvart Donat
相关产品推荐
相关产品推荐

