关于布局列表的问题
我基本上是在创建一个AutoLISP脚本,该脚本将根据paperspace布局选项卡自动为我创建一个目录。除了一件事,一切都很顺利。layoutlist似乎是按照创建选项卡的顺序存储选项卡信息的,而不是基于它们在屏幕底部的当前顺序。如果我将一个纸面空间布局移动到一个新位置,目录仍然按照创建时的原始顺序提供所有内容。是否有一个等价于layoutlist的程序可以在屏幕上按当前顺序返回布局? 你必须自己动手。这是我的。
(defun AT:LayoutList (/ lst)
;; List of layouts (VLA-Objects) in drawing (in correct order)
;; Alan J. Thompson, 10.05.09
(vlax-for x (vla-get-layouts
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
(or (eq (vla-get-name x) "Model") (setq lst (cons x lst)))
)
(vl-sort lst (function (lambda (a b) (< (vla-get-taborder a) (vla-get-taborder b)))))
) 我试过这个:
(vlax-for x (vla-get-layouts
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
(or (eq (vla-get-name x) "Model") (setq paperlist (cons x paperlist)))
)
(vl-sort paperlist (function (lambda (a b) (< (vla-get-taborder a) (vla-get-taborder b)))))
(foreach tab (paperlist)
(setvar 'ctab tab)
(setq column (+ column 1))
(substr tab 4 100)
(vla-setCellValue table column row tab)
)
(setq titlepage (car (paperlist)))
(setvar 'ctab (car (paperlist)))
得到这个:
Command: bad function: (#<VLA-OBJECT IAcadLayout 178aa094> #<VLA-OBJECT IAcadLayout 178a6e94> #<VLA-OBJECT IAcadLayout 171d35ec> #<VLA-OBJECT IAcadLayout 1724e03c>) 首先,如果你要使用我的代码,请有礼貌地留下我的名字。这是一个子程序。只需将其分配给一个变量。例如(setq mylist(AT:LayoutList))
抱歉,这会按顺序返回布局对象。
你可以直接输入(mapcar'vla get name)(在:LayoutList),但你的e会在列表中运行多次。
试试这个。
(defun _layoutlist (/ layouts)
(setq layouts (vla-get-layouts
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
)
(vl-sort (layoutlist)
(function (lambda (a b)
(< (vla-get-taborder (vla-item layouts a))
(vla-get-taborder (vla-item layouts b))
)
)
)
)
) 从那里,使用(foreach选项卡(_layoutlist)等等) 谢谢,我以前从未使用过子程序,所以不知道它们是如何工作的。
关于名字的事也很抱歉。实际上,我确实在我使用的代码中留下了这一部分,但我不认为把这一部分复制回论坛有什么意义。 别担心。你现在知道如何使用子程序了吗?将我的上述示例用于foreach? 是的,基本上只是把它丢在其余代码的defun之外。我刚刚测试过,一切都很好! 这是函数的另一个变体:
(defun布局列表(/l1 l2)(vlax for l(vla get layouts(vla get activedocument(vlax get acad object))(if(//=“MODEL”(strcase(vla get name l)))(setq l1(cons(vla get name l)l1)l2(cons(vla get taborder l)l2))(mapcar“(lambda(n)(nth n l1))(vl-sort-i l2'
页:
[1]