向对象反应器回调函数 (AutoLISP) 添加活动
在第 6 课中,您注册了两个带有对象反应器事件的回调函数。该函数与反应堆事件相关联,并且与事件相关联。您需要使这些函数执行其预期执行的操作。gp:outline-erased:vlr-erasedgp:outline-changed:vlr-modified
使对象反应器回调函数执行其预期操作
- 在 gpreact.lsp 中,进行更改,使其如下所示:gp:outline-erased
(defun gp:outline-erased (outlinePoly reactor parameterList)
(setq *reactorsToRemove*
(cons reactor *reactorsToRemove*))
(princ)
) ;_ end of defun
这里只执行一个操作。连接到折线的反应器将保存到需要移除的所有反应器的列表中。(切记:尽管 reactor 与图元相关联,但它们是完全独立的对象,并且它们与图元的关系需要像常规 AutoCAD 图元一样仔细管理。
- 更改以反映以下代码:gp:outline-changed
(defun gp:outline-changed (outlinePoly reactor parameterList)
(if *lostAssociativity*
(setq *reactorsToRemove*
(cons reactor *reactorsToRemove*))
(setq *polytochange* outlinePoly
*reactorsToChange* (cons reactor *reactorsToChange*))
)
(princ)
)
有两类函数可以修改折线轮廓。第一类包含那些将破坏路径与其切片的关联性的命令。您检查了此条件并相应地设置了全局变量。在这种情况下,需要擦除图块,然后路径掌握在用户手中。另一类是 STRETCH 命令的夹持模式,其中保留了关联性,您需要在用户完成将顶点拖动到新位置后拉直轮廓。gp:command-will-start*lostAssociativity*
该变量存储指向折线本身的 VLA-Object 指针。当需要重新计算折线边界时,这将在函数中使用。*polyToChange*gp:command-ended
|