明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: print1985

[源码] 图层控制-源码,VL函数,非command,非修改组码

    [复制链接]
发表于 2013-1-5 08:41:58 | 显示全部楼层
楼主的帖子又被顶上来了
发表于 2013-3-5 09:49:39 | 显示全部楼层
  1. ;自定义命令
  2. (defun c:vg () (tcgb));图层关闭
  3. (defun c:vk () (tcqbxs));全部显示
  4. (defun c:vgf () (tcgbf));关闭(反)
  5. (defun c:vd () (tcdj));图层冻结
  6. (defun c:vjd () (tcqbjd));全部解冻
  7. (defun c:vdf () (tcdjf));冻结(反)
  8. (defun c:vs () (tcsd));图层锁定
  9. (defun c:vjs () (tcqbjs));全部解锁
  10. (defun c:vsf () (tcsdf));锁定(反)
  11. (defun c:333 () (tcqbxjj));三个全部
  12. ;主程序
  13. (vl-load-com)
  14. (defun c:tc (/ DCLID FN FNAME LIN RE)
  15.        (setq fname (vl-filename-mktemp nil nil ".dcl" ))
  16.        (setq fn (open fname "w" ))
  17.        (foreach x '(
  18.                      "  agtckz : dialog{"
  19.                      "  label="图层控制V2.0+ by阿甘";"
  20.                      "     :column{"
  21.                      "      :button{key="1";label="图层关闭 <vg>";width=4;}"
  22.                      "      :button{key="2";label="图层冻结 <vd>";width=4;}"
  23.                      "      :button{key="3";label="图层锁定 <vs>";width=4;}"
  24.                      "      :button{key="4";label="关闭(反) <vgf>";width=4;}"
  25.                      "      :button{key="5";label="冻结(反) <vdf>";width=4;}"
  26.                      "      :button{key="6";label="锁定(反) <vsf>";width=4;}"
  27.                      "      :button{key="7";label="全部显示 <vk>";width=4;}"
  28.                      "      :button{key="8";label="全部解冻 <vjd>";width=4;}"
  29.                      "      :button{key="9";label="全部解锁 <vjs>";width=4;}"
  30.                      "      :button{key="10";label="三个全部 <333>";width=4;}"
  31.                      "     }"
  32.                      "     ok_cancel;"
  33.                      "}"
  34.               );end ;endlist
  35.               (princ x fn)
  36.               (write-line "" fn)
  37.        );end foreach
  38.        (close fn)
  39.        (setq fn (open fname "r" ))
  40.        (setq dclid (load_dialog fname))
  41.        (while (or (eq (substr (setq lin (vl-string-right-trim "" fn)" (vl-string-left-trim "(write-line "" (read-line fn)))) 1 2) "//" ) (eq (substr lin 1 (vl-string-search " " lin)) "" ) (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9) " : dialog" ))))
  42.        (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
  43.        (action_tile "1" "(done_dialog 1)" )
  44.        (action_tile "2" "(done_dialog 2)" )
  45.        (action_tile "3" "(done_dialog 3)" )
  46.        (action_tile "4" "(done_dialog 4)" )
  47.        (action_tile "5" "(done_dialog 5)" )
  48.        (action_tile "6" "(done_dialog 6)" )
  49.        (action_tile "7" "(done_dialog 7)" )
  50.        (action_tile "8" "(done_dialog 8)" )
  51.        (action_tile "9" "(done_dialog 9)" )
  52.        (action_tile "10" "(done_dialog 10)" )
  53.        (action_tile "cancel" "(done_dialog 0)" )
  54.        (setq re (start_dialog))
  55.        (cond
  56.               ((= re 1) (tcgb))
  57.               ((= re 2) (tcdj))
  58.               ((= re 3) (tcsd))
  59.               ((= re 4) (tcgbf))
  60.               ((= re 5) (tcdjf))
  61.               ((= re 6) (tcsdf))
  62.               ((= re 7) (tcqbxs))
  63.               ((= re 8) (tcqbjd))
  64.               ((= re 9) (tcqbjs))
  65.               ((= re 10) (tcqbxjj))
  66.        );end cond
  67.        (unload_dialog dclid)
  68.        (close fn)
  69.        (vl-file-delete fname)
  70.        (princ)
  71. );end defun
  72. ;[图层关闭]
  73. (defun tcgb (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay)
  74.        (setq AcadObject (vlax-get-acad-object)
  75.               AcadDocument (vla-get-ActiveDocument AcadObject)
  76.                                        LayersObj (vla-get-layers AcadDocument)
  77.        );end setq
  78.        (princ "\n请选择需要关闭的图层" )
  79.        (if (setq ss (ssget))
  80.               (progn
  81.                      (setq n (sslength ss))
  82.                      (setq i (- n 1))
  83.                      (repeat n
  84.                             (setq ent (ssname ss i)
  85.                                    ob (vlax-ename->vla-object ent)
  86.                                                                     lay (vla-get-layer ob)
  87.                                                                     vlay (vla-item LayersObj lay)
  88.                                                             );end setq
  89.                                                      (vla-put-layeron vlay :vlax-false)
  90.                             (setq i (1- i))
  91.                      );end repeat
  92.                               (princ "\n已关闭选择图层" )
  93.        ));end if
  94.        (princ)
  95. );end defun
  96. ;[图层全部显示]
  97. (defun tcqbxs (/ AcadObject AcadDocument LayersObj vlay)
  98.        (setq AcadObject (vlax-get-acad-object)
  99.               AcadDocument (vla-get-ActiveDocument AcadObject)
  100.                                        LayersObj (vla-get-layers AcadDocument)
  101.        );end setq
  102.        (vlax-for vlay LayersObj
  103.               (vla-put-layeron vlay :vlax-true)
  104.        );end vlax-for
  105.        ;(vla-regen AcadDocument AcAllViewPorts) 图形较大有时需要重生成才显示 可把这句加上
  106.        (princ "\n已打开全部图层" )
  107.        (princ)
  108. );end defun
  109. ;[图层关闭(反)]
  110. (defun tcgbf (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay)
  111.        (setq AcadObject (vlax-get-acad-object)
  112.               AcadDocument (vla-get-ActiveDocument AcadObject)
  113.                                        LayersObj (vla-get-layers AcadDocument)
  114.        );end setq
  115.        (princ "\n请选择需要显示的图层" )
  116.        (if (setq ss (ssget))
  117.               (progn
  118.                               (vlax-for vlay LayersObj
  119.                             (vla-put-layeron vlay :vlax-false)
  120.                      );end vlax-for
  121.                      (setq n (sslength ss))
  122.                      (setq i (- n 1))
  123.                      (repeat n
  124.                             (setq ent (ssname ss i)
  125.                                    ob (vlax-ename->vla-object ent)
  126.                                                                     lay (vla-get-layer ob)
  127.                                                                     vlay (vla-item LayersObj lay)
  128.                                                             );end setq
  129.                                                      (vla-put-layeron vlay :vlax-true)
  130.                             (setq i (1- i))
  131.                      );end repeat
  132.                               (princ "\n已关闭除选择图层外的其余图层" )
  133.        ));end if
  134.        (princ)
  135. );end defun
  136. ;[图层冻结]
  137. (defun tcdj (/ AcadObject AcadDocument LayersObj Actlay ss n i ent ob lay vlay TorN)
  138.        (setq AcadObject (vlax-get-acad-object)
  139.               AcadDocument (vla-get-ActiveDocument AcadObject)
  140.                                        LayersObj (vla-get-layers AcadDocument)
  141.                                        Actlay (vla-get-name (vla-get-activeLayer AcadDocument))
  142.        );end setq
  143.        (princ "\n请选择需要冻结的图层" )
  144.        (if (setq ss (ssget))
  145.               (progn
  146.                      (setq n (sslength ss))
  147.                      (setq i (- n 1))
  148.                      (repeat n
  149.                             (setq ent (ssname ss i)
  150.                                    ob (vlax-ename->vla-object ent)
  151.                                                                     lay (vla-get-layer ob)
  152.                                                                     vlay (vla-item LayersObj lay)
  153.                                                             );end setq
  154.                                                              (if (/= lay Actlay)
  155.                                                             (vla-put-freeze vlay :vlax-true)
  156.                                                                             (setq TorN T)
  157.                                                             );end if
  158.                             (setq i (1- i))
  159.                      );end repeat
  160.                               (if TorN
  161.                                      (princ "\n除当前层无法冻结外!已冻结其余选择图层" )
  162.                                              (princ "\n已冻结选择图层" )
  163.                              );end if
  164.        ));end if
  165.        (princ)
  166. );end defun
  167. ;[图层全部解冻]
  168. (defun tcqbjd (/ AcadObject AcadDocument LayersObj Actlay ss n i ent ob lay vlay TorN)
  169.        (setq AcadObject (vlax-get-acad-object)
  170.               AcadDocument (vla-get-ActiveDocument AcadObject)
  171.                                        LayersObj (vla-get-layers AcadDocument)
  172.                                        Actlay (vla-get-name (vla-get-activeLayer AcadDocument))
  173.        );end setq
  174.        (vlax-for vlay LayersObj
  175.                        (if (/= (vla-get-name vlay) Actlay)
  176.                      (vla-put-freeze vlay :vlax-false)
  177.                       );end if
  178.        );end vlax-for
  179.        (vla-regen AcadDocument AcAllViewPorts)
  180.        (princ "\n已解冻全部图层" )
  181.        (princ)
  182. );end defun
  183. ;[图层冻结(反)]
  184. (defun tcdjf (/ AcadObject AcadDocument LayersObj Actlay ss n i ent ob lay vlay TorN)
  185.        (setq AcadObject (vlax-get-acad-object)
  186.               AcadDocument (vla-get-ActiveDocument AcadObject)
  187.                                        LayersObj (vla-get-layers AcadDocument)
  188.                                        Actlay (vla-get-name (vla-get-activeLayer AcadDocument))
  189.        );end setq
  190.        (princ "\n请选择不需要冻结的图层" )
  191.        (if (setq ss (ssget))
  192.               (progn
  193.                               (vlax-for vlay LayersObj
  194.                                               (if (/= (vla-get-name vlay) Actlay)
  195.                                             (vla-put-freeze vlay :vlax-true)
  196.                                              );end if
  197.                              );end vlax-for
  198.                      (setq n (sslength ss))
  199.                      (setq i (- n 1))
  200.                      (repeat n
  201.                             (setq ent (ssname ss i)
  202.                                    ob (vlax-ename->vla-object ent)
  203.                                                                     lay (vla-get-layer ob)
  204.                                                                     vlay (vla-item LayersObj lay)
  205.                                                             );end setq
  206.                                                              (if (/= lay Actlay)
  207.                                                             (vla-put-freeze vlay :vlax-false)
  208.                                                                             (setq TorN T)
  209.                                                             );end if
  210.                             (setq i (1- i))
  211.                      );end repeat
  212.                               (if TorN
  213.                                              (princ "\n已冻结除选择图层外的其余图层" )
  214.                                      (princ "\n除当前层无法冻结外! 已冻结其余除选择图层外的图层" )
  215.                              );end if
  216.        ));end if
  217.        (princ)
  218. );end defun
  219. ;[图层锁定]
  220. (defun tcsd (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay)
  221.        (setq AcadObject (vlax-get-acad-object)
  222.               AcadDocument (vla-get-ActiveDocument AcadObject)
  223.                                        LayersObj (vla-get-layers AcadDocument)
  224.        );end setq
  225.        (princ "\n请选择需要锁定的图层" )
  226.        (if (setq ss (ssget))
  227.               (progn
  228.                      (setq n (sslength ss))
  229.                      (setq i (- n 1))
  230.                      (repeat n
  231.                             (setq ent (ssname ss i)
  232.                                    ob (vlax-ename->vla-object ent)
  233.                                                                     lay (vla-get-layer ob)
  234.                                                                     vlay (vla-item LayersObj lay)
  235.                                                             );end setq
  236.                                                      (vla-put-lock vlay :vlax-true)
  237.                             (setq i (1- i))
  238.                      );end repeat
  239.                               (princ "\n已锁定选择图层" )
  240.        ));end if
  241.        (princ)
  242. );end defun
  243. ;[图层全部解锁]
  244. (defun tcqbjs (/ AcadObject AcadDocument LayersObj vlay)
  245.        (setq AcadObject (vlax-get-acad-object)
  246.               AcadDocument (vla-get-ActiveDocument AcadObject)
  247.                                        LayersObj (vla-get-layers AcadDocument)
  248.        );end setq
  249.        (vlax-for vlay LayersObj
  250.               (vla-put-lock vlay :vlax-false)
  251.        );end vlax-for
  252.        (princ "\n已解锁全部图层" )
  253.        (princ)
  254. );end defun
  255. ;[图层解锁(反)]
  256. (defun tcsdf (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay)
  257.        (setq AcadObject (vlax-get-acad-object)
  258.               AcadDocument (vla-get-ActiveDocument AcadObject)
  259.                                        LayersObj (vla-get-layers AcadDocument)
  260.        );end setq
  261.        (princ "\n请选择不需要锁定的图层" )
  262.        (if (setq ss (ssget))
  263.               (progn
  264.                               (vlax-for vlay LayersObj
  265.                             (vla-put-lock vlay :vlax-true)
  266.                      );end vlax-for
  267.                      (setq n (sslength ss))
  268.                      (setq i (- n 1))
  269.                      (repeat n
  270.                             (setq ent (ssname ss i)
  271.                                    ob (vlax-ename->vla-object ent)
  272.                                                                     lay (vla-get-layer ob)
  273.                                                                     vlay (vla-item LayersObj lay)
  274.                                                             );end setq
  275.                                                      (vla-put-lock vlay :vlax-false)
  276.                             (setq i (1- i))
  277.                      );end repeat
  278.                               (princ "\n已锁定除选择图层外的其余图层" )
  279.        ));end if
  280.        (princ)
  281. );end defun
  282. ;图层全部 显示+解锁+解冻
  283. (defun tcqbxjj (/ ACADDOCUMENT ACADOBJECT ACTLAY LAYERSOBJ)
  284.        (setq AcadObject (vlax-get-acad-object)
  285.               AcadDocument (vla-get-ActiveDocument AcadObject)
  286.                                        LayersObj (vla-get-layers AcadDocument)
  287.                                        Actlay (vla-get-name (vla-get-activeLayer AcadDocument))
  288.        );end setq
  289.        (vlax-for vlay LayersObj
  290.                        (if (/= (vla-get-name vlay) Actlay)
  291.                      (vla-put-freeze vlay :vlax-false)
  292.                       );end if
  293.               (vla-put-layeron vlay :vlax-true)
  294.               (vla-put-lock vlay :vlax-false)
  295.        );end vlax-for
  296.        (vla-regen AcadDocument AcAllViewPorts)
  297.        (princ "\n所有图层已显示+解锁+解冻" )
  298.        (princ)
  299. );end defun
略加修改的版本,定义了局部变量,按钮处显示快捷键。
发表于 2013-3-7 13:28:03 | 显示全部楼层
看到这个源码真是学习了呀。太感谢啦
发表于 2013-12-12 18:33:47 | 显示全部楼层
楼主很强大,图层管理很好用。谢谢。只是隐藏物体(反)没有反应,不知道是什么原因。
发表于 2013-12-16 23:23:46 | 显示全部楼层
linshiyin2 发表于 2013-3-5 09:49
略加修改的版本,定义了局部变量,按钮处显示快捷键。

功能多了一点,有凸显就好了
 楼主| 发表于 2014-8-11 22:47:36 | 显示全部楼层
界面小更新 没技术含量 需要的可以拿去玩玩
发表于 2015-1-22 10:39:54 | 显示全部楼层
好。支持源码.
发表于 2015-1-22 12:54:23 | 显示全部楼层
支持源代码.
发表于 2015-1-26 13:14:54 | 显示全部楼层
收藏备用  挺方便的
发表于 2015-6-14 19:33:35 | 显示全部楼层
顶了再欣赏哈。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 21:42 , Processed in 0.160587 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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