如何实现有排序的文字合并
按文字方向与区域空间位置合并,自上而下,自左向右。 是这效果吗永不言弃 发表于 2016-5-5 11:33
是这效果吗
大佬,正需要你这个插件,在哪里下载啊? 没明白用在什么地方 本帖最后由 wudechao 于 2019-4-23 12:23 编辑
;改自论坛某位大师的函数,忘记是谁的。
(defun ffg-t2m (s1 jingdu / t2 sstoes p b l)
(defun sstoes (ss / a en lst)
(if ss
(progn
(setq a -1)
(while (setq en (ssname ss (setq a (1+ a))))
(setq lst (cons en lst))
)
)
)
lst
)
(defun ssptssort (sspts key fuzz / e en fun lst n sortpts sortss)
(defun sortpts (pts fun xyz fuzz)
(vl-sort pts '(lambda (a b)
(if (not (equal (xyz a) (xyz b) fuzz))
(fun (xyz a) (xyz b))
)
)
)
)
(defun sortpts1 (pts key fuzz)
(setq key (vl-string->list key))
(foreach xyz (reverse key)
(cond
((< xyz 100)
(setq fun >
xyz (nth (- xyz 88) (list car cadr caddr))
)
)
(t
(setq fun <
xyz (nth (- xyz 120) (list car cadr caddr))
)
)
)
(setq pts (sortpts pts fun xyz fuzz))
)
)
(cond
((= (type sspts) 'pickset)
(repeat (setq n (sslength sspts))
(if (and
(setq e (ssname sspts (setq n (1- n))))
(setq en (entget e))
)
(setq lst (cons (append
(cdr (assoc 10 en))
(list e)
) lst
)
)
)
)
(mapcar
'last
(sortpts1 lst key fuzz)
)
)
((listp sspts)
(cond
((vl-consp (car sspts))
(sortpts1 sspts key fuzz)
)
((= (type (car sspts)) 'ename)
(foreach e sspts
(if (setq en (entget e))
(setq lst (cons (append
(cdr (assoc 10 en))
(list e)
) lst
)
)
)
)
(mapcar
'last
(sortpts1 lst key fuzz)
)
)
)
)
)
)
(setq s1 (sstoes s1)
t2 ""
)
(setq s1 (ssptssort s1 "Yx" jingdu)
b (entget (car s1))
t2 (cdr (assoc 1 b))
l 1
)
(foreach a (cdr s1)
(setq c (cdr (assoc 1 (entget a)))
l (if (> (strlen c) l)
(strlen c)
l
)
t2 (strcat t2 c)
)
)
t2
) 本帖最后由 wudechao 于 2019-4-23 02:45 编辑
004 发表于 2019-4-23 01:18
没明白用在什么地方
比如:用于自动提取某个区域(如图框的图名栏)多行text文字的内容。这个区域文字可能是其它人画的,可能被打断了,有几行,也可能其它原因打断(数字和中文混排打断),现在想提取出来,放在目录里或添加在自动打印文件的名称里。我现在刚好想编写一个自动打印pdf的命令,这个打印文件能自动提取图名,图号等等, 谢谢! wudechao 分享函数!!!!!!!
页:
[1]