找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1785|回复: 12

[已解决] 请求一个关闭块内所有层的工具

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-5-14 09:22:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

手里有不少关闭图层的工具,但是对块来说,都关不净,总会留下些实体还能看到,能否给写一个“干净彻底”的关闭图层的命令?

谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-14 09:55:54 | 显示全部楼层
这样?
  1. (defun c:tt (/ e obj doc blocks layers)
  2.   (while (setq e (car (entsel "\nPick Insert: ")))
  3.     (setq obj (vlax-ename->vla-object e))
  4.     (if  (= (vla-get-objectname obj) "AcDbBlockReference")
  5.       (progn
  6.   (setq doc    (vla-get-activedocument (vlax-get-acad-object))
  7.         blocks (vla-get-blocks doc)
  8.         layers (vla-get-layers doc)
  9.   )
  10.   (vl-catch-all-apply
  11.     (function
  12.       (lambda ()
  13.         (vlax-for  x (vla-item blocks (vla-get-name obj))
  14.     (vla-put-Freeze
  15.       (vla-item layers (vla-get-layer x))
  16.       :vlax-true
  17.     );_Freeze Layer In Block
  18.         )
  19.         (vla-put-freeze (vla-get-layer obj) :vlax-true);_Freeze Layer of Insert
  20.       )
  21.     )
  22.   )
  23.   
  24.       )
  25.     )
  26.   )
  27.   (if doc
  28.     (mapcar 'vlax-release-object (list doc blocks layers))
  29.   )
  30.   (princ)
  31. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-14 10:03:51 | 显示全部楼层

谢谢eachy大师,能不能帮修改下适合所有情况呢?

对普通实体和块的都适合。

另外,能不能“选层关闭”、“选层冻结”分别写两个命令? 谢谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3394个

财富等级: 富可敌国

发表于 2013-5-14 11:29:21 | 显示全部楼层
msteel工具这些功能都有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-14 11:46:31 | 显示全部楼层
试试这个合二为一的[pcode=lisp,true](defun c:tt (/ lyrf doc blocks layers tf kw mod e obj)
  (defun lyrf (lyr mod)
    (vlax-put-property
      lyr
      mod
      (if (= mod 'Freeze)
  :vlax-true
  :vlax-false
      )
    )
  )
  (setq  doc    (vla-get-activedocument (vlax-get-acad-object))
  blocks (vla-get-blocks doc)
  layers (vla-get-layers doc)
  tf     t
  kw     "F"
  mod    'Freeze
  )
  (vl-catch-all-apply
    (function
      (lambda ()
  (while (and
     tf
     (progn
       (initget "Freeze layerOn")
       (setq
         e
          (entsel
      (strcat
        "\n选择物体[F - 冻结/O - 关闭]<"
        kw
        ">: "
      )
          )
       )
     )
         ) ;_end and
    (cond
      ((null e) (setq tf nil))
      ((= e "Freeze")
       (setq kw  "F"
       mod 'Freeze
       )
      )
      ((= e "layerOn")
       (setq kw  "O"
       mod 'LayerOn
       )
      )
      (t)
    )
    (if (listp e) ;_if pick
      (progn
        (setq obj (vlax-ename->vla-object (car e)))
        (if (= (vla-get-objectname obj)
         "AcDbBlockReference"
      )
    (vlax-for x (vla-item blocks (vla-get-name obj))
      (lyrf (vla-item layers (vla-get-layer x)) mod)
    ) ;_Freeze Layer In Block
        ) ;_end if insert
        (lyrf (vla-item layers (vla-get-layer obj)) mod) ;_Freeze Layer of Object
      ) ;_end progn
    ) ;_end if
  ) ;_end while
      ) ;_end lambda
    ) ;_end function
  ) ;_end catch
  (mapcar 'vlax-release-object (list doc blocks layers))
  (princ)
)[/pcode]


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-14 12:21:10 | 显示全部楼层
Free-Lancer 发表于 2013-5-14 11:46
试试这个合二为一的(defun c:tt (/ lyrf doc blocks layers tf kw mod e obj)
  (defun lyrf (lyr mod)
  ...

谢谢,测试了下,好像图块内实体有在当前层的没作用? 能不能修改下代码,判断下当前层,如果好似冻结的话,就先设置当前层为0,然后再冻结,如果关闭,可能代码也要判断下?

另外,
QQ截图20130514121931.png

这个提示好几次我选蒙了,以为冻结是O,能不能这样:  [冻结-F/关闭-O]<F>  {:soso_e106:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-14 12:22:28 | 显示全部楼层
Free-Lancer 发表于 2013-5-14 11:46
试试这个合二为一的(defun c:tt (/ lyrf doc blocks layers tf kw mod e obj)
  (defun lyrf (lyr mod)
  ...

对了,忘记问了,嵌套块也考虑了吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-14 14:49:36 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-5-14 18:09 编辑

再试试
  1. (defun c:tt (/ lyrf doc blocks layers tf kw mod e n)
  2.   (defun lyrf (obj mod / lyrff)
  3.     (defun lyrff (lyr mod)
  4.       (vl-catch-all-apply
  5. (function (lambda ()
  6.       (vlax-put-property
  7.         lyr
  8.         mod
  9.         (if (= mod 'Freeze)
  10.    :vlax-true
  11.    :vlax-false
  12.         )
  13.       )
  14.     )
  15. )
  16.       )
  17.     )
  18.     (if (= (vla-get-objectname obj)
  19.     "AcDbBlockReference"
  20. )
  21.       (vlax-for x (vla-item blocks (vla-get-name obj))
  22. (if (= (vla-get-objectname obj)
  23.         "AcDbBlockReference"
  24.      )
  25.    (lyrf x mod)
  26. )
  27. (lyrff (vla-item layers (vla-get-layer x)) mod)
  28.       ) ;_Freeze Layer In Block
  29.     ) ;_end if insert
  30.     (lyrff (vla-item layers (vla-get-layer obj)) mod) ;_Freeze Layer of Object
  31.   )
  32.   (setq doc    (vla-get-activedocument (vlax-get-acad-object))
  33. blocks (vla-get-blocks doc)
  34. layers (vla-get-layers doc)
  35. tf     t
  36. kw     "F"
  37. mod    'Freeze
  38. n      0
  39.   )
  40.   (setvar "cmdecho" 0)
  41.   (vl-catch-all-apply
  42.     (function
  43.       (lambda ()
  44. (while (and
  45.    tf
  46.    (progn
  47.      (initget "Freeze layerOn U")
  48.      (setq
  49.        e
  50.         (nentsel
  51.    (strcat
  52.      "\n选择物体[冻结-F/关闭-O/回退-U]<"
  53.      kw
  54.      ">: "
  55.    )
  56.         )
  57.      )
  58.    )
  59.         ) ;_end and
  60.    (cond
  61.      ((null e) (setq tf nil))
  62.      ((= e "Freeze")
  63.       (setq kw  "F"
  64.      mod 'Freeze
  65.       )
  66.      )
  67.      ((= e "layerOn")
  68.       (setq kw  "O"
  69.      mod 'LayerOn
  70.       )
  71.      )
  72.      ((= e "U")
  73.       (if (zerop n)
  74.         (princ "\nAll is Undo!")
  75.         (progn
  76.    (vl-cmdf ".U") ;_ 撤销不完善
  77.    (setq n (1- n))
  78.         )
  79.       )
  80.      )
  81.      (t)
  82.    )
  83.    (vla-startundomark doc) ;_undo mark
  84.    (if (listp e) ;_if pick
  85.      (cond
  86.        ((= (length e) 2)
  87.         (lyrf (vlax-ename->vla-object (car e)) mod)
  88.         (setq n (1+ n))
  89.        )
  90.        ((= (length e) 4)
  91.         (mapcar
  92.    '(lambda (x) (lyrf (vlax-ename->vla-object x) mod))
  93.    (last e)
  94.         )
  95.         (setq n (1+ n))
  96.        )
  97.        (t)
  98.      ) ;_end cond
  99.    ) ;_end if
  100.    (vla-endundomark doc)
  101. ) ;_end while
  102.       ) ;_end lambda
  103.     ) ;_end function
  104.   ) ;_end catch
  105.   (mapcar 'vlax-release-object (list doc blocks layers))
  106.   (princ)
  107. )

评分

参与人数 1威望 +1 D豆 +10 贡献 +1 收起 理由
XDSoft + 1 + 10 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-14 21:22:32 | 显示全部楼层

太OK了,完美,谢谢eachy大师。大师出手就只有没有。
{:soso_e142:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-14 21:26:30 | 显示全部楼层
liuyun242 发表于 2013-5-14 11:29
msteel工具这些功能都有

我用过很多的工具了,没EACHY大师这个完美,你说的这个工具能完成我上面说的所有要求吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2016-3-28 08:54:01 | 显示全部楼层
很好,正在需要,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-6-27 00:25:19 | 显示全部楼层

一直有这个功能的困扰,程序真的很给力,如果是相反的功能,显示块内的所有图层呢 该是什么样子的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-6-27 19:35:20 | 显示全部楼层
正需要,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-10 15:38 , Processed in 0.493130 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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