图层检索器说明
大家好,之前,我发布了一个线程,要求提供一个函数,该函数将成功检索活动文档中所有层的列表。
ASMI善意地向我提供了以下信息:
(defun laylist (/ oLst)
(vl-load-com)
(vlax-for l
(vla-get-Layers
(vla-get-ActiveDocument
(vlax-get-acad-object)
) ;_end vla-get-ActiveDocument
) ;_end vla-get-Layers
(setq oLst
(cons (vla-get-Name l) oLst)
) ; end setq
) ; end vlax-for
(setq oLst (reverse oLst))
) ;_end defun
然而,当我试图借助Vlide帮助文件来分析这一点时,我无法确定函数的实际功能。
我意识到可能有一种更简单的方法来检索这样的列表,而不必涉猎Active X方法,也许:
(defun laylist (/ lay oLst)
(setq lay (tblnext "LAYER" T))
(while lay
(setq oLst (cons (cdr (assoc 2 lay)) oLst)
lay(tblnext "LAYER")
) ;_end setq
) ;_end while
(setq oLst (reverse oLst))
) ;_end defun
但是我真的很想开始理解VL,因为我发现它可以做的比普通的LISP多得多,-(从ASMI的几个例子来看…)
如果您能帮助我们逐步解释ASMI的代码,我们将不胜感激。
谢谢各位,
李 我不是最好的解释,但以下是我最简单的解释:
无论何时,当你对vla表达式中发生的事情感到怀疑时,你总是可以转储以查看其中的内容:
您可以在vlide中逐个运行:
(vl load com)
(vlax dump Object(vlax get acad Object)t)
(vlax转储对象(vla get ActiveDocument
(vlax get acad object))t)
(vlax转储对象(vla get Layers
(vla获取ActiveDocument
(vlax get acad对象)
) ;_ 结束vla获取ActiveDocument
) ;_ 结束vla获取层
t)
vlax for类似于autolisp中的foreach,在这里用于单步/循环遍历层集合,在autolisp中也称为层表。您还需要了解autocad对象模型层次,以了解哪些是应用程序对象,
文档对象,
集合对象,
图形和非图形对象,
首选项、打印和实用程序对象 李,
我从来没有想过vl函数在任何需要可读性或效率的地方。是的,他们可以做一些AutoLisp有问题的事情,但总的来说这不适合我-大卫
好的,大卫,首先,
我知道你从哪里来——我也不太喜欢他们,但我觉得我不知道他们能做什么,这让我处于劣势。
这里的一些问题我感到困惑,然后有人来用VL解决了它们,所以我认为最好深入研究一下,看看这是怎么回事。
感谢您在那里提供了检索层的简短片段,您在某种程度上简化了我的例程。
我认为(tblnext“layer”(不是tdef))在第一次迭代时返回(tblnext“layer”T),否则返回(tblnext“layer”nil),因此从表的开头开始。这是正确的吗?
再次感谢。
威兹曼,
谢谢你的回复,我真的很感谢你花时间帮助我理解这一点。
继续浏览您发布的代码,我可以看到VL是如何建立的,一个命令接一个命令。
我看到了如何通过每个额外的代码部分缩小要检索的项的范围。
感谢您的帮助性演练。
干杯
李 查看VLIDE帮助/内容/
干杯,出租车,我去看看。
页:
[1]