;;----------------=={ 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/