Add Mtext, Spline to process and Maximum of distance that Text will be Align
 - (defun c:tt (/ _aap l lines p p2 ss text eg fuzz_ratio)
- (setq fuzz_ratio 5) ;distance max to change 5*h
- (defun _aap (ename pt / param)
- (if (and (not
- (vl-catch-all-error-p
- (vl-catch-all-apply 'vlax-curve-getendparam (list ename))
- )
- )
- (setq param (vlax-curve-getparamatpoint ename pt))
- )
- (angle '(0 0) (vlax-curve-getfirstderiv ename param))
- )
- )
- (if (setq ss (ssget '((0 . "*polyline,Line,*Text,spline"))))
- (progn (foreach x (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
- (if (wcmatch (cdr (assoc 0 (entget x))) "*TEXT" )
- (setq text (cons x text))
- (setq lines (cons x lines))
- )
- )
- (if lines
- (foreach x text
- (setq p (cdr (assoc 10 (setq eg (entget x)))))
- (setq l (mapcar '(lambda (x)
- (list (setq p2 (vlax-curve-getclosestpointto x p))
- (distance p p2)
- (_aap x p2)
- )
- )
- lines
- )
- )
- (setq l (car (vl-sort l '(lambda (a b) (< (cadr a) (cadr b))))))
- (if (<= (cadr l) (* fuzz_ratio (cdr (assoc 40 eg))))
- (entmod
- (subst (cons 50 (caddr l)) (assoc 50 eg) eg)
- )
- )
- )
- )
- )
- )
- (princ)
- )
|