各位大神帮我看下,我这个同行合并文字,能不能加个容差,可以自己输入距离,默认...
各位大神帮我看下,我这个同行合并文字,能不能加个容差,可以自己输入距离,默认多少距离内位同行;;
(defun c:THHB (/ ACTDOC L S)
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vla-EndUndoMark ActDoc)
(vla-StartUndoMark ActDoc)
(if (and (setq l (ssget '((0 . "TEXT"))))
(setq s (getstring T "\n Enter string to place in between text strings : ")))
(progn
(setq l
(vl-sort
(mapcar
(function (lambda (x) (list (cdr (assoc 10 (entget x))) (cdr (assoc 1 (entget x))) x))
) ;_function
(vl-remove-if
(function listp)
(mapcar (function cadr) (ssnamex l))
) ;_vl-remove-if
) ;_mapcar
(function
(lambda (a b)
(or
(and
(equal (cadar a) (cadar b) 1e-3)
(< (caar a) (caar b))
) ;_and
(< (cadar a) (cadar b))
) ;_or
) ;_lambda
) ;_function
) ;_vl-sort
) ;_setq
(while l
(if (equal (cadaar l) (cadr (caadr l)) 1e-3)
(progn
(entdel (last (cadr l)))
(setq l (cons (list (caar l) (strcat (cadar l) s (cadadr l)) (caddar l)) (cddr l)))
) ;_progn
(progn
(entmod (subst (cons 1 (cadar l)) (assoc 1 (entget (caddar l))) (entget (caddar l))))
(entupd (caddar l))
(setq l (cdr l))
) ;_progn
) ;_if
) ;_while
) ;_progn
) ;_if
(vla-EndUndoMark ActDoc)
(princ)
)
(if (equal (cadaar l) (cadr (caadr l)) 1e-3)1e-3应该就是容差,自己改数值试试 start4444 发表于 2024-4-28 21:16
(if (equal (cadaar l) (cadr (caadr l)) 1e-3)1e-3应该就是容差,自己改数值试试
大哥这个顺序反一下怎么弄,合并的顺序和这个反一下 本帖最后由 xyp1964 于 2024-4-29 12:53 编辑
664571221 发表于 2024-4-29 11:48
大哥这个顺序反一下怎么弄,合并的顺序和这个反一下
最好用一个dwg实例来说明测试
xyp1964 发表于 2024-4-29 12:51
最好用一个dwg实例来说明测试
派大看一下,按x方向合并
这个程序确实很强大,如果能用户指定容差,那就完美了;
有个类似的帖子,其效果,还没当前这个好;可以参考
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=190158&extra=&highlight=%CE%C4%D7%D6%2B%BA%CF%B2%A2&page=1
页:
[1]