乐筑天下

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

[编程交流] VPLocker修改

[复制链接]

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:33:20 | 显示全部楼层 |阅读模式
我使用lisp VPLocker锁定和解锁布局上的视口,效果很好,但当我使用多段线剪裁现有视口(例如)时,我在剪裁的视口上运行VPLocker例程,视口(此时它已从视图中消失)会按预期更改颜色,但是我用来剪裁视口的多段线(它是唯一剩下的可见项)并没有改变颜色。
是否可以更改或添加到例程中,使其成为可能,这样无论您使用什么来剪裁视口,VPLocker都会锁定并更改用于剪裁视口的项目的颜色?。
vplocker。lsp
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:48:45 | 显示全部楼层
为了好玩:
 
  1. (vl-load-com)
  2. ;;;--------------------------------------------------------------------;
  3. ;;; Viewport lock
  4. (defun c:VPL () (c:ViewportLock))
  5. (defun c:ViewportLock (/ option ss)
  6. (princ "\rVIEWPORTLOCK ")
  7. (_PutPViewportLockAndColor :vlax-true 4)
  8. )
  9. ;;;--------------------------------------------------------------------;
  10. ;;; Viewport unlock
  11. (defun c:VPU () (c:ViewportUnlock))
  12. (defun c:ViewportUnlock (/ option ss)
  13. (princ "\rVIEWPORTUNLOCK ")
  14. (_PutPViewportLockAndColor :vlax-false 256)
  15. )
  16. ;;;--------------------------------------------------------------------;
  17. ;;; Put PViewport Lock and Color
  18. (defun _PutPViewportLockAndColor (lock color / *error* option ss acDoc)
  19. (defun *error* (msg)
  20.    (if (and ss (= 'VLA-OBJECT (type ss)))
  21.      (vla-delete ss)
  22.    )      
  23.    (if acDoc
  24.      (vla-endundomark acDoc)
  25.    )
  26.    (cond ((not msg))                                                   ; Normal exit
  27.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  28.          ((princ (strcat "\n** " msg " ** ")))
  29.    )                                                                   ; Fatal error, display it
  30.    (princ)
  31. )
  32. (if (and (not (initget "All Current"))
  33.           (or (setq option
  34.                      (getkword
  35.                        "\nEnter layout(s) to modify [All/Current]<Current>: "
  36.                      )
  37.               )
  38.               (setq option "Current")
  39.           )
  40.           (setq ss
  41.                  (cond ((= "Current" option) (_GetPViewports nil))
  42.                        ((_GetPViewports T))
  43.                  )
  44.           )
  45.      )
  46.    (progn
  47.      (vla-startundomark
  48.        (setq acDoc
  49.               (vla-get-activedocument
  50.                 (vlax-get-acad-object)
  51.               )
  52.        )
  53.      )
  54.      (vlax-for x (setq ss (vla-get-activeselectionset acDoc))
  55.        (vla-put-color x color)
  56.        (if (vlax-property-available-p x 'displaylocked)
  57.          (vla-put-displaylocked x lock)
  58.        )
  59.      )
  60.      (if (= (vla-get-mspace acDoc) :vlax-true)
  61.        (vla-regen acDoc acactiveviewport)
  62.      )
  63.      (setq ss (vla-delete ss))
  64.      (*error* nil)
  65.    )
  66.    (if option
  67.      (*error* "Command not allowed in Model Tab")
  68.    )
  69. )
  70. (princ)
  71. )
  72. ;;;--------------------------------------------------------------------;
  73. ;;; Get PViewports
  74. (defun _GetPViewports (allTabs)
  75. (ssget
  76.    "_x"
  77.    (list
  78.      '(-4 . "<OR")
  79.      '(0 . "VIEWPORT")
  80.      '(-4 . "<AND")
  81.      '(0 . "LWPOLYLINE")
  82.      '(102 . "{ACAD_REACTORS")
  83.      '(-4 . "AND>")
  84.      '(-4 . "OR>")
  85.      (cons
  86.        410
  87.        (cond
  88.          (allTabs
  89.           (vl-string-right-trim
  90.             ","
  91.             (apply 'strcat
  92.                    (mapcar '(lambda (x) (strcat x ",")) (layoutlist))
  93.             )
  94.           )
  95.          )
  96.          ((getvar 'ctab))
  97.        )
  98.      )
  99.    )
  100. )
  101. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:58:55 | 显示全部楼层
此处修订代码。。。总结:
 
添加了一个*错误*处理程序和撤消支持。现在,您可以按Ctrl+Z组合键而不会出现问题(是的,即使对于多个布局也是如此)。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:19:32 | 显示全部楼层
此处修订代码。。。总结:
 
添加了对激活的PViewport的检查。。。如果处于活动状态,则会重新生成acActiveViewport。
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:29:44 | 显示全部楼层
太棒了这很好用D: D
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:34:16 | 显示全部楼层
 
... 很乐意帮忙
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 03:46 , Processed in 0.537235 second(s), 75 queries .

© 2020-2025 乐筑天下

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