entsel选择后,如何让被选择的对象区别于别的对象
最近写了全图查找2个以上不同文字,并全选它们的代码,但是发现选择的时候,cad中,选择的文字没有反应,虽然对最后的执行结果没有影响,但总感觉少了点什么。请教各位大佬,这个问题,一般怎么解决?;;根据文本*text图元名a创建一个选择集,该选择集包含全图中所有相同文字的文本
(defun W:wz(a / b pd tt)
(setq b (entget a))
(setq tt (ssget "_X" (list(cons 0 "*text")(cons 1 (cdr(assoc 1 b))))))
tt
)
;;错误函数
(defun err1 (sss)
(if sss
(progn
(princ "\n错误,仅能选择文字,请重新选择:")
(setq *error* olderr)
)
)
)
;;主函数
(defun c:dxz()
(setq olderr *error*
*error* err1)
(princ "\n请选择要查找的文字:")
(setq a (car (entsel)))
(setq tt (W:wz a))
(setq loop t)
(while loop
(princ "\n请选择要查找的文字:")
(setq b (car (entsel)))
(if (not (= b nil))
(progn
(setq ss (W:wz b))
(setq n (sslength ss))
(setq i 0)
(repeat n
(ssadd (ssname ss i) tt)
(setq i (1+ i))
))
(setq loop nil)
)
)
(sssetfirst nil tt)
(princ)
)
ssyfeng 发表于 2023-9-1 10:12
那个循环没啥用
您好,我重新写了一遍,但是有一段总是出错,(setq tt (ssget "_X" (list(cons 0 "*text")(-4 . "<or") filter (-4 . "or>")))),filter套了2个括号,我也不知道有什么函数可以把这些点对重新组成一个表。既然您说不需要那个循环,那应该是有办法解决的吧。
(defun c:dxz()
(setq olderr *error*
*error* err1)
(princ "\n请选择要查找的文字:")
(if (setq ss (ssget ":E" '((0 . "*TEXT"))))
(progn
(setq n (sslength ss))
(setq i 0)
(setq ent nil)
(repeat n
(setq en (ssname ss i))
(setq ent (append ent (list en)))
(setq i (1+ i))
))
(princ "\n未选中文字!")
)
(setq filter (mapcar '(lambda (x) (cons 1 (cdr(assoc 1 (entget x)))))ent))
(setq tt (ssget "_X" (list(cons 0 "*text")(-4 . "<or") filter (-4 . "or>"))))
(sssetfirst nil tt)
(princ)
) 本帖最后由 bonny 于 2023-9-3 20:03 编辑
hubeiwdlue 发表于 2023-9-1 14:03
一顿乱试,试出问题了。现已经解决,谢谢各位大神的指导。
(defun c:tt (/ s)
(if (and (setq s (ssget ":E:S" '((0 . "*TEXT"))))
(setq s (ssname s 0))
(setq s (cons 1 (strcat "*" (cdr (assoc 1 (entget s))) "*")))
(setq s (ssget "A" (list '(0 . "*TEXT") s)))
)
(sssetfirst nil s)
)
(princ)
)
;;===========================================
(defun c:tt (/ s ss)
(if (and (setq s (ssget ":E:S" '((0 . "*TEXT"))))
(setq s (ssname s 0))
(setq ss (cons 1 (strcat "*" (cdr (assoc 1 (entget s))) "*")))
(setq ss (ssget "A" (list '(0 . "*TEXT") ss)))
)
(sssetfirst nil (ssdel s ss))
)
(princ)
)
一顿乱试,试出问题了。现已经解决,谢谢各位大神的指导。(defun c:dxz(/ ss n i ent en filter tt)
(princ "\n请选择要查找的文字:")
(if (setq ss (ssget ":E" '((0 . "*TEXT"))))
(progn
(setq n (sslength ss))
(setq i 0)
(setq ent nil)
(repeat n
(setq en (ssname ss i))
(setq ent (append ent (list en)))
(setq i (1+ i))
))
(princ "\n未选中文字!")
)
(setq filter (mapcar '(lambda (x) (cons 1 (cdr(assoc 1 (entget x)))))ent))
(setq filter (append (list (cons 0 "*text")) '((-4 . "<or")) filter '((-4 . "or>"))))
(setq tt (ssget "_X" filter))
(sssetfirst nil tt)
(princ)
)
那个循环没啥用
;;根据文本*text图元名a创建一个选择集,该选择集包含全图中所有相同文字的文本
(defun W:wz (a / b pd tt)
(setq b (entget a))
(setq tt (ssget "_X" (list (cons 0 "*text")(cons 1 (cdr(assoc 1 b))))))
tt
)
;;错误函数
(defun err1 (sss)
(if sss
(progn
(princ "\n错误,仅能选择文字,请重新选择:")
(setq *error* olderr)
)
)
)
;;主函数
(defun c:dxz()
(setq olderr *error*
*error* err1
)
(princ "\n请选择要查找的文字:")
(if (setq ss (ssget ":s" '((0 . "*TEXT"))))
(progn
(setq a (ssname ss 0))
(setq tt (W:wz a))
(sssetfirst nil tt)
)
(princ "\n未选中文字!")
)
(princ)
)
ssyfeng 发表于 2023-9-1 10:12
那个循环没啥用
谢谢您的指导,扩宽思路。我在重新写一个。 hubeiwdlue 发表于 2023-9-1 10:38
谢谢您的指导,扩宽思路。我在重新写一个。
大神你重新写的能否上传一下 664571221 发表于 2023-9-1 11:36
大神你重新写的能否上传一下
我是新手,刚开始学,遇到问题就来论坛上问一下。:lol hubeiwdlue 发表于 2023-9-1 11:50
我是新手,刚开始学,遇到问题就来论坛上问一下。
重写的代码麻烦上传一下 (defun c:tt ()
(princ "\n请选择要查找的文字: ")
(if (setq ss (ssget'((0 . "*TEXT"))))
(sssetfirst nil ss)
)
(princ)
)
页:
[1]
2