LISP CAD求高手帮忙看看代码!实现图内文字筛选是否有重复文字?
defunc:fr();定义AutoCAD命令行命令(setqss(ssget"X"'((0."TEXT")(-4."=")(62.1)(40.10))));搜索红色且字...
defun c:fr();定义AutoCAD命令行命令
(setq ss (ssget "X" '((0 . "TEXT") (-4 . "=")(62 . 1) (40 . 10))));搜索红色且字高为10的文字
(setq n (sslength ss));统计循环次数
(setq n (- n 1))
(repeat n
(setq #s (car ss));取第一个元素
(setq ss (cdr ss));删除第一个元素
(setq w (assoc #s ss));搜索是否还有第一个元素,如果没有了第一个元素即没有相同的文字
(if(/= w nil);
(princ "\n有重复号码")
)
)
(princ)
)
另外现在只能实现是否有重复,但不能显示重复文字,能否高手帮忙看看这段代码有什么问题,如果可以帮忙完善一下功能!谢谢!!! 展开
(setq ss (ssget "X" '((0 . "TEXT") (-4 . "=")(62 . 1) (40 . 10))));搜索红色且字高为10的文字
(setq n (sslength ss));统计循环次数
(setq n (- n 1))
(repeat n
(setq #s (car ss));取第一个元素
(setq ss (cdr ss));删除第一个元素
(setq w (assoc #s ss));搜索是否还有第一个元素,如果没有了第一个元素即没有相同的文字
(if(/= w nil);
(princ "\n有重复号码")
)
)
(princ)
)
另外现在只能实现是否有重复,但不能显示重复文字,能否高手帮忙看看这段代码有什么问题,如果可以帮忙完善一下功能!谢谢!!! 展开
2个回答
2014-03-15 · 知道合伙人软件行家
关注
展开全部
(defun c:TT3 ( / #kw #k2 )
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(if (null vlax-dump-object) (vl-load-com) )
(defun ttes5 ()
(initget "T") (setq #kw (entsel "\n请选择文字或输入文字(T)[输入文字(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未输入文字,程序退出!")
)
)
)
) )
(ttes5)
(while #kw
(if #kw (princ (strcat "\n框选包含文字 < " #kw " >的对象")) )
(if (setq #kw (ssget "X" (list (cons 0 "TEXT") (cons 1 #kw))))
(progn
(initget "V C S E")
(if (or (= %k1 nil) (= %k1 "S")) (progn (setq #k2 (getkword "\n选择文字或[选择(S)/移动(V)/复制(C)/删除(E)]: <选择(S)> ")) (if (= #k2 nil) (setq #k2 "S") ) ) )
(if (= %k1 "V") (progn (setq #k2 (getkword "\n选择文字或[选择(S)/移动(V)/复制(C)/删除(E)]: <移动(V)> ")) (if (= #k2 nil) (setq #k2 "V") ) ) )
(if (= %k1 "C") (progn (setq #k2 (getkword "\n选择文字或[选择(S)/移动(V)/复制(C)/删除(E)]: <复制(C)> ")) (if (= #k2 nil) (setq #k2 "C") ) ) )
(if (= %k1 "E") (progn (setq #k2 (getkword "\n选择文字或[选择(S)/移动(V)/复制(C)/删除(E)]: <删除(E)> ")) (if (= #k2 nil) (setq #k2 "E") ) ) )
(setq #k2 (strcase #k2))
(setq %k1 #k2)
(cond
((member #k2 (list "v" "V")) (command "_.Move" #kw "" pause) )
((member #k2 (list "c" "C")) (command "_.Copy" #kw "" pause) )
((member #k2 (list "e" "E")) (command "_.Erase" #kw "") )
((member #k2 (list "s" "S")) (progn (sssetfirst nil #kw) (pause) ) )
)
)
)
(ttes5) )
)
(prompt "\n《TT3》选文字")
(prin1)
你参考一下这个程序,文字是否相同,要看文字内容,你的是查看(图元名)来比较,这个方法应当行不通。上面的程序是选择一个文字后,就会把相同的文字找出来。你增加条件,就可以把字体的高度限制了,颜色也可以增加。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询