最后一个重要细节涉及当用户使用专用的 GRIP 命令修改折线时,AutoCAD 中命令/反应器序列中的一个怪癖。这些命令(如 GRIP_MOVE 和 GRIP_ROTATE)在选择对象的夹点并单击鼠标右键后可从快捷菜单中使用。反应器序列不像简单的 MOVE 或 ERASE 命令那样线性。实际上,用户在另一个命令中正在更改为不同的命令。若要演示此情况,可以加载第 6 课中跟踪反应器事件序列的代码。或者只需查看以下带批注的 Visual LISP 控制台窗口输出,看看会发生什么情况: ;; To start, select the polyline and some of the circles by using a ;; crossing selection box. The items in the selection set-- ;; the chosen circles and the polyline--are now shown with grips on. ;; To initiate the sequence, click on one of the polyline grips: (GP:COMMAND-WILL-START #<VLR-Command-reactor> (GRIP_STRETCH)) ;; Now change the command to a move by right-clicking and choosing ;; MOVE from the pop-up menu. Notice that the command-ended ;; reactor fires in order to close out the GRIP_STRETCH command ;; without having fired an object reactor event: (GP:COMMAND-ENDED #<VLR-Command-reactor> (GRIP_STRETCH)) (GP:COMMAND-WILL-START #<VLR-Command-reactor> (GRIP_MOVE)) ;; Now drag the outline (and the selected circles) to a new location. (GP:OUTLINE-CHANGED #<VLA-OBJECT IAcadLWPolyline 028f3188> #<VLR-Object-reactor> nil) (GP:COMMAND-ENDED #<VLR-Command-reactor> (GRIP_MOVE)) 这表明您无法确定在所有情况下都会调用对象反应器回调。 这个序列中有一个相关的怪癖。即使在最终命令结束回调期间,也无法删除仍属于夹点选择集的圆圈。这些圆圈仍然由AutoCAD打开。如果在命令结束回调期间尝试擦除它们,则可能会使 AutoCAD 崩溃。若要解决此问题,可以使用另一个全局变量来存储指向磁贴对象的指针列表,直到可以删除它们。 处理非线性反应器序列
|
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:36
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.