a934990825 发表于 2016-5-4 16:51:51

如何实现有排序的文字合并

按文字方向与区域空间位置合并,自上而下,自左向右。

永不言弃 发表于 2016-5-5 11:33:45

是这效果吗

yclz 发表于 2018-4-17 20:23:24

永不言弃 发表于 2016-5-5 11:33
是这效果吗

大佬,正需要你这个插件,在哪里下载啊?

004 发表于 2019-4-23 01:18:18

没明白用在什么地方

wudechao 发表于 2019-4-23 02:34:41

本帖最后由 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:42:46

本帖最后由 wudechao 于 2019-4-23 02:45 编辑

004 发表于 2019-4-23 01:18
没明白用在什么地方
比如:用于自动提取某个区域(如图框的图名栏)多行text文字的内容。这个区域文字可能是其它人画的,可能被打断了,有几行,也可能其它原因打断(数字和中文混排打断),现在想提取出来,放在目录里或添加在自动打印文件的名称里。我现在刚好想编写一个自动打印pdf的命令,这个打印文件能自动提取图名,图号等等,

yoyoho 发表于 2019-4-23 08:21:11

谢谢! wudechao 分享函数!!!!!!!
页: [1]
查看完整版本: 如何实现有排序的文字合并