明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 33660|回复: 58

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

    [复制链接]
发表于 2015-5-26 12:56:49 | 显示全部楼层 |阅读模式
看到有人要部分显示物体,部分隐藏物体,全部显示的程序,现发一个,不知对大家有没有用。收集于明经一大侠,名字记不得了,取之于明,用之于民。
  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:06 | 显示全部楼层
(defun C:vw (/ S2L:ENT ss ssent )改为(defun C:vw (/  ss ssent )
回复 支持 3 反对 0

使用道具 举报

发表于 2023-11-20 20:33:20 | 显示全部楼层
  • (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)
  • )
  • 上面的出错,怎么改成仅显示选择的文字高度的文字,其他都隐藏,谢谢

发表于 2025-6-9 11:14:26 | 显示全部楼层
本帖最后由 KO你 于 2025-7-11 02:29 编辑

KO你 发表于 2021-12-14 21:31
这个是在论坛找到的,如果有高手把这个合并成一个命令就好了,只需要TT就可以选对象隐藏,空选则显示全部, ...

任意键包含  空格、回车、字母、数字、符号、鼠标左右键等
快捷键  tt  隐隔显
(defun c:tt (/ ss key)
(princ "\n按<G>隔离; 按<任意键>隐藏; 空选则显示全部隐藏对象 :")
(setq ss (ssget))
(if ss
(progn
(princ "\n按<G>隔离; 按<任意键>隐藏; 空选则显示全部隐藏对象 :")
(setq key (grread))
(cond
((or (= (cadr key) 103) (= (cadr key) 71))
(princ "\n按G隔离对象")(c:tt-g ss))
(t (princ "\n按任意键隐藏对象")(c:tt-t ss))))
(progn (princ "\n空选则显示全部隐藏对象")(c:tt-f)))
(princ))
(defun c:tt-t (ss / i ent elist)
(command "undo" "be")
(setvar "cmdecho" 0)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
elist (entget ent))
(if (setq code60 (assoc 60 elist))
(setq elist (subst (cons 60 1) code60 elist))
(setq elist (append elist (list (cons 60 1)))))
(entmod elist))
(command "undo" "e")
(princ))
(defun c:tt-f (/ ss i ent elist)
(command "undo" "be")
(setvar "cmdecho" 0)
(if (setq ss (ssget "x" '((60 . 1))))
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
elist (entget ent))
(setq elist (subst (cons 60 0) (assoc 60 elist) elist))
(entmod elist)))
(command "undo" "e")
(princ))
(defun c:tt-g (ss / all i ent elist)
(command "undo" "be")
(setvar "cmdecho" 0)
(if (setq all (ssget "x"))
(repeat (setq i (sslength all))
(setq ent (ssname all (setq i (1- i)))
elist (entget ent))
(if (setq code60 (assoc 60 elist))
(setq elist (subst (cons 60 1) code60 elist))
(setq elist (append elist (list (cons 60 1)))))
(entmod elist)))
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
elist (entget ent))
(setq elist (subst (cons 60 0) (assoc 60 elist) elist))
(entmod elist))
(command "undo" "e")
(princ))
回复 支持 反对

使用道具 举报

发表于 2015-5-26 16:31:15 | 显示全部楼层
明经好人就是多!
发表于 2015-5-26 16:45:26 | 显示全部楼层
好人就是多
发表于 2015-5-26 16:46:55 | 显示全部楼层
感谢 donghuidong2003 分享程序!
发表于 2015-5-26 19:56:36 | 显示全部楼层
收藏了。谢谢
发表于 2015-5-27 00:04:45 | 显示全部楼层
收藏!和以前的对比学习下区别
发表于 2015-5-29 20:07:05 | 显示全部楼层
太神奇了,这到底是啥原理呢?
发表于 2015-5-29 20:55:17 | 显示全部楼层
确实好人品  使用中
发表于 2015-5-29 22:16:23 | 显示全部楼层
不知道和版主写的一不一样.还是和2015自带的一样?明天试试
发表于 2015-5-29 23:44:11 来自手机 | 显示全部楼层
留个印记明天看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-1-9 04:28 , Processed in 0.222371 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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