明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 708|回复: 4

[提问] 下面LISP如何修改能选中块内的对象

[复制链接]
发表于 2020-3-11 17:40:19 | 显示全部楼层 |阅读模式
下面代码能隐藏显示S-DZQM图层上的实体,但是当S-DZQM图层上实体在块内,就无法隐藏和显示了 ,该如何修改?
  1. ;[隐藏物体]
  2. (defun c:111 (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
  3.   (setq AcadObject (vlax-get-acad-object)
  4.     AcadDocument (vla-get-ActiveDocument AcadObject)
  5.     LayersObj (vla-get-layers AcadDocument)
  6.   );end setq
  7.   (princ "\n请选择需要隐藏的物体" )
  8.   
  9.   
  10.   (if (setq ss (ssget "x" (list (cons 8 "S-DZQM"))))
  11.     (progn
  12.       (setq n (sslength ss))
  13.       (setq i (- n 1))
  14.       (repeat n
  15.         (setq ent (ssname ss i)
  16.           ob (vlax-ename->vla-object ent)
  17.           lay (vla-get-layer ob)
  18.           vlay (vla-item LayersObj lay)
  19.         );end setq
  20.         (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true);如果图层锁定
  21.           (vla-put-lock vlay :vlax-false);先解锁图层
  22.         );end if
  23.         (vla-put-visible ob :vlax-false)
  24.         (if (= lay-tn :vlax-true)
  25.           (vla-put-lock vlay :vlax-true);再锁定图层,恢复图层状态
  26.         );end if
  27.         (setq i (1- i))
  28.       );end repeat
  29.       (princ "\n已隐藏选择物体" )
  30.   ));end if
  31.   (princ)
  32. )

  33. ;[恢复隐藏]
  34. (defun c:222 (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
  35.   (setq AcadObject (vlax-get-acad-object)
  36.     AcadDocument (vla-get-ActiveDocument AcadObject)
  37.     LayersObj (vla-get-layers AcadDocument)
  38.   );end setq
  39.   (if (setq ss (ssget "x" (list (cons 8 "S-DZQM"))))
  40.     (progn
  41.       (setq n (sslength ss))
  42.       (setq i (- n 1))
  43.       (repeat n
  44.         (setq ent (ssname ss i)
  45.           ob (vlax-ename->vla-object ent)
  46.           lay (vla-get-layer ob)
  47.           vlay (vla-item LayersObj lay)
  48.         );end setq
  49.         (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true)
  50.           (vla-put-lock vlay :vlax-false)
  51.         );end if
  52.         (vla-put-visible ob :vlax-true)
  53.         (if (= lay-tn :vlax-true)
  54.           (vla-put-lock vlay :vlax-true)
  55.         );end if
  56.         (setq i (1- i))
  57.       );end repeat
  58.       (princ "\n已显示隐藏物体" )
  59.     );end progn
  60.     (princ "\n本图无隐藏物体" )
  61.   );end if
  62.   ;(vla-regen AcadDocument AcAllViewPorts) 图形较大有时需要重生成才显示 可把这句加上
  63.   (princ)
  64. )


 楼主| 发表于 2020-3-11 17:41:54 | 显示全部楼层
原代码是阿甘兄弟的代码 感谢
发表于 2020-3-12 08:49:19 | 显示全部楼层
这个需求还是很有意义的,帮楼主顶一下!
 楼主| 发表于 2020-3-12 22:49:18 | 显示全部楼层
panliang9 发表于 2020-3-12 08:49
这个需求还是很有意义的,帮楼主顶一下!

谢谢                                       
 楼主| 发表于 2020-5-12 19:21:14 | 显示全部楼层
哎 再顶一下                    
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 03:52 , Processed in 0.168051 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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