CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

规划整个反应器过程

2023-1-5 06:40| 发布者: admin| 查看: 293| 评论: 0|来自: AutoCAD

您需要在本课中定义几个新函数。本 节 课 不 介绍 了 新 代码 的 所有 方面 的 详细信息, 而 是 概述 并 指出 了 代码 背后的 概念。在本课程结束时,您将拥有创建与在第 1 课中运行的示例程序相同的花园路径应用程序所需的所有源代码。

注意:当您正在开发和调试基于反应器的应用程序时,总是有可能使AutoCAD®处于不稳定状态。这可能是由多种情况引起的,例如无法从已删除的实体中移除反应器。因此,建议在开始第 7 课之前,关闭 Visual LISP,保存所有打开的文件,退出 AutoCAD,然后重新启动这两个应用程序。

首先加载第 6 课结束时存在的项目。

在花园路径应用中还有两个明显的工作要做:

  • 编写对象反应器回调。
  • 编写编辑器反应器回调。

您还需要考虑如何处理程序中的全局变量。通常,希望全局变量在整个 AutoCAD 图形会话中保留一个值。然而,就反应堆而言,情况并非如此。为了说明这一点,假设花园路径应用程序的用户在单个图形中绘制了多个花园路径。执行此操作后,用户将擦除它们,首先一次擦除一条,然后一次擦除两条,依此类推,直到除一条路径之外的所有路径都被擦除。

第 5 课引入了一个全局变量,负责存储指向即将擦除的折线的反应堆指针。当声明为 时,该事件会让您知道折线即将被擦除。在事件触发之前,折线实际上不会被删除。*reactorsToRemove**reactorsToRemove*gp:outline-erasedgp:command-ended

用户第一次删除折线时,事情会像您预期的那样工作。在其中,存储指向反应器的指针。当火灾发生时,你移除与反应堆所连接的折线相关的瓷砖,一切都很好。然后,用户决定擦除两条路径。因此,您的应用程序将收到两次调用,每个调用一个用于即将擦除的每条折线。您必须预见到两个潜在问题:gp:outline-erasedgp:command-endedgp:outline-erased

  • 当你使用变量时,你必须添加一个指向全局反应器的指针,确保不要覆盖已经存储在那里的任何值。这意味着必须是一个列表结构,以便您可以将反应堆指针附加到它。然后,您可以累积多个反应器指针,对应于用户在单个擦除命令中擦除的路径数。setq*reactorsToRemove**reactorsToRemove*
  • 每次触发时,指示新的命令序列正在开始,您应该将变量重新初始化为这是必需的,以便全局不会存储来自上一个擦除命令的反应堆指针。gp:command-will-start*reactorsToRemove*nil.

    如果不重新初始化全局变量或使用正确的数据结构(在本例中为列表),则会出现意外行为。对于反应器,意外行为可能对 AutoCAD 会话造成致命影响。

下面是用户使用单个擦除命令擦除两个花园路径所需的事件链。请注意全局变量的处理方式:

  • 启动擦除命令。这将触发函数。塞托。gp:command-will-start*reactorsToRemove*nil
  • 选择两条折线;您的申请尚未收到通知。
  • 按 Enter 擦除两条选定的折线。

    应用程序获取对其中一个折线的回调。将其反应器指针添加到空全局,。gp:outline-erased*reactorsToRemove*

    应用程序获取对第二条折线的回调。将其反应器指针追加到已包含第一个反应器指针的全局。gp:outline-erased *reactorsToRemove*

  • AutoCAD 将删除折线。
  • 您的回调函数将触发。消除与存储在其中的反应器指针关联的任何图块。gp:command-ended*reactorsToRemove*

除了全局之外,应用程序还包括 aglobal,它存储指向将要修改的任何折线的指针。本课稍后将介绍该应用程序的两个附加全局变量。*reactorsToRemove**polyToChange*


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 11:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部