"在AutoLISP中的使用-6ren"> "在AutoLISP中的使用-;;----------------=={ Add Objects to Block }==----------------;; ;; -6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:20:31 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com