明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 816|回复: 7

[讨论] ai生成代码 选层保留(孤立图层)

[复制链接]
发表于 2025-11-7 19:30:25 | 显示全部楼层 |阅读模式
孤立图层 并在取消孤
  1. ;; ===================================================================
  2. ;; 图层孤立命令 (IL) + 自动恢复 (ILR)
  3. ;; 特性:
  4. ;;   - 运行 IL 后弹出对话框
  5. ;;   - 点击“退出孤立”自动恢复图层
  6. ;;   - 仅需加载此 .lsp 文件(自动创建临时 DCL)
  7. ;;   - 兼容 AutoCAD LT 和完整版
  8. ;; ===================================================================

  9. ;; 全局变量
  10. (setq *GL_ORIGINAL_ON_LAYERS* nil)
  11. (setq *GL_TEMP_DCL_PATH* (strcat (getvar "TEMPPREFIX") "isolate_temp1.dcl"))

  12. ;; 命令: IL
  13. (defun C:IL (/ ss lays ent lyr layer-data dcl_id)
  14.   (prompt "\n选择要孤立的图元 <回车结束>: ")
  15.   (if (not (setq ss (ssget)))
  16.     (princ "\n未选择对象。")
  17.     (progn
  18.       ;; 保存原始开启的图层
  19.       (setq *GL_ORIGINAL_ON_LAYERS* nil)
  20.       (while (setq layer-data (tblnext "LAYER" (null layer-data)))
  21.         (if (= (logand (cdr (assoc 70 layer-data)) 2) 0)
  22.           (setq *GL_ORIGINAL_ON_LAYERS*
  23.             (cons (cdr (assoc 2 layer-data)) *GL_ORIGINAL_ON_LAYERS*)
  24.           )
  25.         )
  26.       )
  27.       
  28.       ;; 收集选中图层
  29.       (setq lays nil)
  30.       (repeat (sslength ss)
  31.         (setq ent (ssname ss 0)
  32.           lyr (cdr (assoc 8 (entget ent)))
  33.         )
  34.         (if (not (member lyr lays))
  35.           (setq lays (cons lyr lays))
  36.         )
  37.         (ssdel ent ss)
  38.       )
  39.       
  40.       ;; 孤立图层
  41.       (command "_.layer" "_off" "*" "_y" "")
  42.       (foreach lyr lays (command "_.layer" "_on" lyr ""))
  43.       
  44.       ;; 创建并加载临时 DCL
  45.       (GL:create-temp-dcl)
  46.       (if (not (findfile *GL_TEMP_DCL_PATH*))
  47.         (princ "\n>> 无法创建临时对话框文件。")
  48.         (progn
  49.           (setq dcl_id (load_dialog *GL_TEMP_DCL_PATH*))
  50.           (if (not (new_dialog "isolate_dialog" dcl_id))
  51.             (princ "\n>> 无法创建对话框。")
  52.             (progn
  53.               (action_tile "exit_btn" "(done_dialog 1)")
  54.               (action_tile "cancel" "(done_dialog 0)")
  55.               (setq user_choice (start_dialog))
  56.               (unload_dialog dcl_id)
  57.               ;; 可选:删除临时文件(保留也可,下次覆盖)
  58.               ;; (vl-file-delete *GL_TEMP_DCL_PATH*)
  59.               
  60.               (if (= user_choice 1)
  61.                 (C:ILR)
  62.                 (princ "\n>> 孤立模式仍激活,输入 ILR 可手动恢复。")
  63.               )
  64.             )
  65.           )
  66.         )
  67.       )
  68.     )
  69.   )
  70.   (princ)
  71. )

  72. ;; 命令: ILR —— 恢复图层
  73. (defun C:ILR ()
  74.   (if (null *GL_ORIGINAL_ON_LAYERS*)
  75.     (princ "\n>> 无保存的图层状态,无法恢复。")
  76.     (progn
  77.       (command "_.layer" "_off" "*" "_y" "")
  78.       (foreach lyr *GL_ORIGINAL_ON_LAYERS*
  79.         (command "_.layer" "_on" lyr "")
  80.       )
  81.       (setq *GL_ORIGINAL_ON_LAYERS* nil)
  82.       (princ "\n>> 图层状态已恢复。")
  83.     )
  84.   )
  85.   (princ)
  86. )

  87. ;; 创建临时 DCL 文件(使用 :paragraph 支持换行)
  88. (defun GL:create-temp-dcl ()
  89.   (if (findfile *GL_TEMP_DCL_PATH*)
  90.     (vl-file-delete *GL_TEMP_DCL_PATH*)
  91.   )
  92.   (setq fp (open *GL_TEMP_DCL_PATH* "w"))
  93.   (write-line "isolate_dialog : dialog {" fp)
  94.   (write-line "  label = \"孤立图层\";" fp)
  95.   (write-line "  : text { label = \"图层已孤立\"; }" fp)
  96.   (write-line "  : text { label = \"点击'退出孤立'可恢复图层状态\"; }" fp)
  97.   (write-line "  : text { label = \"点击'取消'保持当前状态\"; }" fp)
  98.   (write-line "  : spacer { height = 2; }" fp) ; 文字与按钮之间多空一点
  99.   (write-line "  : button {" fp)
  100.   (write-line "    key = \"exit_btn\";" fp)
  101.   (write-line "    label = \"退出孤立\";" fp)
  102.   (write-line "    width = 16;" fp)  ; 加宽按钮
  103.   (write-line "  }" fp)
  104.   (write-line "  : spacer { height = 1; }" fp) ; 按钮下方留空
  105.   (write-line "  : button {" fp)
  106.   (write-line "    key = \"cancel\";" fp)
  107.   (write-line "    label = \"取消\";" fp)
  108.   (write-line "    is_cancel = true;" fp)
  109.   (write-line "    width = 16;" fp)
  110.   (write-line "  }" fp)
  111.   (write-line "  errtile;" fp)
  112.   (write-line "}" fp)
  113.   (close fp)
  114. )
  115. (princ "\n[加载成功] 命令: IL (孤立图层), ILR (恢复)")
  116. (princ)


复制代码

回复

使用道具 举报

发表于 2025-11-7 21:22:11 | 显示全部楼层
ai也是挺无聊的
layiso layerp
回复 支持 2 反对 0

使用道具 举报

发表于 2025-11-7 20:50:36 | 显示全部楼层
太感动了 居然是免费的 已copy
回复 支持 反对

使用道具 举报

发表于 2025-11-7 21:28:21 | 显示全部楼层
哈哈哈你们也是太理解AI了可以反正能用就行
回复 支持 反对

使用道具 举报

发表于 2025-11-8 13:28:56 | 显示全部楼层
forestgxc 发表于 2025-11-7 21:22
ai也是挺无聊的
layiso layerp

我试试这两个,666啊
回复 支持 反对

使用道具 举报

发表于 2025-11-8 14:26:46 | 显示全部楼层
ai总是把简单的事情复杂化  显得它聪明
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-8 19:58:41 | 显示全部楼层
yaya7827 发表于 2025-11-8 14:26
ai总是把简单的事情复杂化  显得它聪明

换个思路 为什么不是欧特克开发人员的思路有问题呢? 明明很多功能可以弄个快捷图标、优化说明提供给用户,但是欧特克就是故意隐藏起来 ,非要输入命令让用户去操作。。 非常不理解他们开发的思路,好的功能千方百计隐藏起来不不让用户知道、也让用户找不到。。
回复 支持 反对

使用道具 举报

发表于 2025-11-13 13:34:03 | 显示全部楼层
本帖最后由 amook147 于 2025-11-13 13:35 编辑
f4800 发表于 2025-11-8 19:58
换个思路 为什么不是欧特克开发人员的思路有问题呢? 明明很多功能可以弄个快捷图标、优化说明提供给用户 ...

其实autocad已经是很笨重的CAD工具了   这方面 远远不如国产的中望  浩辰   。。。  
autocad现在最大的优势就是盗版满天飞   欧特克放纵盗版 导致   用户依赖性太强了。。。  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-12-12 06:26 , Processed in 0.165059 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表