明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: donghuidong2003

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

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

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

点评

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

思路很好
TT选中对象,空格或者右键就可以隐藏
TT选中对象,随意按任何键则孤立隔离
TT空选的情况全部显示
期待大师们完善,制图民众的福音
发表于 2022-11-8 12:01 | 显示全部楼层
好用,感谢您的分享!!!
发表于 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)
  • )
  • 上面的出错,怎么改成仅显示选择的文字高度的文字,其他都隐藏,谢谢

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

本版积分规则

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

GMT+8, 2024-5-1 18:05 , Processed in 0.324084 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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