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方法。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐