CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 文档中心

示例:截获 ActiveX 方法 (AutoLISP/ActiveX) 返回的错误

2023-1-8 00:28| 发布者: admin| 查看: 366| 评论: 0|来自: AutoCAD

摘要: 这 vl-catch-all-apply 函数允许您拦截 ActiveX 方法返回的错误,并决定程序应如何继续。

该函数允许您截获 ActiveX 方法返回的错误,并决定程序应如何继续。vl-catch-all-apply

注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。

创建新的 AutoLISP 源代码文件

  1. 在 Visual LISP 中,单击“文件新建文件”。
  2. 单击“文件另存为”。
  3. 在“另存为”对话框中,
    • 指定新 AutoLISP 源文件的位置。
    • 在“文件名”框中,输入 interceptActiveXErrors
    • 在“另存为类型”下拉列表中,选择“Lisp 源文件”。
    • 点击保存。

在模型空间中创建新的 Ray 对象

  • 在新的 Visual LISP 文本编辑器窗口中,输入
    (defun init-motivate ()
      (vl-load-com)
      (setq mspace
        (vla-get-modelspace
          (vla-get-activedocument (vlax-get-acad-object))
        )
      )
      (vla-addray mspace (vlax-3d-point 0 0 0) (vlax-3d-point 1 1 0))
    )

获取添加到模型空间的最后一个对象的边界框

  • 在 Visual LISP 文本编辑器窗口中,输入
    (defun bnddrop (/ bbox)
      (setq bbox (vla-getboundingbox
        (vla-item mspace (- 1 (vla-get-count mspace)))
          'll
          'ur
        )
      )
      (list "Do something with bounding box." bbox)
    )

加载并运行代码

  1. 单击“工具”(Tools)、“在编辑器中加载文本”(Load Text)。
  2. 在AutoCAD命令提示下,输入(bnddrop)。

    由于 Ray 对象扩展到无穷大,因此无法用框将其括起来,并且 GetBoundingBox 会导致以下错误:

    ; error: Automation Error. Invalid extents

    如果此代码是应用程序的一部分,则此时将停止执行。

捕获 vla-GetBounding Box 函数创建的错误

  • 在 Visual LISP 文本编辑器窗口中,输入
    (defun bndcatch (/ bbox)
      (setq bbox (vl-catch-all-apply
        'vla-getboundingbox
          (list (vla-item mspace (- 1 (vla-get-count mspace)))
            'll
            'ur
          )
        )
      )
      (if (vl-catch-all-error-p bbox)
        (list "Exception: " (vl-catch-all-error-message bbox))
        (list "Do something with bounding box." bbox)
      )
    )

    此函数用于调用 .它传递两个参数:命名被调用函数的符号和要传递给的参数列表。如果方法成功完成,则将返回值存储在变量 中。如果调用不成功,则将错误对象存储在 中。vl-catch-all-applyvla-getboundingboxvl-catch-all-apply('vla-getboundingbox)vla-getboundingboxGetBoundingBoxvl-catch-all-applybboxvl-catch-all-applybbox

    此时,函数直接发出,导致错误,执行停止。但是在 中,截获错误并继续程序执行。bnddropvla-getboundingboxbndcatchvl-catch-all-apply

    一个调用,用于检查返回值,并返回它是否为错误对象,否则。如果返回值是错误对象(如本示例中所示),则函数会发出从错误对象获取消息的问题。程序执行从此时继续。vl-catch-all-error-pvl-catch-all-applyTnilvl-catch-all-error-message


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-12-15 14:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部