乐筑天下

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

[编程交流] 如何获取所有viewp的列表

[复制链接]

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 11:56:33 | 显示全部楼层 |阅读模式
请原谅这里的lisp新手,但是我如何调用给定布局中所有视口的列表?类似于(foreach lay(布局列表)?
 
它可以嵌套在(foreach lay(layoutlist))这样的函数中吗?
 
简单地说,我想通过向现有lisp添加一些代码来锁定所有视口,在每个布局中设置一些其他变量。
 
谢谢
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 12:01:31 | 显示全部楼层
使用Jason在本讨论中提交的lisp例程(VPlock_unlock.lsp)锁定和解锁视口。
 
http://discussion.autodesk.com/forums/thread.jspa?threadID=468710
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:06:03 | 显示全部楼层
嗯,有:
 
  1. (vports)

 
这将根据视口的标识号提供视口列表,但这将锁定所有视口:
 
  1. (defun c:lkall (/ i ss ent)
  2. (vl-load-com)
  3. (if (setq i -1 ss (ssget "_X" '((0 . "VIEWPORT"))))
  4.    (while (setq ent (ssname ss (setq i (1+ i))))
  5.      (vla-put-displaylocked (vlax-ename->vla-object ent) :vlax-true)))
  6. (princ))

 
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 12:08:17 | 显示全部楼层
这行得通吗?
 
  1. (foreach vp (vports)
  2. (vla-put-displaylocked (vlax-ename->vla-object vp) :vlax-true)
  3. )

 
在更大的背景下(其余部分确实有效,但速度较慢):
 
  1. (defun c:psfix ( / lay ct vp)
  2. (vl-load-com)
  3. (setq ct (getvar "ctab"))
  4. (foreach lay (layoutlist)
  5. (command "_LAYOUT" "_Set" lay "PSLTSCALE" 1)
  6. (command "_layout" "_Set" lay "_mspace" "ANNOALLVISIBLE" 1 "_pspace")
  7. )
  8. (foreach vp (vports)
  9. (vla-put-displaylocked (vlax-ename->vla-object vp) :vlax-true)
  10. )
  11. (setvar "msltscale" 1)
  12. (setvar "ltscale" 1)
  13. (setvar "ctab" ct)
  14. );defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:09:44 | 显示全部楼层
不,因为(vports)返回一个视口标识号列表-我文章第二部分中的代码将锁定所有视口
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:13:16 | 显示全部楼层
试试这个。。
 
快速修改代码:
 
  1. (defun c:psfix ( / ct lay i ss ent)
  2. (vl-load-com)
  3. (setq ct (getvar "ctab"))
  4. (foreach lay (layoutlist)
  5.    (mapcar 'setvar '("CTAB" "PSLTSCALE") (list lay 1))
  6.    (vl-cmdf "_.mspace")
  7.    (setvar "ANNOALLVISIBLE" 1)
  8.    (vl-cmdf "_.pspace"))
  9. (if (setq i -1 ss (ssget "_X" '((0 . "VIEWPORT"))))
  10.    (while (setq ent (ssname ss (setq i (1+ i))))
  11.      (vl-catch-all-apply 'vla-put-displaylocked
  12.        (list (vlax-ename->vla-object ent) :vlax-true))))
  13. (mapcar 'setvar '("MSLTSCALE" "LTSCALE" "CTAB") (list 1 1 ct))
  14. (princ))
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 12:15:48 | 显示全部楼层
很好,谢谢。
我试着坚持我所熟悉的(一点点)。。。
 
我希望你的版本也会更快。
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 12:18:55 | 显示全部楼层
也许我很笨,但你能评论一下,帮助我理解你在做什么吗?我对所有这些方法都不熟悉?
 
谢谢李
回复

使用道具 举报

33

主题

267

帖子

213

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2022-7-6 12:22:39 | 显示全部楼层
 
很好的发现。谢谢Mark
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:27:43 | 显示全部楼层
这不是问题,Cary-我更希望您理解我的代码在做什么,而不是仅仅接受它。
 
如果你还对什么事感到困惑,尽管问。
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:psfix [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] ct lay i ss ent[b][color=RED])[/color][/b] [i][color=#990099];; Initiate Defun and localise Vars[/color][/i]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]  [i][color=#990099];; Load Visual LISP Console[/color][/i]
  3. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ct [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"ctab"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; Store Current Layout[/color][/i]
  4. [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] lay [b][color=RED]([/color][/b][b][color=BLUE]layoutlist[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; For Every Layout in the Drawing[/color][/i]
  5.    
  6.    [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"CTAB"[/color][/b] [b][color=#ff00ff]"PSLTSCALE"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] lay [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  7.      [i][color=#990099];; Apply the function 'setvar' to each argument in each list.[/color][/i]
  8.      [i][color=#990099];; Setvar needs two arguments, sys var and value, so mapcar needs[/color][/i]
  9.      [i][color=#990099];; two lists.[/color][/i]
  10.      [i][color=#990099];; This is equivalent to putting (setvar "CTAB" lay) (setvar "PSLTSCALE" 1)[/color][/i]
  11.    
  12.    [b][color=RED]([/color][/b][b][color=BLUE]vl-cmdf[/color][/b] [b][color=#ff00ff]"_.mspace"[/color][/b][b][color=RED])[/color][/b]  [i][color=#990099];; Equivalent to (command "_.mspace")[/color][/i]
  13.    
  14.    [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"ANNOALLVISIBLE"[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; Set Sys Var ANNOALLVISIBLE to 1[/color][/i]
  15.    
  16.    [b][color=RED]([/color][/b][b][color=BLUE]vl-cmdf[/color][/b] [b][color=#ff00ff]"_.pspace"[/color][/b][b][color=RED])[/color][/b]  [i][color=#990099];; Equivalent to (command "_.pspace")[/color][/i]
  17. [b][color=RED])[/color][/b]  [i][color=#990099]; end foreach[/color][/i]
  18. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=#009900]-1[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"VIEWPORT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  19.      [i][color=#990099];; If there are Viewports in the Database[/color][/i]
  20.    
  21.    [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]ssname[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] i[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  22.      [i][color=#990099];; While we can get an entity name in the Selection Set[/color][/i]
  23.      
  24.      [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b] [i][color=#990099];; Apply the following function and catch any errors[/color][/i]
  25.        [i][color=#990099];; This is like using 'apply' except the program will not crash if[/color][/i]
  26.        [i][color=#990099];; there is an error executing the function.[/color][/i]
  27.        [b][color=DARKRED]'[/color][/b][b][color=BLUE]vla-put-displaylocked[/color][/b]  [i][color=#990099];; Property of the Viewport to determine if it is locked.[/color][/i]
  28.        [i][color=#990099];; List of arguments that belong to 'vla-put-displaylocked'[/color][/i]
  29.        [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
  30.          [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] ent[b][color=RED])[/color][/b] [i][color=#990099];; convert the ename to a VLA-object[/color][/i]
  31.          [b][color=Blue]:vlax-true[/color][color=RED])[/color][/b] [i][color=#990099];; Boolean True - hence the Viewport will be locked[/color][/i]
  32.       
  33.        [b][color=RED])[/color][/b] [i][color=#990099]; end vl-catch-all-apply[/color][/i]
  34.      
  35.      [b][color=RED])[/color][/b] [i][color=#990099]; end While[/color][/i]
  36.    
  37.    [b][color=RED])[/color][/b] [i][color=#990099]; end IF[/color][/i]
  38. [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"MSLTSCALE"[/color][/b] [b][color=#ff00ff]"LTSCALE"[/color][/b] [b][color=#ff00ff]"CTAB"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=#009900]1[/color][/b] [b][color=#009900]1[/color][/b] ct[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  39. [i][color=#990099];; Same logic as above - read about 'mapcar' to learn more.[/color][/i]
  40. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; Exit Quietly - i.e. suppress last return[/color][/i]
  41. [b][color=RED])[/color][/b] [i][color=#990099];; End Defun[/color][/i]

 

 
PS>也许还可以在Visual LISP编辑器帮助文件中查找一些您不熟悉的函数——(命令行中的VLIDE)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:36 , Processed in 0.424806 second(s), 83 queries .

© 2020-2025 乐筑天下

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