供参考,因为机器上 Acad 2014 故障,没有调试
- (defun c:tt (/ ss e elst p2 pt p p1 ux uy uz cv pt fvx fvy fvz h e pam mat ang)
- (if (and (progn
- (princ "\nSelect Text ....")
- (setq ss (ssget '((0 . "text"))))
- )
- (progn
- (princ "\nPick Curve...")
- (setq e (ssget "+.:S" '((0 . "*line,arc,circle,ellipse"))))
- )
- )
- (progn
- (setq el (ssnamex e 0)
- elst (mapcar '(lambda (x)
- (if (not ang)
- (setq ang (xdrx_getpropertyvalue x "rotation"))
- )
- (list (xdrx_entity_getstretchpoint x)
- (xdrx_getpropertyvalue x "height")
- x
- )
- )
- (xdrx_pickset->ents ss)
- )
- p2 (polar '(0 0 0) ang 1.0)
- elst (mapcar 'cdr
- (vl-sort (mapcar '(lambda (x)
- (cons (car (trans (caar x) 0 p2))
- x
- )
- )
- elst
- )
- '(lambda (x1 x2) (< (car x1) (car x2)))
- )
- )
- cv (cadar el)
- pt (xdrx_curve_getclosestpoint cv (last (last (car el))))
- pam (xdrx_curve_getparamatpoint cv pt)
- fvx (xdrx_curve_getfirstderiv cv pam)
- fvy (xdrx_vector_perpvector fvx)
- fvz (xdrx_vector_crossproduct fvx fvy)
- )
- (foreach x elst
- (setq p (caar x)
- p1 (polar p ang 1.0)
- ux (mapcar '- p1 p)
- uy (xdrx_vector_perpvector ux)
- uz (xdrx_vector_crossproduct ux uy)
- h (cadr x)
- e (last x)
- mat (xdrx_matrix_aligncoordsystem p ux uy uz pt fvx fvy fvz)
- )
- (xdrx_entity_transform e mat)
- (setq pt (polar pt (+ ang (/ pi 2)) (* 1.5 h)))
- )
- )
- )
- (princ)
- )
_$ (xdrx_matrix_aligncoordsystem '(0. 0. 0.) '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.) '(10. 10. 0.) '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.))
nil
这个函数在我这没法用,是 ACAD 问题不是 API 原因 |