明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: donghuidong2003

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

    [复制链接]
发表于 2021-12-17 08:50:22 | 显示全部楼层
我只是个搬砖的菜鸟
(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
)
发表于 2021-12-17 08:52:09 | 显示全部楼层
KO你 发表于 2021-12-16 21:33
尴尬了,我还是不懂
大师能直接点吗,把我上面发的三个程序命令组合一下,发个整体程序出来好点。
命令 ...

我不是大师,我只是个搬砖的菜鸟

点评

已改好測試ok ,請至 50樓下載  发表于 2021-12-17 10:13
发表于 2021-12-17 15:22:00 | 显示全部楼层
669423907 发表于 2021-12-17 08:50
我只是个搬砖的菜鸟
(defun c:tt()
(if (ssget "i")

思路很好
TT选中对象,空格或者右键就可以隐藏
TT选中对象,随意按任何键则孤立隔离
TT空选的情况全部显示
期待大师们完善,制图民众的福音
发表于 2022-11-8 12:01:00 | 显示全部楼层
好用,感谢您的分享!!!
发表于 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你 发表于 2021-12-14 21:31
这个是在论坛找到的,如果有高手把这个合并成一个命令就好了,只需要TT就可以选对象隐藏,空选则显示全部, ...

快捷键  tt  隐隔显
(defun c:tt (/ ss key)
(princ "\n按<Enter>隐藏; 按<T>隔离; 空选则显示全部隐藏对象 :")
(setq ss (ssget))
(if ss
(progn
(princ "\n按<Enter>隐藏; 按<T>隔离; 空选则显示全部隐藏对象 :")
(setq key (grread))
(cond
((or (= (cadr key) 116) (= (cadr key) 84))
(princ "\n你按T隔离对象")
(c:te-g ss))
(t
(princ "\n你按Enter隐藏对象")
(c:te-b ss))))
(progn
(princ "\n空选则显示全部隐藏对象")
(c:te-f)))
(princ))
(defun c:te-b (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:te-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:te-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))
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 02:34 , Processed in 0.229132 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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