乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 55|回复: 8

[编程交流] 关于布局列表的问题

[复制链接]

25

主题

62

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-6 06:38:10 | 显示全部楼层 |阅读模式
我基本上是在创建一个AutoLISP脚本,该脚本将根据paperspace布局选项卡自动为我创建一个目录。除了一件事,一切都很顺利。layoutlist似乎是按照创建选项卡的顺序存储选项卡信息的,而不是基于它们在屏幕底部的当前顺序。如果我将一个纸面空间布局移动到一个新位置,目录仍然按照创建时的原始顺序提供所有内容。
 
是否有一个等价于layoutlist的程序可以在屏幕上按当前顺序返回布局?
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 06:51:58 | 显示全部楼层
你必须自己动手。这是我的。
 
  1. (defun AT:LayoutList (/ lst)
  2. ;; List of layouts (VLA-Objects) in drawing (in correct order)
  3. ;; Alan J. Thompson, 10.05.09
  4. (vlax-for x (vla-get-layouts
  5.                (cond (*AcadDoc*)
  6.                      ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  7.                )
  8.              )
  9.    (or (eq (vla-get-name x) "Model") (setq lst (cons x lst)))
  10. )
  11. (vl-sort lst (function (lambda (a b) (< (vla-get-taborder a) (vla-get-taborder b)))))
  12. )
回复

使用道具 举报

25

主题

62

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-6 06:55:13 | 显示全部楼层
我试过这个:
 
  1. (vlax-for x (vla-get-layouts
  2. (cond (*AcadDoc*)
  3.         ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  4. )
  5. )
  6. (or (eq (vla-get-name x) "Model") (setq paperlist (cons x paperlist)))
  7. )
  8. (vl-sort paperlist (function (lambda (a b) (< (vla-get-taborder a) (vla-get-taborder b)))))
  9. (foreach tab (paperlist)
  10. (setvar 'ctab tab)
  11. (setq column (+ column 1))
  12. (substr tab 4 100)
  13. (vla-setCellValue table column row tab)
  14. )
  15. (setq titlepage (car (paperlist)))
  16. (setvar 'ctab (car (paperlist)))

 
得到这个:
 
  1. Command: bad function: (#<VLA-OBJECT IAcadLayout 178aa094> #<VLA-OBJECT IAcadLayout 178a6e94> #<VLA-OBJECT IAcadLayout 171d35ec> #<VLA-OBJECT IAcadLayout 1724e03c>)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 07:01:09 | 显示全部楼层
首先,如果你要使用我的代码,请有礼貌地留下我的名字。这是一个子程序。只需将其分配给一个变量。例如(setq mylist(AT:LayoutList))
 
抱歉,这会按顺序返回布局对象。
 
你可以直接输入(mapcar'vla get name)(在:LayoutList),但你的e会在列表中运行多次。
 
 
试试这个。
  1. (defun _layoutlist (/ layouts)
  2. (setq layouts (vla-get-layouts
  3.                  (cond (*AcadDoc*)
  4.                        ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  5.                  )
  6.                )
  7. )
  8. (vl-sort (layoutlist)
  9.           (function (lambda (a b)
  10.                       (< (vla-get-taborder (vla-item layouts a))
  11.                          (vla-get-taborder (vla-item layouts b))
  12.                       )
  13.                     )
  14.           )
  15. )
  16. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 07:10:30 | 显示全部楼层
从那里,使用(foreach选项卡(_layoutlist)等等)
回复

使用道具 举报

25

主题

62

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-6 07:22:22 | 显示全部楼层
谢谢,我以前从未使用过子程序,所以不知道它们是如何工作的。
 
关于名字的事也很抱歉。实际上,我确实在我使用的代码中留下了这一部分,但我不认为把这一部分复制回论坛有什么意义。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 07:25:21 | 显示全部楼层
别担心。你现在知道如何使用子程序了吗?将我的上述示例用于foreach?
回复

使用道具 举报

25

主题

62

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
125
发表于 2022-7-6 07:33:32 | 显示全部楼层
是的,基本上只是把它丢在其余代码的defun之外。我刚刚测试过,一切都很好!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:45:10 | 显示全部楼层
这是函数的另一个变体:
[code](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'
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 22:30 , Processed in 1.795365 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表