文字合并
本帖最后由 KO你 于 2019-7-18 02:20 编辑快捷键ttj文字直接合并
(defun c:ttj(/ ss i ename dl ell x text e1 e2)
(setq ss (ssget '((0 . "TEXT")))
i0
dl nil
minx nil
);setq
(if ss
(progn
(repeat (sslength ss)
(setq ename (ssname ss i)
ell (entget ename)
x (cadr (assoc 10 ell))
text (cdr (assoc 1 ell))
i (1+ i)
);setq
(setq dl (append dl (list (list x text ename))))
);repeat
(setq dl (vl-sort dl (function (lambda (e1 e2) (< (car e1) (car e2)))))
i 1
text(cadr (nth 0 dl))
ename (caddr (nth 0 dl))
ell (entget ename)
);setq
(repeat (- (length dl) 1)
(setq text (strcat text (cadr (nth i dl))))
(entdel (caddr (nth i dl)))
(setq i (1+ i))
);repeat
(setq ell (subst (cons 1 text) (assoc 1 ell) ell))
(entmod ell)
(entupd ename)
);progn
(princ "\n未选中任何文字!")
);if
(princ)
)
同个水平从左到右合并文字,要求分行,求助高手帮忙完善。
本帖最后由 叮咚 于 2019-7-21 21:34 编辑
看图
static/image/hrline/5.gif
更新于2019年7月21日
1.按字高的0.1倍为处理容差,如果坐标Y值之差小于0.1倍字高,视作同一行
2.同一行中,字高不同,视作两行处理
顶上顶上顶上顶上顶上 KO你 发表于 2019-7-12 15:45
顶上顶上顶上顶上顶上
同水平或同行合并文字,求关注,顶上。 vba的做过,批量合并,Y超过某个值算另一行。 叮咚 发表于 2019-7-18 10:48
看图
试用了下,选得多,有时顺序会打乱。
本帖最后由 KO你 于 2019-7-18 18:54 编辑
叮咚 发表于 2019-7-18 10:48
看图
感谢大师热情帮忙,其实我想要的效果是
http://bbs.mjtd.com/thread-100388-1-1.html 本帖最后由 叮咚 于 2019-7-18 22:10 编辑
KO你 发表于 2019-7-18 18:53
感谢大师热情帮忙,其实我想要的效果是
http://bbs.mjtd.com/thread-100388-1-1.html
你看一下程序中的第一个函数 vcoor,把最后一个数字改大一点比如500他是一个容差处理函数
叮咚 发表于 2019-7-18 22:08
你看一下程序中的第一个函数 vcoor,把最后一个数字改大一点比如500他是一个容差处理函数
(defun vscoor(n)
(fix (/ n (/ (getvar "viewsize") 500.0)))
是这样吗 KO你 发表于 2019-7-18 23:25
(defun vscoor(n)
(fix (/ n (/ (getvar "viewsize") 500.0)))
是的。你可以测试一下。
这个函数是避免有一点偏差的坐标,保证看作是一行。