669423907 发表于 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
)

669423907 发表于 2021-12-17 08:52:09

KO你 发表于 2021-12-16 21:33
尴尬了,我还是不懂
大师能直接点吗,把我上面发的三个程序命令组合一下,发个整体程序出来好点。
命令 ...

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

KO你 发表于 2021-12-17 15:22:00

669423907 发表于 2021-12-17 08:50
我只是个搬砖的菜鸟
(defun c:tt()
(if (ssget "i")


思路很好
TT选中对象,空格或者右键就可以隐藏
TT选中对象,随意按任何键则孤立隔离
TT空选的情况全部显示
期待大师们完善,制图民众的福音

cXtzui 发表于 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)
[*])
[*]上面的出错,怎么改成仅显示选择的文字高度的文字,其他都隐藏,谢谢

页: 1 2 3 4 5 [6]
查看完整版本: CAD中实现部分对象隐藏、部分显、全部显示源码