找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3808|回复: 22

[求助] [求助]:怎么才能更快地显示隐藏的实体

[复制链接]
发表于 2003-12-2 16:46:54 | 显示全部楼层 |阅读模式

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

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

×

  1. (defun c:apple_object_off (/ apple_ss apple_ss_name apple_i i)
  2. (vl-load-com);| 加载 ActiveX 支持|;
  3. (setq apple_ss (ssget)
  4.       apple_ss_name nil
  5.       i 0)
  6.   ;|得到选择集,定义备用函数|;
  7. (while
  8.   (setq apple_i (ssname apple_ss i))
  9.   (setq apple_ss_name (cons apple_i apple_ss_name))
  10.         (setq i (+ i 1))
  11.   )
  12.   ;|遍历选择集,得到各个元素的名称|;
  13. (mapcar
  14.   '(lambda (x)
  15.      (vla-put-visible
  16.       (vlax-ename->vla-object x)
  17.         0)
  18.      )
  19.   apple_ss_name
  20.   );|将选择集内的每个元素的可见性设为不可见|;
  21. (princ)
  22. );|结束|;
  23. ;|------------------------------------------|;
  24. (defun c:apple_object_on (/ apple_getactive apple_mdon apple_pson)
  25.   (vl-load-com);| 加载 ActiveX 支持|;
  26.       (setq apple_getactive
  27.            (vla-get-activedocument (vlax-get-acad-object))
  28.    )
  29.   (vlax-for apple_mdon
  30.             (vla-get-modelspace apple_getactive)
  31.   (vla-put-visible apple_mdon -1)
  32.   )
  33.   ;|显示模型空间的所有实体|;
  34.    (vlax-for apple_pson
  35.             (vla-get-paperspace apple_getactive)
  36.   (vla-put-visible apple_pson -1)
  37.   )
  38.   ;|显示图纸空间的所有实体|;
  39.   (princ "\n###---显示全部实体完成---###")
  40.   (princ)
  41.   );|---结束---|;

由于XD工具不支持2004,自己写了简单写了个隐藏、显示实体的LISP,但是显示实体的程序我用的是通杀法,碰到大文件就超慢,
工作太忙没有时间考虑,希望各位朋友帮忙提供比较好的方法~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-12-3 07:56:20 | 显示全部楼层
;;隱藏物件有dxf 60碼
;;(setq ss(ssget "x" '((60 . 1))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2003-12-2 18:13:46 | 显示全部楼层
我想是不是可以用信息数据的方法?将上一次隐藏实体的信息写入数据库,在反隐藏时调用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2003-12-3 09:50:14 | 显示全部楼层
看来用纯lsp也可以实现这个功能:

  1. (defun c:show_obj ()
  2.   (setq hidese (ssget "x" '((60 . 1))))
  3.   (setq n (sslength hidese))
  4.   (setq m 0)
  5.   (while (/= m n)
  6.     (setq se (ssname hidese m))
  7.     (setq hide_ent (entget se))
  8.     (setq hide_ent_n (length hide_ent))
  9.     (setq mm 0)
  10.     (setq hide_ent_new '())
  11.     (while (/= mm hide_ent_n)
  12.       (if (/= (car (setq hide_ent_tmp (nth mm hide_ent))) 60)
  13.         (setq hide_ent_new (cons hide_ent_tmp hide_ent_new))
  14.       )
  15.       (setq mm (1+ mm))
  16.     )
  17.     (setq hide_ent (reverse hide_ent_new))
  18.     (entdel se)
  19.     (entmake hide_ent)
  20.     (redraw)
  21.     (setq m (1+ m))
  22.   )
  23. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-3 10:12:24 | 显示全部楼层
谢谢龙兄、雷锋、梦生人,用龙兄的60码先过滤隐藏实体再处理节约了不少时间,如果再快的话就是雷锋说的方法了,省去过滤的时间,估计小东工具里就是采用这样的方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-3 10:16:37 | 显示全部楼层
谢谢雷锋,领悟到60组码的威力了
改过后供不想费事的朋友使用吧

  1. ;;;----------------隐藏和显示实体程序--------------;;;
  2. ;;;----隐藏实体在命令行输入命令APPLE_OBJECT_OFF----;;;
  3. ;;;----恢复实体在命令行输入命令APPLE_OBJECT_ON-----;;;
  4. ;;;--------------------制作:snsj------------------;;;
  5. ;;;----APPLE_OBJECT_OFF.LSP/APPLE_OBJECT_OFN.LSP---;;;
  6. (defun c:apple_object_off (/ apple_ss apple_ss_name apple_i i)
  7. (vl-load-com);| 加载 ActiveX 支持|;
  8. (setq apple_ss (ssget)
  9.       apple_ss_name nil
  10.       i 0)
  11.   ;|得到选择集,定义备用函数|;
  12. (while
  13.   (setq apple_i (ssname apple_ss i))
  14.   (setq apple_ss_name (cons apple_i apple_ss_name))
  15.         (setq i (+ i 1))
  16.   )
  17.   ;|遍历选择集,得到各个元素的名称|;
  18. (mapcar
  19.   '(lambda (x)
  20.      (vla-put-visible
  21.       (vlax-ename->vla-object x)
  22.         0)
  23.      )
  24.   apple_ss_name
  25.   );|将选择集内的每个元素的可见性设为不可见|;
  26. (princ)
  27. );|结束|;
  28. ;|------------------------------------------|;
  29. (defun c:apple_object_on (/ apple_ss1 apple_ss_name1 apple_ii ii)
  30. (setq apple_ss1 (ssget "x" '((60 . 1)))
  31.       apple_ss_name1 nil
  32.       ii 0)
  33. (while
  34.   (setq apple_ii (ssname apple_ss1 ii))
  35.   (setq apple_ss_name1 (cons apple_ii apple_ss_name1))
  36.         (setq ii (+ ii 1))
  37.   )
  38.   ;|遍历选择集,得到各个元素的名称|;
  39. (mapcar
  40.   '(lambda (x)
  41.      (vla-put-visible
  42.       (vlax-ename->vla-object x)
  43.         -1)
  44.      )
  45.   apple_ss_name1
  46.   );|将选择集内的每个元素的可见性设为不可见|;
  47. (princ)
  48. );|结束|;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-3 10:20:54 | 显示全部楼层

Re: [求助]:怎么才能更快地显示隐藏的实体

最初由 snsj 发布
[B][code]怎么才能更快地显示隐藏的实体... [/B]



(defun c:test ()
  (vl-load-com)
  (setq ss (ssget "x" '((60 . 1))) n 0)
  (if ss
    (while (< n (sslength ss))
      (setq obj (vlax-ename->vla-object (ssname ss n)))
      (vla-put-visible obj 1)
      (setq n (1+ n))
    )
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-12-3 21:23:59 | 显示全部楼层
R14就:

  1. (defun c:hideit( / j ss)
  2. (if (setq j -1 ss(ssget '((-4 . "< not")(60 . 1)(-4 . "not >")) ))
  3.   (repeat (sslength ss)
  4.      (entmod(cons '(60 . 1)(entget (ssname ss(setq j(1+ j))))))
  5.   ))(princ)
  6. )
  7. (defun c:showit( / j ss en)
  8. (if (setq j -1 ss(ssget "x" '((60 . 1)) ))
  9.   (repeat (sslength ss)
  10.      (entmod(subst '(60 . 0)(assoc 60(setq en(entget(ssname ss(setq j(1+ j))))))en))
  11.   ))(princ)
  12. )

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

使用道具 举报

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

使用道具 举报

发表于 2003-12-4 08:04:09 | 显示全部楼层

  1. ;;By LUCAS
  2. (defun C:OBJECT_ON (/ OBJ)
  3.   (vl-load-com)
  4.   (if (ssget "x" '((60 . 1)))
  5.     (vlax-for OBJ (vla-get-activeselectionset
  6.                     (vla-get-activedocument (vlax-get-acad-object))
  7.                   )
  8.       (vla-put-visible OBJ :vlax-true)
  9.     )
  10.   )
  11.   (princ)
  12. )
  13. (defun C:OBJECT_OFF (/ OBJ)
  14.   (vl-load-com)
  15.   (if (ssget)
  16.     (vlax-for OBJ (vla-get-activeselectionset
  17.                     (vla-get-activedocument (vlax-get-acad-object))
  18.                   )
  19.       (vla-put-visible OBJ :vlax-false)
  20.     )
  21.   )
  22.   (princ)
  23. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-4 09:09:26 | 显示全部楼层
最初由 aeo 发布
[B]R14就:
[code]
(defun c:hideit( / j ss)
(if (setq j -1 ss(ssget '((-4 . "< not")(60 . 1)(-4 . "not >")) ))
  (repeat (sslength ss)
     (entmod(cons '(60 . 1)(entget (ssname ss(setq j(1+ j))))))... [/B]

这个程序过于简单了,这对于简单图元是可以的,但是对于象多义线、填充、块等复杂图元(60 . 1)加在组码开头是无效的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 06:00 , Processed in 0.399191 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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