明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1174|回复: 6

[源码] 大侠,有空看看毛病在那儿,谢谢。

[复制链接]
发表于 2024-2-1 17:28:07 | 显示全部楼层 |阅读模式
(defun c:tmp(/ typ )
        (initget 1 "S F T")
        (setq typ (getkword "\n 关闭部分F、全部打开T、显示部分S:"))
        (cond ((= typ "F")   (f_lay))
              ((= typ "T")   (command "-layer" "on" "*"  ""))
              ((= typ "S")   (s_lay))
        )
)
;  关闭图层
(defun f_lay(/ ss i ssn lay  )
    (princ "\n选择图层参考块:")
    (setq ss (ssget))
    (setq i 0)
        ;(command "layer")
        (repeat   (sslength ss)
                  (setq ssn (ssname ss i ))
                  (setq lay (cdr (assoc 8 (entget ssn))))
                  (command "-layer" "off" lay  "" )
                  
                  (setq i ( + i 1))
        )
        (command "")
)
;保留图层
(defun s_lay(/ ss i ssn lay  )
         (princ "\n选择图层参考块:")
         (setq ss (ssget))
         (command "-layer" "off" "*"  "")
         (setq i 0   )
         (repeat  (sslength ss)
                  (setq ssn (ssname ss i ))
                  (setq lay (cdr ( assoc 8 (entget ssn))))
                  (command "-layer""on" lay "")

                  (setq i ( + i 1))
        )
        ;(command "")
)
(princ "\n程序加载完成")
(princ "\n")

发表于 2024-2-1 19:42:23 | 显示全部楼层
本帖最后由 xyp1964 于 2024-2-1 19:43 编辑

  1. (defun Ukword (bit kwd msg def / inp)
  2.   (if (and def (/= def ""))
  3.     (setq msg (strcat "\n" msg "<" def ">: ")
  4.           bit (* 2 (fix (/ bit 2)))
  5.     )
  6.     (setq msg (strcat "\n" msg ": "))
  7.   )
  8.   (initget bit kwd)
  9.   (setq inp (getkword msg))
  10.   (if inp
  11.     inp
  12.     def
  13.   )
  14. )

  15. (defun c:tt ()
  16.   (or kw(setq kw "1"))
  17.   (setq kw (Ukword 1 "1 2 3"  "[关闭部分(1)/全部打开(2)/显示部分(3)/]" kw))   
  18.   (cond  ((= kw "1") (f_lay))
  19.         ((= kw "2") (command "-layer" "on" "*" ""))
  20.         ((= kw "3") (s_lay))
  21.   )
  22.   (princ)
  23. )
  24. ;; 关闭图层
  25. (defun f_lay ()
  26.   (princ "\n选择图层参考块: ")
  27.   (setq i -1)
  28.   (if (setq ss (ssget))
  29.     (progn
  30.       (while (setq s1 (ssname ss (setq i (1+ i))))         
  31.         (setq la (cdr (assoc 8 (entget s1))))
  32.         (command "-layer" "off" la "")
  33.       )
  34.     )
  35.   )
  36. )
  37. ;; 保留图层
  38. (defun s_lay ()
  39.   (princ "\n选择图层参考块: ")
  40.   (if (setq ss (ssget))
  41.     (progn
  42.       (command "-layer" "off" "*" "")
  43.       (setq i -1)
  44.       (while (setq s1 (ssname ss (setq i (1+ i))))         
  45.         (setq la (cdr (assoc 8 (entget s1))))
  46.         (command "-layer" "on" la "")
  47.       )
  48.     )
  49.   )
  50. )
  51. (princ)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-2-1 18:10:51 | 显示全部楼层
;现在这码能跑了,哈哈

(defun c:tmp(/ typ )
        (initget 1 "S F T")
        (setq typ (getkword "\n 关闭部分F、全部打开T、显示部分S:"))
        (cond ((= typ "F")   (f_lay))
              ((= typ "T")   (command "-layer" "on" "*"  ""))
              ((= typ "S")   (s_lay))
        )
)
;  关闭图层
(defun f_lay(/ ss i ssn lay  )
    (princ "\n选择图层参考块:")
    (setq ss (ssget))
    (setq i 0)
        ;(command "layer")
        (repeat   (sslength ss)
                  (setq ssn (ssname ss i ))
                  (setq lay (cdr (assoc 8 (entget ssn))))
                  (command "-layer" "off" lay  "" )
                  
                  (setq i ( + i 1))
        )
        (command "")
)
;保留图层
(defun s_lay(/ ss i ssn lay  )
         (princ "\n选择图层参考块:")
         (setq ss (ssget))
         (command "layer" "off" "*" "y" "")
         (setq i 0   )
         (repeat  (sslength ss)
                  (setq ssn (ssname ss i ))
                  (setq lay (cdr ( assoc 8 (entget ssn))))
                  (command "layer" "on" lay   "")

                  (setq i ( + i 1))
        )
        ;(command "")
)
(princ "\n程序加载完成")
(princ "\n")

发表于 2024-2-2 10:32:51 | 显示全部楼层
留个脚印,挺好用
发表于 2024-2-2 22:35:13 | 显示全部楼层
  1. (defun Ukword (bit kwd msg def / inp)
  2.   ; 定义函数 Ukword,用于获取用户输入的关键字
  3.   (if (and def (/= def ""))
  4.     ; 如果提供了默认值 def 且不为空字符串
  5.     (setq msg (strcat "\n" msg "<" def ">: ")
  6.           bit (* 2 (fix (/ bit 2))))
  7.     ; 构建提示消息,包含默认值
  8.     (setq msg (strcat "\n" msg ": ")))
  9.     ; 构建提示消息,不包含默认值
  10.   (initget bit kwd)
  11.   ; 使用 initget 函数设置关键字输入的选项
  12.   (setq inp (getkword msg))
  13.   ; 使用 getkword 函数获取用户输入的关键字
  14.   (if inp
  15.     inp
  16.     def))

  17. (defun c:ttt ()
  18.   ; 定义命令函数 c:ttt
  19.   (or kw (setq kw "1"))
  20.   ; 如果变量 kw 未定义,则将其设置为默认值 "1"
  21.   (setq kw (Ukword 1 "1 2 3 4" "[关闭部分(1)/全部打开(2)/显示部分(3)/上一次图层(4)/]" kw))
  22.   ; 使用 Ukword 函数获取用户输入的关键字,提供选项和相应的提示消息
  23.   (cond
  24.     ((= kw "1") (f_lay))
  25.     ; 如果关键字为 "1",调用函数 f_lay
  26.     ((= kw "2") (command "-layer" "on" "*" ""))
  27.     ; 如果关键字为 "2",执行打开所有图层的命令
  28.     ((= kw "3") (s_lay))
  29.     ; 如果关键字为 "3",调用函数 s_lay
  30.     ((= kw "4") (command "_LayerP")))
  31.     ; 如果关键字为 "4",执行上一次图层的命令
  32.   (princ))
  33.   ; 返回空值

  34. ; 关闭图层
  35. (defun f_lay (/ ss c en lay)
  36.   ; 定义函数 f_lay,用于关闭图层
  37.   (princ "\n选择图层参考块:")
  38.   ; 提示用户选择图层参考块
  39.   (setq ss (ssget))
  40.   ; 获取用户选择的图层参考块
  41.   (setq c 0)
  42.   ; 初始化计数器 c
  43.   (while (< c (sslength ss))
  44.     ; 循环处理每个图层参考块
  45.     (setq en (ssname ss c))
  46.     ; 获取图层参考块的名字
  47.     (setq lay (cdr (assoc 8 (entget en))))
  48.     ; 获取图层参考块的图层名
  49.     (if (not (member lay laylst))
  50.       ; 如果图层名不在 laylst 列表中,则将其添加到列表中
  51.       (setq laylst (cons lay laylst)))
  52.     (if (= lay (getvar "clayer"))
  53.       ; 如果图层名与当前图层相同,则关闭图层并保留对象
  54.       (command "-layer" "off" lay "y" "")
  55.       (command "-layer" "off" lay ""))
  56.     ; 否则,关闭图层
  57.     (setq c (1+ c)))
  58.     ; 增加计数器 c
  59.   (princ))
  60.   ; 返回空值

  61. ; 保留图层
  62. (defun s_lay (/ Es ES EN EL A ss)
  63.   ; 定义函数 s_lay,用于保留图层
  64.   (princ "\n选择图层参考块:")
  65.   ; 提示用户选择图层参考块
  66.   (setq ss (ssget))
  67.   ; 获取用户选择的图层参考块
  68.   (setq A 0 EN "" EL nil FL nil)
  69.   ; 初始化变量 A、EN、EL、FL
  70.   (while (/= EN nil)
  71.     ; 循环处理每个图层参考块
  72.     (setq EN (ssname ss A) EL (cons EN EL) A (1+ A)))
  73.     ; 获取图层参考块的名字,并增加计数器 A
  74.   (setq EL (cdr EL) FL (cdr (assoc ' 8 (entget (car EL)))) EL (cdr EL)
  75.         ss (ssget "_X" (list (cons 0 "INSERT"))))
  76.   ; 获取图层参考块的图层名,并筛选出插入的图块
  77.   (repeat (- A 2)
  78.     ; 循环处理每个图层参考块的图层名
  79.     (setq EN (cdr (assoc ' 8 (entget (car EL))))
  80.           FL (strcat EN "," FL) EL (cdr EL)))
  81.     ; 将图层名添加到 FL 变量中,并更新 EL 变量
  82.   (command "LAYER" "off" "*" "y" "on" (eval FL) "")
  83.   ; 关闭指定图层
  84.   (princ)
  85.   ; 返回空值
  86. )

  87. (princ "\n命令:TTT 图层管理:关闭部分(1)/全部打开(2)/显示部分(3)/上一次图层(4)")
  88. (princ)


不错不错
发表于 2024-5-29 08:38:28 | 显示全部楼层

能否改为布局中的视口冻结、解冻,这样布局就更方便了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:37 , Processed in 0.179785 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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