autolisp - ":"和 "->"在AutoLISP中的使用

标签 autolisp

;;----------------=={ Add Objects to Block }==----------------;;
;;                                                            ;;
;;  Adds all objects in the provided SelectionSet to the      ;;
;;  definition of the specified block.                        ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;

(defun LM:AddObjectstoBlock ( doc block ss / lst mat )

    (setq lst (LM:ss->vla ss)
          mat (LM:Ref->Def block)
          mat (vlax-tmatrix (append (mapcar 'append (car mat) (mapcar 'list (cadr mat))) '((0. 0. 0. 1.))))
    )
    (foreach obj lst (vla-transformby obj mat))

    (vla-CopyObjects doc (LM:SafearrayVariant vlax-vbobject lst)
        (vla-item (vla-get-Blocks doc) (cdr (assoc 2 (entget block))))
    )
    (foreach obj lst (vla-delete obj))
    (vla-regen doc acAllViewports)

这是我第一次看到在 AutoLISP 中使用这种类型的语法。

我正在尝试对 "LM:" 的实际含义进行一些解释。

"Ref->"的使用也是我的疑问。 "Ref" 似乎没有定义,所以它似乎一定是系统的一部分,尽管我无法提取任何描述 "Ref->" 用法的文档>。

为什么局部变量 ss"LM:ss->" 访问?

谢谢。

最佳答案

这种语法不是 AutoLISP/Visual LISP 的构造。这是 Lee Mac 的标准。我是这样理解的:

“LM:”实际上是“Lee Mac”的快捷方式;)

(LM:ss->vla ss) 将数据类型从选择集切换到 vla 对象列表,其中选择集类似于所选元素列表,但定义为类型实体,而不是 vla 对象。也许通过 (ssget) 或 (ssgetfirst) 得到

(LM:Ref->Def block) 根据它的引用获取 block 定义。其中“LM:Ref->Def”只是函数的全名。 “Ref”不是任何类型的变量,它是函数名称的一部分。

“LM:ss->”并不是说我们使用定义为函数参数的ss,而是“LM:ss->vla”是函数名。

关于autolisp - ":"和 "->"在AutoLISP中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059744/

相关文章:

arrays - Autolisp实体数据检索

lisp - 无需用户交互即可应用自动(脚本)操作

python - 使用 AutoCAD 中的 lisp 应用程序和 Python 3.5

c++ - 视觉口齿不清 : how to call functions in external C++ DLL

c# - AutoCAD 命令被拒绝 : "Undo" when calling undo from LISP

dialog - 如何正确地将 DCL 链接到 AutoLisp?

compilation - 为 AutoCAD Lisp 文件构建自动化

vba - 在 AutoCAD 中运行 VBA 宏

autocad - 在 Lisp 退出时执行代码