check the following. almost all of 4 and 3 lines text will be joined to mtexts. upon completing all mtexts are hidden. few remaining lines of text may be converted to mtext using txt2mtxt et command. to unhide hidden mtext use unisolateobjects command. alignment to all mtexts is top left.
(defun c:text_autojoin (/ bottom_text_sset text_lines_sset text_box text_lines_list mtext_line mtext)
(if (setq bottom_text_sset (ssget "_x" '((0 . "text") (1 . "*(*),02-T*"))))
(foreach text (vl-remove-if 'listp (mapcar 'cadr (ssnamex bottom_text_sset)))
(setq text_lines_sset (ssget "_f"
(list (cdr (assoc 10 (entget text)))
(mapcar '+ (cdr (assoc 10 (entget text)))
(list (abs (car (mapcar '- (car (setq text_box (textbox (entget text)))) (cadr text_box))))
30
)
)
(mapcar '+ (cdr (assoc 10 (entget text)))
(list (abs (car (mapcar '- (car text_box) (cadr text_box))))
0
)
)
(mapcar '+ (cdr (assoc 10 (entget text)))
(list 0
30
)
)
)
(list '(0 . "text")
'(-4 . "<and")
'(-4 . "<not")
'(1 . "*(*),02-T*")
'(-4 . "not>")
'(-4 . "and>")
(assoc 62 (entget text))
)
)
text_lines_list (append (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex text_lines_sset)))
'(lambda (text_1 text_2) (> (caddr (assoc 10 (entget text_1))) (caddr (assoc 10 (entget text_2)))))
)
(list text)
)
mtext_line ""
)
(foreach line text_lines_list
(setq mtext_line (strcat mtext_line (cdr (assoc 1 (entget line))) "\\P"))
)
(setq mtext (vla-addmtext (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
(vlax-3d-point (cdr (assoc 10 (entget (car text_lines_list)))))
0
mtext_line
)
)
(vla-put-height mtext (cdr (assoc 40 (entget text))))
(vla-put-color mtext (cdr (assoc 62 (entget text))))
(vla-put-layer mtext (cdr (assoc 8 (entget text))))
(mapcar 'entdel text_lines_list)
)
)
(command "_hideobjects" (ssget "_x" '((0 . "mtext"))) "")
(princ)
)