AutoLISP反应器vlr-object-reactor函数应用,代码如下。
(defun c:tt (/ line line_handle txt txt_line txt_line_reactor)
(Setq txt (Vlax-Ename->Vla-Object (car (entsel))))
(Setq line (Vlax-Ename->Vla-Object (car (entsel))))
(setq line_handle (Vlax-Get line 'Handle))
(if (not txt_line_reactor)
(setq txt_line_reactor
(vlr-object-reactor
(list txt)
(list line_handle)
'((:vlr-modified . Txt_Line))
)
)
)
(vlr-pers txt_line_reactor)
)
(defun Txt_Line (a b c / line line_pa long pa pb pta ptb txt)
(setq txt a)
(setq line (Vlax-Invoke-Method
(Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument)
'HandleToObject
(car (vlr-data b))
)
)
(Vlax-Invoke-Method txt 'GetBoundingBox 'pa 'pb)
(setq pta (vlax-safearray->list pa))
(setq ptb (vlax-safearray->list pb))
(setq long (- (car ptb) (car pta)))
(setq line_pa (Vlax-Get line 'StartPoint))
(Vlax-Put-Property
line
'EndPoint
(Vlax-3d-Point (list (+ long (car line_pa)) (cadr line_pa)))
)
(princ)
)
代码完。
Vlax-3d-Point不是画线命令,从新设置endpoint点用startpoint来计算出其坐标,用vlax-put-property重新设置endpoint点,更新直线。
Vlax-Invoke-Method调用ActiveX方法。