代码改变世界

AutoLISP反应器vlr-object-reactor函数应用

2011-05-23 23:35  精诚所至 金石为开  阅读(1321)  评论(0编辑  收藏  举报

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