CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

获取指向模型空间的指针

2023-1-5 08:15| 发布者: admin| 查看: 265| 评论: 0|来自: AutoCAD

通过 ActiveX 函数添加实体时,需要标识要在其中插入实体的模型空间或图纸空间。(在 ActiveX 术语中,实体是对象,但本教程将继续使用术语实体。要告知 AutoCAD 新实体应占用哪个空间,您需要获取指向该空间的指针。遗憾的是,获取指向模型空间的指针并不是一个简单的单次函数。以下代码片段演示了如何设置操作:

(vla-get-ModelSpace (vla-get-ActiveDocument
  (vlax-get-Acad-Object)))

该函数从内到外工作,检索指向AutoCAD的指针。此指针将传递给函数,该函数检索指向 AutoCAD 中的活动图形(文档)的指针。然后,活动文档指针将传递给检索指向当前图形的模型空间的指针的函数。vlax-get-Acad-Objectvla-get-ActiveDocumentvla-get-ModelSpace

这不是您要一遍又一遍键入的表达式。例如,看看当使用整个模型空间表达式时,使用 ActiveX 添加折线的代码看起来有多复杂:

(setq pline (vla-addLightweightPolyline
  (vla-get-ModelSpace
    (vla-get-ActiveDocument
      (vlax-get-Acad-Object)
    )
  )
  VLADataPts)
)
(vla-put-closed pline T)

该功能肯定不太容易理解。不仅如此,在程序内创建实体的每个表达式中,您还要重复同一组嵌套函数。这展示了全局变量为数不多的出色用途之一。花园路径应用程序可以向模型空间添加大量实体(考虑路径中的所有图块),因此,设置一个全局变量来存储指向模型空间的指针,如以下代码所示:

(setq *ModelSpace* (vla-get-ModelSpace (vla-get-ActiveDocument 
                 (vlax-get-Acad-Object))))

无论何时调用 ActiveX 实体创建函数,都可以使用该变量。这个方案唯一棘手的事情是变量必须在你开始绘制之前准备好。因此,建立此变量将在加载应用程序时调用,在调用 to 之后立即调用。这些调用将放在程序文件中的任意调用之前。因此,它们会在加载文件后立即执行。*ModelSpace**ModelSpace*setqvl-load-comdefun


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 13:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部