(DEFUN C:TT( / a ang b er1 er2 er3 l p q r r1 r2)
(vl-load-com)
(setq p (getpoint "\nSTA "))
(setq q (getpoint p "\nEND "))
(setq l 300)
(setq ang (angle p q))
(setq r (getdist "\nGG-radius"))
(setq r1 (getdist "\nSTA-radius"))
(setq r2 (getdist "\nEND-radius"))
(if (null r) (setq r 50))
(if (null r1) (setq r1 70))
(if (null r2) (setq r2 60))
(setq er1 (cylinder p q r))
(setq er2 (cylinder (polar p (+ (* pi 0.5) ang) l)(polar p (- ang (* pi 0.5)) l) r1))
(setq er3 (cylinder (polar q (+ (* pi 0.5) ang) l)(polar q (- ang (* pi 0.5)) l) r2))
(vlax-ldata-put er1 "GG" (strcat (itoa (fix (distance p q))) "X"(rtos r 2 0)))
(vlax-ldata-put er2 "ZG" (strcat (itoa l) "X"(rtos r1 2 0)))
(vlax-ldata-put er3 "ZG" (strcat (itoa l) "X"(rtos r2 2 0)))
(princ)
)
(defun cylinder (p q r)
(defun mxv ( m v )
(mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
)
(setq vec (mapcar '- q p)
obj (vla-addcylinder (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3D-point p) r (setq hgt (distance p q)))
mat (mapcar '(lambda ( v ) (trans v 0 vec t)) '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)))
)
(vla-transformby obj
(vlax-tmatrix
(append
(mapcar 'append mat
(mapcar 'list
(mapcar '+ (trans (list 0.0 0.0 (/ hgt 2.0)) vec 0 t)
(mapcar '- p (mxv mat p))
)
)
)
'((0.0 0.0 0.0 1.0))
)
)
)
obj
)
(vl-load-com) (princ)