明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 20257|回复: 56

[源码] CAD中实现部分对象隐藏、部分显、全部显示源码

    [复制链接]
发表于 2015-5-26 12:56 | 显示全部楼层 |阅读模式
看到有人要部分显示物体,部分隐藏物体,全部显示的程序,现发一个,不知对大家有没有用。收集于明经一大侠,名字记不得了,取之于明,用之于民。
  1. *************************************************************************
  2. ;;; 命令: VB, VQ
  3. ;;; 功能: VB 部分隐藏选中的物体,VQ 全部显示所有物休。
  4. ;;; 备注: 放样时用得较多
  5. *************************************************************************
  6. ;;快速隐藏物体
  7. (vl-load-com)
  8. ;对象显示与隐藏
  9. (defun obj_onf (ss mode)
  10.   (if (= (type ss) 'PICKSET)
  11.     (vlax-for OBJ (vla-get-activeselectionset
  12.         (vla-get-activedocument (vlax-get-acad-object))
  13.       )
  14.       (if (/=(vla-get-visible OBJ) mode) (vla-put-visible OBJ mode))
  15.     )
  16.   )
  17. )
  18. ;图层显示与隐藏
  19. (defun lay_onf (LayName mode)
  20.   (if (= (type LayName) 'STR)
  21.     (vlax-for lay (vla-get-layers
  22.         (vla-get-activedocument (vlax-get-acad-object))
  23.       )
  24.       (if (eq (strcase (vla-get-name lay)) (strcase LayName))
  25.   (if(/=(vla-get-layeron lay) mode)
  26.     (vla-put-layeron lay mode)
  27.     )
  28.   )
  29.     )
  30.   )
  31. )

  32. ;;;把选择集的物体转化为Lisp 图元表
  33. (defun S2L:ENT (ss / i l objs)
  34.   (setq i -1 l (sslength ss) objs nil)
  35.   (repeat l
  36.     (setq objs (cons  (ssname ss (setq i (1+ i))) objs))
  37.   )
  38. )
  39. ;;;把选择集的物体转化为VLisp 图元表
  40. (defun S2V:ENT (ss / i l objs)
  41.   (setq i -1 l (sslength ss) objs nil)
  42.   (repeat l
  43.     (setq objs (cons  (vlax-ename->vla-object (ssname ss (setq i (1+ i)))) objs))
  44.   )
  45. )
  46. ;__
  47. ;;全部显示
  48. (defun C:VQ (/ OBJ lay)
  49.   (princ "【全部显示】")
  50.   (obj_onf (ssget "x") :vlax-true)
  51.   (vlax-for lay  (vla-get-layers
  52.       (vla-get-activedocument (vlax-get-acad-object))
  53.     )
  54.     (if  (/= (vla-get-layeron lay) :vlax-true)
  55.       (vla-put-layeron lay :vlax-true)
  56.     )
  57.   )
  58.   (princ)
  59. )
  60. ;;部分隐藏
  61. (defun C:VB (/ OBJ)
  62.   (princ "【部分隐藏】")
  63.   (obj_onf (ssget) :vlax-false)
  64.   (princ)
  65. )
  66. ;;部分显示
  67. (defun C:vw (/ S2L:ENT ss ssent )
  68.   (princ "【部分显示】")
  69.   (setq ss (ssget "x")
  70.         ssent (ssget)
  71.   ssent (S2L:ENT ssent)  
  72.   )
  73.   (foreach s ssent (setq ss (ssdel s ss)))
  74.   (setq ss (mapcar 'vlax-ename->vla-object (S2L:ENT ss)))
  75.   (foreach s ss (vla-put-visible s :vlax-false))
  76.   (princ)
  77. )

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 热心奖

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-6-4 09:05 | 显示全部楼层
(defun C:vw (/ S2L:ENT ss ssent )改为(defun C:vw (/  ss ssent )
回复 支持 2 反对 0

使用道具 举报

发表于 2023-11-20 20:33 | 显示全部楼层
  • (defun c:xs ( / en ss i ent lx a);选择隐藏相同高度的文字
  •   (setq en (ssname (ssget) 0));选择第一个文字
  •   (setq ss (ssget "x" (list '(0 . "*text")
  •                          (-4 . "<and")
  •                          (-4 . "<")(assoc 40 (entget en))
  •                           (-4 . ">")(assoc 40 (entget en))
  •                          (-4 . "and>")
  •                       )
  •            )
  •   );文字高度
  •   ;(setq ss (ssget "x" (list '(0 . "*text") (assoc 1 (entget en)))));文字内容
  •   (setq i 0)
  •   (repeat (sslength ss)
  •           (setq sn (ssname ss i))
  •           (setq ent (entget sn))
  •           (setq lx (cdr (assoc 60 ent)))
  •           (if  (= lx nil)
  •                   (progn
  •                               (setq a (list (cons 60 1)))
  •                               (setq ent (append ent a))
  •                               (entmod ent)
  •                           )
  •               )
  •           (if  (/= lx nil)
  •                   (progn
  •                               (setq ent (subst (cons 60 1) (assoc 60 ent) ent))
  •                               (entmod ent)
  •                           )
  •               )
  •           (setq i (1+ i))
  •       )
  •   (princ)
  • )
  • 上面的出错,怎么改成仅显示选择的文字高度的文字,其他都隐藏,谢谢

发表于 2021-12-17 08:50 | 显示全部楼层
我只是个搬砖的菜鸟
(defun c:tt()
(if (ssget "i")
(progn
(princ"\n 移动鼠标隐藏对象,任何按键则隔离对象(Esc取消)")
(if (= (X-X 2) "移动鼠标") (_tt) (_tg) )
)
(_tf)
) )



(defun _tt(/ ss ssn n)
(setq ss (ssget "p"))
(command "undo" "be")
(setvar "cmdecho" 0)
(setq n 0)
(while (< n (sslength ss))
(setq ssn (ssname ss n))
(setq ssn (entget ssn))
(setq ssn (append ssn '((60 . 1))))
(entmod ssn)
(setq n (1+ n)) )
(command "undo" "e")
(princ))

;隔离选定对象
(defun _tg(/ ss i sn ent lx a )
(setvar "cmdecho" 0)
(setq ss (ssget "i"))
(command "SELECT" "ALL" "R" ss "")
(setq ss (ssget "P"))
(setq i 0)
(repeat (sslength ss)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq lx (cdr (assoc 60 ent)))
(if (= lx nil) (progn
(setq a (list (cons 60 1)))
(setq ent (append ent a))
(entmod ent)))
(if (/= lx nil)
(progn
(setq ent (subst (cons 60 1) (assoc 60 ent) ent))
(entmod ent)
) )
(setq i (1+ i)) )
(princ))

;全部取消隐藏
(defun _tf(/ ss ssn n)
(setq ss (ssget "x" (list (cons 60 1))))
(command "undo" "be")
(setvar "cmdecho" 0)
(setq n 0)
(while (< n (sslength ss))
(setq ssn (ssname ss n))
(setq ssn (entget ssn))
(setq ssn (subst (cons 60 0) (assoc 60 ssn) ssn))
(entmod ssn)
(setq n (1+ n)))
(command "undo" "e")
(princ))


;选项,通过返回的键值执行相应的动作
;xvjiex 2020-8-15 http://bbs.mjtd.com/thread-182077-1-1.html
(defun X-X(jl / loop gr aj jp pt)
(if (or(= jl "")(not jl)) (setq jl 0.011) (setq jl (/ jl 100.0)) )
(setq loop t pt (cadr (grread *)))
(while loop
(vl-cmdf "delay" 20)
(setq gr (grread t 8) aj (car gr) jp (cadr gr) )
(cond
((= aj 3) (setq loop nil) (setq aj "左键") )
((= aj 25) (setq loop nil) (setq aj "右键") )
((= aj 5) (if(>(distance pt jp) (*(getvar'viewsize)jl)) (setq loop nil aj "移动鼠标") ) )
)
)
aj
)
发表于 2015-5-26 16:31 | 显示全部楼层
明经好人就是多!
发表于 2015-5-26 16:45 | 显示全部楼层
好人就是多
发表于 2015-5-26 16:46 | 显示全部楼层
感谢 donghuidong2003 分享程序!
发表于 2015-5-26 19:56 | 显示全部楼层
收藏了。谢谢
发表于 2015-5-27 00:04 | 显示全部楼层
收藏!和以前的对比学习下区别
发表于 2015-5-29 20:07 | 显示全部楼层
太神奇了,这到底是啥原理呢?
发表于 2015-5-29 20:55 | 显示全部楼层
确实好人品  使用中
发表于 2015-5-29 22:16 | 显示全部楼层
不知道和版主写的一不一样.还是和2015自带的一样?明天试试
发表于 2015-5-29 23:44 来自手机 | 显示全部楼层
留个印记明天看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-18 09:31 , Processed in 0.266905 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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