如下是一个书本上的例子,就是鼠标点选画圆,然后当改变圆的半径的时候,就显示出改变的圆的半径值。
由于初学,有以下几个疑问麻烦解答:
1、反应器是否类似于中断触发的原理?关于反应器部分的程序代码是否必须在test()函数中?在CAD中调用test命令画了圆之后,按道理test函数中的所有程序包括反应器部分都应该执行完了啊,为何改变这个圆的半径时仍然会触发调用print-radius这个函数?
2、回调函数中的三个形参notifier-object、reactor-object和parameter-list是从哪儿获得值呢?
 -
- (defun c:tg ()
- (vl-load-com)
- ;下面为画圆程序
- (setq mycircle
- (
- progn
- (setq ctrpt (getpoint "\n point:")
- radius (distance ctrpt (getpoint ctrpt "\nRadius:"))
- )
- (vla-addCircle
- (vla-get-ModelSpace
- (vla-get-ActiveDocument (vlax-get-acad-object))
- )
- (vlax-3d-point ctrpt)
- radius
- )
- )
- )
- ;下面为修改圆半径的反应器
- (setq circleReactor
- (vlr-object-reactor
- (list mycircle)
- "Circle Reactor"
- '((:vlr-modified . print-radius))
- )
- )
- )
- (defun print-radius (notifier-object reactor-object parameter-list) ;回调函数
- (cond
- (
- (vlax-property-available-p
- notifier-object
- "Radius"
- )
- (princ "The radius is ")
- (princ (vla-get-radius notifier-object))
- )
- )
- )
|