求一autolisp程序,要求是选择一个文字,那么能够把这个相同的文字全部选择出来
快速选择功能也可以办到,指定的区域,选择文字,内容,输入内容,就可以把相同的文字全部选择了,这个时候我就可以移动或删除了。但是这个操作很重复,希望可以(先选择一个文字,然...
快速选择功能也可以办到,指定的区域,选择文字,内容,输入内容,就可以把相同的文字全部选择了,这个时候我就可以移动或删除了。但是这个操作很重复,希望可以(先选择一个文字,然后选择一个区域,然后把相同内容的文字就全部选择了。然后就可以选择复制或移动或删除),
展开
展开全部
(defun c:ste ( / #kw #k2 )
(if (null vlax-dump-object) (vl-load-com) )
(initget "T") (setq #kw (entsel "\n选择要快速选取的文字或[输入文字(T)]: <选择文字> "))
(cond
((= (type #kw) 'LIST)
(if (= (vla-get-objectname (setq #kw (vlax-ename->vla-object (car #kw)))) "AcDbText")
(setq #kw (vla-get-textstring #kw))
(progn
(setq #kw nil) (princ "\n错误的对象,请选择单行文字对象!")
)
)
)
((member #kw (list "t" "T"))
(if (= (setq #kw (getstring "\n请输入要选取的文字: ")) "")
(progn
(setq #kw nil) (princ "\n未输入文字,程序退出!")
)
)
)
)
(if #kw (princ (strcat "\n框选包含文字 < " #kw " >的对象")) )
(if (and #kw (setq #kw (ssget (list (cons 0 "TEXT") (cons 1 #kw)))))
(progn
(initget "V C") (setq #k2 (getkword "\n删除选中的文字或[移动(V)/复制(C)]: <删除> "))
(if (null #k2)
(command "_.Erase" #kw "")
(cond
((member #k2 (list "v" "V")) (command "_.Move" #kw "" pause) )
((member #k2 (list "c" "C")) (command "_.Copy" #kw "" pause) )
)
)
)
(princ "\n未定义文字或未选择对象!")
)
(princ)
)
试试上面的程序吧,命令 ste 使用,如果是想让程序自动选择特定的文字内容的话,可以这样修改
(if #kw (princ (strcat "\n框选包含文字 < " #kw " >的对象")) )
(if (and #kw (setq #kw (ssget (list (cons 0 "TEXT") (cons 1 #kw)))))
改为
(if (setq #kw (ssget "X" (list (cons 0 "TEXT") (cons 1 #kw)))))
(if (null vlax-dump-object) (vl-load-com) )
(initget "T") (setq #kw (entsel "\n选择要快速选取的文字或[输入文字(T)]: <选择文字> "))
(cond
((= (type #kw) 'LIST)
(if (= (vla-get-objectname (setq #kw (vlax-ename->vla-object (car #kw)))) "AcDbText")
(setq #kw (vla-get-textstring #kw))
(progn
(setq #kw nil) (princ "\n错误的对象,请选择单行文字对象!")
)
)
)
((member #kw (list "t" "T"))
(if (= (setq #kw (getstring "\n请输入要选取的文字: ")) "")
(progn
(setq #kw nil) (princ "\n未输入文字,程序退出!")
)
)
)
)
(if #kw (princ (strcat "\n框选包含文字 < " #kw " >的对象")) )
(if (and #kw (setq #kw (ssget (list (cons 0 "TEXT") (cons 1 #kw)))))
(progn
(initget "V C") (setq #k2 (getkword "\n删除选中的文字或[移动(V)/复制(C)]: <删除> "))
(if (null #k2)
(command "_.Erase" #kw "")
(cond
((member #k2 (list "v" "V")) (command "_.Move" #kw "" pause) )
((member #k2 (list "c" "C")) (command "_.Copy" #kw "" pause) )
)
)
)
(princ "\n未定义文字或未选择对象!")
)
(princ)
)
试试上面的程序吧,命令 ste 使用,如果是想让程序自动选择特定的文字内容的话,可以这样修改
(if #kw (princ (strcat "\n框选包含文字 < " #kw " >的对象")) )
(if (and #kw (setq #kw (ssget (list (cons 0 "TEXT") (cons 1 #kw)))))
改为
(if (setq #kw (ssget "X" (list (cons 0 "TEXT") (cons 1 #kw)))))
深圳市容大彩晶科技有限公司
2024-11-20 广告
2024-11-20 广告
作为深圳市容大彩晶科技有限公司的工作人员,我可以确认**我们的广告机支持USB接口和SD卡读取**。无论是车载液晶广告机还是其他类型的广告机产品,都具备这一功能,便于用户通过USB或SD卡更新和播放视频、图片等广告内容。这一设计大大提升了广...
点击进入详情页
本回答由深圳市容大彩晶科技有限公司提供
展开全部
;先框选范围,再选择一个想筛选的文字,w为快捷键,可以自己更改
(defun c:w()
(setvar "cmdecho" 0)
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(setq en (entsel "请选择一个文字:"))
(setq en_data (entget (car en)))
(setq text1 (cdr (assoc 1 en_data)))
(setq n 0)
(setq SX (ssadd))
(setq SX (ssadd (car en) SX))
(repeat (sslength ss)
(setq ssn (ssname ss n))
(setq ssn_data (entget ssn))
(setq text2 (cdr (assoc 1 ssn_data)))
(if (= text1 text2) (setq SX (ssadd ssn SX)))
(setq n (1+ n))
)
(sssetfirst ss sx)
(prin1)
)
(defun c:w()
(setvar "cmdecho" 0)
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(setq en (entsel "请选择一个文字:"))
(setq en_data (entget (car en)))
(setq text1 (cdr (assoc 1 en_data)))
(setq n 0)
(setq SX (ssadd))
(setq SX (ssadd (car en) SX))
(repeat (sslength ss)
(setq ssn (ssname ss n))
(setq ssn_data (entget ssn))
(setq text2 (cdr (assoc 1 ssn_data)))
(if (= text1 text2) (setq SX (ssadd ssn SX)))
(setq n (1+ n))
)
(sssetfirst ss sx)
(prin1)
)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询